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

github.com/nextcloud/apps.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Hülsmann <fh@cbix.de>2012-03-26 04:53:49 +0400
committerFlorian Hülsmann <fh@cbix.de>2012-03-26 04:53:49 +0400
commit4a18d1a86d87dba3ae1eccd7284023c355d442d9 (patch)
treebaa7b03f291936ffa1aedb14f265118e723e3ea2 /files_svgedit
parent8d3677e4332e77c91e3e0216e344049226e46114 (diff)
created branch for migrating to svg-edit 2.6; basic integration of svg-edit 2.6
Diffstat (limited to 'files_svgedit')
-rw-r--r--files_svgedit/css/jgraduate/LICENSE202
-rw-r--r--files_svgedit/css/jgraduate/README3
-rw-r--r--files_svgedit/css/jgraduate/css/jPicker-1.0.12.css191
-rw-r--r--files_svgedit/css/jgraduate/css/jgraduate.css270
-rw-r--r--files_svgedit/css/spinbtn/JQuerySpinBtn.css41
-rw-r--r--files_svgedit/css/spinbtn/spinbtn_updn.pngbin666 -> 0 bytes
-rw-r--r--files_svgedit/css/svg-editor.css1203
-rw-r--r--files_svgedit/extensions/closepath_icons.svg41
-rw-r--r--files_svgedit/extensions/ext-arrows.js298
-rw-r--r--files_svgedit/extensions/ext-closepath.js92
-rw-r--r--files_svgedit/extensions/ext-connector.js579
-rw-r--r--files_svgedit/extensions/ext-eyedropper.js101
-rw-r--r--files_svgedit/extensions/ext-foreignobject.js277
-rw-r--r--files_svgedit/extensions/ext-helloworld.js78
-rw-r--r--files_svgedit/extensions/ext-markers.js572
-rw-r--r--files_svgedit/extensions/ext-server_opensave.js179
-rw-r--r--files_svgedit/extensions/eyedropper-icon.xml34
-rw-r--r--files_svgedit/extensions/eyedropper.pngbin718 -> 0 bytes
-rw-r--r--files_svgedit/extensions/foreignobject-icons.xml96
-rw-r--r--files_svgedit/extensions/helloworld-icon.xml21
-rw-r--r--files_svgedit/extensions/markers-icons.xml115
-rw-r--r--files_svgedit/images/README.txt61
-rw-r--r--files_svgedit/images/align-bottom.pngbin291 -> 0 bytes
-rw-r--r--files_svgedit/images/align-bottom.svg277
-rw-r--r--files_svgedit/images/align-center.pngbin449 -> 0 bytes
-rw-r--r--files_svgedit/images/align-center.svg252
-rw-r--r--files_svgedit/images/align-left.pngbin305 -> 0 bytes
-rw-r--r--files_svgedit/images/align-left.svg235
-rw-r--r--files_svgedit/images/align-middle.pngbin459 -> 0 bytes
-rw-r--r--files_svgedit/images/align-middle.svg250
-rw-r--r--files_svgedit/images/align-right.pngbin339 -> 0 bytes
-rw-r--r--files_svgedit/images/align-right.svg233
-rw-r--r--files_svgedit/images/align-top.pngbin287 -> 0 bytes
-rw-r--r--files_svgedit/images/align-top.svg233
-rw-r--r--files_svgedit/images/bold.pngbin2976 -> 0 bytes
-rw-r--r--files_svgedit/images/cancel.pngbin1389 -> 0 bytes
-rw-r--r--files_svgedit/images/circle.pngbin1040 -> 0 bytes
-rw-r--r--files_svgedit/images/clear.pngbin812 -> 0 bytes
-rw-r--r--files_svgedit/images/clone.pngbin715 -> 0 bytes
-rw-r--r--files_svgedit/images/conn.svg29
-rw-r--r--files_svgedit/images/copy.pngbin852 -> 0 bytes
-rw-r--r--files_svgedit/images/cut.pngbin1294 -> 0 bytes
-rw-r--r--files_svgedit/images/delete.pngbin663 -> 0 bytes
-rw-r--r--files_svgedit/images/document-properties.pngbin688 -> 0 bytes
-rw-r--r--files_svgedit/images/dropdown.gifbin49 -> 0 bytes
-rw-r--r--files_svgedit/images/ellipse.pngbin811 -> 0 bytes
-rw-r--r--files_svgedit/images/eye.pngbin750 -> 0 bytes
-rw-r--r--files_svgedit/images/fhpath.pngbin1218 -> 0 bytes
-rw-r--r--files_svgedit/images/flyouth.pngbin109 -> 0 bytes
-rw-r--r--files_svgedit/images/flyup.gifbin48 -> 0 bytes
-rw-r--r--files_svgedit/images/freehand-circle.pngbin1257 -> 0 bytes
-rw-r--r--files_svgedit/images/freehand-square.pngbin903 -> 0 bytes
-rw-r--r--files_svgedit/images/go-down.pngbin683 -> 0 bytes
-rw-r--r--files_svgedit/images/go-up.pngbin652 -> 0 bytes
-rw-r--r--files_svgedit/images/image.pngbin900 -> 0 bytes
-rw-r--r--files_svgedit/images/italic.pngbin2972 -> 0 bytes
-rw-r--r--files_svgedit/images/line.pngbin1026 -> 0 bytes
-rw-r--r--files_svgedit/images/link_controls.pngbin919 -> 0 bytes
-rw-r--r--files_svgedit/images/logo.pngbin3983 -> 0 bytes
-rw-r--r--files_svgedit/images/logo.svg32
-rw-r--r--files_svgedit/images/move_bottom.pngbin737 -> 0 bytes
-rw-r--r--files_svgedit/images/move_top.pngbin663 -> 0 bytes
-rwxr-xr-xfiles_svgedit/images/node_clone.pngbin571 -> 0 bytes
-rwxr-xr-xfiles_svgedit/images/node_delete.pngbin589 -> 0 bytes
-rw-r--r--files_svgedit/images/none.pngbin136 -> 0 bytes
-rw-r--r--files_svgedit/images/open.pngbin919 -> 0 bytes
-rw-r--r--files_svgedit/images/paste.pngbin906 -> 0 bytes
-rw-r--r--files_svgedit/images/path.pngbin854 -> 0 bytes
-rw-r--r--files_svgedit/images/polygon.pngbin881 -> 0 bytes
-rw-r--r--files_svgedit/images/polygon.svg219
-rw-r--r--files_svgedit/images/rect.pngbin404 -> 0 bytes
-rw-r--r--files_svgedit/images/redo.pngbin921 -> 0 bytes
-rw-r--r--files_svgedit/images/reorient.pngbin980 -> 0 bytes
-rw-r--r--files_svgedit/images/rotate.pngbin1500 -> 0 bytes
-rw-r--r--files_svgedit/images/save.pngbin1272 -> 0 bytes
-rw-r--r--files_svgedit/images/select.pngbin712 -> 0 bytes
-rw-r--r--files_svgedit/images/select_node.pngbin828 -> 0 bytes
-rw-r--r--files_svgedit/images/sep.pngbin93 -> 0 bytes
-rw-r--r--files_svgedit/images/shape_group.pngbin553 -> 0 bytes
-rw-r--r--files_svgedit/images/shape_ungroup.pngbin666 -> 0 bytes
-rw-r--r--files_svgedit/images/source.pngbin1110 -> 0 bytes
-rw-r--r--files_svgedit/images/spinbtn_updn_big.pngbin2049 -> 0 bytes
-rw-r--r--files_svgedit/images/square.pngbin422 -> 0 bytes
-rw-r--r--files_svgedit/images/svg_edit_icons.svg975
-rw-r--r--files_svgedit/images/svg_edit_icons.svgzbin5493 -> 0 bytes
-rw-r--r--files_svgedit/images/text.pngbin1032 -> 0 bytes
-rw-r--r--files_svgedit/images/text.svg157
-rw-r--r--files_svgedit/images/to_path.pngbin1153 -> 0 bytes
-rw-r--r--files_svgedit/images/undo.pngbin1122 -> 0 bytes
-rw-r--r--files_svgedit/images/view-refresh.pngbin912 -> 0 bytes
-rw-r--r--files_svgedit/images/wave.pngbin2005 -> 0 bytes
-rw-r--r--files_svgedit/images/wireframe.pngbin466 -> 0 bytes
-rw-r--r--files_svgedit/images/zoom.pngbin1197 -> 0 bytes
-rw-r--r--files_svgedit/jgraduate/images/AlphaBar.pngbin2195 -> 0 bytes
-rw-r--r--files_svgedit/jgraduate/images/Bars.pngbin349 -> 0 bytes
-rw-r--r--files_svgedit/jgraduate/images/Maps.pngbin81378 -> 0 bytes
-rw-r--r--files_svgedit/jgraduate/images/NoColor.pngbin268 -> 0 bytes
-rw-r--r--files_svgedit/jgraduate/images/bar-opacity.pngbin134 -> 0 bytes
-rw-r--r--files_svgedit/jgraduate/images/map-opacity.pngbin139 -> 0 bytes
-rw-r--r--files_svgedit/jgraduate/images/mappoint.gifbin93 -> 0 bytes
-rw-r--r--files_svgedit/jgraduate/images/mappoint_c.pngbin252 -> 0 bytes
-rw-r--r--files_svgedit/jgraduate/images/mappoint_f.pngbin255 -> 0 bytes
-rw-r--r--files_svgedit/jgraduate/images/picker.gifbin146 -> 0 bytes
-rw-r--r--files_svgedit/jgraduate/images/preview-opacity.pngbin135 -> 0 bytes
-rw-r--r--files_svgedit/jgraduate/images/rangearrows.gifbin94 -> 0 bytes
-rw-r--r--files_svgedit/jgraduate/images/rangearrows2.gifbin93 -> 0 bytes
-rw-r--r--files_svgedit/js/jgraduate/LICENSE202
-rw-r--r--files_svgedit/js/jgraduate/README3
-rw-r--r--files_svgedit/js/jgraduate/jpicker-1.0.12.min.js1
-rw-r--r--files_svgedit/js/jgraduate/jquery.jgraduate.min.js1
-rw-r--r--files_svgedit/js/jquerybbq/jquery.bbq.min.js18
-rw-r--r--files_svgedit/js/js-hotkeys/README.md45
-rw-r--r--files_svgedit/js/js-hotkeys/jquery.hotkeys.min.js15
-rw-r--r--files_svgedit/js/locale/README.txt17
-rw-r--r--files_svgedit/js/locale/lang.af.js173
-rw-r--r--files_svgedit/js/locale/lang.ar.js173
-rw-r--r--files_svgedit/js/locale/lang.az.js173
-rw-r--r--files_svgedit/js/locale/lang.be.js173
-rw-r--r--files_svgedit/js/locale/lang.bg.js173
-rw-r--r--files_svgedit/js/locale/lang.ca.js173
-rw-r--r--files_svgedit/js/locale/lang.cs.js176
-rw-r--r--files_svgedit/js/locale/lang.cy.js173
-rw-r--r--files_svgedit/js/locale/lang.da.js173
-rw-r--r--files_svgedit/js/locale/lang.de.js173
-rw-r--r--files_svgedit/js/locale/lang.el.js173
-rw-r--r--files_svgedit/js/locale/lang.en.js176
-rw-r--r--files_svgedit/js/locale/lang.es.js174
-rw-r--r--files_svgedit/js/locale/lang.et.js173
-rw-r--r--files_svgedit/js/locale/lang.fa.js174
-rw-r--r--files_svgedit/js/locale/lang.fi.js173
-rw-r--r--files_svgedit/js/locale/lang.fr.js176
-rw-r--r--files_svgedit/js/locale/lang.fy.js173
-rw-r--r--files_svgedit/js/locale/lang.ga.js156
-rw-r--r--files_svgedit/js/locale/lang.gl.js173
-rwxr-xr-xfiles_svgedit/js/locale/lang.he.js173
-rw-r--r--files_svgedit/js/locale/lang.hi.js174
-rw-r--r--files_svgedit/js/locale/lang.hr.js173
-rw-r--r--files_svgedit/js/locale/lang.hu.js173
-rw-r--r--files_svgedit/js/locale/lang.hy.js173
-rw-r--r--files_svgedit/js/locale/lang.id.js173
-rw-r--r--files_svgedit/js/locale/lang.is.js173
-rw-r--r--files_svgedit/js/locale/lang.it.js173
-rw-r--r--files_svgedit/js/locale/lang.ja.js174
-rw-r--r--files_svgedit/js/locale/lang.ko.js173
-rw-r--r--files_svgedit/js/locale/lang.lt.js173
-rw-r--r--files_svgedit/js/locale/lang.lv.js173
-rw-r--r--files_svgedit/js/locale/lang.mk.js173
-rw-r--r--files_svgedit/js/locale/lang.ms.js173
-rw-r--r--files_svgedit/js/locale/lang.mt.js173
-rw-r--r--files_svgedit/js/locale/lang.nl.js176
-rw-r--r--files_svgedit/js/locale/lang.no.js173
-rw-r--r--files_svgedit/js/locale/lang.pl.js173
-rw-r--r--files_svgedit/js/locale/lang.pt-BR.js157
-rw-r--r--files_svgedit/js/locale/lang.pt-PT.js173
-rw-r--r--files_svgedit/js/locale/lang.ro.js173
-rw-r--r--files_svgedit/js/locale/lang.ru.js176
-rw-r--r--files_svgedit/js/locale/lang.sk.js176
-rw-r--r--files_svgedit/js/locale/lang.sl.js173
-rw-r--r--files_svgedit/js/locale/lang.sq.js173
-rw-r--r--files_svgedit/js/locale/lang.sr.js173
-rw-r--r--files_svgedit/js/locale/lang.sv.js173
-rw-r--r--files_svgedit/js/locale/lang.sw.js173
-rw-r--r--files_svgedit/js/locale/lang.th.js173
-rw-r--r--files_svgedit/js/locale/lang.tl.js173
-rw-r--r--files_svgedit/js/locale/lang.tr.js173
-rw-r--r--files_svgedit/js/locale/lang.uk.js173
-rw-r--r--files_svgedit/js/locale/lang.vi.js173
-rw-r--r--files_svgedit/js/locale/lang.yi.js173
-rw-r--r--files_svgedit/js/locale/lang.zh-CN.js174
-rw-r--r--files_svgedit/js/locale/lang.zh-HK.js174
-rw-r--r--files_svgedit/js/locale/lang.zh-TW.js174
-rw-r--r--files_svgedit/js/locale/locale.js84
-rw-r--r--files_svgedit/js/locale/locale.min.js1
-rw-r--r--files_svgedit/js/spinbtn/JQuerySpinBtn.min.js1
-rw-r--r--files_svgedit/js/svg-editor.js3734
-rw-r--r--files_svgedit/js/svg-editor.min.js1
-rw-r--r--files_svgedit/js/svgcanvas.js10320
-rw-r--r--files_svgedit/js/svgcanvas.min.js1
-rw-r--r--files_svgedit/js/svgicons/jquery.svgicons.js457
-rw-r--r--files_svgedit/js/svgicons/jquery.svgicons.min.js1
180 files changed, 0 insertions, 32101 deletions
diff --git a/files_svgedit/css/jgraduate/LICENSE b/files_svgedit/css/jgraduate/LICENSE
deleted file mode 100644
index d64569567..000000000
--- a/files_svgedit/css/jgraduate/LICENSE
+++ /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/files_svgedit/css/jgraduate/README b/files_svgedit/css/jgraduate/README
deleted file mode 100644
index ef3e21ff8..000000000
--- a/files_svgedit/css/jgraduate/README
+++ /dev/null
@@ -1,3 +0,0 @@
-jGraduate - A jQuery plugin for picking gradients
-
-Licensed under the Apache License 2. See LICENSE for more information.
diff --git a/files_svgedit/css/jgraduate/css/jPicker-1.0.12.css b/files_svgedit/css/jgraduate/css/jPicker-1.0.12.css
deleted file mode 100644
index c943ae16f..000000000
--- a/files_svgedit/css/jgraduate/css/jPicker-1.0.12.css
+++ /dev/null
@@ -1,191 +0,0 @@
-.jPicker_Picker {
- display: inline-block;
- height: 24px; /* change this value if using a different sized color picker icon */
- position: relative; /* make this element an absolute positioning container */
- text-align: left; /* make the zero width children position to the left of container */
- width: 25px; /* change this value if using a different sized color picker icon */
-}
-.jPicker_Color, .jPicker_Alpha {
- background-position: 2px 2px;
- display: block;
- height: 100%;
- left: 0px;
- position: absolute;
- top: 0px;
- width: 100%;
-}
-.jPicker_Icon {
- background-repeat: no-repeat;
- cursor: pointer;
- display: block;
- height: 100%;
- left: 0px;
- position: absolute;
- top: 0px;
- width: 100%;
-}
-.jPicker_Container {
- display: none;
- z-index: 10; /* make sure container draws above color picker icon in Firefox/Safari/Chrome/Opera/etc. -
- IE calculates z-index so this won't work - we will hide all color picker icons placed after the selected one in code when shown in IE */
-}
-.jPicker_table {
- background-color: #efefef;
- border: 1px outset #666;
- font-family: Arial, Helvetica, Sans-Serif;
- font-size: 12px;
- margin: 0px;
- padding: 5px;
- width: 550px;
-}
-.jPicker_table td {
- margin: 0px;
- padding: 0px;
- vertical-align: top;
-}
-.jPicker_MoveBar {
- background-color: #dddddd;
- border: 1px outset #aaa;
- cursor: move;
- height: 12px;
-}
-.jPicker_Title {
- font-size: 11px !important;
- font-weight: bold;
- margin: -2px 0px 0px 0px;
- padding: 0px;
- text-align: center;
- width: 100%;
-}
-.jPicker_ColorMap {
- border: 2px inset #eee;
- cursor: crosshair;
- height: 260px; /* IE 6 incorrectly draws border inside the width and height instead of outside - We will fix this to 256px later */
- margin: 0px 5px 0px 5px;
- overflow: hidden; /* hide the overdraw of the Color Map icon when at edge of viewing box */
- padding: 0px;
- position: relative; /* make this element an absolute positioning container */
- width: 260px; /* IE 6 incorrectly draws border inside the width and height instead of outside - We will fix this to 256px later */
-}
-div[class="jPicker_ColorMap"] {
- height: 256px; /* correct to 256px for browsers that support the "[class="xxx"]" selector (IE7+,Firefox,Safari,Chrome,Opera,etc.) */
- width: 256px; /* correct to 256px for browsers that support the "[class="xxx"]" selector (IE7+,Firefox,Safari,Chrome,Opera,etc.) */
-}
-.jPicker_ColorBar {
- border: 2px inset #eee;
- cursor: n-resize;
- height: 260px; /* IE 6 incorrectly draws border inside the width and height instead of outside - We will fix this to 256px later */
- margin: 12px 10px 0px 5px;
- padding: 0px;
- position: relative;
- width: 24px; /* IE 6 incorrectly draws border inside the width and height instead of outside - We will fix this to 20px later */
-}
-div[class="jPicker_ColorBar"] {
- height: 256px; /* correct to 256px for browsers that support the "[class="xxx"]" selector (IE7+,Firefox,Safari,Chrome,Opera,etc.) */
- width: 20px; /* correct to 20px for browsers that support the "[class="xxx"]" selector (IE7+,Firefox,Safari,Chrome,Opera,etc.) */
-}
-.jPicker_ColorMap_l1, .jPicker_ColorMap_l2, .jPicker_ColorMap_l3, .jPicker_ColorBar_l1, .jPicker_ColorBar_l2, .jPicker_ColorBar_l3, .jPicker_ColorBar_l4, .jPicker_ColorBar_l5, .jPicker_ColorBar_l6 {
- background-color: transparent;
- background-image: none;
- display: block;
- height: 256px; /* must specific pixel height. IE7/8 Quirks mode ignores opacity for an absolutely positioned item in a relative container with "overflow: visible". The marker in the colorBar
- would not be drawn if its overflow is set to hidden. */
- left: 0px;
- position: absolute;
- top: 0px;
-}
-.jPicker_ColorMap_l1, .jPicker_ColorMap_l2, .jPicker_ColorMap_l3 {
- width: 256px; /* must specific pixel width. IE7/8 Quirks mode ignores opacity for an absolutely positioned item in a relative container with "overflow: visible". The marker in the colorBar
- would not be drawn if its overflow is set to hidden. */
-}
-.jPicker_ColorBar_l1, .jPicker_ColorBar_l2, .jPicker_ColorBar_l3, .jPicker_ColorBar_l4, .jPicker_ColorBar_l5, .jPicker_ColorBar_l6 {
- width: 20px; /* must specific pixel width. IE7/8 Quirks mode ignores opacity for an absolutely positioned item in a relative container with "overflow: visible". The marker in the colorBar
- would not be drawn if its overflow is set to hidden. */
-}
-.jPicker_ColorMap_l1, .jPicker_ColorMap_l2, .jPicker_ColorBar_l6 {
- background-repeat: no-repeat;
-}
-.jPicker_ColorMap_l3, .jPicker_ColorBar_l5 {
- background-repeat: repeat;
-}
-.jPicker_ColorBar_l1, .jPicker_ColorBar_l2, .jPicker_ColorBar_l3, .jPicker_ColorBar_l4 {
- background-repeat: repeat-x;
-}
-.jPicker_ColorMap_Arrow {
- display: block;
- position: absolute;
-}
-.jPicker_ColorBar_Arrow {
- display: block;
- left: -10px; /* (arrow width / 2) - (element width / 2) - position arrows' center in elements' center */
- position: absolute;
-}
-.jPicker_Preview {
- font-size: x-small;
- text-align: center;
-}
-.jPicker_Preview div {
- border: 2px inset #eee;
- height: 62px;
- margin: 0px auto;
- padding: 0px;
- width: 62px;
-}
-.jPicker_Preview div span {
- border: 1px solid #000;
- display: block;
- height: 30px;
- margin: 0px auto;
- padding: 0px;
- width: 60px;
-}
-.jPicker_Preview div span.jPicker_Active {
- border-bottom-width: 0px;
-}
-.jPicker_Preview div span.jPicker_Current {
- border-top-width: 0px;
- cursor: pointer;
-}
-.jPicker_OkCancel {
- text-align: center;
- width: 120px;
-}
-.jPicker_OkCancel input {
- width: 100px;
-}
-.jPicker_OkCancel input.jPicker_Ok {
- margin: 12px 0px 5px 0px;
-}
-.jPicker_Text {
- text-align: left;
-}
-.jPicker_HueText, .jPicker_SaturationText, .jPicker_BrightnessText, .jPicker_RedText, .jPicker_GreenText, .jPicker_BlueText, .jPicker_AlphaText {
- background-color: #fff;
- border: 1px inset #aaa;
- margin: 0px 0px 0px 5px;
- text-align: left;
- width: 30px;
-}
-.jPicker_HexText {
- background-color: #fff;
- border: 1px inset #aaa;
- margin: 0px 0px 0px 5px;
- width: 65px;
-}
-.jPicker_Grid {
- text-align: center;
-}
-span.jPicker_QuickColor {
- border: 1px inset #aaa;
- cursor: pointer;
- display: block;
- float: left;
- height: 13px;
- line-height: 13px;
- margin: 2px 2px 1px 2px;
- padding: 0px;
- width: 15px;
-}
-span[class="jPicker_QuickColor"] {
- width: 13px;
-} \ No newline at end of file
diff --git a/files_svgedit/css/jgraduate/css/jgraduate.css b/files_svgedit/css/jgraduate/css/jgraduate.css
deleted file mode 100644
index 06ab1708b..000000000
--- a/files_svgedit/css/jgraduate/css/jgraduate.css
+++ /dev/null
@@ -1,270 +0,0 @@
-/*
- * jGraduate Default CSS
- *
- * Copyright (c) 2009 Jeff Schiller
- *
- * Licensed under the Apache License Version 2
- */
-
-h2.jGraduate_Title {
- font-family: Arial, Helvetica, Sans-Serif;
- font-size: 11px !important;
- font-weight: bold;
- margin: -13px 0px 0px 0px;
- padding: 0px;
- text-align: center;
-}
-
-.jGraduate_Picker {
- font-family: Arial, Helvetica, Sans-Serif;
- font-size: 12px;
- border-style: solid;
- border-color: lightgrey black black lightgrey;
- border-width: 1px;
- background-color: #EFEFEF;
- position: absolute;
- padding: 10px;
-}
-
-.jGraduate_tabs li {
- background-color: #ccc;
- display: inline;
- border: solid 1px grey;
- padding: 3px;
- margin: 2px;
- cursor: pointer;
-}
-
-li.jGraduate_tab_current {
- background-color: #EFEFEF;
- display: inline;
- padding: 3px;
- margin: 2px;
- border: solid 1px black;
- cursor: pointer;
-}
-
-.jGraduate_colPick {
- display: none;
-}
-
-.jGraduate_lgPick {
- display: none;
- border: outset 1px #666;
- padding: 10px 7px 5px 5px;
- overflow: auto;
-}
-
-.jGraduate_rgPick {
- display: none;
- border: outset 1px #666;
- padding: 10px 7px 5px 5px;
- overflow: auto;
-/* position: relative;*/
-}
-
-.jGraduate_tabs {
- position: relative;
- background-color: #EFEFEF;
- padding: 0px;
- margin: 0px;
- margin-bottom: 5px;
-}
-
-div.jGraduate_Swatch {
- float: left;
- margin: 8px;
-}
-div.jGraduate_GradContainer {
- border: 2px inset #EEE;
- background-image: url(../images/map-opacity.png);
- background-position: 0px 0px;
- height: 256px;
-}
-
-.jGraduate_AlphaArrows {
- position: absolute;
- margin-top: -10px;
- margin-left: 250.5px;
-}
-
-div.jGraduate_Opacity {
- border: 2px inset #eee;
- margin-top: 14px;
- background-color: black;
- background-image: url(../images/Maps.png);
- background-position: 0px -2816px;
- height: 20px;
- cursor: ew-resize;
-}
-
-div.lg_jGraduate_OpacityField {
- position: absolute;
- bottom: 25px;
- left: 292px;
-}
-
-div.jGraduate_Form {
- float: left;
- width: 140px;
- margin: -3px 3px 0px 4px;
-}
-
-div.jGraduate_StopSection {
- width: 120px;
- text-align: center;
-}
-
-div.jGraduate_RadiusField {
-
- text-align: center;
- float: left;
-}
-
-div.jGraduate_RadiusField input {
- margin-top: 10px;
-}
-
-.jGraduate_RadiusField .jGraduate_Form_Section {
- width: 250px;
- padding: 2px;
- height: 80px;
- overflow: visible;
-}
-
-.jGraduate_Form_Section input[type=text] {
- width: 38px;
-}
-
-.jGraduate_Radius {
- border:1px solid #BBB;
- cursor:ew-resize;
- height:20px;
- margin-top:14px;
- position: relative;
-}
-
-
-.jGraduate_RadiusArrows {
- top: 0;
- left: 0;
- position: absolute;
- margin-top: -10px;
- margin-left: 250.5px;
-}
-
-
-div.jGraduate_OkCancel {
- float: left;
- width: 113px;
-}
-
-input.jGraduate_Ok, input.jGraduate_Cancel {
- display: block;
- width: 100px;
- margin-left: -4px;
- margin-right: -4px;
-}
-input.jGraduate_Ok {
- margin: 9px -4px 5px -4px;
-}
-
-.colorBox {
- float: left;
- height: 16px;
- width: 16px;
- border: 1px solid #808080;
- cursor: pointer;
- margin: 4px 4px 4px 30px;
-}
-
-.colorBox + label {
- float: left;
- margin-top: 7px;
-}
-
-label.jGraduate_Form_Heading {
- position: relative;
- top: 10px;
- background-color: #EFEFEF;
- padding: 2px;
- font-weight: bold;
- font-size: 13px;
-}
-
-div.jGraduate_Form_Section {
- border-style: solid;
- border-width: 1px;
- border-color: grey;
- -moz-border-radius: 5px;
- -webkit-border-radius: 5px;
- padding: 15px 5px 5px 5px;
- margin: 2px;
- width: 110px;
- text-align: center;
- overflow: auto;
-}
-
-div.jGraduate_LightBox {
- position: fixed;
- top: 0px;
- left: 0px;
- right: 0px;
- bottom: 0px;
- background-color: #000;
- opacity: 0.5;
- display: none;
-}
-
-div.jGraduate_stopPicker {
- position: absolute;
- display: none;
- background: #E8E8E8;
-}
-
-
-.jGraduate_rgPick {
- width: 530px;
-}
-
-.jGraduate_rgPick div.jGraduate_Form {
- width: 270px;
- position: absolute;
- left: 284px;
- width: 266px;
- top: 130px;
- margin: -3px 3px 0px 4px;
-}
-
-.jGraduate_Colorblocks {
- display: table;
- border-spacing: 0 5px;
-}
-
-.jGraduate_colorblock {
- display: table-row;
-}
-
-.jGraduate_Colorblocks .jGraduate_colorblock > * {
- display: table-cell;
- vertical-align: middle;
- margin: 0;
- float: none;
-}
-
-.jGraduate_rgPick div.jGraduate_StopSection {
- float: left;
- width: 133px;
- margin: 0;
-}
-
-.jGraduate_rgPick .jGraduate_OkCancel {
- position: absolute;
- right: 0;
-}
-
-.rg_jGraduate_OpacityField {
- position: absolute;
- left: 288px;
- bottom: 24px;
-} \ No newline at end of file
diff --git a/files_svgedit/css/spinbtn/JQuerySpinBtn.css b/files_svgedit/css/spinbtn/JQuerySpinBtn.css
deleted file mode 100644
index 7a279a09e..000000000
--- a/files_svgedit/css/spinbtn/JQuerySpinBtn.css
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- Styles to make ordinary <INPUT type="text"/> look like a spinbutton/spinbox control.
- Use with JQuerySpinBtn.js to provide the spin functionality by reacting to mouse etc.
- (Requires a reference to the JQuery library found at http://jquery.com/src/latest/)
- (Hats-off to John Resig for creating the excellent JQuery library. It is fab.)
-
- This control is achieved with no extra html markup whatsoever and uses unobtrusive javascript.
-
- Written by George Adamson, Software Unity (george.jquery@softwareunity.com) September 2006.
- Big improvements added by Mark Gibson, (mgibson@designlinks.net) September 2006.
-
- Do contact me with comments and suggestions but please don't ask for support.
- As much as I'd love to help with specific problems I have plenty to get on with already!
-
- Go ahead and use it in your own projects. This code is provided 'as is'.
- Sure I've tested in heaps of ways. Its good for me, but you use it at your own risk.
- SoftwareUnity and I are certainly not responsible if your computer sets fire to the sofa,
- hacks into the pentagon, hijacks a plane or gives you any kind of hassle whatsoever.
-
- If you'd like your spin-button image in a different place then you'll need to alter both
- the CSS below and the javascript isMouseOverUpDn() function to accommodate the new position.
- You could even have left and right buttons either side of the textbox.
-*/
-
-INPUT.spin-button {
- /* explicitly put padding for top/bottom/left in here so that Opera displays it better */
- padding: 2px 20px 2px 2px;
- background-repeat:no-repeat; /* Warning: Img may disappear in Firefox if you use 'background-attachment:fixed' ! */
- background-position:100% 0%;
- background-image:url('spinbtn_updn.png');
- background-color:white; /* Needed for Opera */
-}
-
-INPUT.spin-button.up { /* Change button img when mouse is over the UP-arrow */
- cursor:pointer;
- background-position:100% -18px; /* 18px matches height of 2 visible buttons */
-}
-INPUT.spin-button.down { /* Change button img when mouse is over the DOWN-arrow */
- cursor:pointer;
- background-position:100% -36px; /* 36px matches height of 2x2 visible buttons */
-}
diff --git a/files_svgedit/css/spinbtn/spinbtn_updn.png b/files_svgedit/css/spinbtn/spinbtn_updn.png
deleted file mode 100644
index 8baa1b0cc..000000000
--- a/files_svgedit/css/spinbtn/spinbtn_updn.png
+++ /dev/null
Binary files differ
diff --git a/files_svgedit/css/svg-editor.css b/files_svgedit/css/svg-editor.css
deleted file mode 100644
index 016ca7bca..000000000
--- a/files_svgedit/css/svg-editor.css
+++ /dev/null
@@ -1,1203 +0,0 @@
-body {
- background: #D8D8D8;
-}
-
-#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));
-}
-
-#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
-}
-
-#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: #D8D8D8;
- 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: 106px;
- height: 20px;
- border-right: 1px solid #FFFFFF;
- border-bottom: 1px solid #FFFFFF;
- border-left: 1px solid #808080;
- border-top: 1px solid #808080;
- overflow: auto;
-}
-
-#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_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: 110px;
- 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;
-}
-
-
-#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: 200px;
- 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;
- /* Ideally this should be auto (makes scrollbar if needed), but currently hides
- the .dropdown lists.
-/* overflow: auto;*/
-}
-
-#svg_editor #tools_left {
- position: absolute;
- border-right: none;
- width: 32px;
- top: 75px;
- left: 0;
- padding-left: 2px;
- background: #D8D8D8; /* 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;
-}
-
-#svg_editor #selected_panel,
-#svg_editor #multiselected_panel,
-#svg_editor #g_panel,
-#svg_editor #rect_panel,
-#svg_editor #circle_panel,
-#svg_editor #ellipse_panel,
-#svg_editor #line_panel,
-#svg_editor #image_panel,
-#svg_editor #text_panel,
-#svg_editor #path_node_panel {
- display: none;
-}
-
-#svg_editor #multiselected_panel .selected_tool {
- vertical-align: 12px;
-}
-
-#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;
-}
-
-
-#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 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: 4;
-}
-
-#svg_editor .tools_flyout {
- position: absolute;
- display: none;
- cursor: pointer;
- width: 400px;
-}
-
-#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;
-}
-
-#bg_blocks {
- overflow: auto;
- margin-left: 30px;
-}
-
-#svg_docprops #svg_docprops_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 {
- margin-left: 1em;
- overflow: auto;
-}
-
-#svg_docprops_container #svg_docprops_docprops,
-#svg_docprops_container #svg_docprops_prefs {
- float: left;
- width: 221px;
- margin: 5px .7em;
- overflow: hidden;
-}
-
-#svg_docprops_container #svg_docprops_prefs {
- float: right;
-}
-
-#svg_docprops legend {
- max-width: 195px;
-}
-
-#svg_docprops_docprops > legend, #svg_docprops_prefs > legend {
- font-weight: bold;
- font-size: 1.1em;
-}
-
-
-#svg_docprops_container fieldset {
- padding: 5px;
- margin: 5px;
- border: 1px solid #DDD;
-}
-
-#svg_docprops_container label {
- display: block;
- margin: .5em;
-}
-
-#svginfo_bg_note {
- font-size: .9em;
- font-style: italic;
- color: #444;
-}
-
-#canvas_title {
- display: block;
-}
-
-#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_docprops_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 {
- margin-top: 0;
- margin-bottom: 5px;
-}
-
-#svg_docprops {
- display: none;
-}
-
-#image_save_opts label {
- font-size: .9em;
-}
-
-#image_save_opts input {
- margin-left: 0;
-}
-
-#svg_docprops #svg_docprops_overlay {
- position: absolute;
- top: 0px;
- right: 0px;
- left: 0px;
- bottom: 0px;
- background-color: black;
- opacity: 0.6;
- z-index: 20000;
-}
-
-.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;
-}
-
diff --git a/files_svgedit/extensions/closepath_icons.svg b/files_svgedit/extensions/closepath_icons.svg
deleted file mode 100644
index 7294f5ead..000000000
--- a/files_svgedit/extensions/closepath_icons.svg
+++ /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</title>
- <path stroke="#000" stroke-width="15" fill="#ffc8c8" d="m121.5,40l-84,106l27,115l166,2l29,-111"/>
- <line x1="240" y1="136" x2="169.5" y2="74" stroke="#A00" stroke-width="25" fill="none"/>
- <path stroke="none" fill ="#A00" d="m158,65l31,74l-3,-50l51,-3z"/>
- <g stroke-width="15" stroke="#00f" fill="#0ff">
- <circle r="30" cy="41" cx="123"/>
- <circle r="30" cy="146" cx="40"/>
- <circle r="30" cy="260" cx="69"/>
- <circle r="30" cy="260" cx="228"/>
- <circle r="30" cy="148" cx="260"/>
- </g>
- </g>
-</svg>
-</g>
-<g id="tool_openpath">
-<svg viewBox="0 0 300 300" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
- <g>
- <title>Layer 1</title>
- <path stroke="#000" stroke-width="15" fill="#ffc8c8" d="m123.5,38l-84,106l27,115l166,2l29,-111"/>
- <line x1="276.5" y1="153" x2="108.5" y2="24" stroke="#000" stroke-width="10" fill="none"/>
- <g stroke-width="15" stroke="#00f" fill="#0ff">
- <circle r="30" cy="41" cx="123"/>
- <circle r="30" cy="146" cx="40"/>
- <circle r="30" cy="260" cx="69"/>
- <circle r="30" cy="260" cx="228"/>
- <circle r="30" cy="148" cx="260"/>
- </g>
- <g stroke="#A00" stroke-width="15" fill="none">
- <line x1="168" y1="24" x2="210" y2="150"/>
- <line x1="210" y1="24" x2="168" y2="150"/>
- </g>
- </g>
-</svg>
-</g>
-
-<g id="svg_eof"/>
-</svg> \ No newline at end of file
diff --git a/files_svgedit/extensions/ext-arrows.js b/files_svgedit/extensions/ext-arrows.js
deleted file mode 100644
index ebc3930cf..000000000
--- a/files_svgedit/extensions/ext-arrows.js
+++ /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('setarrownonce', setArrowNonce);
- svgCanvas.bind('unsetsetarrownonce', unsetArrowNonce);
-
- var lang_list = {
- "en":[
- {"id": "arrow_none", "textContent": "No arrow" }
- ],
- "fr":[
- {"id": "arrow_none", "textContent": "Sans flèche" }
- ]
- };
-
- var prefix = 'se_arrow_';
- if (randomize_ids) {
- var arrowprefix = prefix + nonce + '_';
- } else {
- var arrowprefix = prefix;
- }
-
- var pathdata = {
- fw: {d:"m0,0l10,5l-10,5l5,-5l-5,-5z", refx:8, id: arrowprefix + 'fw'},
- bk: {d:"m10,0l-10,5l10,5l-5,-5l5,-5z", refx:2, id: arrowprefix + 'bk'}
- }
-
- function setArrowNonce(window, n) {
- randomize_ids = true;
- arrowprefix = prefix + n + '_';
- pathdata.fw.id = arrowprefix + 'fw';
- pathdata.bk.id = arrowprefix + 'bk';
- }
-
- function unsetArrowNonce(window) {
- randomize_ids = false;
- arrowprefix = prefix;
- pathdata.fw.id = arrowprefix + 'fw';
- pathdata.bk.id = arrowprefix + 'bk';
- }
-
- function getLinked(elem, attr) {
- var str = elem.getAttribute(attr);
- if(!str) return null;
- var m = str.match(/\(\#(.*)\)/);
- if(!m || m.length !== 2) {
- return null;
- }
- return S.getElem(m[1]);
- }
-
- function showPanel(on) {
- $('#arrow_panel').toggle(on);
-
- if(on) {
- var el = selElems[0];
- var end = el.getAttribute("marker-end");
- var start = el.getAttribute("marker-start");
- var mid = el.getAttribute("marker-mid");
- var val;
-
- if(end && start) {
- val = "both";
- } else if(end) {
- val = "end";
- } else if(start) {
- val = "start";
- } else if(mid) {
- val = "mid";
- if(mid.indexOf("bk") != -1) {
- val = "mid_bk";
- }
- }
-
- if(!start && !mid && !end) {
- val = "none";
- }
-
- $("#arrow_list").val(val);
- }
- }
-
- function resetMarker() {
- var el = selElems[0];
- el.removeAttribute("marker-start");
- el.removeAttribute("marker-mid");
- el.removeAttribute("marker-end");
- }
-
- function addMarker(dir, type, id) {
- // TODO: Make marker (or use?) per arrow type, since refX can be different
- id = id || arrowprefix + dir;
-
- var marker = S.getElem(id);
-
- var data = pathdata[dir];
-
- if(type == "mid") {
- data.refx = 5;
- }
-
- if(!marker) {
- marker = addElem({
- "element": "marker",
- "attr": {
- "viewBox": "0 0 10 10",
- "id": id,
- "refY": 5,
- "markerUnits": "strokeWidth",
- "markerWidth": 5,
- "markerHeight": 5,
- "orient": "auto",
- "style": "pointer-events:none" // Currently needed for Opera
- }
- });
- var arrow = addElem({
- "element": "path",
- "attr": {
- "d": data.d,
- "fill": "#000000"
- }
- });
- marker.appendChild(arrow);
- S.findDefs().appendChild(marker);
- }
-
- marker.setAttribute('refX', data.refx);
-
- return marker;
- }
-
- function setArrow() {
- var type = this.value;
- resetMarker();
-
- if(type == "none") {
- return;
- }
-
- // Set marker on element
- var dir = "fw";
- if(type == "mid_bk") {
- type = "mid";
- dir = "bk";
- } else if(type == "both") {
- addMarker("bk", type);
- svgCanvas.changeSelectedAttribute("marker-start", "url(#" + pathdata.bk.id + ")");
- type = "end";
- dir = "fw";
- } else if (type == "start") {
- dir = "bk";
- }
-
- addMarker(dir, type);
- svgCanvas.changeSelectedAttribute("marker-"+type, "url(#" + pathdata[dir].id + ")");
- S.call("changed", selElems);
- }
-
- function colorChanged(elem) {
- var color = elem.getAttribute('stroke');
-
- var mtypes = ['start','mid','end'];
- var defs = S.findDefs();
-
- $.each(mtypes, function(i, type) {
- var marker = getLinked(elem, 'marker-'+type);
- if(!marker) return;
-
- var cur_color = $(marker).children().attr('fill');
- var cur_d = $(marker).children().attr('d');
- var new_marker = null;
- if(cur_color === color) return;
-
- var all_markers = $(defs).find('marker');
- // Different color, check if already made
- all_markers.each(function() {
- var attrs = $(this).children().attr(['fill', 'd']);
- if(attrs.fill === color && attrs.d === cur_d) {
- // Found another marker with this color and this path
- new_marker = this;
- }
- });
-
- if(!new_marker) {
- // Create a new marker with this color
- var last_id = marker.id;
- var dir = last_id.indexOf('_fw') !== -1?'fw':'bk';
-
- new_marker = addMarker(dir, type, arrowprefix + dir + all_markers.length);
-
- $(new_marker).children().attr('fill', color);
- }
-
- $(elem).attr('marker-'+type, "url(#" + new_marker.id + ")");
-
- // Check if last marker can be removed
- var remove = true;
- $(S.svgcontent).find('line, polyline, path, polygon').each(function() {
- var elem = this;
- $.each(mtypes, function(j, mtype) {
- if($(elem).attr('marker-' + mtype) === "url(#" + marker.id + ")") {
- return remove = false;
- }
- });
- if(!remove) return false;
- });
-
- // Not found, so can safely remove
- if(remove) {
- $(marker).remove();
- }
-
- });
-
- }
-
- return {
- name: "Arrows",
- context_tools: [{
- type: "select",
- panel: "arrow_panel",
- title: "Select arrow type",
- id: "arrow_list",
- options: {
- none: "No arrow",
- end: "----&gt;",
- start: "&lt;----",
- both: "&lt;---&gt;",
- mid: "--&gt;--",
- mid_bk: "--&lt;--"
- },
- defval: "none",
- events: {
- change: setArrow
- }
- }],
- callback: function() {
- $('#arrow_panel').hide();
- // Set ID so it can be translated in locale file
- $('#arrow_list option')[0].id = 'connector_no_arrow';
- },
- addLangData: function(lang) {
- return {
- data: lang_list[lang]
- };
- },
- selectedChanged: function(opts) {
-
- // Use this to update the current selected elements
- selElems = opts.elems;
-
- var i = selElems.length;
- var marker_elems = ['line','path','polyline','polygon'];
-
- while(i--) {
- var elem = selElems[i];
- if(elem && $.inArray(elem.tagName, marker_elems) != -1) {
- if(opts.selectedElement && !opts.multiselected) {
- showPanel(true);
- } else {
- showPanel(false);
- }
- } else {
- showPanel(false);
- }
- }
- },
- elementChanged: function(opts) {
- var elem = opts.elems[0];
- if(elem && (
- elem.getAttribute("marker-start") ||
- elem.getAttribute("marker-mid") ||
- elem.getAttribute("marker-end")
- )) {
- // var start = elem.getAttribute("marker-start");
- // var mid = elem.getAttribute("marker-mid");
- // var end = elem.getAttribute("marker-end");
- // Has marker, so see if it should match color
- colorChanged(elem);
- }
-
- }
- };
-});
diff --git a/files_svgedit/extensions/ext-closepath.js b/files_svgedit/extensions/ext-closepath.js
deleted file mode 100644
index bf8e72c94..000000000
--- a/files_svgedit/extensions/ext-closepath.js
+++ /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/files_svgedit/extensions/ext-connector.js b/files_svgedit/extensions/ext-connector.js
deleted file mode 100644
index 2f1990a1d..000000000
--- a/files_svgedit/extensions/ext-connector.js
+++ /dev/null
@@ -1,579 +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 = [];
-
- var lang_list = {
- "en":[
- {"id": "mode_connect", "title": "Connect two objects" }
- ],
- "fr":[
- {"id": "mode_connect", "title": "Connecter deux objets"}
- ]
- };
-
- function getOffset(side, line) {
- var give_offset = !!line.getAttribute('marker-' + side);
-// var give_offset = $(line).data(side+'_off');
-
- // TODO: Make this number (5) be based on marker width/height
- var size = line.getAttribute('stroke-width') * 5;
- return give_offset ? size : 0;
- }
-
- function showPanel(on) {
- var conn_rules = $('#connector_rules');
- if(!conn_rules.length) {
- conn_rules = $('<style id="connector_rules"><\/style>').appendTo('head');
- }
- conn_rules.text(!on?"":"#tool_clone, #tool_topath, #tool_angle, #xy_panel { display: none !important; }");
- $('#connector_panel').toggle(on);
- }
-
- function setPoint(elem, pos, x, y, setMid) {
- var pts = elem.points;
- var pt = svgroot.createSVGPoint();
- pt.x = x;
- pt.y = y;
- if(pos === 'end') pos = pts.numberOfItems-1;
- // TODO: Test for this on init, then use alt only if needed
- try {
- pts.replaceItem(pt, pos);
- } catch(err) {
- // Should only occur in FF which formats points attr as "n,n n,n", so just split
- var pt_arr = elem.getAttribute("points").split(" ");
- for(var i=0; i< pt_arr.length; i++) {
- if(i == pos) {
- pt_arr[i] = x + ',' + y;
- }
- }
- elem.setAttribute("points",pt_arr.join(" "));
- }
-
- if(setMid) {
- // Add center point
- var pt_start = pts.getItem(0);
- var pt_end = pts.getItem(pts.numberOfItems-1);
- setPoint(elem, 1, (pt_end.x + pt_start.x)/2, (pt_end.y + pt_start.y)/2);
- }
- }
-
- function updateLine(diff_x, diff_y) {
- // Update line with element
- var i = connections.length;
- while(i--) {
- var conn = connections[i];
- var line = conn.connector;
- var elem = conn.elem;
-
- var pre = conn.is_start?'start':'end';
-// var sw = line.getAttribute('stroke-width') * 5;
-
- // Update bbox for this element
- var bb = $(line).data(pre+'_bb');
- bb.x = conn.start_x + diff_x;
- bb.y = conn.start_y + diff_y;
- $(line).data(pre+'_bb', bb);
-
- var alt_pre = conn.is_start?'end':'start';
-
- // Get center pt of connected element
- var bb2 = $(line).data(alt_pre+'_bb');
- var src_x = bb2.x + bb2.width/2;
- var src_y = bb2.y + bb2.height/2;
-
- // Set point of element being moved
- var pt = getBBintersect(src_x, src_y, bb, getOffset(pre, line)); // $(line).data(pre+'_off')?sw:0
- setPoint(line, conn.is_start?0:'end', pt.x, pt.y, true);
-
- // Set point of connected element
- var pt2 = getBBintersect(pt.x, pt.y, $(line).data(alt_pre + '_bb'), getOffset(alt_pre, line));
- setPoint(line, conn.is_start?'end':0, pt2.x, pt2.y, true);
-
- }
- }
-
- function findConnectors(elems) {
- if(!elems) elems = selElems;
- var connectors = $(svgcontent).find(conn_sel);
- connections = [];
-
- // Loop through connectors to see if one is connected to the element
- connectors.each(function() {
- var start = $(this).data("c_start");
- var end = $(this).data("c_end");
-
- var parts = [getElem(start), getElem(end)];
- for(var i=0; i<2; i++) {
- var c_elem = parts[i];
- var add_this = false;
- // The connected element might be part of a selected group
- $(c_elem).parents().each(function() {
- if($.inArray(this, elems) !== -1) {
- // Pretend this element is selected
- add_this = true;
- }
- });
-
- if(!c_elem || !c_elem.parentNode) {
- $(this).remove();
- continue;
- }
- if($.inArray(c_elem, elems) !== -1 || add_this) {
- var bb = svgCanvas.getStrokedBBox([c_elem]);
- connections.push({
- elem: c_elem,
- connector: this,
- is_start: (i === 0),
- start_x: bb.x,
- start_y: bb.y
- });
- }
- }
- });
- }
-
- function updateConnectors(elems) {
- // Updates connector lines based on selected elements
- // Is not used on mousemove, as it runs getStrokedBBox every time,
- // which isn't necessary there.
- findConnectors(elems);
- if(connections.length) {
- // Update line with element
- var i = connections.length;
- while(i--) {
- var conn = connections[i];
- var line = conn.connector;
- var elem = conn.elem;
-
- var sw = line.getAttribute('stroke-width') * 5;
- var pre = conn.is_start?'start':'end';
-
- // Update bbox for this element
- var bb = svgCanvas.getStrokedBBox([elem]);
- bb.x = conn.start_x;
- bb.y = conn.start_y;
- $(line).data(pre+'_bb', bb);
- var add_offset = $(line).data(pre+'_off');
-
- var alt_pre = conn.is_start?'end':'start';
-
- // Get center pt of connected element
- var bb2 = $(line).data(alt_pre+'_bb');
- var src_x = bb2.x + bb2.width/2;
- var src_y = bb2.y + bb2.height/2;
-
- // Set point of element being moved
- var pt = getBBintersect(src_x, src_y, bb, getOffset(pre, line));
- setPoint(line, conn.is_start?0:'end', pt.x, pt.y, true);
-
- // Set point of connected element
- var pt2 = getBBintersect(pt.x, pt.y, $(line).data(alt_pre + '_bb'), getOffset(alt_pre, line));
- setPoint(line, conn.is_start?'end':0, pt2.x, pt2.y, true);
-
- // Update points attribute manually for webkit
- if(navigator.userAgent.indexOf('AppleWebKit') != -1) {
- var pts = line.points;
- var len = pts.numberOfItems;
- var pt_arr = Array(len);
- for(var j=0; j< len; j++) {
- var pt = pts.getItem(j);
- pt_arr[j] = pt.x + ',' + pt.y;
- }
- line.setAttribute("points",pt_arr.join(" "));
- }
-
- }
- }
- }
-
- function getBBintersect(x, y, bb, offset) {
- if(offset) {
- offset -= 0;
- bb = $.extend({}, bb);
- bb.width += offset;
- bb.height += offset;
- bb.x -= offset/2;
- bb.y -= offset/2;
- }
-
- var mid_x = bb.x + bb.width/2;
- var mid_y = bb.y + bb.height/2;
- var len_x = x - mid_x;
- var len_y = y - mid_y;
-
- var slope = Math.abs(len_y/len_x);
-
- var ratio;
-
- if(slope < bb.height/bb.width) {
- ratio = (bb.width/2) / Math.abs(len_x);
- } else {
- ratio = (bb.height/2) / Math.abs(len_y);
- }
-
-
- return {
- x: mid_x + len_x * ratio,
- y: mid_y + len_y * ratio
- }
- }
-
- // Do once
- (function() {
- var gse = svgCanvas.groupSelectedElements;
-
- svgCanvas.groupSelectedElements = function() {
- svgCanvas.removeFromSelection($(conn_sel).toArray());
- gse();
- }
-
- var mse = svgCanvas.moveSelectedElements;
-
- svgCanvas.moveSelectedElements = function() {
- svgCanvas.removeFromSelection($(conn_sel).toArray());
- mse.apply(this, arguments);
- updateConnectors();
- }
-
- se_ns = svgCanvas.getEditorNS();
- }());
-
- // Do on reset
- function init() {
- // Make sure all connectors have data set
- $(svgcontent).find('*').each(function() {
- var conn = this.getAttributeNS(se_ns, "connector");
- if(conn) {
- this.setAttribute('class', conn_sel.substr(1));
- var conn_data = conn.split(' ');
- var sbb = svgCanvas.getStrokedBBox([getElem(conn_data[0])]);
- var ebb = svgCanvas.getStrokedBBox([getElem(conn_data[1])]);
- $(this).data('c_start',conn_data[0])
- .data('c_end',conn_data[1])
- .data('start_bb', sbb)
- .data('end_bb', ebb);
- svgCanvas.getEditorNS(true);
- }
- });
-// updateConnectors();
- }
-
-// $(svgroot).parent().mousemove(function(e) {
-// // if(started
-// // || svgCanvas.getMode() != "connector"
-// // || e.target.parentNode.parentNode != svgcontent) return;
-//
-// console.log('y')
-// // if(e.target.parentNode.parentNode === svgcontent) {
-// //
-// // }
-// });
-
- return {
- name: "Connector",
- svgicons: "images/conn.svg",
- buttons: [{
- id: "mode_connect",
- type: "mode",
- icon: "images/cut.png",
- title: "Connect two objects",
- key: "Shift+3",
- includeWith: {
- button: '#tool_line',
- isDefault: false,
- position: 1
- },
- events: {
- 'click': function() {
- svgCanvas.setMode("connector");
- }
- }
- }],
- addLangData: function(lang) {
- return {
- data: lang_list[lang]
- };
- },
- mouseDown: function(opts) {
- var e = opts.event;
- start_x = opts.start_x,
- start_y = opts.start_y;
- var mode = svgCanvas.getMode();
-
- if(mode == "connector") {
-
- if(started) return;
-
- var mouse_target = e.target;
-
- var parents = $(mouse_target).parents();
-
- if($.inArray(svgcontent, parents) != -1) {
- // Connectable element
-
- // If child of foreignObject, use parent
- var fo = $(mouse_target).closest("foreignObject");
- start_elem = fo.length ? fo[0] : mouse_target;
-
- // Get center of source element
- var bb = svgCanvas.getStrokedBBox([start_elem]);
- var x = bb.x + bb.width/2;
- var y = bb.y + bb.height/2;
-
- started = true;
- cur_line = addElem({
- "element": "polyline",
- "attr": {
- "id": getNextId(),
- "points": (x+','+y+' '+x+','+y+' '+start_x+','+start_y),
- "stroke": '#' + curConfig.initStroke.color,
- "stroke-width": (!start_elem.stroke_width || start_elem.stroke_width == 0) ? curConfig.initStroke.width : start_elem.stroke_width,
- "fill": "none",
- "opacity": curConfig.initStroke.opacity,
- "style": "pointer-events:none"
- }
- });
- $(cur_line).data('start_bb', bb);
- }
- return {
- started: true
- };
- } else if(mode == "select") {
- findConnectors();
- }
- },
- mouseMove: function(opts) {
- var zoom = svgCanvas.getZoom();
- var e = opts.event;
- var x = opts.mouse_x/zoom;
- var y = opts.mouse_y/zoom;
-
- var diff_x = x - start_x,
- diff_y = y - start_y;
-
- var mode = svgCanvas.getMode();
-
- if(mode == "connector" && started) {
-
- var sw = cur_line.getAttribute('stroke-width') * 3;
- // Set start point (adjusts based on bb)
- var pt = getBBintersect(x, y, $(cur_line).data('start_bb'), getOffset('start', cur_line));
- start_x = pt.x;
- start_y = pt.y;
-
- setPoint(cur_line, 0, pt.x, pt.y, true);
-
- // Set end point
- setPoint(cur_line, 'end', x, y, true);
- } else if(mode == "select") {
- var slen = selElems.length;
-
- while(slen--) {
- var elem = selElems[slen];
- // Look for selected connector elements
- if(elem && $(elem).data('c_start')) {
- // Remove the "translate" transform given to move
- svgCanvas.removeFromSelection([elem]);
- svgCanvas.getTransformList(elem).clear();
-
- }
- }
- if(connections.length) {
- updateLine(diff_x, diff_y);
-
-
- }
- }
- },
- mouseUp: function(opts) {
- var zoom = svgCanvas.getZoom();
- var e = opts.event,
- x = opts.mouse_x/zoom,
- y = opts.mouse_y/zoom,
- mouse_target = e.target;
-
- if(svgCanvas.getMode() == "connector") {
- var fo = $(mouse_target).closest("foreignObject");
- if(fo.length) mouse_target = fo[0];
-
- var parents = $(mouse_target).parents();
-
- if(mouse_target == start_elem) {
- // Start line through click
- started = true;
- return {
- keep: true,
- element: null,
- started: started
- }
- } else if($.inArray(svgcontent, parents) === -1) {
- // Not a valid target element, so remove line
- $(cur_line).remove();
- started = false;
- return {
- keep: false,
- element: null,
- started: started
- }
- } else {
- // Valid end element
- end_elem = mouse_target;
-
- var start_id = start_elem.id, end_id = end_elem.id;
- var conn_str = start_id + " " + end_id;
- var alt_str = end_id + " " + start_id;
- // Don't create connector if one already exists
- var dupe = $(svgcontent).find(conn_sel).filter(function() {
- var conn = this.getAttributeNS(se_ns, "connector");
- if(conn == conn_str || conn == alt_str) return true;
- });
- if(dupe.length) {
- $(cur_line).remove();
- return {
- keep: false,
- element: null,
- started: false
- }
- }
-
- var bb = svgCanvas.getStrokedBBox([end_elem]);
-
- var pt = getBBintersect(start_x, start_y, bb, getOffset('start', cur_line));
- setPoint(cur_line, 'end', pt.x, pt.y, true);
- $(cur_line)
- .data("c_start", start_id)
- .data("c_end", end_id)
- .data("end_bb", bb);
- se_ns = svgCanvas.getEditorNS(true);
- cur_line.setAttributeNS(se_ns, "se:connector", conn_str);
- cur_line.setAttribute('class', conn_sel.substr(1));
- cur_line.setAttribute('opacity', 1);
- svgCanvas.addToSelection([cur_line]);
- svgCanvas.moveToBottomSelectedElement();
- selManager.requestSelector(cur_line).showGrips(false);
- started = false;
- return {
- keep: true,
- element: cur_line,
- started: started
- }
- }
- }
- },
- selectedChanged: function(opts) {
-
- // Use this to update the current selected elements
- selElems = opts.elems;
-
- var i = selElems.length;
-
- while(i--) {
- var elem = selElems[i];
- if(elem && $(elem).data('c_start')) {
- selManager.requestSelector(elem).showGrips(false);
- if(opts.selectedElement && !opts.multiselected) {
- // TODO: Set up context tools and hide most regular line tools
- showPanel(true);
- } else {
- showPanel(false);
- }
- } else {
- showPanel(false);
- }
- }
- updateConnectors();
- },
- elementChanged: function(opts) {
- var elem = opts.elems[0];
- if (elem && elem.tagName == 'svg' && elem.id == "svgcontent") {
- // Update svgcontent (can change on import)
- svgcontent = elem;
- init();
- }
-
- // Has marker, so change offset
- if(elem && (
- elem.getAttribute("marker-start") ||
- elem.getAttribute("marker-mid") ||
- elem.getAttribute("marker-end")
- )) {
- var start = elem.getAttribute("marker-start");
- var mid = elem.getAttribute("marker-mid");
- var end = elem.getAttribute("marker-end");
- cur_line = elem;
- $(elem)
- .data("start_off", !!start)
- .data("end_off", !!end);
-
- if(elem.tagName == "line" && mid) {
- // Convert to polyline to accept mid-arrow
-
- var x1 = elem.getAttribute('x1')-0;
- var x2 = elem.getAttribute('x2')-0;
- var y1 = elem.getAttribute('y1')-0;
- var y2 = elem.getAttribute('y2')-0;
- var id = elem.id;
-
- var mid_pt = (' '+((x1+x2)/2)+','+((y1+y2)/2) + ' ');
- var pline = addElem({
- "element": "polyline",
- "attr": {
- "points": (x1+','+y1+ mid_pt +x2+','+y2),
- "stroke": elem.getAttribute('stroke'),
- "stroke-width": elem.getAttribute('stroke-width'),
- "marker-mid": mid,
- "fill": "none",
- "opacity": elem.getAttribute('opacity') || 1
- }
- });
- $(elem).after(pline).remove();
- svgCanvas.clearSelection();
- pline.id = id;
- svgCanvas.addToSelection([pline]);
- elem = pline;
- }
- }
- // Update line if it's a connector
- if(elem.getAttribute('class') == conn_sel.substr(1)) {
- var start = getElem($(elem).data('c_start'));
- updateConnectors([start]);
- } else {
- updateConnectors();
- }
- },
- toolButtonStateUpdate: function(opts) {
- if(opts.nostroke) {
- if ($('#mode_connect').hasClass('tool_button_current')) {
- clickSelect();
- }
- }
- $('#mode_connect')
- .toggleClass('disabled',opts.nostroke);
- }
- };
-});
diff --git a/files_svgedit/extensions/ext-eyedropper.js b/files_svgedit/extensions/ext-eyedropper.js
deleted file mode 100644
index 257650d7b..000000000
--- a/files_svgedit/extensions/ext-eyedropper.js
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * ext-eyedropper.js
- *
- * Licensed under the Apache License, Version 2
- *
- * Copyright(c) 2010 Jeff Schiller
- *
- */
-
-svgEditor.addExtension("eyedropper", function(S) {
- var svgcontent = S.svgcontent,
- svgns = "http://www.w3.org/2000/svg",
- svgdoc = S.svgroot.parentNode.ownerDocument,
- ChangeElementCommand = svgCanvas.getPrivateMethods().ChangeElementCommand,
- addToHistory = svgCanvas.getPrivateMethods().addCommandToHistory,
- currentStyle = {fillPaint: "red", fillOpacity: 1.0,
- strokePaint: "black", strokeOpacity: 1.0,
- strokeWidth: 5, strokeDashArray: null,
- opacity: 1.0,
- strokeLinecap: 'butt',
- strokeLinejoin: 'miter',
- };
-
- function getStyle(opts) {
- // if we are in eyedropper mode, we don't want to disable the eye-dropper tool
- var mode = svgCanvas.getMode();
- if (mode == "eyedropper") return;
-
- var elem = null;
- var tool = $('#tool_eyedropper');
- // enable-eye-dropper if one element is selected
- if (opts.elems.length == 1 && opts.elems[0] &&
- $.inArray(opts.elems[0].nodeName, ['svg', 'g', 'use']) == -1)
- {
- elem = opts.elems[0];
- tool.removeClass('disabled');
- // grab the current style
- currentStyle.fillPaint = elem.getAttribute("fill") || "black";
- currentStyle.fillOpacity = elem.getAttribute("fill-opacity") || 1.0;
- currentStyle.strokePaint = elem.getAttribute("stroke");
- currentStyle.strokeOpacity = elem.getAttribute("stroke-opacity") || 1.0;
- currentStyle.strokeWidth = elem.getAttribute("stroke-width");
- currentStyle.strokeDashArray = elem.getAttribute("stroke-dasharray");
- currentStyle.strokeLinecap = elem.getAttribute("stroke-linecap");
- currentStyle.strokeLinejoin = elem.getAttribute("stroke-linejoin");
- currentStyle.opacity = elem.getAttribute("opacity") || 1.0;
- }
- // disable eye-dropper tool
- else {
- tool.addClass('disabled');
- }
-
- }
-
- return {
- name: "eyedropper",
- svgicons: "extensions/eyedropper-icon.xml",
- buttons: [{
- id: "tool_eyedropper",
- type: "mode",
- title: "Eye Dropper Tool",
- events: {
- "click": function() {
- svgCanvas.setMode("eyedropper");
- }
- }
- }],
-
- // if we have selected an element, grab its paint and enable the eye dropper button
- selectedChanged: getStyle,
- elementChanged: getStyle,
-
- mouseDown: function(opts) {
- var mode = svgCanvas.getMode();
- if (mode == "eyedropper") {
- var e = opts.event;
- var target = e.target;
- if ($.inArray(target.nodeName, ['svg', 'g', 'use']) == -1) {
- var changes = {};
-
- var change = function(elem, attrname, newvalue) {
- changes[attrname] = elem.getAttribute(attrname);
- elem.setAttribute(attrname, newvalue);
- };
-
- if (currentStyle.fillPaint) change(target, "fill", currentStyle.fillPaint);
- if (currentStyle.fillOpacity) change(target, "fill-opacity", currentStyle.fillOpacity);
- if (currentStyle.strokePaint) change(target, "stroke", currentStyle.strokePaint);
- if (currentStyle.strokeOpacity) change(target, "stroke-opacity", currentStyle.strokeOpacity);
- if (currentStyle.strokeWidth) change(target, "stroke-width", currentStyle.strokeWidth);
- if (currentStyle.strokeDashArray) change(target, "stroke-dasharray", currentStyle.strokeDashArray);
- if (currentStyle.opacity) change(target, "opacity", currentStyle.opacity);
- if (currentStyle.strokeLinecap) change(target, "stroke-linecap", currentStyle.strokeLinecap);
- if (currentStyle.strokeLinejoin) change(target, "stroke-linejoin", currentStyle.strokeLinejoin);
-
- addToHistory(new ChangeElementCommand(target, changes));
- }
- }
- },
- };
-});
diff --git a/files_svgedit/extensions/ext-foreignobject.js b/files_svgedit/extensions/ext-foreignobject.js
deleted file mode 100644
index 9d401825a..000000000
--- a/files_svgedit/extensions/ext-foreignobject.js
+++ /dev/null
@@ -1,277 +0,0 @@
-/*
- * ext-foreignobject.js
- *
- * Licensed under the Apache License, Version 2
- *
- * Copyright(c) 2010 Jacques Distler
- * Copyright(c) 2010 Alexis Deveria
- *
- */
-
-svgEditor.addExtension("foreignObject", function(S) {
- var svgcontent = S.svgcontent,
- addElem = S.addSvgElementFromJson,
- selElems,
- svgns = "http://www.w3.org/2000/svg",
- xlinkns = "http://www.w3.org/1999/xlink",
- xmlns = "http://www.w3.org/XML/1998/namespace",
- xmlnsns = "http://www.w3.org/2000/xmlns/",
- se_ns = "http://svg-edit.googlecode.com",
- htmlns = "http://www.w3.org/1999/xhtml",
- mathns = "http://www.w3.org/1998/Math/MathML",
- editingforeign = false,
- svgdoc = S.svgroot.parentNode.ownerDocument,
- started,
- newFO;
-
-
- var properlySourceSizeTextArea = function(){
- // TODO: remove magic numbers here and get values from CSS
- var height = $('#svg_source_container').height() - 80;
- $('#svg_source_textarea').css('height', height);
- };
-
- function showPanel(on) {
- var fc_rules = $('#fc_rules');
- if(!fc_rules.length) {
- fc_rules = $('<style id="fc_rules"><\/style>').appendTo('head');
- }
- fc_rules.text(!on?"":" #tool_topath { display: none !important; }");
- $('#foreignObject_panel').toggle(on);
- }
-
- function toggleSourceButtons(on) {
- $('#tool_source_save, #tool_source_cancel').toggle(!on);
- $('#foreign_save, #foreign_cancel').toggle(on);
- }
-
-
- // Function: setForeignString(xmlString, elt)
- // This function sets the content of element elt to the input XML.
- //
- // Parameters:
- // xmlString - The XML text.
- // elt - the parent element to append to
- //
- // Returns:
- // This function returns false if the set was unsuccessful, true otherwise.
- function setForeignString(xmlString) {
- var elt = selElems[0];
- try {
- // convert string into XML document
- var newDoc = Utils.text2xml('<svg xmlns="'+svgns+'" xmlns:xlink="'+xlinkns+'">'+xmlString+'</svg>');
- // run it through our sanitizer to remove anything we do not support
- S.sanitizeSvg(newDoc.documentElement);
- elt.parentNode.replaceChild(svgdoc.importNode(newDoc.documentElement.firstChild, true), elt);
- S.call("changed", [elt]);
- svgCanvas.clearSelection();
- } catch(e) {
- console.log(e);
- return false;
- }
-
- return true;
- };
-
- function showForeignEditor() {
- var elt = selElems[0];
- if (!elt || editingforeign) return;
- editingforeign = true;
- toggleSourceButtons(true);
- elt.removeAttribute('fill');
-
- var str = S.svgToString(elt, 0);
- $('#svg_source_textarea').val(str);
- $('#svg_source_editor').fadeIn();
- properlySourceSizeTextArea();
- $('#svg_source_textarea').focus();
- }
-
- function setAttr(attr, val) {
- svgCanvas.changeSelectedAttribute(attr, val);
- S.call("changed", selElems);
- }
-
-
- return {
- name: "foreignObject",
- svgicons: "extensions/foreignobject-icons.xml",
- buttons: [{
- id: "tool_foreign",
- type: "mode",
- title: "Foreign Object Tool",
- events: {
- 'click': function() {
- svgCanvas.setMode('foreign')
- }
- }
- },{
- id: "edit_foreign",
- type: "context",
- panel: "foreignObject_panel",
- title: "Edit ForeignObject Content",
- events: {
- 'click': function() {
- showForeignEditor();
- }
- }
- }],
-
- context_tools: [{
- type: "input",
- panel: "foreignObject_panel",
- title: "Change foreignObject's width",
- id: "foreign_width",
- label: "w",
- size: 3,
- events: {
- change: function() {
- setAttr('width', this.value);
- }
- }
- },{
- type: "input",
- panel: "foreignObject_panel",
- title: "Change foreignObject's height",
- id: "foreign_height",
- label: "h",
- events: {
- change: function() {
- setAttr('height', this.value);
- }
- }
- }, {
- type: "input",
- panel: "foreignObject_panel",
- title: "Change foreignObject's font size",
- id: "foreign_font_size",
- label: "font-size",
- size: 2,
- defval: 16,
- events: {
- change: function() {
- setAttr('font-size', this.value);
- }
- }
- }
-
-
- ],
- callback: function() {
- $('#foreignObject_panel').hide();
-
- var endChanges = function() {
- $('#svg_source_editor').hide();
- editingforeign = false;
- $('#svg_source_textarea').blur();
- toggleSourceButtons(false);
- }
-
- // TODO: Needs to be done after orig icon loads
- setTimeout(function() {
- // Create source save/cancel buttons
- var save = $('#tool_source_save').clone()
- .hide().attr('id', 'foreign_save').unbind()
- .appendTo("#tool_source_back").click(function() {
-
- if (!editingforeign) return;
-
- if (!setForeignString($('#svg_source_textarea').val())) {
- $.confirm("Errors found. Revert to original?", function(ok) {
- if(!ok) return false;
- endChanges();
- });
- } else {
- endChanges();
- }
- // setSelectMode();
- });
-
- var cancel = $('#tool_source_cancel').clone()
- .hide().attr('id', 'foreign_cancel').unbind()
- .appendTo("#tool_source_back").click(function() {
- endChanges();
- });
-
- }, 3000);
- },
- mouseDown: function(opts) {
- var e = opts.event;
-
- if(svgCanvas.getMode() == "foreign") {
-
- started = true;
- newFO = S.addSvgElementFromJson({
- "element": "foreignObject",
- "attr": {
- "x": opts.start_x,
- "y": opts.start_y,
- "id": S.getNextId(),
- "font-size": 16, //cur_text.font_size,
- "width": "48",
- "height": "20",
- "style": "pointer-events:inherit"
- }
- });
- var m = svgdoc.createElementNS(mathns, 'math');
- m.setAttributeNS(xmlnsns, 'xmlns', mathns);
- m.setAttribute('display', 'inline');
- var mi = svgdoc.createElementNS(mathns, 'mi');
- mi.setAttribute('mathvariant', 'normal');
- mi.textContent = "\u03A6";
- var mo = svgdoc.createElementNS(mathns, 'mo');
- mo.textContent = "\u222A";
- var mi2 = svgdoc.createElementNS(mathns, 'mi');
- mi2.textContent = "\u2133";
- m.appendChild(mi);
- m.appendChild(mo);
- m.appendChild(mi2);
- newFO.appendChild(m);
- return {
- started: true
- }
- }
- },
- mouseUp: function(opts) {
- var e = opts.event;
- if(svgCanvas.getMode() == "foreign" && started) {
- var attrs = $(newFO).attr(["width", "height"]);
- keep = (attrs.width != 0 || attrs.height != 0);
- svgCanvas.addToSelection([newFO], true);
-
- return {
- keep: keep,
- element: newFO
- }
-
- }
-
- },
- selectedChanged: function(opts) {
- // Use this to update the current selected elements
- selElems = opts.elems;
-
- var i = selElems.length;
-
- while(i--) {
- var elem = selElems[i];
- if(elem && elem.tagName == "foreignObject") {
- if(opts.selectedElement && !opts.multiselected) {
- $('#foreign_font_size').val(elem.getAttribute("font-size"));
- $('#foreign_width').val(elem.getAttribute("width"));
- $('#foreign_height').val(elem.getAttribute("height"));
-
- showPanel(true);
- } else {
- showPanel(false);
- }
- } else {
- showPanel(false);
- }
- }
- },
- elementChanged: function(opts) {
- var elem = opts.elems[0];
- }
- };
-});
diff --git a/files_svgedit/extensions/ext-helloworld.js b/files_svgedit/extensions/ext-helloworld.js
deleted file mode 100644
index a35c24107..000000000
--- a/files_svgedit/extensions/ext-helloworld.js
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * ext-helloworld.js
- *
- * Licensed under the Apache License, Version 2
- *
- * Copyright(c) 2010 Alexis Deveria
- *
- */
-
-/*
- This is a very basic SVG-Edit extension. It adds a "Hello World" button in
- the left panel. Clicking on the button, and then the canvas will show the
- user the point on the canvas that was clicked on.
-*/
-
-svgEditor.addExtension("Hello World", function() {
-
- return {
- name: "Hello World",
- // For more notes on how to make an icon file, see the source of
- // the hellorworld-icon.xml
- svgicons: "extensions/helloworld-icon.xml",
-
- // Multiple buttons can be added in this array
- buttons: [{
- // Must match the icon ID in helloworld-icon.xml
- id: "hello_world",
-
- // This indicates that the button will be added to the "mode"
- // button panel on the left side
- type: "mode",
-
- // Tooltip text
- title: "Say 'Hello World'",
-
- // Events
- events: {
- 'click': function() {
- // The action taken when the button is clicked on.
- // For "mode" buttons, any other button will
- // automatically be de-pressed.
- svgCanvas.setMode("hello_world");
- }
- }
- }],
- // This is triggered when the main mouse button is pressed down
- // on the editor canvas (not the tool panels)
- mouseDown: function() {
- // Check the mode on mousedown
- if(svgCanvas.getMode() == "hello_world") {
-
- // The returned object must include "started" with
- // a value of true in order for mouseUp to be triggered
- return {started: true};
- }
- },
-
- // This is triggered from anywhere, but "started" must have been set
- // to true (see above). Note that "opts" is an object with event info
- mouseUp: function(opts) {
- // Check the mode on mouseup
- if(svgCanvas.getMode() == "hello_world") {
- var zoom = svgCanvas.getZoom();
-
- // Get the actual coordinate by dividing by the zoom value
- var x = opts.mouse_x / zoom;
- var y = opts.mouse_y / zoom;
-
- var text = "Hello World!\n\nYou clicked here: "
- + x + ", " + y;
-
- // Show the text using the custom alert function
- $.alert(text);
- }
- }
- };
-});
-
diff --git a/files_svgedit/extensions/ext-markers.js b/files_svgedit/extensions/ext-markers.js
deleted file mode 100644
index 25b08be9c..000000000
--- a/files_svgedit/extensions/ext-markers.js
+++ /dev/null
@@ -1,572 +0,0 @@
-/*
- * ext-markers.js
- *
- * Licensed under the Apache License, Version 2
- *
- * Copyright(c) 2010 Will Schleter
- * based on ext-arrows.js by Copyright(c) 2010 Alexis Deveria
- *
- * This extension provides for the addition of markers to the either end
- * or the middle of a line, polyline, path, polygon.
- *
- * Markers may be either a graphic or arbitary text
- *
- * to simplify the coding and make the implementation as robust as possible,
- * markers are not shared - every object has its own set of markers.
- * this relationship is maintained by a naming convention between the
- * ids of the markers and the ids of the object
- *
- * The following restrictions exist for simplicty of use and programming
- * objects and their markers to have the same color
- * marker size is fixed
- * text marker font, size, and attributes are fixed
- * an application specific attribute - se_type - is added to each marker element
- * to store the type of marker
- *
- * TODO:
- * remove some of the restrictions above
- * add option for keeping text aligned to horizontal
- * add support for dimension extension lines
- *
- */
-
-svgEditor.addExtension("Markers", function(S) {
- var svgcontent = S.svgcontent,
- addElem = S.addSvgElementFromJson,
- selElems;
-
- var mtypes = ['start','mid','end'];
-
- var marker_prefix = 'se_marker_';
- var id_prefix = 'mkr_';
-
- // note - to add additional marker types add them below with a unique id
- // and add the associated icon(s) to marker-icons.svg
- // the geometry is normallized to a 100x100 box with the origin at lower left
- // Safari did not like negative values for low left of viewBox
- // remember that the coordinate system has +y downward
- var marker_types = {
- nomarker: {},
- leftarrow:
- {element:'path', attr:{d:'M0,50 L100,90 L70,50 L100,10 Z'}},
- rightarrow:
- {element:'path', attr:{d:'M100,50 L0,90 L30,50 L0,10 Z'}},
- textmarker:
- {element:'text', attr: {x:0, y:0,'stroke-width':0,'stroke':'none','font-size':75,'font-family':'serif','text-anchor':'left',
- 'xml:space': 'preserve'}},
- forwardslash:
- {element:'path', attr:{d:'M30,100 L70,0'}},
- reverseslash:
- {element:'path', attr:{d:'M30,0 L70,100'}},
- verticalslash:
- {element:'path', attr:{d:'M50,0 L50,100'}},
- box:
- {element:'path', attr:{d:'M20,20 L20,80 L80,80 L80,20 Z'}},
- star:
- {element:'path', attr:{d:'M10,30 L90,30 L20,90 L50,10 L80,90 Z'}},
- xmark:
- {element:'path', attr:{d:'M20,80 L80,20 M80,80 L20,20'}},
- triangle:
- {element:'path', attr:{d:'M10,80 L50,20 L80,80 Z'}},
- mcircle:
- {element:'circle', attr:{r:30, cx:50, cy:50}},
- }
-
-
- var lang_list = {
- "en":[
- {id: "start_marker_list", title: "Select start marker type" },
- {id: "mid_marker_list", title: "Select mid marker type" },
- {id: "end_marker_list", title: "Select end marker type" },
- {id: "nomarker", title: "No Marker" },
- {id: "leftarrow", title: "Left Arrow" },
- {id: "rightarrow", title: "Right Arrow" },
- {id: "textmarker", title: "Text Marker" },
- {id: "forwardslash", title: "Forward Slash" },
- {id: "reverseslash", title: "Reverse Slash" },
- {id: "verticalslash", title: "Vertical Slash" },
- {id: "box", title: "Box" },
- {id: "star", title: "Star" },
- {id: "xmark", title: "X" },
- {id: "triangle", title: "Triangle" },
- {id: "mcircle", title: "Circle" },
- {id: "leftarrow_o", title: "Open Left Arrow" },
- {id: "rightarrow_o", title: "Open Right Arrow" },
- {id: "box_o", title: "Open Box" },
- {id: "star_o", title: "Open Star" },
- {id: "triangle_o", title: "Open Triangle" },
- {id: "mcircle_o", title: "Open Circle" },
- ]
- };
-
-
- // duplicate shapes to support unfilled (open) marker types with an _o suffix
- $.each(['leftarrow','rightarrow','box','star','mcircle','triangle'],function(i,v) {
- marker_types[v+'_o'] = marker_types[v];
- });
-
- // elem = a graphic element will have an attribute like marker-start
- // attr - marker-start, marker-mid, or marker-end
- // returns the marker element that is linked to the graphic element
- function getLinked(elem, attr) {
- var str = elem.getAttribute(attr);
- if(!str) return null;
- var m = str.match(/\(\#(.*)\)/);
- if(!m || m.length !== 2) {
- return null;
- }
- return S.getElem(m[1]);
- }
-
- //toggles context tool panel off/on
- //sets the controls with the selected element's settings
- function showPanel(on) {
- $('#marker_panel').toggle(on);
-
- if(on) {
- var el = selElems[0];
- var val;
- var ci;
-
- $.each(mtypes, function(i, pos) {
- var m=getLinked(el,"marker-"+pos);
- var txtbox = $('#'+pos+'_marker');
- if (!m) {
- val='\\nomarker';
- ci=val;
- txtbox.hide() // hide text box
- } else {
- if (!m.attributes.se_type) return; // not created by this extension
- val='\\'+m.attributes.se_type.textContent;
- ci=val;
- if (val=='\\textmarker') {
- val=m.lastChild.textContent;
- //txtbox.show(); // show text box
- } else {
- txtbox.hide() // hide text box
- }
- }
- txtbox.val(val);
- setIcon(pos,ci);
- })
- }
- }
-
- function addMarker(id, val) {
- var txt_box_bg = '#ffffff';
- var txt_box_border = 'none';
- var txt_box_stroke_width = 0;
-
- var marker = S.getElem(id);
-
- if (marker) return;
-
- if (val=='' || val=='\\nomarker') return;
-
- var el = selElems[0];
- var color = el.getAttribute('stroke');
- //NOTE: Safari didn't like a negative value in viewBox
- //so we use a standardized 0 0 100 100
- //with 50 50 being mapped to the marker position
- var refX = 50;
- var refY = 50;
- var viewBox = "0 0 100 100";
- var markerWidth = 5;
- var markerHeight = 5;
- var strokeWidth = 10;
- if (val.substr(0,1)=='\\') se_type=val.substr(1);
- else se_type='textmarker';
-
- if (!marker_types[se_type]) return; // an unknown type!
-
- // create a generic marker
- marker = addElem({
- "element": "marker",
- "attr": {
- "id": id,
- "markerUnits": "strokeWidth",
- "orient": "auto",
- "style": "pointer-events:none",
- "se_type": se_type
- }
- });
-
- if (se_type!='textmarker') {
- var mel = addElem(marker_types[se_type]);
- var fillcolor = color;
- if (se_type.substr(-2)=='_o') fillcolor='none';
- mel.setAttribute('fill',fillcolor);
- mel.setAttribute('stroke',color);
- mel.setAttribute('stroke-width',strokeWidth);
- marker.appendChild(mel);
- } else {
- var text = addElem(marker_types[se_type]);
- // have to add text to get bounding box
- text.textContent = val;
- var tb=text.getBBox();
- //alert( tb.x + " " + tb.y + " " + tb.width + " " + tb.height);
- var pad=1;
- var bb = tb;
- bb.x = 0;
- bb.y = 0;
- bb.width += pad*2;
- bb.height += pad*2;
- // shift text according to its size
- text.setAttribute('x', pad);
- text.setAttribute('y', bb.height - pad - tb.height/4); // kludge?
- text.setAttribute('fill',color);
- refX = bb.width/2+pad;
- refY = bb.height/2+pad;
- viewBox = bb.x + " " + bb.y + " " + bb.width + " " + bb.height;
- markerWidth =bb.width/10;
- markerHeight = bb.height/10;
-
- var box = addElem({
- "element": "rect",
- "attr": {
- "x": bb.x,
- "y": bb.y,
- "width": bb.width,
- "height": bb.height,
- "fill": txt_box_bg,
- "stroke": txt_box_border,
- "stroke-width": txt_box_stroke_width
- }
- });
- marker.setAttribute("orient",0);
- marker.appendChild(box);
- marker.appendChild(text);
- }
-
- marker.setAttribute("viewBox",viewBox);
- marker.setAttribute("markerWidth", markerWidth);
- marker.setAttribute("markerHeight", markerHeight);
- marker.setAttribute("refX", refX);
- marker.setAttribute("refY", refY);
- S.findDefs().appendChild(marker);
-
- return marker;
- }
-
-
- function setMarker() {
- var poslist={'start_marker':'start','mid_marker':'mid','end_marker':'end'};
- var pos = poslist[this.id];
- var marker_name = 'marker-'+pos;
- var val = this.value;
- var el = selElems[0];
- var marker = getLinked(el, marker_name);
- if (marker) $(marker).remove();
- el.removeAttribute(marker_name);
- if (val=='') val='\\nomarker';
- if (val=='\\nomarker') {
- setIcon(pos,val);
- S.call("changed", selElems);
- return;
- }
- // Set marker on element
- var id = marker_prefix + pos + '_' + el.id;
- addMarker(id, val);
- svgCanvas.changeSelectedAttribute(marker_name, "url(#" + id + ")");
- if (el.tagName == "line" && pos=='mid') el=convertline(el);
- S.call("changed", selElems);
- setIcon(pos,val);
- }
-
- function convertline(elem) {
- // this routine came from the connectors extension
- // it is needed because midpoint markers don't work with line elements
- if (!(elem.tagName == "line")) return elem;
-
- // Convert to polyline to accept mid-arrow
-
- var x1 = elem.getAttribute('x1')-0;
- var x2 = elem.getAttribute('x2')-0;
- var y1 = elem.getAttribute('y1')-0;
- var y2 = elem.getAttribute('y2')-0;
- var id = elem.id;
-
- var mid_pt = (' '+((x1+x2)/2)+','+((y1+y2)/2) + ' ');
- var pline = addElem({
- "element": "polyline",
- "attr": {
- "points": (x1+','+y1+ mid_pt +x2+','+y2),
- "stroke": elem.getAttribute('stroke'),
- "stroke-width": elem.getAttribute('stroke-width'),
- "fill": "none",
- "opacity": elem.getAttribute('opacity') || 1
- }
- });
- $.each(mtypes, function(i, pos) { // get any existing marker definitions
- var nam = 'marker-'+pos;
- var m = elem.getAttribute(nam);
- if (m) pline.setAttribute(nam,elem.getAttribute(nam));
- });
-
- var batchCmd = new S.BatchCommand();
- batchCmd.addSubCommand(new S.RemoveElementCommand(elem, elem.parentNode));
- batchCmd.addSubCommand(new S.InsertElementCommand(pline));
-
- $(elem).after(pline).remove();
- svgCanvas.clearSelection();
- pline.id = id;
- svgCanvas.addToSelection([pline]);
- S.addCommandToHistory(batchCmd);
- return pline;
- }
-
- // called when the main system modifies an object
- // this routine changes the associated markers to be the same color
- function colorChanged(elem) {
- var color = elem.getAttribute('stroke');
-
- $.each(mtypes, function(i, pos) {
- var marker = getLinked(elem, 'marker-'+pos);
- if (!marker) return;
- if (!marker.attributes.se_type) return; //not created by this extension
- var ch = marker.lastElementChild;
- if (!ch) return;
- var curfill = ch.getAttribute("fill");
- var curstroke = ch.getAttribute("stroke")
- if (curfill && curfill!='none') ch.setAttribute("fill",color);
- if (curstroke && curstroke!='none') ch.setAttribute("stroke",color);
- });
- }
-
- // called when the main system creates or modifies an object
- // primary purpose is create new markers for cloned objects
- function updateReferences(el) {
- $.each(mtypes, function (i,pos) {
- var id = marker_prefix + pos + '_' + el.id;
- var marker_name = 'marker-'+pos;
- var marker = getLinked(el, marker_name);
- if (!marker || !marker.attributes.se_type) return; //not created by this extension
- var url = el.getAttribute(marker_name);
- if (url) {
- var len = el.id.length;
- var linkid = url.substr(-len-1,len);
- if (el.id != linkid) {
- var val = $('#'+pos+'_marker').attr('value');
- addMarker(id, val);
- svgCanvas.changeSelectedAttribute(marker_name, "url(#" + id + ")");
- if (el.tagName == "line" && pos=='mid') el=convertline(el);
- S.call("changed", selElems);
- }
- }
- });
- }
-
- // simulate a change event a text box that stores the current element's marker type
- function triggerTextEntry(pos,val) {
- $('#'+pos+'_marker').val(val);
- $('#'+pos+'_marker').change();
- var txtbox = $('#'+pos+'_marker');
- //if (val.substr(0,1)=='\\') txtbox.hide();
- //else txtbox.show();
- }
-
- function setIcon(pos,id) {
- if (id.substr(0,1)!='\\') id='\\textmarker'
- var ci = '#'+id_prefix+pos+'_'+id.substr(1);
- svgEditor.setIcon('#cur_' + pos +'_marker_list', $(ci).children());
- $(ci).addClass('current').siblings().removeClass('current');
- }
-
- function setMarkerSet(obj) {
- var parts = this.id.split('_');
- var set = parts[2];
- switch (set) {
- case 'off':
- triggerTextEntry('start','\\nomarker');
- triggerTextEntry('mid','\\nomarker');
- triggerTextEntry('end','\\nomarker');
- break;
- case 'dimension':
- triggerTextEntry('start','\\leftarrow');
- triggerTextEntry('end','\\rightarrow');
- showTextPrompt('mid');
- break;
- case 'label':
- triggerTextEntry('mid','\\nomarker');
- triggerTextEntry('end','\\rightarrow');
- showTextPrompt('start');
- break;
- }
- }
-
- function showTextPrompt(pos) {
- var def = $('#'+pos+'_marker').val();
- if (def.substr(0,1)=='\\') def='';
- $.prompt('Enter text for ' + pos + ' marker', def , function(txt) { if (txt) triggerTextEntry(pos,txt); });
- }
-
- // callback function for a toolbar button click
- function setArrowFromButton(obj) {
-
- var parts = this.id.split('_');
- var pos = parts[1];
- var val = parts[2];
- if (parts[3]) val+='_'+parts[3];
-
- if (val!='textmarker') {
- triggerTextEntry(pos,'\\'+val);
- } else {
- showTextPrompt(pos);
- }
- }
-
- function getTitle(lang,id) {
- var list = lang_list[lang];
- for (var i in list) {
- if (list[i].id==id) return list[i].title;
- }
- return id;
- }
-
-
- // build the toolbar button array from the marker definitions
- // TODO: need to incorporate language specific titles
- function buildButtonList() {
- var buttons=[];
- var i=0;
-/*
- buttons.push({
- id:id_prefix + 'markers_off',
- title:'Turn off all markers',
- type:'context',
- events: { 'click': setMarkerSet },
- panel: 'marker_panel'
- });
- buttons.push({
- id:id_prefix + 'markers_dimension',
- title:'Dimension',
- type:'context',
- events: { 'click': setMarkerSet },
- panel: 'marker_panel'
- });
- buttons.push({
- id:id_prefix + 'markers_label',
- title:'Label',
- type:'context',
- events: { 'click': setMarkerSet },
- panel: 'marker_panel'
- });
-*/
- $.each(mtypes,function(k,pos) {
- var listname = pos + "_marker_list";
- var def = true;
- $.each(marker_types,function(id,v) {
- var title = getTitle('en',id);
- buttons.push({
- id:id_prefix + pos + "_" + id,
- svgicon:id,
- title:title,
- type:'context',
- events: { 'click': setArrowFromButton },
- panel:'marker_panel',
- list: listname,
- isDefault: def
- });
- def = false;
- });
- });
- return buttons;
- }
-
- return {
- name: "Markers",
- svgicons: "extensions/markers-icons.xml",
- buttons: buildButtonList(),
- context_tools: [
- {
- type: "input",
- panel: "marker_panel",
- title: "Start marker",
- id: "start_marker",
- label: "s",
- size: 3,
- events: { change: setMarker }
- },{
- type: "button-select",
- panel: "marker_panel",
- title: getTitle('en','start_marker_list'),
- id: "start_marker_list",
- colnum: 3,
- events: { change: setArrowFromButton }
- },{
- type: "input",
- panel: "marker_panel",
- title: "Middle marker",
- id: "mid_marker",
- label: "m",
- defval: "",
- size: 3,
- events: { change: setMarker }
- },{
- type: "button-select",
- panel: "marker_panel",
- title: getTitle('en','mid_marker_list'),
- id: "mid_marker_list",
- colnum: 3,
- events: { change: setArrowFromButton }
- },{
- type: "input",
- panel: "marker_panel",
- title: "End marker",
- id: "end_marker",
- label: "e",
- size: 3,
- events: { change: setMarker }
- },{
- type: "button-select",
- panel: "marker_panel",
- title: getTitle('en','end_marker_list'),
- id: "end_marker_list",
- colnum: 3,
- events: { change: setArrowFromButton }
- } ],
- callback: function() {
- $('#marker_panel').addClass('toolset').hide();
-
- },
- addLangData: function(lang) {
- return { data: lang_list[lang] };
- },
-
- selectedChanged: function(opts) {
- // Use this to update the current selected elements
- //console.log('selectChanged',opts);
- selElems = opts.elems;
-
- var i = selElems.length;
- var marker_elems = ['line','path','polyline','polygon'];
-
- while(i--) {
- var elem = selElems[i];
- if(elem && $.inArray(elem.tagName, marker_elems) != -1) {
- if(opts.selectedElement && !opts.multiselected) {
- showPanel(true);
- } else {
- showPanel(false);
- }
- } else {
- showPanel(false);
- }
- }
- },
-
- elementChanged: function(opts) {
- //console.log('elementChanged',opts);
- var elem = opts.elems[0];
- if(elem && (
- elem.getAttribute("marker-start") ||
- elem.getAttribute("marker-mid") ||
- elem.getAttribute("marker-end")
- )) {
- colorChanged(elem);
- updateReferences(elem);
- }
- changing_flag = false;
- }
- };
-});
diff --git a/files_svgedit/extensions/ext-server_opensave.js b/files_svgedit/extensions/ext-server_opensave.js
deleted file mode 100644
index ff236b6ef..000000000
--- a/files_svgedit/extensions/ext-server_opensave.js
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
- * ext-server_opensave.js
- *
- * Licensed under the Apache License, Version 2
- *
- * Copyright(c) 2010 Alexis Deveria
- *
- */
-
-svgEditor.addExtension("server_opensave", {
- callback: function() {
-
- var save_svg_action = 'extensions/filesave.php';
- var save_png_action = 'extensions/filesave.php';
-
- // Create upload target (hidden iframe)
- var target = $('<iframe name="output_frame" src="#"/>').hide().appendTo('body');
-
- svgEditor.setCustomHandlers({
- save: function(win, data) {
- var svg = '<?xml version="1.0"?>' + data;
-
- var title = svgCanvas.getDocumentTitle();
- var filename = title.replace(/[^a-z0-9\.\_\-]+/gi, '_');
-
- var form = $('<form>').attr({
- method: 'post',
- action: save_svg_action,
- target: 'output_frame'
- }) .append('<input type="hidden" name="output_svg" value="' + encodeURI(svg) + '">')
- .append('<input type="hidden" name="filename" value="' + filename + '">')
- .appendTo('body')
- .submit().remove();
- },
- pngsave: function(win, data) {
- var issues = data.issues;
-
- if(!$('#export_canvas').length) {
- $('<canvas>', {id: 'export_canvas'}).hide().appendTo('body');
- }
- var c = $('#export_canvas')[0];
-
- c.width = svgCanvas.contentW;
- c.height = svgCanvas.contentH;
- canvg(c, data.svg);
- var datauri = c.toDataURL('image/png');
-
- var uiStrings = svgEditor.uiStrings;
- var note = '';
-
- // Check if there's issues
- if(issues.length) {
- var pre = "\n \u2022 ";
- note += ("\n\n" + pre + issues.join(pre));
- }
-
- if(note.length) {
- alert(note);
- }
-
- var title = svgCanvas.getDocumentTitle();
- var filename = title.replace(/[^a-z0-9\.\_\-]+/gi, '_');
-
- var form = $('<form>').attr({
- method: 'post',
- action: save_png_action,
- target: 'output_frame'
- }) .append('<input type="hidden" name="output_png" value="' + datauri + '">')
- .append('<input type="hidden" name="filename" value="' + filename + '">')
- .appendTo('body')
- .submit().remove();
-
-
- }
- });
-
- // Do nothing if client support is found
- if(window.FileReader) return;
-
- var cancelled = false;
-
- // Change these to appropriate script file
- var open_svg_action = 'extensions/fileopen.php?type=load_svg';
- var import_svg_action = 'extensions/fileopen.php?type=import_svg';
- var import_img_action = 'extensions/fileopen.php?type=import_img';
-
- // Set up function for PHP uploader to use
- svgEditor.processFile = function(str64, type) {
- if(cancelled) {
- cancelled = false;
- return;
- }
-
- $('#dialog_box').hide();
-
- if(type != 'import_img') {
- var xmlstr = svgCanvas.Utils.decode64(str64);
- }
-
- switch ( type ) {
- case 'load_svg':
- svgCanvas.clear();
- svgCanvas.setSvgString(xmlstr);
- svgEditor.updateCanvas();
- break;
- case 'import_svg':
- svgCanvas.importSvgString(xmlstr);
- svgEditor.updateCanvas();
- break;
- case 'import_img':
- svgCanvas.setGoodImage(str64);
- break;
- }
- }
-
- // Create upload form
- var open_svg_form = $('<form>');
- open_svg_form.attr({
- enctype: 'multipart/form-data',
- method: 'post',
- action: open_svg_action,
- target: 'output_frame'
- });
-
- // Create import form
- var import_svg_form = open_svg_form.clone().attr('action', import_svg_action);
-
- // Create image form
- var import_img_form = open_svg_form.clone().attr('action', import_img_action);
-
- // It appears necessory to rebuild this input every time a file is
- // selected so the same file can be picked and the change event can fire.
- function rebuildInput(form) {
- form.empty();
- var inp = $('<input type="file" name="svg_file">').appendTo(form);
-
-
- function submit() {
- // This submits the form, which returns the file data using svgEditor.uploadSVG
- form.submit();
-
- rebuildInput(form);
- $.process_cancel("Uploading...", function() {
- cancelled = true;
- $('#dialog_box').hide();
- });
- }
-
- if(form[0] == open_svg_form[0]) {
- inp.change(function() {
- // This takes care of the "are you sure" dialog box
- svgEditor.openPrep(function(ok) {
- if(!ok) {
- rebuildInput(form);
- return;
- }
- submit();
- });
- });
- } else {
- inp.change(function() {
- // This submits the form, which returns the file data using svgEditor.uploadSVG
- submit();
- });
- }
- }
-
- // Create the input elements
- rebuildInput(open_svg_form);
- rebuildInput(import_svg_form);
- rebuildInput(import_img_form);
-
- // Add forms to buttons
- $("#tool_open").show().prepend(open_svg_form);
- $("#tool_import").show().prepend(import_svg_form);
- $("#tool_image").prepend(import_img_form);
- }
-});
-
diff --git a/files_svgedit/extensions/eyedropper-icon.xml b/files_svgedit/extensions/eyedropper-icon.xml
deleted file mode 100644
index c05576aa2..000000000
--- a/files_svgedit/extensions/eyedropper-icon.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg">
-
-<g id="tool_eyedropper">
-<svg viewBox="0 0 320 320" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
- <!-- Created with SVG-edit - http://svg-edit.googlecode.com/ -->
- <defs>
- <radialGradient id="eyedropper_svg_6" cx="0.5" cy="0.5" r="0.5">
- <stop offset="0" stop-color="#ffffff" stop-opacity="1"/>
- <stop offset="1" stop-color="#e5e5e5" stop-opacity="0.38"/>
- </radialGradient>
- <linearGradient id="eyedropper_svg_15" x1="0" y1="0" x2="0.58594" y2="0.55078">
- <stop offset="0" stop-color="#ffffff" stop-opacity="0.57"/>
- <stop offset="1" stop-color="#000056" stop-opacity="1"/>
- </linearGradient>
- <linearGradient id="eyedropper_svg_19" x1="0" y1="0" x2="1" y2="1">
- <stop offset="0" stop-color="#ffffff" stop-opacity="1"/>
- <stop offset="1" stop-color="#ffffff" stop-opacity="0"/>
- </linearGradient>
- </defs>
- <g display="inline">
- <title>Layer 1</title>
- <path d="m193.899994,73l-119.899979,118l-15,39.5l10.25,4.5l43.750015,-20l108.999969,-112l-28.100006,-30z" id="svg_3" fill="none" stroke="#000000" stroke-width="5"/>
- <path d="m58.649994,232c-2.75,28.200012 -26.399994,28.950012 -21.899994,59c4.5,30.049988 55,28 55.5,-1.25c0.5,-29.25 -20.25,-28.75 -22.25,-54.75l-11.350006,-3z" id="svg_4" fill="#aa56ff" stroke="#000000" stroke-width="7"/>
- <path d="m45.474976,269.275024l13.775024,0.474976l-0.75,16.75l-14.25,-1.25l1.224976,-15.974976z" id="svg_5" fill="url(#eyedropper_svg_6)" stroke-width="5" fill-opacity="0.73"/>
- <path d="m217.899994,46c21.5,-101.549999 141.600006,20.449997 28.100006,33l-5,44l-63,-66l39.899994,-11z" id="svg_2" fill="#000000" stroke-width="5"/>
- <path d="m206.825012,61.075008c3.712494,-2.46249 7.637482,-3.53751 14.424988,-5.575008c10.125,-16.5 32.875,-41.5 40.5,-35c7.625,6.5 -21.25,35.625 -37.5,39.25c-5.5,10.125 -8,13.875 -17.25,16.5c-2.837494,-8.162514 -4.262482,-12.337486 -0.174988,-15.174992z" id="svg_7" fill="url(#eyedropper_svg_15)" stroke-width="5"/>
- <path d="m133.049988,134.75l46.950012,9.25l-66,70l-42.5,20.5l-11.5,-5l14,-37.5l59.049988,-57.25z" id="svg_11" fill="#aa56ff" stroke="#000000" stroke-width="7"/>
- <path d="m71.425034,212.350006l9.050888,-20.022537l51.516724,-49.327469l8.507355,0.97197l-69.074966,68.378036z" id="svg_16" fill="url(#eyedropper_svg_19)" stroke-width="5"/>
- </g>
-</svg>
-</g>
-
- <g id="svg_eof"/>
-</svg> \ No newline at end of file
diff --git a/files_svgedit/extensions/eyedropper.png b/files_svgedit/extensions/eyedropper.png
deleted file mode 100644
index 61987c4bd..000000000
--- a/files_svgedit/extensions/eyedropper.png
+++ /dev/null
Binary files differ
diff --git a/files_svgedit/extensions/foreignobject-icons.xml b/files_svgedit/extensions/foreignobject-icons.xml
deleted file mode 100644
index 0d34654a7..000000000
--- a/files_svgedit/extensions/foreignobject-icons.xml
+++ /dev/null
@@ -1,96 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg">
- <g id="tool_foreign">
- <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 84 84">
- <g fill="#444" opacity="0.2" transform="translate(6,6)">
- <path d="M42.8,74.3c0,4.3,0,5.9,11.8,5.9l4.1,0l0,3.8c-4.5-0.4-16.1-0.4-21.2-0.3c-5.1,0-16.6,0-21,0.4l0-3.8l4.1,0
- c11.8,0,11.8-1.7,11.8-5.9l0-6.9C13.9,65.6,0,54.6,0,42c0-12.2,13.3-23.5,32.4-25.4l0-6.9c0-4.3,0-5.9-11.8-5.9l-4.1,0l0-3.8
- c4.5,0.4,16.1,0.4,21.2,0.3c5.1,0,16.6,0,21-0.4l0,3.8l-4.1,0c-11.8,0-11.8,1.7-11.8,5.9l0,6.9C61.6,18.1,75.8,29.2,75.8,42
- c0,12.4-13.8,23.9-33.1,25.4L42.8,74.3z M32.4,19.4c-18.7,2.5-19.9,16.2-19.9,22.6c0,7.6,2.3,20.2,20,22.5L32.4,19.4z M42.7,64.7
- c18.8-2.2,20.7-15.4,20.6-22.8c0-9.3-3.5-20.6-20.7-22.6L42.7,64.7z"/>
- </g>
- <g fill="#444" opacity="0.3" transform="translate(4,4)">
- <path d="M42.8,74.3c0,4.3,0,5.9,11.8,5.9l4.1,0l0,3.8c-4.5-0.4-16.1-0.4-21.2-0.3c-5.1,0-16.6,0-21,0.4l0-3.8l4.1,0
- c11.8,0,11.8-1.7,11.8-5.9l0-6.9C13.9,65.6,0,54.6,0,42c0-12.2,13.3-23.5,32.4-25.4l0-6.9c0-4.3,0-5.9-11.8-5.9l-4.1,0l0-3.8
- c4.5,0.4,16.1,0.4,21.2,0.3c5.1,0,16.6,0,21-0.4l0,3.8l-4.1,0c-11.8,0-11.8,1.7-11.8,5.9l0,6.9C61.6,18.1,75.8,29.2,75.8,42
- c0,12.4-13.8,23.9-33.1,25.4L42.8,74.3z M32.4,19.4c-18.7,2.5-19.9,16.2-19.9,22.6c0,7.6,2.3,20.2,20,22.5L32.4,19.4z M42.7,64.7
- c18.8-2.2,20.7-15.4,20.6-22.8c0-9.3-3.5-20.6-20.7-22.6L42.7,64.7z"/>
- </g>
- <g fill="#444" opacity="0.5" transform="translate(2,2)">
- <path d="M42.8,74.3c0,4.3,0,5.9,11.8,5.9l4.1,0l0,3.8c-4.5-0.4-16.1-0.4-21.2-0.3c-5.1,0-16.6,0-21,0.4l0-3.8l4.1,0
- c11.8,0,11.8-1.7,11.8-5.9l0-6.9C13.9,65.6,0,54.6,0,42c0-12.2,13.3-23.5,32.4-25.4l0-6.9c0-4.3,0-5.9-11.8-5.9l-4.1,0l0-3.8
- c4.5,0.4,16.1,0.4,21.2,0.3c5.1,0,16.6,0,21-0.4l0,3.8l-4.1,0c-11.8,0-11.8,1.7-11.8,5.9l0,6.9C61.6,18.1,75.8,29.2,75.8,42
- c0,12.4-13.8,23.9-33.1,25.4L42.8,74.3z M32.4,19.4c-18.7,2.5-19.9,16.2-19.9,22.6c0,7.6,2.3,20.2,20,22.5L32.4,19.4z M42.7,64.7
- c18.8-2.2,20.7-15.4,20.6-22.8c0-9.3-3.5-20.6-20.7-22.6L42.7,64.7z"/>
- </g>
- <g fill="#0000CC">
- <path id="xyz321" d="M42.8,74.3c0,4.3,0,5.9,11.8,5.9l4.1,0l0,3.8c-4.5-0.4-16.1-0.4-21.2-0.3c-5.1,0-16.6,0-21,0.4l0-3.8l4.1,0
- c11.8,0,11.8-1.7,11.8-5.9l0-6.9C13.9,65.6,0,54.6,0,42c0-12.2,13.3-23.5,32.4-25.4l0-6.9c0-4.3,0-5.9-11.8-5.9l-4.1,0l0-3.8
- c4.5,0.4,16.1,0.4,21.2,0.3c5.1,0,16.6,0,21-0.4l0,3.8l-4.1,0c-11.8,0-11.8,1.7-11.8,5.9l0,6.9C61.6,18.1,75.8,29.2,75.8,42
- c0,12.4-13.8,23.9-33.1,25.4L42.8,74.3z M32.4,19.4c-18.7,2.5-19.9,16.2-19.9,22.6c0,7.6,2.3,20.2,20,22.5L32.4,19.4z M42.7,64.7
- c18.8-2.2,20.7-15.4,20.6-22.8c0-9.3-3.5-20.6-20.7-22.6L42.7,64.7z"/>
- </g>
- </svg>
- </g>
-
- <g id="edit_foreign">
- <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="34 38 170 170" overflow="hidden">
- <g fill="#000088">
- <path d="M30.1,63.9v-4.3l30.2-14.9V50L36.5,61.7l23.8,11.7v5.3L30.1,63.9z"/>
- <path d="M106.1,79.7v-1.1c4.2-0.5,4.8-1.1,4.8-5.2V58.2c0-6-1.3-7.9-5.4-7.9c-3.3,0-5.7,1.3-7.8,4.4v18.1
- c0,4.5,1.1,5.7,5.2,5.8v1.1H86.8v-1.1c4.1-0.3,4.9-1.1,4.9-5.1V57.9c0-5-1.6-7.6-4.8-7.6c-2.5,0-5.6,1.2-7.4,2.9
- c-0.5,0.5-1.1,1.4-1.1,1.4v20.3c0,2.8,1.1,3.6,4.9,3.7v1.1h-16v-1.1c4-0.1,5-1.2,5-5V55.4c0-3.5-0.6-4.6-2.5-4.6
- c-0.8,0-1.4,0.1-2.3,0.3v-1.2c4-1.1,6.4-1.9,10.1-3.2l0.5,0.1v5.4c6-4.5,8-5.5,11.2-5.5c3.9,0,6.3,1.9,7.6,6c3.9-4.2,7.6-6,11.7-6
- c5.5,0,8.4,4.3,8.4,12.8v14.8c0,2.8,0.9,4.1,3.1,4.2l1.9,0.1v1.1H106.1z"/>
- <path d="M147.3,80.5c-3,0-4.2-1.4-4.6-5.3c-4.4,3.7-7.3,5.3-10.5,5.3c-4.5,0-7.6-3.2-7.6-7.7c0-2.4,1-4.8,2.6-6.3
- c3.1-2.7,4.3-3.3,15.4-7.8v-4.4c0-3.9-1.9-6-5.5-6c-2.9,0-5.2,1.6-5.2,3.5c0,0.5,0.1,1.1,0.2,1.7c0.1,0.5,0.1,0.9,0.1,1.2
- c0,1.6-1.5,3-3.2,3s-3.1-1.4-3.1-3.1c0-1.8,1.2-3.9,3-5.4c2-1.7,5.5-2.7,9.1-2.7c4.4,0,7.5,1.4,9,4.2c1,1.7,1.4,3.7,1.4,7.3v14
- c0,3.2,0.5,4.2,2.2,4.2c1.1,0,1.9-0.4,3.2-1.4v1.9C151.3,79.6,149.8,80.5,147.3,80.5z M142.6,60.5c-8.7,3.2-11.7,5.8-11.7,10v0.3
- c0,3.1,2,5.5,4.5,5.5c1.5,0,3.5-0.6,5.3-1.6c1.5-0.9,1.9-1.6,1.9-3.8V60.5z"/>
- <path d="M165.3,80.5c-4.2,0-6.3-3.1-6.3-9.1V49.7h-3.8c-0.2-0.1-0.3-0.3-0.3-0.5c0-0.4,0.4-0.9,1.2-1.4
- c1.9-1.1,4.3-3.7,7-7.7c0.5-0.6,1-1.3,1.4-2c0.4,0,0.5,0.2,0.5,0.9v8.4h7.3v2.3h-7.3v20.6c0,4.6,1.1,6.5,3.7,6.5
- c1.6,0,2.7-0.6,4.3-2.5l0.9,0.8C171.8,78.7,169,80.5,165.3,80.5z"/>
- <path d="M193.8,79.7v-1.1c4.1-0.4,4.9-1.3,4.9-6.2V58.1c0-5-1.8-7.6-5.4-7.6c-2.8,0-5,1.2-8,4.5v17.4
- c0,5,0.7,5.8,4.9,6.3v1.1h-15.6v-1.1c4.2-0.6,4.6-1.2,4.6-6.3V38.5c0-3.1-0.6-3.7-3.7-3.7c-0.4,0-0.6,0-0.9,0.1v-1.2l1.9-0.6
- c4-1.2,5.8-1.7,8.3-2.6l0.4,0.2v21.9c3.3-4.3,6.3-6,10.6-6c5.9,0,8.9,3.9,8.9,11.5v14.3c0,5,0.4,5.5,4.3,6.3v1.1h-15.2V79.7z"/>
- <path d="M59.1,116.1v-4.3l30.2-14.9v5.3l-23.8,11.7l23.8,11.7v5.3L59.1,116.1z"/>
- <path d="M135.1,131.9v-1.1c4.2-0.5,4.8-1.1,4.8-5.2v-15.1c0-6-1.3-7.9-5.4-7.9c-3.3,0-5.7,1.3-7.8,4.4v18.1
- c0,4.5,1.1,5.7,5.2,5.8v1.1h-16.1v-1.1c4.1-0.3,4.9-1.1,4.9-5.1v-15.7c0-5-1.6-7.6-4.8-7.6c-2.5,0-5.6,1.2-7.4,2.9
- c-0.5,0.5-1.1,1.4-1.1,1.4v20.3c0,2.8,1.1,3.6,4.9,3.7v1.1h-16v-1.1c4-0.1,5-1.2,5-5v-18.2c0-3.5-0.6-4.6-2.5-4.6
- c-0.8,0-1.4,0.1-2.3,0.3v-1.2c4-1.1,6.4-1.9,10.1-3.2l0.5,0.1v5.4c6-4.5,8-5.5,11.2-5.5c3.9,0,6.3,1.9,7.6,6c3.9-4.2,7.6-6,11.7-6
- c5.5,0,8.4,4.3,8.4,12.8v14.8c0,2.8,0.9,4.1,3.1,4.2l1.9,0.1v1.1H135.1z"/>
- <path d="M152.1,131.9v-1.1c5-0.3,5.7-1.1,5.7-6.3v-16.6c0-3.2-0.6-4.3-2.4-4.3c-0.6,0-1.6,0.1-2.4,0.2l-0.6,0.1v-1.1
- l11.2-4L164,99v25.6c0,5.2,0.6,5.9,5.3,6.3v1.1L152.1,131.9L152.1,131.9z M160.8,93.1c-2,0-3.7-1.6-3.7-3.7c0-2,1.7-3.7,3.7-3.7
- c2.1,0,3.7,1.7,3.7,3.7C164.6,91.6,163,93.1,160.8,93.1z"/>
- <path d="M175.8,131v-5.3l23.7-11.8l-23.7-11.7v-5.3l30.1,14.9v4.3L175.8,131z"/>
- <path d="M31.1,169.5v-4.3l30.2-14.9v5.3l-23.8,11.7L61.3,179v5.3L31.1,169.5z"/>
- <path d="M71.3,186.4h-4.9l16.5-49.7h4.8L71.3,186.4z"/>
- <path d="M127.1,185.3v-1.1c4.2-0.5,4.8-1.1,4.8-5.2v-15.2c0-6-1.3-7.9-5.4-7.9c-3.3,0-5.7,1.3-7.8,4.4v18.1
- c0,4.5,1.1,5.7,5.2,5.8v1.1h-16.1v-1.1c4.1-0.3,4.9-1.1,4.9-5.1v-15.6c0-5-1.6-7.6-4.8-7.6c-2.5,0-5.6,1.2-7.4,2.9
- c-0.5,0.5-1.1,1.4-1.1,1.4v20.3c0,2.8,1.1,3.6,4.9,3.7v1.1h-16v-1.1c4-0.1,5-1.2,5-5V161c0-3.5-0.6-4.6-2.5-4.6
- c-0.8,0-1.4,0.1-2.3,0.3v-1.2c4-1.1,6.4-1.9,10.1-3.2l0.5,0.1v5.4c6-4.5,8-5.5,11.2-5.5c3.9,0,6.3,1.9,7.6,6c3.9-4.2,7.6-6,11.7-6
- c5.5,0,8.4,4.3,8.4,12.8v14.8c0,2.8,0.9,4.1,3.1,4.2l1.9,0.1v1.1H127.1L127.1,185.3z"/>
- <path d="M168.3,186.1c-3,0-4.2-1.4-4.6-5.3c-4.4,3.7-7.3,5.3-10.5,5.3c-4.5,0-7.6-3.2-7.6-7.7c0-2.4,1-4.8,2.6-6.3
- c3.1-2.7,4.3-3.3,15.4-7.8v-4.4c0-3.9-1.9-6-5.5-6c-2.9,0-5.2,1.6-5.2,3.5c0,0.5,0.1,1.1,0.2,1.7c0.1,0.5,0.1,0.9,0.1,1.2
- c0,1.6-1.5,3-3.2,3s-3.1-1.4-3.1-3.1c0-1.8,1.2-3.9,3-5.4c2-1.7,5.5-2.7,9.1-2.7c4.4,0,7.5,1.4,9,4.2c1,1.7,1.4,3.7,1.4,7.3v14
- c0,3.2,0.5,4.2,2.2,4.2c1.1,0,1.9-0.4,3.2-1.4v1.9C172.3,185.2,170.8,186.1,168.3,186.1z M163.8,166.1c-8.7,3.2-11.7,5.8-11.7,10
- v0.3c0,3.1,2,5.5,4.5,5.5c1.5,0,3.5-0.6,5.3-1.6c1.5-0.9,1.9-1.6,1.9-3.8V166.1z"/>
- <path d="M186.3,186.1c-4.2,0-6.3-3.1-6.3-9.1v-21.7h-3.8c-0.2-0.1-0.3-0.3-0.3-0.5c0-0.4,0.4-0.9,1.2-1.4
- c1.9-1.1,4.3-3.7,7-7.7c0.5-0.6,1-1.3,1.4-2c0.4,0,0.5,0.2,0.5,0.9v8.4h7.3v2.3h-7.3v20.6c0,4.6,1.1,6.5,3.7,6.5
- c1.6,0,2.7-0.6,4.3-2.5l0.9,0.8C192.8,184.3,190,186.1,186.3,186.1z"/>
- <path d="M209.1,185.3h-13.4v-1.1c4.2-0.6,4.6-1.2,4.6-6.3V144c0-3.1-0.6-3.7-3.7-3.7c-0.4,0-0.6,0-0.9,0.1v-1.2
- l1.9-0.6c4-1.2,5.8-1.7,8.3-2.6l0.4,0.2v21.9c0.9-1.2,1.9-2.2,2.8-3.1"/>
- <path d="M209.1,157.9c-0.8,0.7-1.7,1.5-2.7,2.6v17.4c0,4,0.4,5.3,2.7,5.9"/>
- </g>
- <g>
- <polyline opacity="0.2" fill="#231F20" points="209.1,76.4 118.7,186.5 139.1,186.4 209.1,121 209.1,76.4 "/>
- <polyline opacity="0.4" fill="#231F20" points="209.1,76.2 118.5,186.5 129.7,186.4 200.2,120.3 209.1,100.8 209.1,76.4 "/>
- <path fill="#FFD761" d="M121.6,88.7l0.8,87.5l62.3-56.7c0,0-15.3-25.8-24.8-30C151.1,85.6,121.6,88.7,121.6,88.7z"/>
- <path fill="#FEA01E" d="M209.1,19.5h-54l-33.5,69.2c0,0,29.7-3.4,38.3,0.8c8.9,4.4,25,30.8,25,30.8l24.2-50V19.5z"/>
- <path d="M120.4,153.7l-0.6,25l23.8-16.9c0,0-8-7-11.2-8.1C129.4,152.8,120.4,153.7,120.4,153.7z"/>
- <polyline fill="none" stroke="#231F20" stroke-width="5" points="153.9,19.5 121.6,88.7 120.7,181.2 186.6,120.3 209.1,70.3 "/>
- </g>
- </svg>
- </g>
-
- <g id="svg_eof"/>
-</svg> \ No newline at end of file
diff --git a/files_svgedit/extensions/helloworld-icon.xml b/files_svgedit/extensions/helloworld-icon.xml
deleted file mode 100644
index 0b1ba1a04..000000000
--- a/files_svgedit/extensions/helloworld-icon.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg">
-<!--
- Sample icons file. This file looks like an SVG file with groups as its
- children. Each group element has an ID that must match the ID of the button given
- in the extension. The SVG inside the group makes up the actual icon, and
- needs use a viewBox instead of width/height for it to scale properly.
-
- Multiple icons can be included, each within their own group.
--->
- <g id="hello_world">
- <svg width="102" height="102" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
- <!-- Created with SVG-edit - http://svg-edit.googlecode.com/ -->
- <g>
- <title>Layer 1</title>
- <rect ry="30" rx="30" x="2.5" y="2.5" width="97" height="97" id="svg_3" fill="#008000" stroke="#000000" stroke-width="5"/>
- <text x="52.668" y="42.5" id="svg_1" fill="#ffffff" stroke="#000000" stroke-width="0" font-size="24" font-family="Monospace" text-anchor="middle" xml:space="preserve">Hello</text>
- <text x="52.668" y="71.5" fill="#ffffff" stroke="#000000" stroke-width="0" font-size="24" font-family="Monospace" text-anchor="middle" xml:space="preserve" id="svg_2">World!</text>
- </g>
- </svg>
- </g>
-</svg> \ No newline at end of file
diff --git a/files_svgedit/extensions/markers-icons.xml b/files_svgedit/extensions/markers-icons.xml
deleted file mode 100644
index 6d122b051..000000000
--- a/files_svgedit/extensions/markers-icons.xml
+++ /dev/null
@@ -1,115 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg">
- <!-- Created with SVG-edit - http://svg-edit.googlecode.com/ -->
- <g id="nomarker">
- <svg viewBox="-60 -60 120 120" xmlns="http://www.w3.org/2000/svg">
- <path stroke-width="10" stroke="#ff7f00" fill="#ff7f00" d="m-50,0l100,0"/>
- </svg>
- </g>
- <g id="leftarrow">
- <svg viewBox="-60 -60 120 120" xmlns="http://www.w3.org/2000/svg">
- <path stroke-width="10" stroke="#ff7f00" fill="#ff7f00" d="m-50,0l100,40l-30,-40l30,-40z"/>
- </svg>
- </g>
- <g id="rightarrow">
- <svg viewBox="-60 -60 120 120" xmlns="http://www.w3.org/2000/svg">
- <path stroke-width="10" stroke="#ff7f00" fill="#ff7f00" d="m50,0l-100,40l30,-40l-30,-40z"/>
- </svg>
- </g>
- <g id="leftarrow_o">
- <svg viewBox="-60 -60 120 120" xmlns="http://www.w3.org/2000/svg">
- <path stroke-width="10" stroke="#ff7f00" fill="none" d="m-50,0l100,40l-30,-40l30,-40z"/>
- </svg>
- </g>
- <g id="rightarrow_o">
- <svg viewBox="-60 -60 120 120" xmlns="http://www.w3.org/2000/svg">
- <path stroke-width="10" stroke="#ff7f00" fill="none" d="m50,0l-100,40l30,-40l-30,-40z"/>
- </svg>
- </g>
- <g id="forwardslash">
- <svg viewBox="-60 -60 120 120" xmlns="http://www.w3.org/2000/svg">
- <path stroke-width="10" stroke="#ff7f00" fill="none" d="m-20,50l40,-100"/>
- </svg>
- </g>
- <g id="reverseslash">
- <svg viewBox="-60 -60 120 120" xmlns="http://www.w3.org/2000/svg">
- <path stroke-width="10" stroke="#ff7f00" fill="none" d="m-20,-50l40,100"/>
- </svg>
- </g>
- <g id="verticalslash">
- <svg viewBox="-60 -60 120 120" xmlns="http://www.w3.org/2000/svg">
- <path stroke-width="10" stroke="#ff7f00" fill="none" d="m0,-50l0,100"/>
- </svg>
- </g>
- <g id="mcircle">
- <svg viewBox="-60 -60 120 120" xmlns="http://www.w3.org/2000/svg">
- <circle stroke-width="10" stroke="#ff7f00" fill="#ff7f00" cy="0" cx="0" r="30"/>
- </svg>
- </g>
- <g id="mcircle_o">
- <svg viewBox="-60 -60 120 120" xmlns="http://www.w3.org/2000/svg">
- <circle stroke-width="10" stroke="#ff7f00" fill="none" cy="0" cx="0" r="30"/>
- </svg>
- </g>
- <g id="xmark">
- <svg viewBox="-60 -60 120 120" xmlns="http://www.w3.org/2000/svg">
- <path stroke-width="10" stroke="#ff7f00" fill="#ff7f00" d="m-30,30l60,-60m0,60l-60,-60"/>
- </svg>
- </g>
- <g id="box">
- <svg viewBox="-60 -60 120 120" xmlns="http://www.w3.org/2000/svg">
- <path stroke-width="10" stroke="#ff7f00" fill="#ff7f00" d="m-30,-30l0,60l60,0l0,-60z"/>
- </svg>
- </g>
- <g id="star">
- <svg viewBox="-60 -60 120 120" xmlns="http://www.w3.org/2000/svg">
- <path stroke-width="10" stroke="#ff7f00" fill="#ff7f00" d="m-40,-20l80,0l-70,60l30,-80l30,80z"/>
- </svg>
- </g>
- <g id="box_o">
- <svg viewBox="-60 -60 120 120" xmlns="http://www.w3.org/2000/svg">
- <path stroke-width="10" stroke="#ff7f00" fill="none" d="m-30,-30l0,60l60,0l0,-60z"/>
- </svg>
- </g>
- <g id="star_o">
- <svg viewBox="-60 -60 120 120" xmlns="http://www.w3.org/2000/svg">
- <path stroke-width="10" stroke="#ff7f00" fill="none" d="m-40,-20l80,0l-70,60l30,-80l30,80z"/>
- </svg>
- </g>
- <g id="triangle_o">
- <svg viewBox="-60 -60 120 120" xmlns="http://www.w3.org/2000/svg">
- <path stroke-width="10" stroke="#ff7f00" fill="none" d="M-30,30 L0,-30 L30,30 Z"/>
- </svg>
- </g>
- <g id="triangle">
- <svg viewBox="-60 -60 120 120" xmlns="http://www.w3.org/2000/svg">
- <path stroke-width="10" stroke="#ff7f00" fill="#ff7f00" d="M-30,30 L0,-30 L30,30 Z"/>
- </svg>
- </g>
- <g id="textmarker">
- <svg viewBox="-60 -60 120 120" xmlns="http://www.w3.org/2000/svg">
- <text xml:space="preserve" text-anchor="middle" font-family="serif" font-size="120" y="40" x="0" stroke-width="0" stroke="#ff7f00" fill="#ff7f00">T</text>
- </svg>
- </g>
- <g id="mkr_markers_off">
- <svg viewBox="-60 -60 120 120" xmlns="http://www.w3.org/2000/svg">
- <line y2="0" x2="50" y1="0" x1="-50" stroke-width="5" stroke="#ff7f00" fill="none"/>
- </svg>
- </g>
- <g id="mkr_markers_dimension">
- <svg viewBox="-60 -60 120 120" xmlns="http://www.w3.org/2000/svg">
- <line y2="0" x2="40" y1="0" x1="20" stroke-width="5" stroke="#ff7f00" fill="none"/>
- <line y2="0" x2="-40" y1="0" x1="-20" stroke-width="5" stroke="#ff7f00" fill="none"/>
- <text text-anchor="middle" font-family="serif" font-size="80" y="20" x="0" stroke-width="0" stroke="#ff7f00" fill="#ff7f00">T</text>
- <path stroke-width="5" stroke="#ff7f00" fill="#ff7f00" d="M-50,0 L-30,-15 L-30,15 Z"/>
- <path stroke-width="5" stroke="#ff7f00" fill="#ff7f00" d="M50,0 L30,-15 L30,15 Z"/>
- </svg>
- </g>
- <g id="mkr_markers_label">
- <svg viewBox="-60 -60 120 120" xmlns="http://www.w3.org/2000/svg">
- <line y2="0" x2="40" y1="0" x1="-20" stroke-width="5" stroke="#ff7f00" fill="none"/>
- <text text-anchor="middle" font-family="serif" font-size="80" y="20" x="-40" stroke-width="0" stroke="#ff7f00" fill="#ff7f00">T</text>
- <path stroke-width="5" stroke="#ff7f00" fill="#ff7f00" d="M50,0 L30,-15 L30,15 Z"/>
- </svg>
- </g>
- <g id="svg_eof"/>
-</svg>
diff --git a/files_svgedit/images/README.txt b/files_svgedit/images/README.txt
deleted file mode 100644
index 9224bc1cf..000000000
--- a/files_svgedit/images/README.txt
+++ /dev/null
@@ -1,61 +0,0 @@
-filename origin
-
-align-bottom.png http://tango.freedesktop.org/static/cvs/tango-art-libre/22x22/actions/align-vertical-bottom.png
-align-bottom.svg http://tango.freedesktop.org/static/cvs/tango-art-libre/22x22/actions/align-vertical-bottom.svg
-align-center.png http://tango.freedesktop.org/static/cvs/tango-art-libre/22x22/actions/align-horizontal-center.png
-align-center.svg http://tango.freedesktop.org/static/cvs/tango-art-libre/22x22/actions/align-horizontal-center.svg
-align-left.png http://tango.freedesktop.org/static/cvs/tango-art-libre/22x22/actions/align-horizontal-left.png
-align-left.svg http://tango.freedesktop.org/static/cvs/tango-art-libre/22x22/actions/align-horizontal-left.svg
-align-middle.png http://tango.freedesktop.org/static/cvs/tango-art-libre/22x22/actions/align-vertical-center.png
-align-middle.svg http://tango.freedesktop.org/static/cvs/tango-art-libre/22x22/actions/align-vertical-center.svg
-align-right.png http://tango.freedesktop.org/static/cvs/tango-art-libre/22x22/actions/align-horizontal-right.png
-align-right.svg http://tango.freedesktop.org/static/cvs/tango-art-libre/22x22/actions/align-horizontal-right.svg
-align-top.png http://tango.freedesktop.org/static/cvs/tango-art-libre/22x22/actions/align-vertical-top.png
-align-top.svg http://tango.freedesktop.org/static/cvs/tango-art-libre/22x22/actions/align-vertical-top.svg
-bold.png
-cancel.png
-circle.png
-clear.png
-clone.png
-copy.png
-cut.png
-delete.png
-document-properties.png
-dropdown.gif
-ellipse.png
-eye.png
-flyouth.png
-flyup.gif
-freehand-circle.png
-freehand-square.png
-go-down.png
-go-up.png
-image.png
-italic.png
-line.png
-logo.png
-logo.svg
-move_bottom.png
-move_top.png
-none.png
-open.png
-paste.png
-path.png
-polygon.png http://tango.freedesktop.org/static/cvs/tango-art-libre/22x22/tools/draw-polygon.png
-polygon.svg http://tango.freedesktop.org/static/cvs/tango-art-libre/22x22/tools/draw-polygon.svg
-rect.png
-redo.png
-rotate.png
-save.png
-select.png
-sep.png
-shape_group.png
-shape_ungroup.png
-source.png
-square.png
-text.png http://tango.freedesktop.org/static/cvs/tango-art-libre/22x22/tools/draw-text.png
-text.svg http://tango.freedesktop.org/static/cvs/tango-art-libre/22x22/tools/draw-text.svg
-undo.png
-view-refresh.png
-wave.png
-zoom.png http://tango.freedesktop.org/static/cvs/tango-art-libre/22x22/tools/page-magnifier.png
diff --git a/files_svgedit/images/align-bottom.png b/files_svgedit/images/align-bottom.png
deleted file mode 100644
index be5dfe54d..000000000
--- a/files_svgedit/images/align-bottom.png
+++ /dev/null
Binary files differ
diff --git a/files_svgedit/images/align-bottom.svg b/files_svgedit/images/align-bottom.svg
deleted file mode 100644
index 36f8efe2c..000000000
--- a/files_svgedit/images/align-bottom.svg
+++ /dev/null
@@ -1,277 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://web.resource.org/cc/"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="22"
- height="22"
- id="svg5741"
- sodipodi:version="0.32"
- inkscape:version="0.44+devel"
- version="1.0"
- sodipodi:docbase="/home/andreas/project/inkscape/22x22/actions"
- sodipodi:docname="align-bottom-vertical.svg"
- inkscape:output_extension="org.inkscape.output.svg.inkscape"
- inkscape:export-filename="/home/andreas/project/inkscape/22x22/actions/align-bottom-vertical.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90"
- sodipodi:modified="true">
- <defs
- id="defs5743">
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2968"
- id="linearGradient6938"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(-1,0,0,-1,395.9999,981)"
- x1="187.60938"
- y1="489.35938"
- x2="186.93732"
- y2="489.35938" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2974"
- id="linearGradient6936"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(-1,0,0,-1,395.9999,981)"
- x1="187.81554"
- y1="489.54688"
- x2="187.1716"
- y2="489.54688" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2986"
- id="linearGradient6934"
- gradientUnits="userSpaceOnUse"
- x1="187.60938"
- y1="489.35938"
- x2="186.93732"
- y2="489.35938" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2980"
- id="linearGradient6932"
- gradientUnits="userSpaceOnUse"
- x1="187.81554"
- y1="489.54688"
- x2="187.1716"
- y2="489.54688" />
- <linearGradient
- id="linearGradient2968"
- inkscape:collect="always">
- <stop
- id="stop2970"
- offset="0"
- style="stop-color:#ce5c00;stop-opacity:1" />
- <stop
- id="stop2972"
- offset="1"
- style="stop-color:#ce5c00;stop-opacity:0" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2968"
- id="linearGradient6930"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(-1,0,0,-1,395.9999,981)"
- x1="187.60938"
- y1="489.35938"
- x2="186.93732"
- y2="489.35938" />
- <linearGradient
- id="linearGradient2974"
- inkscape:collect="always">
- <stop
- id="stop2976"
- offset="0"
- style="stop-color:#fcaf3e;stop-opacity:1" />
- <stop
- id="stop2978"
- offset="1"
- style="stop-color:#fcaf3e;stop-opacity:0" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2974"
- id="linearGradient6928"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(-1,0,0,-1,395.9999,981)"
- x1="187.81554"
- y1="489.54688"
- x2="187.1716"
- y2="489.54688" />
- <linearGradient
- id="linearGradient2986"
- inkscape:collect="always">
- <stop
- id="stop2988"
- offset="0"
- style="stop-color:#ce5c00;stop-opacity:1" />
- <stop
- id="stop2990"
- offset="1"
- style="stop-color:#ce5c00;stop-opacity:0" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2986"
- id="linearGradient6926"
- gradientUnits="userSpaceOnUse"
- x1="187.60938"
- y1="489.35938"
- x2="186.93732"
- y2="489.35938" />
- <linearGradient
- id="linearGradient2980"
- inkscape:collect="always">
- <stop
- id="stop2982"
- offset="0"
- style="stop-color:#fcaf3e;stop-opacity:1" />
- <stop
- id="stop2984"
- offset="1"
- style="stop-color:#fcaf3e;stop-opacity:0" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2980"
- id="linearGradient6924"
- gradientUnits="userSpaceOnUse"
- x1="187.81554"
- y1="489.54688"
- x2="187.1716"
- y2="489.54688" />
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="22.197802"
- inkscape:cx="8"
- inkscape:cy="9.8019802"
- inkscape:current-layer="g6828"
- showgrid="false"
- inkscape:grid-bbox="true"
- inkscape:document-units="px"
- width="22px"
- height="22px"
- inkscape:window-width="1078"
- inkscape:window-height="786"
- inkscape:window-x="243"
- inkscape:window-y="71" />
- <metadata
- id="metadata5746">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- id="layer1"
- inkscape:label="Layer 1"
- inkscape:groupmode="layer">
- <g
- style="display:inline"
- id="g6828"
- transform="translate(30.00011,90.000366)"
- inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90">
- <g
- style="display:inline"
- id="g6838"
- transform="translate(-30.00009,-1.0002798)"
- inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90">
- <rect
- style="fill:#d3d7cf;fill-opacity:1;stroke:#888a85;stroke-width:0.99999994;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:3;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- id="rect3052"
- width="12"
- height="7"
- x="69.500122"
- y="12.5"
- transform="matrix(0,-1,1,0,0,0)"
- inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <rect
- style="fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:0.99999994;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- id="rect3054"
- width="10"
- height="5.0000305"
- x="70.500122"
- y="13.5"
- transform="matrix(0,-1,1,0,0,0)"
- rx="0"
- ry="0"
- inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <g
- id="g3056"
- transform="translate(-127,-559)"
- inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90">
- <rect
- transform="matrix(0,-1,1,0,0,0)"
- y="129.49626"
- x="-489.49979"
- height="7.0035982"
- width="17.999748"
- id="rect3058"
- style="color:#000000;fill:#d3d7cf;fill-opacity:1;fill-rule:evenodd;stroke:#888a85;stroke-width:1.00024867;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:0;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline" />
- <rect
- transform="matrix(0,-1,1,0,0,0)"
- y="130.50006"
- x="-488.50009"
- height="4.9998937"
- width="15.999757"
- id="rect3060"
- style="color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.00024891;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:2;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
- rx="0"
- ry="0" />
- </g>
- <g
- id="g3294"
- transform="translate(-187,-560)"
- inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90">
- <rect
- y="489.5"
- x="196.49989"
- height="1.9999999"
- width="3.0000916"
- id="rect3296"
- style="fill:#fcaf3e;fill-opacity:1;stroke:#ce5c00;stroke-width:0.99999976;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
- <path
- style="fill:url(#linearGradient6932);fill-opacity:1;stroke:url(#linearGradient6934);stroke-width:0.99999976;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-dashoffset:0;stroke-opacity:1"
- d="M 197.49998,491.5 L 186.49989,491.5 L 186.49989,489.5 L 197.49998,489.5"
- id="path3298"
- sodipodi:nodetypes="cccc" />
- <path
- style="fill:url(#linearGradient6936);fill-opacity:1;stroke:url(#linearGradient6938);stroke-width:0.99999976;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-dashoffset:0;stroke-opacity:1"
- d="M 198.49989,489.5 L 209.49998,489.5 L 209.49998,491.5 L 198.49989,491.5"
- id="path3300"
- sodipodi:nodetypes="cccc" />
- </g>
- </g>
- </g>
- </g>
-</svg>
diff --git a/files_svgedit/images/align-center.png b/files_svgedit/images/align-center.png
deleted file mode 100644
index d1f0c5bcb..000000000
--- a/files_svgedit/images/align-center.png
+++ /dev/null
Binary files differ
diff --git a/files_svgedit/images/align-center.svg b/files_svgedit/images/align-center.svg
deleted file mode 100644
index ddf49fcec..000000000
--- a/files_svgedit/images/align-center.svg
+++ /dev/null
@@ -1,252 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://web.resource.org/cc/"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="22"
- height="22"
- id="svg10958"
- sodipodi:version="0.32"
- inkscape:version="0.44+devel"
- version="1.0"
- sodipodi:docbase="/home/andreas/project/inkscape/22x22/actions"
- sodipodi:docname="align-horisontal-center.svg"
- inkscape:output_extension="org.inkscape.output.svg.inkscape"
- inkscape:export-filename="/home/andreas/project/inkscape/22x22/actions/align-horisontal-center.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90"
- sodipodi:modified="true">
- <defs
- id="defs10960">
- <linearGradient
- id="linearGradient2968"
- inkscape:collect="always">
- <stop
- id="stop2970"
- offset="0"
- style="stop-color:#ce5c00;stop-opacity:1" />
- <stop
- id="stop2972"
- offset="1"
- style="stop-color:#ce5c00;stop-opacity:0" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2968"
- id="linearGradient4708"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-395.9999,-981)"
- x1="187.60938"
- y1="489.35938"
- x2="186.93732"
- y2="489.35938" />
- <linearGradient
- id="linearGradient2974"
- inkscape:collect="always">
- <stop
- id="stop2976"
- offset="0"
- style="stop-color:#fcaf3e;stop-opacity:1" />
- <stop
- id="stop2978"
- offset="1"
- style="stop-color:#fcaf3e;stop-opacity:0" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2974"
- id="linearGradient4706"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-395.9999,-981)"
- x1="187.81554"
- y1="489.54688"
- x2="187.1716"
- y2="489.54688" />
- <linearGradient
- id="linearGradient2986"
- inkscape:collect="always">
- <stop
- id="stop2988"
- offset="0"
- style="stop-color:#ce5c00;stop-opacity:1" />
- <stop
- id="stop2990"
- offset="1"
- style="stop-color:#ce5c00;stop-opacity:0" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2986"
- id="linearGradient4704"
- gradientUnits="userSpaceOnUse"
- x1="187.60938"
- y1="489.35938"
- x2="186.93732"
- y2="489.35938" />
- <linearGradient
- id="linearGradient2980"
- inkscape:collect="always">
- <stop
- id="stop2982"
- offset="0"
- style="stop-color:#fcaf3e;stop-opacity:1" />
- <stop
- id="stop2984"
- offset="1"
- style="stop-color:#fcaf3e;stop-opacity:0" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2980"
- id="linearGradient4702"
- gradientUnits="userSpaceOnUse"
- x1="187.81554"
- y1="489.54688"
- x2="187.1716"
- y2="489.54688" />
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="11.197802"
- inkscape:cx="16"
- inkscape:cy="11.460711"
- inkscape:current-layer="layer1"
- showgrid="false"
- inkscape:grid-bbox="true"
- inkscape:document-units="px"
- width="22px"
- height="22px"
- inkscape:window-width="797"
- inkscape:window-height="628"
- inkscape:window-x="0"
- inkscape:window-y="47" />
- <metadata
- id="metadata10963">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- id="layer1"
- inkscape:label="Layer 1"
- inkscape:groupmode="layer">
- <g
- style="display:inline"
- id="g4044"
- transform="matrix(0,-1,1,0,-59.999911,-168.00002)"
- inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90">
- <rect
- style="fill:#d3d7cf;fill-opacity:1;stroke:#888a85;stroke-width:0.99999994;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:3;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
- id="rect3851"
- width="12"
- height="7"
- x="-76.499878"
- y="-177.5"
- transform="matrix(0,-1,1,0,0,0)"
- inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <g
- transform="translate(-317,-410)"
- id="g3853"
- inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90"
- style="display:inline">
- <rect
- transform="matrix(0,-1,1,0,0,0)"
- y="129.49626"
- x="-489.49979"
- height="7.0035982"
- width="17.999748"
- id="rect3855"
- style="color:#000000;fill:#d3d7cf;fill-opacity:1;fill-rule:evenodd;stroke:#888a85;stroke-width:1.00024867;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:0;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline" />
- <rect
- transform="matrix(0,-1,1,0,0,0)"
- y="130.50006"
- x="-488.50009"
- height="4.9998937"
- width="15.999757"
- id="rect3857"
- style="color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.00024891;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:2;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
- rx="0"
- ry="0" />
- </g>
- <rect
- style="fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:0.99999994;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
- id="rect3859"
- width="10"
- height="5.0000305"
- x="-75.499878"
- y="-176.5"
- transform="matrix(0,-1,1,0,0,0)"
- rx="0"
- ry="0"
- inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <g
- id="g3861"
- transform="translate(-377,-420)"
- inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90"
- style="display:inline">
- <rect
- y="489.5"
- x="186.49989"
- height="1.9999999"
- width="3.0000916"
- id="rect3863"
- style="fill:url(#linearGradient4702);fill-opacity:1;stroke:url(#linearGradient4704);stroke-width:0.99999976;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
- <rect
- y="489.5"
- x="191.49989"
- height="1.9999999"
- width="3.0000916"
- id="rect3865"
- style="fill:#fcaf3e;fill-opacity:1;stroke:#ce5c00;stroke-width:0.99999976;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
- <rect
- y="489.5"
- x="196.49989"
- height="1.9999999"
- width="3.0000916"
- id="rect3867"
- style="fill:#fcaf3e;fill-opacity:1;stroke:#ce5c00;stroke-width:0.99999976;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
- <rect
- y="489.5"
- x="201.49989"
- height="1.9999999"
- width="3.0000916"
- id="rect3869"
- style="fill:#fcaf3e;fill-opacity:1;stroke:#ce5c00;stroke-width:0.99999976;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
- <rect
- transform="scale(-1,-1)"
- y="-491.5"
- x="-209.49998"
- height="1.9999999"
- width="3.0000916"
- id="rect3871"
- style="fill:url(#linearGradient4706);fill-opacity:1;stroke:url(#linearGradient4708);stroke-width:0.99999976;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
- </g>
- </g>
- </g>
-</svg>
diff --git a/files_svgedit/images/align-left.png b/files_svgedit/images/align-left.png
deleted file mode 100644
index 41fa8bcc1..000000000
--- a/files_svgedit/images/align-left.png
+++ /dev/null
Binary files differ
diff --git a/files_svgedit/images/align-left.svg b/files_svgedit/images/align-left.svg
deleted file mode 100644
index b1a24a5a6..000000000
--- a/files_svgedit/images/align-left.svg
+++ /dev/null
@@ -1,235 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://web.resource.org/cc/"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="22"
- height="22"
- id="svg11272"
- sodipodi:version="0.32"
- inkscape:version="0.44+devel"
- version="1.0"
- sodipodi:docbase="/home/andreas/project/inkscape/22x22/actions"
- sodipodi:docname="align-horisontal-left.svg"
- inkscape:output_extension="org.inkscape.output.svg.inkscape"
- inkscape:export-filename="/home/andreas/project/inkscape/22x22/actions/align-horisontal-left.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90"
- sodipodi:modified="true">
- <defs
- id="defs11274">
- <linearGradient
- id="linearGradient2968"
- inkscape:collect="always">
- <stop
- id="stop2970"
- offset="0"
- style="stop-color:#ce5c00;stop-opacity:1" />
- <stop
- id="stop2972"
- offset="1"
- style="stop-color:#ce5c00;stop-opacity:0" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2968"
- id="linearGradient4716"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(-1,0,0,-1,395.9999,981)"
- x1="187.60938"
- y1="489.35938"
- x2="186.93732"
- y2="489.35938" />
- <linearGradient
- id="linearGradient2974"
- inkscape:collect="always">
- <stop
- id="stop2976"
- offset="0"
- style="stop-color:#fcaf3e;stop-opacity:1" />
- <stop
- id="stop2978"
- offset="1"
- style="stop-color:#fcaf3e;stop-opacity:0" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2974"
- id="linearGradient4714"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(-1,0,0,-1,395.9999,981)"
- x1="187.81554"
- y1="489.54688"
- x2="187.1716"
- y2="489.54688" />
- <linearGradient
- id="linearGradient2986"
- inkscape:collect="always">
- <stop
- id="stop2988"
- offset="0"
- style="stop-color:#ce5c00;stop-opacity:1" />
- <stop
- id="stop2990"
- offset="1"
- style="stop-color:#ce5c00;stop-opacity:0" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2986"
- id="linearGradient4712"
- gradientUnits="userSpaceOnUse"
- x1="187.60938"
- y1="489.35938"
- x2="186.93732"
- y2="489.35938" />
- <linearGradient
- id="linearGradient2980"
- inkscape:collect="always">
- <stop
- id="stop2982"
- offset="0"
- style="stop-color:#fcaf3e;stop-opacity:1" />
- <stop
- id="stop2984"
- offset="1"
- style="stop-color:#fcaf3e;stop-opacity:0" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2980"
- id="linearGradient4710"
- gradientUnits="userSpaceOnUse"
- x1="187.81554"
- y1="489.54688"
- x2="187.1716"
- y2="489.54688" />
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="11.197802"
- inkscape:cx="16"
- inkscape:cy="14.269093"
- inkscape:current-layer="layer1"
- showgrid="false"
- inkscape:grid-bbox="true"
- inkscape:document-units="px"
- width="22px"
- height="22px"
- inkscape:window-width="797"
- inkscape:window-height="628"
- inkscape:window-x="0"
- inkscape:window-y="47" />
- <metadata
- id="metadata11277">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- id="layer1"
- inkscape:label="Layer 1"
- inkscape:groupmode="layer">
- <g
- style="display:inline"
- id="g4065"
- transform="matrix(0,-1,1,0,8.9287758e-5,51.99998)"
- inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90">
- <g
- id="g3883"
- transform="translate(-127,-473)"
- style="fill:#d3d7cf;stroke:#888a85;display:inline"
- inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90">
- <rect
- transform="matrix(0,1,1,0,0,0)"
- y="169.5"
- x="475.50012"
- height="7"
- width="12"
- id="rect3885"
- style="fill:#d3d7cf;fill-opacity:1;stroke:#888a85;stroke-width:0.99999994;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:3;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
- <rect
- ry="0"
- rx="0"
- transform="matrix(0,1,1,0,0,0)"
- y="170.5"
- x="476.50012"
- height="5.0000305"
- width="10"
- id="rect3887"
- style="opacity:1;fill:#d3d7cf;fill-opacity:1;stroke:#ffffff;stroke-width:0.99999994;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
- </g>
- <g
- id="g3889"
- transform="translate(-97,-469)"
- inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90"
- style="display:inline">
- <rect
- transform="matrix(0,-1,1,0,0,0)"
- y="129.49626"
- x="-489.49979"
- height="7.0035982"
- width="17.999748"
- id="rect3891"
- style="color:#000000;fill:#d3d7cf;fill-opacity:1;fill-rule:evenodd;stroke:#888a85;stroke-width:1.00024867;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:0;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline" />
- <rect
- transform="matrix(0,-1,1,0,0,0)"
- y="130.50006"
- x="-488.50009"
- height="4.9998937"
- width="15.999757"
- id="rect3893"
- style="color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.00024891;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:2;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
- rx="0"
- ry="0" />
- </g>
- <g
- id="g3903"
- transform="translate(-157,-488)"
- inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90"
- style="display:inline">
- <rect
- y="489.5"
- x="196.49989"
- height="1.9999999"
- width="3.0000916"
- id="rect3905"
- style="fill:#fcaf3e;fill-opacity:1;stroke:#ce5c00;stroke-width:0.99999976;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
- <path
- style="fill:url(#linearGradient4710);fill-opacity:1;stroke:url(#linearGradient4712);stroke-width:0.99999976;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-dashoffset:0;stroke-opacity:1"
- d="M 197.49998,491.5 L 186.49989,491.5 L 186.49989,489.5 L 197.49998,489.5"
- id="path3907"
- sodipodi:nodetypes="cccc" />
- <path
- style="fill:url(#linearGradient4714);fill-opacity:1;stroke:url(#linearGradient4716);stroke-width:0.99999976;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-dashoffset:0;stroke-opacity:1"
- d="M 198.49989,489.5 L 209.49998,489.5 L 209.49998,491.5 L 198.49989,491.5"
- id="path3909"
- sodipodi:nodetypes="cccc" />
- </g>
- </g>
- </g>
-</svg>
diff --git a/files_svgedit/images/align-middle.png b/files_svgedit/images/align-middle.png
deleted file mode 100644
index f72bbb799..000000000
--- a/files_svgedit/images/align-middle.png
+++ /dev/null
Binary files differ
diff --git a/files_svgedit/images/align-middle.svg b/files_svgedit/images/align-middle.svg
deleted file mode 100644
index d2b42e6a3..000000000
--- a/files_svgedit/images/align-middle.svg
+++ /dev/null
@@ -1,250 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://web.resource.org/cc/"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="22"
- height="22"
- id="svg10625"
- sodipodi:version="0.32"
- inkscape:version="0.44+devel"
- version="1.0"
- sodipodi:docbase="/home/andreas/project/inkscape/22x22/actions"
- sodipodi:docname="align-vertical-center.svg"
- inkscape:output_extension="org.inkscape.output.svg.inkscape"
- inkscape:export-filename="/home/andreas/project/inkscape/22x22/actions/align-vertical-center.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90"
- sodipodi:modified="true">
- <defs
- id="defs10627">
- <linearGradient
- id="linearGradient2968"
- inkscape:collect="always">
- <stop
- id="stop2970"
- offset="0"
- style="stop-color:#ce5c00;stop-opacity:1" />
- <stop
- id="stop2972"
- offset="1"
- style="stop-color:#ce5c00;stop-opacity:0" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2968"
- id="linearGradient6962"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-395.9999,-981)"
- x1="187.60938"
- y1="489.35938"
- x2="186.93732"
- y2="489.35938" />
- <linearGradient
- id="linearGradient2974"
- inkscape:collect="always">
- <stop
- id="stop2976"
- offset="0"
- style="stop-color:#fcaf3e;stop-opacity:1" />
- <stop
- id="stop2978"
- offset="1"
- style="stop-color:#fcaf3e;stop-opacity:0" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2974"
- id="linearGradient6960"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-395.9999,-981)"
- x1="187.81554"
- y1="489.54688"
- x2="187.1716"
- y2="489.54688" />
- <linearGradient
- id="linearGradient2986"
- inkscape:collect="always">
- <stop
- id="stop2988"
- offset="0"
- style="stop-color:#ce5c00;stop-opacity:1" />
- <stop
- id="stop2990"
- offset="1"
- style="stop-color:#ce5c00;stop-opacity:0" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2986"
- id="linearGradient6958"
- gradientUnits="userSpaceOnUse"
- x1="187.60938"
- y1="489.35938"
- x2="186.93732"
- y2="489.35938" />
- <linearGradient
- id="linearGradient2980"
- inkscape:collect="always">
- <stop
- id="stop2982"
- offset="0"
- style="stop-color:#fcaf3e;stop-opacity:1" />
- <stop
- id="stop2984"
- offset="1"
- style="stop-color:#fcaf3e;stop-opacity:0" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2980"
- id="linearGradient6956"
- gradientUnits="userSpaceOnUse"
- x1="187.81554"
- y1="489.54688"
- x2="187.1716"
- y2="489.54688" />
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="11.197802"
- inkscape:cx="16"
- inkscape:cy="16"
- inkscape:current-layer="layer1"
- showgrid="false"
- inkscape:grid-bbox="true"
- inkscape:document-units="px"
- width="22px"
- height="22px"
- inkscape:window-width="797"
- inkscape:window-height="628"
- inkscape:window-x="0"
- inkscape:window-y="47" />
- <metadata
- id="metadata10630">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- id="layer1"
- inkscape:label="Layer 1"
- inkscape:groupmode="layer">
- <g
- style="display:inline"
- id="g6849"
- transform="translate(-29.999893,91.000089)"
- inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90">
- <rect
- style="fill:#d3d7cf;fill-opacity:1;stroke:#888a85;stroke-width:0.99999994;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:3;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- id="rect1933"
- width="12"
- height="7"
- x="73.500122"
- y="42.5"
- transform="matrix(0,-1,1,0,0,0)"
- inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <g
- transform="translate(-97,-560)"
- id="g2063"
- inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90">
- <rect
- transform="matrix(0,-1,1,0,0,0)"
- y="129.49626"
- x="-489.49979"
- height="7.0035982"
- width="17.999748"
- id="rect1935"
- style="color:#000000;fill:#d3d7cf;fill-opacity:1;fill-rule:evenodd;stroke:#888a85;stroke-width:1.00024867;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:0;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline" />
- <rect
- transform="matrix(0,-1,1,0,0,0)"
- y="130.50006"
- x="-488.50009"
- height="4.9998937"
- width="15.999757"
- id="rect1937"
- style="color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.00024891;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:2;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
- rx="0"
- ry="0" />
- </g>
- <rect
- style="fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:0.99999994;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- id="rect1939"
- width="10"
- height="5.0000305"
- x="74.500122"
- y="43.5"
- transform="matrix(0,-1,1,0,0,0)"
- rx="0"
- ry="0"
- inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <g
- id="g2992"
- transform="translate(-157,-570)"
- inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90">
- <rect
- y="489.5"
- x="186.49989"
- height="1.9999999"
- width="3.0000916"
- id="rect2994"
- style="fill:url(#linearGradient6956);fill-opacity:1;stroke:url(#linearGradient6958);stroke-width:0.99999976;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
- <rect
- y="489.5"
- x="191.49989"
- height="1.9999999"
- width="3.0000916"
- id="rect2996"
- style="fill:#fcaf3e;fill-opacity:1;stroke:#ce5c00;stroke-width:0.99999976;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
- <rect
- y="489.5"
- x="196.49989"
- height="1.9999999"
- width="3.0000916"
- id="rect2998"
- style="fill:#fcaf3e;fill-opacity:1;stroke:#ce5c00;stroke-width:0.99999976;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
- <rect
- y="489.5"
- x="201.49989"
- height="1.9999999"
- width="3.0000916"
- id="rect3000"
- style="fill:#fcaf3e;fill-opacity:1;stroke:#ce5c00;stroke-width:0.99999976;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
- <rect
- transform="scale(-1,-1)"
- y="-491.5"
- x="-209.49998"
- height="1.9999999"
- width="3.0000916"
- id="rect3002"
- style="fill:url(#linearGradient6960);fill-opacity:1;stroke:url(#linearGradient6962);stroke-width:0.99999976;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
- </g>
- </g>
- </g>
-</svg>
diff --git a/files_svgedit/images/align-right.png b/files_svgedit/images/align-right.png
deleted file mode 100644
index 5ca99caa4..000000000
--- a/files_svgedit/images/align-right.png
+++ /dev/null
Binary files differ
diff --git a/files_svgedit/images/align-right.svg b/files_svgedit/images/align-right.svg
deleted file mode 100644
index c2f8f19e3..000000000
--- a/files_svgedit/images/align-right.svg
+++ /dev/null
@@ -1,233 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://web.resource.org/cc/"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="22"
- height="22"
- id="svg11187"
- sodipodi:version="0.32"
- inkscape:version="0.44+devel"
- version="1.0"
- sodipodi:docbase="/home/andreas/project/inkscape/22x22/actions"
- sodipodi:docname="align-horisontal-right.svg"
- inkscape:output_extension="org.inkscape.output.svg.inkscape"
- sodipodi:modified="TRUE"
- inkscape:export-filename="/home/andreas/project/inkscape/22x22/actions/align-horisontal-right.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90">
- <defs
- id="defs11189">
- <linearGradient
- id="linearGradient2968"
- inkscape:collect="always">
- <stop
- id="stop2970"
- offset="0"
- style="stop-color:#ce5c00;stop-opacity:1" />
- <stop
- id="stop2972"
- offset="1"
- style="stop-color:#ce5c00;stop-opacity:0" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2968"
- id="linearGradient4732"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(-1,0,0,-1,395.9999,981)"
- x1="187.60938"
- y1="489.35938"
- x2="186.93732"
- y2="489.35938" />
- <linearGradient
- id="linearGradient2974"
- inkscape:collect="always">
- <stop
- id="stop2976"
- offset="0"
- style="stop-color:#fcaf3e;stop-opacity:1" />
- <stop
- id="stop2978"
- offset="1"
- style="stop-color:#fcaf3e;stop-opacity:0" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2974"
- id="linearGradient4730"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(-1,0,0,-1,395.9999,981)"
- x1="187.81554"
- y1="489.54688"
- x2="187.1716"
- y2="489.54688" />
- <linearGradient
- id="linearGradient2986"
- inkscape:collect="always">
- <stop
- id="stop2988"
- offset="0"
- style="stop-color:#ce5c00;stop-opacity:1" />
- <stop
- id="stop2990"
- offset="1"
- style="stop-color:#ce5c00;stop-opacity:0" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2986"
- id="linearGradient4728"
- gradientUnits="userSpaceOnUse"
- x1="187.60938"
- y1="489.35938"
- x2="186.93732"
- y2="489.35938" />
- <linearGradient
- id="linearGradient2980"
- inkscape:collect="always">
- <stop
- id="stop2982"
- offset="0"
- style="stop-color:#fcaf3e;stop-opacity:1" />
- <stop
- id="stop2984"
- offset="1"
- style="stop-color:#fcaf3e;stop-opacity:0" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2980"
- id="linearGradient4726"
- gradientUnits="userSpaceOnUse"
- x1="187.81554"
- y1="489.54688"
- x2="187.1716"
- y2="489.54688" />
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="11.197802"
- inkscape:cx="16"
- inkscape:cy="16"
- inkscape:current-layer="layer1"
- showgrid="false"
- inkscape:grid-bbox="true"
- inkscape:document-units="px"
- width="22px"
- height="22px"
- inkscape:window-width="797"
- inkscape:window-height="628"
- inkscape:window-x="0"
- inkscape:window-y="47" />
- <metadata
- id="metadata11192">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- id="layer1"
- inkscape:label="Layer 1"
- inkscape:groupmode="layer">
- <g
- style="display:inline"
- id="g4025"
- transform="matrix(0,-1,1,0,-60.999914,-198.00011)"
- inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90">
- <rect
- style="fill:#d3d7cf;fill-opacity:1;stroke:#888a85;stroke-width:0.99999994;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:3;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
- id="rect3873"
- width="12"
- height="7"
- x="-80.499878"
- y="-207.5"
- transform="matrix(0,-1,1,0,0,0)"
- inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <rect
- style="fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:0.99999994;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
- id="rect3875"
- width="10"
- height="5.0000305"
- x="-79.499878"
- y="-206.5"
- transform="matrix(0,-1,1,0,0,0)"
- rx="0"
- ry="0"
- inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <g
- id="g3877"
- transform="translate(-347,-409)"
- inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90"
- style="display:inline">
- <rect
- transform="matrix(0,-1,1,0,0,0)"
- y="129.49626"
- x="-489.49979"
- height="7.0035982"
- width="17.999748"
- id="rect3879"
- style="color:#000000;fill:#d3d7cf;fill-opacity:1;fill-rule:evenodd;stroke:#888a85;stroke-width:1.00024867;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:0;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline" />
- <rect
- transform="matrix(0,-1,1,0,0,0)"
- y="130.50006"
- x="-488.50009"
- height="4.9998937"
- width="15.999757"
- id="rect3881"
- style="color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.00024891;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:2;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
- rx="0"
- ry="0" />
- </g>
- <g
- id="g3919"
- transform="translate(-407,-410)"
- inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90"
- style="display:inline">
- <rect
- y="489.5"
- x="196.49989"
- height="1.9999999"
- width="3.0000916"
- id="rect3921"
- style="fill:#fcaf3e;fill-opacity:1;stroke:#ce5c00;stroke-width:0.99999976;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
- <path
- style="fill:url(#linearGradient4726);fill-opacity:1;stroke:url(#linearGradient4728);stroke-width:0.99999976;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-dashoffset:0;stroke-opacity:1"
- d="M 197.49998,491.5 L 186.49989,491.5 L 186.49989,489.5 L 197.49998,489.5"
- id="path3923"
- sodipodi:nodetypes="cccc" />
- <path
- style="fill:url(#linearGradient4730);fill-opacity:1;stroke:url(#linearGradient4732);stroke-width:0.99999976;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-dashoffset:0;stroke-opacity:1"
- d="M 198.49989,489.5 L 209.49998,489.5 L 209.49998,491.5 L 198.49989,491.5"
- id="path3925"
- sodipodi:nodetypes="cccc" />
- </g>
- </g>
- </g>
-</svg>
diff --git a/files_svgedit/images/align-top.png b/files_svgedit/images/align-top.png
deleted file mode 100644
index 51bfc2ecd..000000000
--- a/files_svgedit/images/align-top.png
+++ /dev/null
Binary files differ
diff --git a/files_svgedit/images/align-top.svg b/files_svgedit/images/align-top.svg
deleted file mode 100644
index f314f32d1..000000000
--- a/files_svgedit/images/align-top.svg
+++ /dev/null
@@ -1,233 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://web.resource.org/cc/"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="22"
- height="22"
- id="svg10699"
- sodipodi:version="0.32"
- inkscape:version="0.44+devel"
- version="1.0"
- sodipodi:docbase="/home/andreas/project/inkscape/22x22/actions"
- sodipodi:docname="align-vertical-bottom.svg"
- inkscape:output_extension="org.inkscape.output.svg.inkscape"
- inkscape:export-filename="/home/andreas/project/inkscape/22x22/actions/align-vertical-bottom.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90"
- sodipodi:modified="true">
- <defs
- id="defs10701">
- <linearGradient
- id="linearGradient2968"
- inkscape:collect="always">
- <stop
- id="stop2970"
- offset="0"
- style="stop-color:#ce5c00;stop-opacity:1" />
- <stop
- id="stop2972"
- offset="1"
- style="stop-color:#ce5c00;stop-opacity:0" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2968"
- id="linearGradient6954"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(-1,0,0,-1,395.9999,981)"
- x1="187.60938"
- y1="489.35938"
- x2="186.93732"
- y2="489.35938" />
- <linearGradient
- id="linearGradient2974"
- inkscape:collect="always">
- <stop
- id="stop2976"
- offset="0"
- style="stop-color:#fcaf3e;stop-opacity:1" />
- <stop
- id="stop2978"
- offset="1"
- style="stop-color:#fcaf3e;stop-opacity:0" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2974"
- id="linearGradient6952"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(-1,0,0,-1,395.9999,981)"
- x1="187.81554"
- y1="489.54688"
- x2="187.1716"
- y2="489.54688" />
- <linearGradient
- id="linearGradient2986"
- inkscape:collect="always">
- <stop
- id="stop2988"
- offset="0"
- style="stop-color:#ce5c00;stop-opacity:1" />
- <stop
- id="stop2990"
- offset="1"
- style="stop-color:#ce5c00;stop-opacity:0" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2986"
- id="linearGradient6950"
- gradientUnits="userSpaceOnUse"
- x1="187.60938"
- y1="489.35938"
- x2="186.93732"
- y2="489.35938" />
- <linearGradient
- id="linearGradient2980"
- inkscape:collect="always">
- <stop
- id="stop2982"
- offset="0"
- style="stop-color:#fcaf3e;stop-opacity:1" />
- <stop
- id="stop2984"
- offset="1"
- style="stop-color:#fcaf3e;stop-opacity:0" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2980"
- id="linearGradient6948"
- gradientUnits="userSpaceOnUse"
- x1="187.81554"
- y1="489.54688"
- x2="187.1716"
- y2="489.54688" />
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="11.197802"
- inkscape:cx="16"
- inkscape:cy="16"
- inkscape:current-layer="layer1"
- showgrid="false"
- inkscape:grid-bbox="true"
- inkscape:document-units="px"
- width="22px"
- height="22px"
- inkscape:window-width="797"
- inkscape:window-height="628"
- inkscape:window-x="0"
- inkscape:window-y="47" />
- <metadata
- id="metadata10704">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- id="layer1"
- inkscape:label="Layer 1"
- inkscape:groupmode="layer">
- <g
- style="display:inline"
- id="g6862"
- transform="translate(-59.99998,90)"
- inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90">
- <g
- id="g3084"
- transform="translate(-97,-563)"
- style="fill:#d3d7cf;stroke:#888a85"
- inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90">
- <rect
- transform="matrix(0,1,1,0,0,0)"
- y="169.5"
- x="475.50012"
- height="7"
- width="12"
- id="rect3086"
- style="fill:#d3d7cf;fill-opacity:1;stroke:#888a85;stroke-width:0.99999994;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:3;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
- <rect
- ry="0"
- rx="0"
- transform="matrix(0,1,1,0,0,0)"
- y="170.5"
- x="476.50012"
- height="5.0000305"
- width="10"
- id="rect3088"
- style="opacity:1;fill:#d3d7cf;fill-opacity:1;stroke:#ffffff;stroke-width:0.99999994;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
- </g>
- <g
- id="g3090"
- transform="translate(-67,-559)"
- inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90">
- <rect
- transform="matrix(0,-1,1,0,0,0)"
- y="129.49626"
- x="-489.49979"
- height="7.0035982"
- width="17.999748"
- id="rect3092"
- style="color:#000000;fill:#d3d7cf;fill-opacity:1;fill-rule:evenodd;stroke:#888a85;stroke-width:1.00024867;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:0;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline" />
- <rect
- transform="matrix(0,-1,1,0,0,0)"
- y="130.50006"
- x="-488.50009"
- height="4.9998937"
- width="15.999757"
- id="rect3094"
- style="color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.00024891;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:2;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
- rx="0"
- ry="0" />
- </g>
- <g
- id="g3262"
- transform="translate(-127,-578)"
- inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90">
- <rect
- y="489.5"
- x="196.49989"
- height="1.9999999"
- width="3.0000916"
- id="rect3264"
- style="fill:#fcaf3e;fill-opacity:1;stroke:#ce5c00;stroke-width:0.99999976;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
- <path
- style="fill:url(#linearGradient6948);fill-opacity:1;stroke:url(#linearGradient6950);stroke-width:0.99999976;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-dashoffset:0;stroke-opacity:1"
- d="M 197.49998,491.5 L 186.49989,491.5 L 186.49989,489.5 L 197.49998,489.5"
- id="path3266"
- sodipodi:nodetypes="cccc" />
- <path
- style="fill:url(#linearGradient6952);fill-opacity:1;stroke:url(#linearGradient6954);stroke-width:0.99999976;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-dashoffset:0;stroke-opacity:1"
- d="M 198.49989,489.5 L 209.49998,489.5 L 209.49998,491.5 L 198.49989,491.5"
- id="path3268"
- sodipodi:nodetypes="cccc" />
- </g>
- </g>
- </g>
-</svg>
diff --git a/files_svgedit/images/bold.png b/files_svgedit/images/bold.png
deleted file mode 100644
index 19ac5bbd7..000000000
--- a/files_svgedit/images/bold.png
+++ /dev/null
Binary files differ
diff --git a/files_svgedit/images/cancel.png b/files_svgedit/images/cancel.png
deleted file mode 100644
index 8595f5d97..000000000
--- a/files_svgedit/images/cancel.png
+++ /dev/null
Binary files differ
diff --git a/files_svgedit/images/circle.png b/files_svgedit/images/circle.png
deleted file mode 100644
index e7bd228b7..000000000
--- a/files_svgedit/images/circle.png
+++ /dev/null
Binary files differ
diff --git a/files_svgedit/images/clear.png b/files_svgedit/images/clear.png
deleted file mode 100644
index 514710d12..000000000
--- a/files_svgedit/images/clear.png
+++ /dev/null
Binary files differ
diff --git a/files_svgedit/images/clone.png b/files_svgedit/images/clone.png
deleted file mode 100644
index c8713c80b..000000000
--- a/files_svgedit/images/clone.png
+++ /dev/null
Binary files differ
diff --git a/files_svgedit/images/conn.svg b/files_svgedit/images/conn.svg
deleted file mode 100644
index 1af5e9a4d..000000000
--- a/files_svgedit/images/conn.svg
+++ /dev/null
@@ -1,29 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg">
- <g id="mode_connect">
- <svg viewBox="0 0 24 24" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg">
- <defs>
-
- <line stroke-width="5" fill="none" stroke="#000000" id="svg_2" y2="121" x2="136" y1="7" x1="136">
- <stop stop-opacity="1" stop-color="#4687a0"/>
- <stop stop-opacity="1" stop-color="#ffffff"/>
- </line>
- <linearGradient y2="0.18359" x2="0.29688" y1="0.92188" x1="0.62109" id="svg_3">
- <stop stop-opacity="1" stop-color="#417dad" offset="0"/>
- <stop stop-opacity="1" stop-color="#ffffff" offset="1"/>
- </linearGradient>
- </defs>
- <g>
- <title>Layer 1</title>
- <line x1="5.64676" y1="5.60056" x2="18.50037" y2="18.62557" id="svg_5" stroke="#000000" fill="none"/>
- <rect opacity="0.75" stroke-width="0.5" x="0.5" y="0.5" width="9.625" height="5.125" id="svg_1" fill="url(#svg_3)" stroke="#000000"/>
- <rect opacity="0.75" id="svg_4" stroke-width="0.5" x="13.75" y="18.25" width="9.625" height="5.125" fill="url(#svg_3)" stroke="#000000"/>
- <g id="svg_9">
- <path d="m14.57119,9.12143l-0.98244,5.18852l2.70861,-4.36084" id="svg_6" fill="#a0a0a0" stroke="#000000"/>
- <path d="m14.27564,6.76258c-0.25872,0.72562 -0.40735,1.65632 -0.33812,2.15432l2.90784,1.2509c0.30961,-0.21212 1.08198,-1.1814 1.08198,-1.73736" id="svg_7" fill="url(#svg_3)" stroke="#000000"/>
- <path d="m16.28893,0.37519l-2.46413,5.9304l4.76481,2.39435l2.13178,-4.96735" id="svg_8" fill="url(#svg_3)" stroke="#000000"/>
- </g>
- </g>
- </svg>
- </g>
- <g id="svg_eof"/>
-</svg> \ No newline at end of file
diff --git a/files_svgedit/images/copy.png b/files_svgedit/images/copy.png
deleted file mode 100644
index 23ba357bc..000000000
--- a/files_svgedit/images/copy.png
+++ /dev/null
Binary files differ
diff --git a/files_svgedit/images/cut.png b/files_svgedit/images/cut.png
deleted file mode 100644
index d586098e2..000000000
--- a/files_svgedit/images/cut.png
+++ /dev/null
Binary files differ
diff --git a/files_svgedit/images/delete.png b/files_svgedit/images/delete.png
deleted file mode 100644
index e71dd96fe..000000000
--- a/files_svgedit/images/delete.png
+++ /dev/null
Binary files differ
diff --git a/files_svgedit/images/document-properties.png b/files_svgedit/images/document-properties.png
deleted file mode 100644
index a5ad72875..000000000
--- a/files_svgedit/images/document-properties.png
+++ /dev/null
Binary files differ
diff --git a/files_svgedit/images/dropdown.gif b/files_svgedit/images/dropdown.gif
deleted file mode 100644
index 4180d5eba..000000000
--- a/files_svgedit/images/dropdown.gif
+++ /dev/null
Binary files differ
diff --git a/files_svgedit/images/ellipse.png b/files_svgedit/images/ellipse.png
deleted file mode 100644
index 1402a2d8d..000000000
--- a/files_svgedit/images/ellipse.png
+++ /dev/null
Binary files differ
diff --git a/files_svgedit/images/eye.png b/files_svgedit/images/eye.png
deleted file mode 100644
index 564a1a971..000000000
--- a/files_svgedit/images/eye.png
+++ /dev/null
Binary files differ
diff --git a/files_svgedit/images/fhpath.png b/files_svgedit/images/fhpath.png
deleted file mode 100644
index 9255cc50f..000000000
--- a/files_svgedit/images/fhpath.png
+++ /dev/null
Binary files differ
diff --git a/files_svgedit/images/flyouth.png b/files_svgedit/images/flyouth.png
deleted file mode 100644
index 5822ed833..000000000
--- a/files_svgedit/images/flyouth.png
+++ /dev/null
Binary files differ
diff --git a/files_svgedit/images/flyup.gif b/files_svgedit/images/flyup.gif
deleted file mode 100644
index c027e137c..000000000
--- a/files_svgedit/images/flyup.gif
+++ /dev/null
Binary files differ
diff --git a/files_svgedit/images/freehand-circle.png b/files_svgedit/images/freehand-circle.png
deleted file mode 100644
index 43cb17f90..000000000
--- a/files_svgedit/images/freehand-circle.png
+++ /dev/null
Binary files differ
diff --git a/files_svgedit/images/freehand-square.png b/files_svgedit/images/freehand-square.png
deleted file mode 100644
index 328fc77d1..000000000
--- a/files_svgedit/images/freehand-square.png
+++ /dev/null
Binary files differ
diff --git a/files_svgedit/images/go-down.png b/files_svgedit/images/go-down.png
deleted file mode 100644
index 3dd7fccdf..000000000
--- a/files_svgedit/images/go-down.png
+++ /dev/null
Binary files differ
diff --git a/files_svgedit/images/go-up.png b/files_svgedit/images/go-up.png
deleted file mode 100644
index fa9a7d71b..000000000
--- a/files_svgedit/images/go-up.png
+++ /dev/null
Binary files differ
diff --git a/files_svgedit/images/image.png b/files_svgedit/images/image.png
deleted file mode 100644
index 10f46719d..000000000
--- a/files_svgedit/images/image.png
+++ /dev/null
Binary files differ
diff --git a/files_svgedit/images/italic.png b/files_svgedit/images/italic.png
deleted file mode 100644
index 63485dea9..000000000
--- a/files_svgedit/images/italic.png
+++ /dev/null
Binary files differ
diff --git a/files_svgedit/images/line.png b/files_svgedit/images/line.png
deleted file mode 100644
index 37975742e..000000000
--- a/files_svgedit/images/line.png
+++ /dev/null
Binary files differ
diff --git a/files_svgedit/images/link_controls.png b/files_svgedit/images/link_controls.png
deleted file mode 100644
index 516a094b3..000000000
--- a/files_svgedit/images/link_controls.png
+++ /dev/null
Binary files differ
diff --git a/files_svgedit/images/logo.png b/files_svgedit/images/logo.png
deleted file mode 100644
index 7c04931c3..000000000
--- a/files_svgedit/images/logo.png
+++ /dev/null
Binary files differ
diff --git a/files_svgedit/images/logo.svg b/files_svgedit/images/logo.svg
deleted file mode 100644
index e71308bea..000000000
--- a/files_svgedit/images/logo.svg
+++ /dev/null
@@ -1,32 +0,0 @@
-<svg viewBox="0 0 478 472" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg">
- <defs>
- <linearGradient id="svg_5" x1="0" y1="0" x2="1" y2="1">
- <stop offset="0" stop-color="#ffffe0" stop-opacity="1"/>
- <stop offset="1" stop-color="#edc39c" stop-opacity="1"/>
- </linearGradient>
- <linearGradient id="svg_10" x1="0.57031" y1="0.78125" x2="0.28906" y2="0.41406">
- <stop offset="0" stop-color="#ff7f00" stop-opacity="1"/>
- <stop offset="1" stop-color="#ffff00"/>
- </linearGradient>
- <linearGradient id="svg_18" x1="0.37891" y1="0.35938" x2="1" y2="1">
- <stop offset="0" stop-color="#e0e0e0" stop-opacity="1"/>
- <stop offset="1" stop-color="#666666" stop-opacity="1"/>
- </linearGradient>
- </defs>
- <g>
- <title>Layer 1</title>
- <path d="m68.82031,270.04688l-22,-33l17,-35l34,2l25,15l7,-35l28,-16l25,12l100,102l21,23l-15,35l-36,9l20,49l-31,24l-49,-17l-1,31l-33,21l-31,-19l-13,-35l-30,21l-30,-9l-5,-35l16,-31l-32,-6l-15,-19l3,-36l47,-18z" id="svg_19" fill="#ffffff"/>
- <path fill="#1a171a" fill-rule="nonzero" id="path2902" d="m158.96452,155.03685c-25.02071,0 -45.37077,20.35121 -45.37077,45.3775c0,0.72217 0.01794,1.4399 0.0471,2.15645c-0.49339,-0.53604 -0.99355,-1.06085 -1.50603,-1.58452c-8.56077,-8.55519 -19.95982,-13.28413 -32.07432,-13.28413c-12.12122,0 -23.52027,4.72334 -32.08778,13.29646c-17.69347,17.69464 -17.69347,46.4619 0,64.17445c0.51809,0.51697 1.0485,1.0126 1.59015,1.50601c-0.72891,-0.03586 -1.45782,-0.04822 -2.19234,-0.04822c-25.02071,0 -45.37189,20.35117 -45.37189,45.37747c0,25.01398 20.35119,45.36517 45.37189,45.36517c0.72891,0 1.45221,-0.01236 2.1744,-0.04828c-0.5293,0.48221 -1.05412,0.98801 -1.56547,1.49368c-17.70021,17.68906 -17.70021,46.48654 -0.00628,64.18677c8.57872,8.56747 19.96655,13.2785 32.08778,13.2785c12.1145,0 23.5012,-4.71103 32.07433,-13.2785c0.51247,-0.51694 1.01823,-1.04849 1.50603,-1.57895c-0.02915,0.71213 -0.04709,1.44669 -0.04709,2.15759c0,25.01511 20.35007,45.37747 45.37077,45.37747c25.01398,0 45.37079,-20.3624 45.37079,-45.37747c0,-0.7222 -0.01689,-1.44553 -0.05266,-2.18112c0.48105,0.52933 0.97562,1.04849 1.48697,1.56662c8.57982,8.57977 19.97775,13.2908 32.1057,13.2908c12.11003,0 23.51358,-4.71103 32.0687,-13.2785c17.68906,-17.70013 17.68906,-46.48538 0,-64.17441c-0.50577,-0.4946 -1.01141,-1.00034 -1.54306,-1.48248c0.69983,0.03592 1.42316,0.04828 2.16992,0.04828c25.01514,0 45.35284,-20.35123 45.35284,-45.36517c0,-25.02631 -20.33774,-45.37747 -45.35284,-45.37747c-0.74683,0 -1.47009,0.01236 -2.19345,0.04822c0.53152,-0.49341 1.06082,-0.98904 1.59128,-1.50601c8.55521,-8.55521 13.2785,-19.94186 13.2785,-32.07545c0,-12.12793 -4.72336,-23.52028 -13.30319,-32.0934c-8.55515,-8.56076 -19.95866,-13.2841 -32.0687,-13.2841c-12.12122,0 -23.52025,4.72334 -32.08777,13.2841c-0.51137,0.5181 -1.01822,1.04851 -1.5049,1.57895c0.03586,-0.72331 0.05266,-1.43991 0.05266,-2.16881c0,-25.02629 -20.35681,-45.3775 -45.37079,-45.3775m0,20.71901c13.61607,0 24.65851,11.03122 24.65851,24.65849c0,6.62749 -2.651,12.62137 -6.9101,17.04979l0,51.67419l36.53975,-36.53523c0.12001,-6.14418 2.48277,-12.24686 7.18146,-16.94667c4.81305,-4.81305 11.12094,-7.22409 17.44116,-7.22409c6.30228,0 12.61577,2.41104 17.43552,7.22409c9.62166,9.63287 9.62166,25.24948 0,34.87669c-4.69977,4.68634 -10.80803,7.04915 -16.95334,7.18147l-36.5341,36.53305l51.66742,0c4.42841,-4.25351 10.42905,-6.90451 17.08008,-6.90451c13.59137,0 24.62933,11.03799 24.62933,24.66525c0,13.61606 -11.03796,24.66519 -24.62933,24.66519c-6.65106,0 -12.65167,-2.66333 -17.08008,-6.91681l-51.64836,0l36.50273,36.50946c6.16995,0.14465 12.26587,2.50522 16.96568,7.20618c9.6216,9.61487 9.6216,25.23151 0,34.85757c-4.80856,4.81979 -11.13327,7.22974 -17.43556,7.22974c-6.32019,0 -12.63371,-2.40991 -17.44786,-7.22974c-4.68074,-4.68744 -7.04802,-10.79572 -7.17473,-16.94098l-36.53975,-36.53415l0,51.66742c4.25908,4.44635 6.9101,10.43466 6.9101,17.0621c0,13.62729 -11.04243,24.66415 -24.65851,24.66415c-13.62166,0 -24.65848,-11.0369 -24.65848,-24.66415c0,-6.62744 2.64539,-12.61575 6.90335,-17.0621l0,-51.66742l-36.53864,36.54648c-0.12672,6.14413 -2.48838,12.26477 -7.18147,16.94098c-4.81416,4.81873 -11.12206,7.22974 -17.42882,7.22974c-6.31461,0 -12.6225,-2.41101 -17.43555,-7.22974c-9.63284,-9.62833 -9.63284,-25.24277 0,-34.8699c4.68073,-4.67627 10.79012,-7.05026 16.94101,-7.18262l36.533,-36.53302l-51.66632,0c-4.44075,4.25348 -10.42902,6.91681 -17.06211,6.91681c-13.61606,0 -24.65288,-11.04913 -24.65288,-24.66519c0,-13.62726 11.03682,-24.66525 24.65288,-24.66525c6.63309,0 12.62136,2.651 17.06211,6.90451l51.68537,0l-36.55208,-36.54538c-6.14527,-0.12 -12.25354,-2.49403 -16.94775,-7.19377c-9.62611,-9.61493 -9.62611,-25.23715 0,-34.86441c4.81419,-4.81305 11.12769,-7.22406 17.44228,-7.22406c6.30676,0 12.61465,2.41101 17.42883,7.22406c4.69978,4.69307 7.06034,10.80246 7.18144,16.94777l36.5386,36.53299l0,-51.66074c-4.25795,-4.42841 -6.90334,-10.42229 -6.90334,-17.04979c0,-13.62726 11.03682,-24.65848 24.65848,-24.65848"/>
- <path d="m188.82031,210.04688l16,-47l155,-148l107,100l-158,156.99999l-44,12l-76,-74z" id="svg_6" fill="url(#svg_10)" stroke="#ffffff" stroke-width="0"/>
- <path d="m335.57031,40.29688c-11.5,39.75 55.5,115.25 109.25,98.75l21,-20.99999l-103,-101l-27.25,23.25z" id="svg_11" fill="url(#svg_18)" stroke="#ffffff" stroke-width="0"/>
- <rect x="272.80404" y="20.76382" width="42.35197" height="232.66835" id="svg_13" fill="#ffffff" stroke="#ffffff" stroke-width="0" transform="rotate(45.9094, 293.98, 137.1)" opacity="0.4"/>
- <rect x="282.80404" y="22.76382" width="14" height="232.66835" fill="#ffffff" stroke="#ffffff" stroke-width="0" transform="rotate(45.9094, 289.805, 139.1)" opacity="0.4" id="svg_14"/>
- <ellipse cx="415.13312" cy="64.38066" id="svg_12" fill="#ea7598" stroke="#ffffff" stroke-width="0" rx="67.79251" ry="34.82026" transform="rotate(39.4735, 415.133, 64.379)"/>
- <path d="m212.07031,166.04688c-8.5,47 36.25,103.75 99.25,96.75l-152.5,53.25l53.25,-150z" id="svg_4" fill="url(#svg_5)" stroke="#ffffff" stroke-width="0"/>
- <path d="m181.32031,242.54688c0.5,20.5 26.75,45 46.75,48.5l-66.25,20l19.5,-68.5z" id="svg_3" fill="#27382f" stroke="#ffffff" stroke-width="0"/>
- </g>
- <g>
- <title>Layer 2</title>
- <path d="m152.82031,317.04688l51,-152l157,-153c40,-12.00001 118,48 105,105l-157,152.99999l-156,47z" id="svg_1" fill="none" stroke="#800000" stroke-width="17"/>
- </g>
-</svg>
diff --git a/files_svgedit/images/move_bottom.png b/files_svgedit/images/move_bottom.png
deleted file mode 100644
index 6b1325075..000000000
--- a/files_svgedit/images/move_bottom.png
+++ /dev/null
Binary files differ
diff --git a/files_svgedit/images/move_top.png b/files_svgedit/images/move_top.png
deleted file mode 100644
index 9d54b6a48..000000000
--- a/files_svgedit/images/move_top.png
+++ /dev/null
Binary files differ
diff --git a/files_svgedit/images/node_clone.png b/files_svgedit/images/node_clone.png
deleted file mode 100755
index 2187d0739..000000000
--- a/files_svgedit/images/node_clone.png
+++ /dev/null
Binary files differ
diff --git a/files_svgedit/images/node_delete.png b/files_svgedit/images/node_delete.png
deleted file mode 100755
index ea3f7e687..000000000
--- a/files_svgedit/images/node_delete.png
+++ /dev/null
Binary files differ
diff --git a/files_svgedit/images/none.png b/files_svgedit/images/none.png
deleted file mode 100644
index 04c0765f6..000000000
--- a/files_svgedit/images/none.png
+++ /dev/null
Binary files differ
diff --git a/files_svgedit/images/open.png b/files_svgedit/images/open.png
deleted file mode 100644
index 254a6b814..000000000
--- a/files_svgedit/images/open.png
+++ /dev/null
Binary files differ
diff --git a/files_svgedit/images/paste.png b/files_svgedit/images/paste.png
deleted file mode 100644
index ad983155c..000000000
--- a/files_svgedit/images/paste.png
+++ /dev/null
Binary files differ
diff --git a/files_svgedit/images/path.png b/files_svgedit/images/path.png
deleted file mode 100644
index c75a8d712..000000000
--- a/files_svgedit/images/path.png
+++ /dev/null
Binary files differ
diff --git a/files_svgedit/images/polygon.png b/files_svgedit/images/polygon.png
deleted file mode 100644
index bcd640c20..000000000
--- a/files_svgedit/images/polygon.png
+++ /dev/null
Binary files differ
diff --git a/files_svgedit/images/polygon.svg b/files_svgedit/images/polygon.svg
deleted file mode 100644
index a7f955d8f..000000000
--- a/files_svgedit/images/polygon.svg
+++ /dev/null
@@ -1,219 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://web.resource.org/cc/"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- sodipodi:docname="draw-polygon.svg"
- sodipodi:docbase="/home/andreas/projekt/tango/22"
- inkscape:version="0.42"
- id="svg8728"
- height="22.000000px"
- width="22.000000px"
- inkscape:export-filename="/home/andreas/projekt/tango/22/draw-polygon.png"
- inkscape:export-xdpi="90.000000"
- inkscape:export-ydpi="90.000000">
- <defs
- id="defs3">
- <linearGradient
- inkscape:collect="always"
- id="linearGradient3941">
- <stop
- style="stop-color:#000000;stop-opacity:1;"
- offset="0"
- id="stop3943" />
- <stop
- style="stop-color:#000000;stop-opacity:0;"
- offset="1"
- id="stop3945" />
- </linearGradient>
- <linearGradient
- id="linearGradient6581">
- <stop
- style="stop-color:#eeeeec;stop-opacity:1;"
- offset="0"
- id="stop6583" />
- <stop
- style="stop-color:#e0e0de;stop-opacity:1.0000000;"
- offset="1.0000000"
- id="stop6585" />
- </linearGradient>
- <linearGradient
- id="linearGradient14920">
- <stop
- id="stop14922"
- offset="0"
- style="stop-color:#5a7aa4;stop-opacity:1;" />
- <stop
- id="stop14924"
- offset="1.0000000"
- style="stop-color:#1f2b3a;stop-opacity:1.0000000;" />
- </linearGradient>
- <linearGradient
- id="linearGradient13390">
- <stop
- id="stop13392"
- offset="0.0000000"
- style="stop-color:#81a2cd;stop-opacity:1.0000000;" />
- <stop
- id="stop13394"
- offset="1.0000000"
- style="stop-color:#2a415f;stop-opacity:1.0000000;" />
- </linearGradient>
- <linearGradient
- id="linearGradient10325">
- <stop
- id="stop10327"
- offset="0"
- style="stop-color:#5a7aa4;stop-opacity:1;" />
- <stop
- id="stop10329"
- offset="1.0000000"
- style="stop-color:#455e7e;stop-opacity:1.0000000;" />
- </linearGradient>
- <linearGradient
- gradientUnits="userSpaceOnUse"
- y2="39.486301"
- x2="37.746555"
- y1="23.992306"
- x1="23.598076"
- gradientTransform="matrix(0.363308,0,0,0.363571,1.976073,1.180651)"
- id="linearGradient13217"
- xlink:href="#linearGradient6581"
- inkscape:collect="always" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3941"
- id="radialGradient3947"
- cx="2.25"
- cy="16"
- fx="2.25"
- fy="16"
- r="16.875"
- gradientTransform="matrix(1.000000,0.000000,0.000000,0.333333,-5.774893e-15,10.66667)"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient6581"
- id="linearGradient2398"
- x1="10.769515"
- y1="8.7196503"
- x2="15.923767"
- y2="15.039417"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient6581"
- id="linearGradient2403"
- gradientUnits="userSpaceOnUse"
- x1="10.769515"
- y1="8.7196503"
- x2="15.923767"
- y2="15.039417"
- gradientTransform="matrix(0.874941,0.000000,0.000000,0.868551,1.339139,1.349650)" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient6581"
- id="linearGradient2405"
- gradientUnits="userSpaceOnUse"
- x1="10.769515"
- y1="8.7196503"
- x2="15.923767"
- y2="15.039417"
- gradientTransform="matrix(1.001575,0.000000,0.000000,1.000000,-3.040037e-3,0.000000)" />
- </defs>
- <sodipodi:namedview
- inkscape:window-y="25"
- inkscape:window-x="0"
- inkscape:window-height="949"
- inkscape:window-width="1280"
- inkscape:document-units="px"
- inkscape:grid-bbox="true"
- showgrid="false"
- inkscape:current-layer="layer1"
- inkscape:cy="10.249014"
- inkscape:cx="16.435231"
- inkscape:zoom="15.999999"
- inkscape:pageshadow="2"
- inkscape:pageopacity="0.0"
- borderopacity="0.08235294"
- bordercolor="#666666"
- pagecolor="#ffffff"
- id="base"
- showguides="true"
- inkscape:guide-bbox="true"
- inkscape:showpageshadow="false"
- stroke="#888a85" />
- <metadata
- id="metadata4">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title>Draw Rectangle</dc:title>
- <dc:date>2005-10-10</dc:date>
- <dc:creator>
- <cc:Agent>
- <dc:title>Andreas Nilsson</dc:title>
- </cc:Agent>
- </dc:creator>
- <dc:subject>
- <rdf:Bag>
- <rdf:li>draw</rdf:li>
- <rdf:li>rectangle</rdf:li>
- <rdf:li>square</rdf:li>
- </rdf:Bag>
- </dc:subject>
- <cc:license
- rdf:resource="http://creativecommons.org/licenses/by-sa/2.0/" />
- </cc:Work>
- <cc:License
- rdf:about="http://creativecommons.org/licenses/by-sa/2.0/">
- <cc:permits
- rdf:resource="http://web.resource.org/cc/Reproduction" />
- <cc:permits
- rdf:resource="http://web.resource.org/cc/Distribution" />
- <cc:requires
- rdf:resource="http://web.resource.org/cc/Notice" />
- <cc:requires
- rdf:resource="http://web.resource.org/cc/Attribution" />
- <cc:permits
- rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
- <cc:requires
- rdf:resource="http://web.resource.org/cc/ShareAlike" />
- </cc:License>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:groupmode="layer"
- inkscape:label="Layer 1"
- id="layer1">
- <path
- sodipodi:type="arc"
- style="opacity:0.60000000;color:#000000;fill:url(#radialGradient3947);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:block;overflow:visible"
- id="path2193"
- sodipodi:cx="2.2500000"
- sodipodi:cy="16.000000"
- sodipodi:rx="16.875000"
- sodipodi:ry="5.6250000"
- d="M 19.125000 16.000000 A 16.875000 5.6250000 0 1 1 -14.625000,16.000000 A 16.875000 5.6250000 0 1 1 19.125000 16.000000 z"
- transform="matrix(0.503704,0.000000,0.000000,0.349014,9.366667,12.45257)" />
- <path
- style="fill:url(#linearGradient2405);fill-opacity:1.0000000;fill-rule:evenodd;stroke:#888a85;stroke-width:1.0000002px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
- d="M 10.376363,3.6237647 L 18.439333,9.5822222 L 15.644242,18.503298 L 5.3933717,18.503298 L 2.5694122,9.5814367 L 10.376363,3.6237647 z "
- id="path1661"
- sodipodi:nodetypes="cccccc" />
- <path
- style="fill:url(#linearGradient2403);fill-opacity:1.0000000;fill-rule:evenodd;stroke:#fdfdfb;stroke-width:0.99999976px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
- d="M 10.383801,4.6223366 L 17.428917,9.8682235 L 14.894231,17.502140 L 6.1335005,17.494329 L 3.6135882,9.9131875 L 10.383801,4.6223366 z "
- id="path2401"
- sodipodi:nodetypes="cccccc" />
- </g>
-</svg>
diff --git a/files_svgedit/images/rect.png b/files_svgedit/images/rect.png
deleted file mode 100644
index 4fd15f837..000000000
--- a/files_svgedit/images/rect.png
+++ /dev/null
Binary files differ
diff --git a/files_svgedit/images/redo.png b/files_svgedit/images/redo.png
deleted file mode 100644
index 1169fc3b4..000000000
--- a/files_svgedit/images/redo.png
+++ /dev/null
Binary files differ
diff --git a/files_svgedit/images/reorient.png b/files_svgedit/images/reorient.png
deleted file mode 100644
index 9455a82c0..000000000
--- a/files_svgedit/images/reorient.png
+++ /dev/null
Binary files differ
diff --git a/files_svgedit/images/rotate.png b/files_svgedit/images/rotate.png
deleted file mode 100644
index afa68c6fd..000000000
--- a/files_svgedit/images/rotate.png
+++ /dev/null
Binary files differ
diff --git a/files_svgedit/images/save.png b/files_svgedit/images/save.png
deleted file mode 100644
index 9c4c8d9da..000000000
--- a/files_svgedit/images/save.png
+++ /dev/null
Binary files differ
diff --git a/files_svgedit/images/select.png b/files_svgedit/images/select.png
deleted file mode 100644
index 1d741f16d..000000000
--- a/files_svgedit/images/select.png
+++ /dev/null
Binary files differ
diff --git a/files_svgedit/images/select_node.png b/files_svgedit/images/select_node.png
deleted file mode 100644
index 5ed97db95..000000000
--- a/files_svgedit/images/select_node.png
+++ /dev/null
Binary files differ
diff --git a/files_svgedit/images/sep.png b/files_svgedit/images/sep.png
deleted file mode 100644
index 6b9027779..000000000
--- a/files_svgedit/images/sep.png
+++ /dev/null
Binary files differ
diff --git a/files_svgedit/images/shape_group.png b/files_svgedit/images/shape_group.png
deleted file mode 100644
index bb2ff516d..000000000
--- a/files_svgedit/images/shape_group.png
+++ /dev/null
Binary files differ
diff --git a/files_svgedit/images/shape_ungroup.png b/files_svgedit/images/shape_ungroup.png
deleted file mode 100644
index 3a6f369a5..000000000
--- a/files_svgedit/images/shape_ungroup.png
+++ /dev/null
Binary files differ
diff --git a/files_svgedit/images/source.png b/files_svgedit/images/source.png
deleted file mode 100644
index c1f079449..000000000
--- a/files_svgedit/images/source.png
+++ /dev/null
Binary files differ
diff --git a/files_svgedit/images/spinbtn_updn_big.png b/files_svgedit/images/spinbtn_updn_big.png
deleted file mode 100644
index 3873736f8..000000000
--- a/files_svgedit/images/spinbtn_updn_big.png
+++ /dev/null
Binary files differ
diff --git a/files_svgedit/images/square.png b/files_svgedit/images/square.png
deleted file mode 100644
index 0ca71a67f..000000000
--- a/files_svgedit/images/square.png
+++ /dev/null
Binary files differ
diff --git a/files_svgedit/images/svg_edit_icons.svg b/files_svgedit/images/svg_edit_icons.svg
deleted file mode 100644
index 2255ba5ea..000000000
--- a/files_svgedit/images/svg_edit_icons.svg
+++ /dev/null
@@ -1,975 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg">
-<!-- All images created with SVG-edit - http://svg-edit.googlecode.com/ -->
-
-<g id="logo">
-<svg viewBox="0 0 478 472" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg">
- <defs>
- <linearGradient id="svg_5" x1="0" y1="0" x2="1" y2="1">
- <stop offset="0" stop-color="#ffffe0" stop-opacity="1"/>
- <stop offset="1" stop-color="#edc39c" stop-opacity="1"/>
- </linearGradient>
- <linearGradient id="svg_10" x1="0.57031" y1="0.78125" x2="0.28906" y2="0.41406">
- <stop offset="0" stop-color="#ff7f00" stop-opacity="1"/>
- <stop offset="1" stop-color="#ffff00"/>
- </linearGradient>
- <linearGradient id="svg_18" x1="0.37891" y1="0.35938" x2="1" y2="1">
- <stop offset="0" stop-color="#e0e0e0" stop-opacity="1"/>
- <stop offset="1" stop-color="#666666" stop-opacity="1"/>
- </linearGradient>
- </defs>
- <g>
- <path d="m68.82031,270.04688l-22,-33l17,-35l34,2l25,15l7,-35l28,-16l25,12l100,102l21,23l-15,35l-36,9l20,49l-31,24l-49,-17l-1,31l-33,21l-31,-19l-13,-35l-30,21l-30,-9l-5,-35l16,-31l-32,-6l-15,-19l3,-36l47,-18z" id="svg_19" fill="#ffffff"/>
- <path fill="#1a171a" fill-rule="nonzero" id="path2902" d="m158.96452,155.03685c-25.02071,0 -45.37077,20.35121 -45.37077,45.3775c0,0.72217 0.01794,1.4399 0.0471,2.15645c-0.49339,-0.53604 -0.99355,-1.06085 -1.50603,-1.58452c-8.56077,-8.55519 -19.95982,-13.28413 -32.07432,-13.28413c-12.12122,0 -23.52027,4.72334 -32.08778,13.29646c-17.69347,17.69464 -17.69347,46.4619 0,64.17445c0.51809,0.51697 1.0485,1.0126 1.59015,1.50601c-0.72891,-0.03586 -1.45782,-0.04822 -2.19234,-0.04822c-25.02071,0 -45.37189,20.35117 -45.37189,45.37747c0,25.01398 20.35119,45.36517 45.37189,45.36517c0.72891,0 1.45221,-0.01236 2.1744,-0.04828c-0.5293,0.48221 -1.05412,0.98801 -1.56547,1.49368c-17.70021,17.68906 -17.70021,46.48654 -0.00628,64.18677c8.57872,8.56747 19.96655,13.2785 32.08778,13.2785c12.1145,0 23.5012,-4.71103 32.07433,-13.2785c0.51247,-0.51694 1.01823,-1.04849 1.50603,-1.57895c-0.02915,0.71213 -0.04709,1.44669 -0.04709,2.15759c0,25.01511 20.35007,45.37747 45.37077,45.37747c25.01398,0 45.37079,-20.3624 45.37079,-45.37747c0,-0.7222 -0.01689,-1.44553 -0.05266,-2.18112c0.48105,0.52933 0.97562,1.04849 1.48697,1.56662c8.57982,8.57977 19.97775,13.2908 32.1057,13.2908c12.11003,0 23.51358,-4.71103 32.0687,-13.2785c17.68906,-17.70013 17.68906,-46.48538 0,-64.17441c-0.50577,-0.4946 -1.01141,-1.00034 -1.54306,-1.48248c0.69983,0.03592 1.42316,0.04828 2.16992,0.04828c25.01514,0 45.35284,-20.35123 45.35284,-45.36517c0,-25.02631 -20.33774,-45.37747 -45.35284,-45.37747c-0.74683,0 -1.47009,0.01236 -2.19345,0.04822c0.53152,-0.49341 1.06082,-0.98904 1.59128,-1.50601c8.55521,-8.55521 13.2785,-19.94186 13.2785,-32.07545c0,-12.12793 -4.72336,-23.52028 -13.30319,-32.0934c-8.55515,-8.56076 -19.95866,-13.2841 -32.0687,-13.2841c-12.12122,0 -23.52025,4.72334 -32.08777,13.2841c-0.51137,0.5181 -1.01822,1.04851 -1.5049,1.57895c0.03586,-0.72331 0.05266,-1.43991 0.05266,-2.16881c0,-25.02629 -20.35681,-45.3775 -45.37079,-45.3775m0,20.71901c13.61607,0 24.65851,11.03122 24.65851,24.65849c0,6.62749 -2.651,12.62137 -6.9101,17.04979l0,51.67419l36.53975,-36.53523c0.12001,-6.14418 2.48277,-12.24686 7.18146,-16.94667c4.81305,-4.81305 11.12094,-7.22409 17.44116,-7.22409c6.30228,0 12.61577,2.41104 17.43552,7.22409c9.62166,9.63287 9.62166,25.24948 0,34.87669c-4.69977,4.68634 -10.80803,7.04915 -16.95334,7.18147l-36.5341,36.53305l51.66742,0c4.42841,-4.25351 10.42905,-6.90451 17.08008,-6.90451c13.59137,0 24.62933,11.03799 24.62933,24.66525c0,13.61606 -11.03796,24.66519 -24.62933,24.66519c-6.65106,0 -12.65167,-2.66333 -17.08008,-6.91681l-51.64836,0l36.50273,36.50946c6.16995,0.14465 12.26587,2.50522 16.96568,7.20618c9.6216,9.61487 9.6216,25.23151 0,34.85757c-4.80856,4.81979 -11.13327,7.22974 -17.43556,7.22974c-6.32019,0 -12.63371,-2.40991 -17.44786,-7.22974c-4.68074,-4.68744 -7.04802,-10.79572 -7.17473,-16.94098l-36.53975,-36.53415l0,51.66742c4.25908,4.44635 6.9101,10.43466 6.9101,17.0621c0,13.62729 -11.04243,24.66415 -24.65851,24.66415c-13.62166,0 -24.65848,-11.0369 -24.65848,-24.66415c0,-6.62744 2.64539,-12.61575 6.90335,-17.0621l0,-51.66742l-36.53864,36.54648c-0.12672,6.14413 -2.48838,12.26477 -7.18147,16.94098c-4.81416,4.81873 -11.12206,7.22974 -17.42882,7.22974c-6.31461,0 -12.6225,-2.41101 -17.43555,-7.22974c-9.63284,-9.62833 -9.63284,-25.24277 0,-34.8699c4.68073,-4.67627 10.79012,-7.05026 16.94101,-7.18262l36.533,-36.53302l-51.66632,0c-4.44075,4.25348 -10.42902,6.91681 -17.06211,6.91681c-13.61606,0 -24.65288,-11.04913 -24.65288,-24.66519c0,-13.62726 11.03682,-24.66525 24.65288,-24.66525c6.63309,0 12.62136,2.651 17.06211,6.90451l51.68537,0l-36.55208,-36.54538c-6.14527,-0.12 -12.25354,-2.49403 -16.94775,-7.19377c-9.62611,-9.61493 -9.62611,-25.23715 0,-34.86441c4.81419,-4.81305 11.12769,-7.22406 17.44228,-7.22406c6.30676,0 12.61465,2.41101 17.42883,7.22406c4.69978,4.69307 7.06034,10.80246 7.18144,16.94777l36.5386,36.53299l0,-51.66074c-4.25795,-4.42841 -6.90334,-10.42229 -6.90334,-17.04979c0,-13.62726 11.03682,-24.65848 24.65848,-24.65848"/>
- <path d="m188.82031,210.04688l16,-47l155,-148l107,100l-158,156.99999l-44,12l-76,-74z" id="svg_6" fill="url(#svg_10)" stroke="none"/>
- <path d="m335.57031,40.29688c-11.5,39.75 55.5,115.25 109.25,98.75l21,-20.99999l-103,-101l-27.25,23.25z" id="svg_11" fill="url(#svg_18)" stroke="none"/>
- <rect x="272.80404" y="20.76382" width="42.35197" height="232.66835" id="svg_13" fill="#ffffff" stroke="none" transform="rotate(45.9094, 293.98, 137.1)" opacity="0.4"/>
- <rect x="282.80404" y="22.76382" width="14" height="232.66835" fill="#ffffff" stroke="none" transform="rotate(45.9094, 289.805, 139.1)" opacity="0.4" id="svg_14"/>
- <ellipse cx="415.13312" cy="64.38066" id="svg_12" fill="#ea7598" stroke="none" rx="67.79251" ry="34.82026" transform="rotate(39.4735, 415.133, 64.379)"/>
- <path d="m212.07031,166.04688c-8.5,47 36.25,103.75 99.25,96.75l-152.5,53.25l53.25,-150z" id="svg_4" fill="url(#svg_5)" stroke="none"/>
- <path d="m181.32031,242.54688c0.5,20.5 26.75,45 46.75,48.5l-66.25,20l19.5,-68.5z" id="svg_3" fill="#27382f" stroke="none"/>
- </g>
- <g>
- <title>Layer 2</title>
- <path d="m152.82031,317.04688l51,-152l157,-153c40,-12.00001 118,48 105,105l-157,152.99999l-156,47z" id="svg_1" fill="none" stroke="#800000" stroke-width="17"/>
- </g>
-</svg>
-</g>
-
-
-<g id="select">
- <svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
- <path stroke="#ffffff" fill="#000000" id="svg_13" d="m7.38168,2.46948l0.07502,17.03258l3.30083,-2.62617l2.62566,5.62751l4.20105,-2.62617l-3.30082,-4.80214l4.57614,-0.37517l-11.47787,-12.23044z"/>
- </svg>
-</g>
-
-<g id="select_node">
- <svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
- <circle stroke="#0000ff" fill="#00ffff" id="svg_44" r="3.87891" cy="5.3" cx="8.7" stroke-width="1.5"/>
- <path d="m9.18161,5.6695l0.07763,15.16198l3.41588,-2.33775l2.71718,5.00947l4.34748,-2.33775l-3.41587,-4.27474l4.73565,-0.33397l-11.87794,-10.88723z" id="svg_13" fill="#000000" stroke="#ffffff"/>
- </svg>
-</g>
-
-<g id="square">
-<svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
- <defs>
- <linearGradient id="svg_2" x1="0.36328" y1="0.10156" x2="1" y2="1">
- <stop offset="0" stop-color="#ffffff" stop-opacity="1"/>
- <stop offset="1" stop-color="#3b7e9b" stop-opacity="1"/>
- </linearGradient>
- </defs>
- <rect x="1.5" y="1.5" width="20" height="20" id="svg_1" fill="url(#svg_2)" stroke="#000000"/>
- </svg>
-</g>
-
-<g id="rect">
-<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
- <defs>
- <linearGradient y2="1" x2="1" y1="0.10156" x1="0.36328" id="svg_2">
- <stop stop-opacity="1" stop-color="#ffffff" offset="0"/>
- <stop stop-opacity="1" stop-color="#3b7e9b" offset="1"/>
- </linearGradient>
- </defs>
- <rect transform="matrix(1, 0, 0, 1, 0, 0)" stroke="#000000" fill="url(#svg_2)" id="svg_1" height="12" width="20" y="5.5" x="1.5"/>
- </svg>
-</g>
-
-<g id="fh_rect">
-<svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 52 52">
- <defs>
- <linearGradient y2="1" x2="1" y1="0.10156" x1="0.36328" id="svg_2">
-
- <stop stop-opacity="1" stop-color="#ffffff" offset="0"/>
- <stop stop-opacity="1" stop-color="#3b7e9b" offset="1"/>
- </linearGradient>
- <linearGradient y2="0.3945" x2="0.6132" y1="0.1093" x1="0.3046" id="svg_9">
- <stop stop-opacity="1" stop-color="#f9d225" offset="0"/>
- <stop stop-opacity="1" stop-color="#bf5f00" offset="1"/>
- </linearGradient>
- </defs>
- <rect stroke="#000000" stroke-width="2" fill="url(#svg_2)" id="svg_1" height="50" width="50" y="0.75" x="1.25"/>
- <path stroke-width="2" stroke="#000000" fill="url(#svg_9)" id="svg_2" d="m31.5,0l-8.75,20.25l0.75,24l16.5,-16.5l6,-12.5"/>
- <path stroke-width="2" stroke="#000000" fill="#fce0a9" id="svg_10" d="m39.5,28.5c-2,-9.25 -10.25,-11.75 -17,-7.4375l0.4843,24.4414z"/>
- <path id="svg_11" stroke-width="2" stroke="#000000" fill="#000000" d="m26.9318,41.1745c-0.4491,-2.3511 -2.3021,-2.9866 -3.8181,-1.8905l0.1087,6.2126z"/>
-</svg>
-</g>
-
-
-<g id="circle">
-<svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 54 54">
- <defs>
- <linearGradient y2="1.0" x2="1.0" y1="0.1875" x1="0.171875" id="svg_4">
- <stop stop-opacity="1" stop-color="#ffffff" offset="0.0"/>
- <stop stop-opacity="1" stop-color="#ff6666" offset="1.0"/>
- </linearGradient>
- </defs>
- <g>
- <circle stroke-opacity="1" fill-opacity="1" stroke-width="2" stroke="#000000" fill="url(#svg_4)" id="svg_1" r="23" cy="27" cx="27"/>
- </g>
-</svg>
-</g>
-
-<g id="ellipse">
-<svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 54 54">
- <defs>
- <linearGradient y2="1.0" x2="1.0" y1="0.1875" x1="0.171875" id="svg_4">
- <stop stop-opacity="1" stop-color="#ffffff" offset="0.0"/>
- <stop stop-opacity="1" stop-color="#ff6666" offset="1.0"/>
- </linearGradient>
- </defs>
- <g>
- <ellipse stroke-opacity="1" fill-opacity="1" stroke-width="2" stroke="#000000" fill="url(#svg_4)" id="svg_1" rx="23" ry="15" cy="27" cx="27"/>
- </g>
-</svg>
-</g>
-
-<g id="fh_ellipse">
-<svg viewBox="0 0 52 52" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
- <defs>
- <linearGradient id="svg_9" x1="0.3046" y1="0.1093" x2="0.6132" y2="0.3945">
- <stop offset="0" stop-color="#f9d225" stop-opacity="1"/>
- <stop offset="1" stop-color="#bf5f00" stop-opacity="1"/>
- </linearGradient>
- <linearGradient id="svg_4" x1="0.17188" y1="0.1875" x2="1" y2="1">
- <stop offset="0" stop-color="#ffffff" stop-opacity="1"/>
- <stop offset="1" stop-color="#ff6666" stop-opacity="1"/>
- </linearGradient>
- </defs>
- <ellipse stroke-width="2" stroke="#000000" fill="url(#svg_4)" id="svg_1" rx="23" ry="12" cy="37" cx="27"/>
- <path d="m31.5,0l-8.75,20.25l0.75,24l16.5,-16.5l6,-12.5" id="svg_2" fill="url(#svg_9)" stroke="#000000" stroke-width="2"/>
- <path d="m39.5,28.5c-2,-9.25 -10.25,-11.75 -17,-7.4375l0.4843,24.4414z" id="svg_10" fill="#fce0a9" stroke="#000000" stroke-width="2"/>
- <path d="m26.9318,41.1745c-0.4491,-2.3511 -2.3021,-2.9866 -3.8181,-1.8905l0.1087,6.2126z" fill="#000000" stroke="#000000" stroke-width="2" id="svg_11"/>
- </svg>
-</g>
-
-<g id="pencil">
-<svg viewBox="0 0 48 52" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
- <defs>
- <linearGradient id="svg_9" x1="0.3046" y1="0.1093" x2="0.6132" y2="0.3945">
- <stop offset="0.0" stop-color="#f9d225" stop-opacity="1"/>
- <stop offset="1.0" stop-color="#bf5f00" stop-opacity="1"/>
- </linearGradient>
- </defs>
- <path d="M31.5,0 l-8.75,20.25 l0.75,24 l16.5,-16.5 l6,-12.5" id="svg_2" fill="url(#svg_9)" stroke="#000000" stroke-width="2" fill-opacity="1" stroke-opacity="1"/>
- <path d="M39.5,28.5 c-2,-9.25 -10.25,-11.75 -17,-7.4375 l0.4843,24.4414z" id="svg_10" fill="#fce0a9" stroke="#000000" stroke-width="2" fill-opacity="1" stroke-opacity="1"/>
- <path d="M26.9318,41.1745 c-0.4491,-2.3511 -2.3021,-2.9866 -3.8181,-1.8905 l0.1087,6.2126z" fill="#000000" stroke="#000000" stroke-width="2" fill-opacity="1" stroke-opacity="1" id="svg_11"/>
- <path d="M2.3132,4.6197 c12.4998,-1.6891 10.4729,7.0945 0,21.6215 c22.9729,-4.0539 12.1620,5.4053 12.1620,13.1756 c-0.3377,4.0539 8.7836,21.9594 26.0135,-1.3513" id="svg_12" fill="none" stroke="#000000" stroke-width="2" fill-opacity="1" stroke-opacity="1"/>
-</svg>
-</g>
-
-<g id="pen">
- <svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
- <defs>
- <linearGradient id="svg_16" x1="0.46484" y1="0.15625" x2="0.9375" y2="0.39453">
- <stop offset="0" stop-color="#f2feff" stop-opacity="1"/>
- <stop offset="1" stop-color="#14609b" stop-opacity="1"/>
- </linearGradient>
- <linearGradient id="svg_19" x1="0.18359" y1="0.26172" x2="0.77734" y2="0.56641">
- <stop offset="0" stop-color="#ffffff" stop-opacity="1"/>
- <stop offset="1" stop-color="#fce564" stop-opacity="1"/>
- </linearGradient>
- </defs>
- <line x1="0.99844" y1="1.49067" x2="12.97691" y2="21.14149" id="svg_5" stroke="#000000" fill="none"/>
- <path d="m14.05272,13.68732l-1.46451,7.52632l4.03769,-6.32571" id="svg_6" fill="#a0a0a0" stroke="#000000"/>
- <path d="m13.61215,10.26563c-0.38567,1.05257 -0.60723,2.40261 -0.50403,3.125l4.33468,1.81452c0.46153,-0.30769 1.6129,-1.71371 1.6129,-2.52016" id="svg_7" fill="url(#svg_19)" stroke="#000000"/>
- <path d="m16.61335,1.00028l-3.67325,8.60247l7.10285,3.47318l3.17783,-7.20549" id="svg_8" fill="url(#svg_16)" stroke="#000000"/>
- </svg>
-</g>
-
-<g id="text">
- <svg viewBox="0 0 158 128" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
- <text x="58" y="120" id="svg_1" fill="#000000" stroke="none" font-size="120pt" font-family="sans-serif" text-anchor="middle" fill-opacity="1" stroke-opacity="1" font-weight="bold">A</text>
- <line x1="136" y1="7" x2="136" y2="121" id="svg_2" stroke="#000000" fill="none" fill-opacity="1" stroke-opacity="1" stroke-width="5"/>
- <line x1="120" y1="4" x2="152" y2="4" id="svg_3" stroke="#000000" stroke-width="5" fill="none" fill-opacity="1" stroke-opacity="1"/>
- <line x1="120" y1="124" x2="152" y2="124" stroke="#000000" stroke-width="5" fill="none" fill-opacity="1" stroke-opacity="1" id="svg_4"/>
- </svg>
-</g>
-
-
-<g id="path">
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 124 124" xmlns:xlink="http://www.w3.org/1999/xlink">
- <defs>
- <linearGradient y2="1" x2="1" y1="0.28125" x1="0.33594" id="svg_4">
- <stop stop-opacity="1" stop-color="#ffffff" offset="0"/>
- <stop stop-opacity="1" stop-color="#33a533" offset="1"/>
- </linearGradient>
- </defs>
- <path stroke-dasharray="null" stroke-width="4" stroke="#000000" fill="url(#svg_4)" id="svg_1" d="m6,103l55,-87c85,33.64 -26,37.12 55,87l-110,0z"/>
- </svg>
-</g>
-
-<g id="add_subpath">
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 124 124" xmlns:xlink="http://www.w3.org/1999/xlink">
- <defs>
- <linearGradient id="svg_4" x1="0.33594" y1="0.28125" x2="1" y2="1">
- <stop offset="0" stop-color="#ffffff" stop-opacity="1"/>
- <stop offset="1" stop-color="#33a533" stop-opacity="1"/>
- </linearGradient>
- </defs>
- <g>
- <path d="m6,103l55,-87c85,33.64 -26,37.12 55,87l-110,0z" id="svg_1" fill="url(#svg_4)" stroke="#000000" stroke-width="4" stroke-dasharray="null"/>
- <g id="svg_7">
- <circle stroke-dasharray="null" stroke-width="5" stroke="#000000" fill="#ffffff" id="svg_6" r="22.63281" cy="88.5" cx="45.5"/>
- <line stroke-dasharray="null" stroke-width="7" stroke="#000000" id="svg_2" y2="104.03768" x2="45.5" y1="72.96232" x1="45.5"/>
- <line stroke-dasharray="null" stroke-width="7" stroke="#000000" id="svg_3" y2="88.5" x2="61.03768" y1="88.5" x1="29.96232"/>
- </g>
- </g>
- </svg>
-</g>
-
-<g id="close_path">
-<svg viewBox="0 0 300 300" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
- <g>
- <path stroke="#000" stroke-width="15" fill="#ffc8c8" d="m121.5,40l-84,106l27,115l166,2l29,-111"/>
- <line x1="240" y1="136" x2="169.5" y2="74" stroke="#A00" stroke-width="25" fill="none"/>
- <path stroke="none" fill ="#A00" d="m158,65l31,74l-3,-50l51,-3z"/>
- <g stroke-width="15" stroke="#00f" fill="#0ff">
- <circle r="30" cy="41" cx="123"/>
- <circle r="30" cy="146" cx="40"/>
- <circle r="30" cy="260" cx="69"/>
- <circle r="30" cy="260" cx="228"/>
- <circle r="30" cy="148" cx="260"/>
- </g>
- </g>
-</svg>
-</g>
-
-<g id="open_path">
-<svg viewBox="0 0 300 300" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
- <g>
- <path stroke="#000" stroke-width="15" fill="#ffc8c8" d="m123.5,38l-84,106l27,115l166,2l29,-111"/>
- <line x1="276.5" y1="153" x2="108.5" y2="24" stroke="#000" stroke-width="10" fill="none"/>
- <g stroke-width="15" stroke="#00f" fill="#0ff">
- <circle r="30" cy="41" cx="123"/>
- <circle r="30" cy="146" cx="40"/>
- <circle r="30" cy="260" cx="69"/>
- <circle r="30" cy="260" cx="228"/>
- <circle r="30" cy="148" cx="260"/>
- </g>
- <g stroke="#A00" stroke-width="15" fill="none">
- <line x1="168" y1="24" x2="210" y2="150"/>
- <line x1="210" y1="24" x2="168" y2="150"/>
- </g>
- </g>
-</svg>
-</g>
-
-
-<g id="image">
-<svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
- <defs>
- <linearGradient y2="1" x2="1" y1="0" x1="1" id="svg_25">
- <stop stop-opacity="1" stop-color="#10284c" offset="0"/>
- <stop stop-opacity="1" stop-color="#5374ad" offset="1"/>
- </linearGradient>
- <linearGradient y2="0.75781" x2="0.99609" y1="0" x1="1" id="svg_23">
- <stop stop-opacity="1" stop-color="#162e84" offset="0"/>
- <stop stop-opacity="1" stop-color="#97c4ef" offset="1"/>
- </linearGradient>
- </defs>
- <rect x="1" y="3.83333" width="22" height="17" id="svg_18" fill="#202020" stroke="none"/>
- <rect stroke-width="1.2" stroke="#ffffff" fill="#232947" id="svg_15" height="14" width="19" y="5.33333" x="2.5"/>
- <rect fill="url(#svg_23)" id="svg_20" height="7.02244" width="15.96424" y="6.7266" x="4"/>
- <rect fill="url(#svg_25)" id="svg_24" height="4.02393" width="15.96303" y="13.77454" x="4"/>
- <circle fill="#ffffad" id="svg_26" r="1.83333" cy="9.82002" cx="7.13254"/>
- <path d="m14.5696,13.77458l0.70243,-4.85313l-3.12899,4.85313l2.42656,0z" id="svg_14" fill="#404040" stroke="none"/>
- <path d="m15.27203,8.98531c2.74584,0.06386 2.42657,4.21456 -0.63857,4.85313c0.70243,-1.27714 1.66028,-3.63985 0.63857,-4.85313z" id="svg_17" fill="#404040" stroke="none"/>
-</svg>
-</g>
-
-<g id="zoom">
- <svg viewBox="0 0 150 150" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
- <defs>
- <linearGradient id="svg_30" x1="0" y1="0" x2="1" y2="0">
- <stop offset="0" stop-color="#d3d3d3" stop-opacity="1"/>
- <stop offset="1" stop-color="#424242" stop-opacity="1"/>
- </linearGradient>
- </defs>
- <path d="m107.14774,101.03477l-0.64774,43.96523c5.00857,4.72089 14.00811,5.27188 19,0l-0.31667,-44.16l-9.61514,-19.84l-8.42046,20.03477z" id="svg_29" fill="url(#svg_30)" stroke="#202020" stroke-width="2" transform="rotate(-45, 116, 114)"/>
- <circle cx="58" cy="58" r="51" id="svg_22" fill="#c0c0c0" stroke="#202020" stroke-width="5"/>
- <circle cx="58" cy="58" r="43" id="svg_27" fill="#aaccff" stroke="none"/>
- <path d="m15.68604,61.46511c38.13954,17.67442 48.13954,15.34883 85.11628,-0.46511c1.39536,18.60465 -19.30231,41.86047 -42.7907,40.93023c-21.6279,-0.93023 -42.7907,-21.86046 -42.32558,-40.46511z" id="svg_28" fill="#8cbaff" stroke="none"/>
- </svg>
-</g>
-
-<g id="arrow_right">
- <svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 25 50">
- <path stroke="#000000" fill="#000000" d="m0,0l0,50l25,-25l-25,-25z"/>
- </svg>
-</g>
-
-<g id="arrow_right_big">
- <svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 40 50">
- <path stroke="#000000" fill="#000000" d="m0,0l0,50l25,-25l-25,-25z"/>
- </svg>
-</g>
-
-<g id="arrow_down">
- <svg viewBox="0 0 50 40" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
- <path transform="rotate(90, 26, 13)" d="m14,-12l0,50l25,-25l-25,-25z" fill="#000000" stroke="#000000"/>
- </svg>
-</g>
-
-<g id="fill">
-<svg width="32" height="33" xmlns="http://www.w3.org/2000/svg">
- <g id="svg_5">
- <path id="svg_4" d="m17.49167,10.97621c6.9875,-0.325 12.1875,2.70833 12.13333,7.36667l-0.325,10.075c-0.75833,4.0625 -2.275,3.0875 -3.03333,0.10833l0.21667,-9.64166c-0.43333,-0.975 -1.08333,-1.625 -1.95,-1.51667" stroke-linejoin="round" stroke="#606060" fill="#c0c0c0"/>
- <path id="svg_1" d="m2.00055,17.1309l10.72445,-10.72445l12.67445,12.13279l-3.52056,0.05389l-9.15389,9.26223l-10.72445,-10.72445z" stroke-linejoin="round" stroke="#000000" fill="#c0c0c0"/>
- <path id="svg_3" d="m14.35,13.57621c-0.1625,-3.95417 0.86667,-11.7 -1.84167,-11.59167c-2.70833,0.10833 -2.6,2.05833 -2.16667,6.93333" stroke-linejoin="round" stroke="#000000" fill="none"/>
- <circle id="svg_2" r="1.60938" cy="15.20121" cx="14.45833" stroke-linejoin="round" stroke="#000000" fill="none"/>
- </g>
-</svg>
-</g>
-
-<g id="stroke">
-<svg width="50" height="50" xmlns="http://www.w3.org/2000/svg">
- <rect fill="none" stroke="#707070" stroke-width="10" x="8.625" y="8.625" width="32.75" height="32.75" id="svg_1"/>
-</svg>
-</g>
-
-<g id="opacity">
-<svg width="50" height="50" xmlns="http://www.w3.org/2000/svg">
- <defs>
- <linearGradient y2="0.1" x2="0.9" y1="0.9" x1="0.1" id="svg_7">
- <stop stop-color="#000000" offset="0"/>
- <stop stop-opacity="0" stop-color="#000000" offset="1"/>
- </linearGradient>
- </defs>
- <rect id="svg_4" height="50" width="50" y="0" x="0" fill="#ffffff"/>
- <rect id="svg_1" height="25" width="25" y="0" x="0" fill="#a0a0a0"/>
- <rect id="svg_2" height="25" width="25" y="25" x="25" fill="#a0a0a0"/>
- <rect id="svg_3" height="50" width="50" y="0" x="0" stroke-width="2" stroke="url(#svg_7)" fill="url(#svg_7)"/>
- </svg>
-</g>
-
-<g id="new_image">
-<svg width="24" height="24" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
- <rect x="2.42792" y="1.6692" width="18" height="21" id="svg_55" fill="#eaeaea" stroke="#606060"/>
- <circle stroke="none" fill="url(#svg_9)" id="svg_65" r="6.300781" cy="7.529969" cx="17.761984"/>
- <defs>
- <radialGradient id="svg_9" cx="0.5" cy="0.5" r="0.5">
- <stop offset="0.1" stop-color="#ffe500" stop-opacity="1"/>
- <stop offset="1" stop-color="#ffff00" stop-opacity="0"/>
- </radialGradient>
- </defs>
-</svg>
-</g>
-
-<g id="save">
- <svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
- <defs>
- <linearGradient y2="0" x2="1" y1="0" x1="0" id="svg_41">
- <stop stop-opacity="1" stop-color="#727272" offset="0"/>
- <stop stop-opacity="1" stop-color="#d6d6d6" offset="1"/>
- </linearGradient>
- <linearGradient y2="0.875" x2="0.21484" y1="0.00391" x1="0.04297" id="svg_46">
- <stop stop-opacity="1" stop-color="#81bbf4" offset="0"/>
- <stop stop-opacity="1" stop-color="#376eb7" offset="1"/>
- </linearGradient>
- </defs>
- <path stroke="#202020" fill="#e0e0e0" id="svg_21" d="m1.51669,22.3458l21.13245,-0.10111l0,-6.06673l-2.62892,-9.80789l-16.27907,0.10111l-2.32558,9.20121l0.10111,6.67341z"/>
- <rect stroke="#efefef" fill="url(#svg_41)" id="svg_32" height="4.75108" width="19.21031" y="16.58227" x="2.42667"/>
- <path stroke="#ffffff" fill="#c0c0c0" id="svg_42" d="m4.55005,11.12235l0.70779,-2.83114l13.04348,0l0.70779,3.13448c-0.70779,2.52781 -4.04479,3.84227 -7.17897,3.84227c-2.72977,0 -6.37007,-1.41557 -7.28008,-4.1456z"/>
- <path stroke="#285582" fill="url(#svg_46)" id="svg_45" d="m7.14286,9.74903l5.21236,5.79151l5.50193,-5.88803l-2.50965,-0.09653l0,-2.79923c0,-2.3166 -2.3166,-5.59846 -6.56371,-5.59846c-4.05405,0 -6.27413,3.37838 -6.56371,6.75676c0.48263,-1.5444 2.7027,-4.53668 4.44015,-4.44015c2.12355,-0.09653 2.79923,1.64093 2.79923,3.37838l0.09653,2.79923l-2.41313,0.09653z"/>
- </svg>
-</g>
-
-<g id="export">
- <svg width="24" height="24" xmlns="http://www.w3.org/2000/svg">
- <defs>
- <linearGradient id="svg_5" x1="0.77734" y1="0.51172" x2="0.09375" y2="0.53516">
- <stop offset="0" stop-color="#81bbf4"/>
- <stop offset="1" stop-color="#376eb7"/>
- </linearGradient>
- </defs>
- <g>
- <rect x="7.22599" y="1.3603" width="15.76465" height="21.51735" id="svg_55" fill="#eaeaea" stroke="#606060"/>
- <circle fill="#31abed" stroke-width="0.5" cx="17.4206" cy="11.1278" r="4.69727" id="svg_3"/>
- <path fill="#ffcc00" stroke-width="0.5" d="m9.67673,20.24302l7.38701,-6.80778l2.91746,6.71323" id="svg_4"/>
- <rect fill="#ff5555" stroke-width="0.5" x="9.5385" y="2.94914" width="5.74652" height="5.74652" id="svg_2"/>
- <path d="m6.13727,17.94236l5.77328,-4.91041l-5.86949,-5.1832l-0.09622,2.36426l-4.64805,-0.06751l-0.04665,5.54694l4.79093,-0.02342l0.09623,2.27334z" id="svg_45" fill="url(#svg_5)" stroke="#285582"/>
- </g>
- </svg>
-</g>
-
-<g id="open">
-<svg viewBox="0 0 22 22" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
- <defs>
- <linearGradient y2="0.91406" x2="0.65234" y1="0.14063" x1="0.42578" id="svg_76">
- <stop stop-opacity="1" stop-color="#81bbf4" offset="0"/>
- <stop stop-opacity="1" stop-color="#376eb7" offset="1"/>
- </linearGradient>
- </defs>
- <rect x="1.65" y="3.75" width="9.8" height="16.72712" id="svg_98" fill="#c0c0c0" stroke="#606060"/>
- <rect stroke="none" fill="#a0a0a0" id="svg_88" height="14.17459" width="6.39585" y="4.9758" x="2.89542"/>
- <path d="m18.62576,4.54365l0,6.91443l-9.9395,0l-0.08643,-10.11236l6.828,0l3.19792,3.19793z" id="svg_99" fill="#e0e0e0" stroke="#404040"/>
- <path d="m2.95,20.53644l1.65,-12.03644l16.2,0l-1.5,12l-16.35,0.03643z" id="svg_97" fill="url(#svg_76)" stroke="#285582"/>
- <line fill="none" stroke="#606060" id="svg_89" y2="4.28436" x2="13.95851" y1="4.28436" x1="10.32844"/>
- <line fill="none" stroke="#606060" id="svg_91" y2="6.53155" x2="14.82282" y1="6.53155" x1="10.32844"/>
- <path stroke="none" fill="#ffffff" id="svg_100" d="m15.25895,1.95069l-0.00401,2.85225l2.89558,0.00004l-2.89157,-2.85229z"/>
-</svg>
-</g>
-
-<g id="import">
-<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
- <defs>
- <linearGradient y2="0.875" x2="0.21484" y1="0.00391" x1="0.04297" id="svg_46_import">
- <stop stop-opacity="1" stop-color="#81f4bb" offset="0"/>
- <stop stop-opacity="1" stop-color="#37b76e" offset="1"/>
- </linearGradient>
- </defs>
- <rect x="2.42792" y="1.6692" width="18" height="21" id="svg_55" fill="#eaeaea" stroke="#606060"/>
- <path stroke="#285582" fill="url(#svg_46_import)" id="svg_45" d="m7.14286,12.74903l5.21236,5.79151l5.50193,-5.88803l-2.50965,-0.09653l0,-2.79923c0,-2.3166 -2.3166,-5.59846 -6.56371,-5.59846c-4.05405,0 -6.27413,3.37838 -6.56371,6.75676c0.48263,-1.5444 2.7027,-4.53668 4.44015,-4.44015c2.12355,-0.09653 2.79923,1.64093 2.79923,3.37838l0.09653,2.79923l-2.41313,0.09653z"/>
-</svg>
-</g>
-
-<g id="docprops">
- <svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
- <defs>
- <linearGradient y2="1" x2="1" y1="0.5" x1="1" id="svg_53">
- <stop stop-opacity="1" stop-color="#606060" offset="0"/>
- <stop stop-opacity="0" stop-color="#5e5e5e" offset="1"/>
- </linearGradient>
- </defs>
- <rect stroke="#606060" fill="#eaeaea" id="svg_55" height="21" width="18" y="1.6692" x="2.42792"/>
- <line fill="none" stroke="#a0a0a0" id="svg_56" y2="4.37757" x2="14.89023" y1="4.37757" x1="6.696"/>
- <line fill="none" stroke="#a0a0a0" id="svg_57" y2="7.10804" x2="12.92026" y1="7.10804" x1="6.6948"/>
- <line fill="none" stroke="#a0a0a0" id="svg_58" y2="9.84241" x2="15.64716" y1="9.84241" x1="6.6942"/>
- <line fill="none" stroke="#a0a0a0" id="svg_59" y2="12.36585" x2="13.21805" y1="12.36585" x1="6.69691"/>
- <line fill="none" stroke="#a0a0a0" id="svg_60" y2="15.06507" x2="14.43591" y1="15.06507" x1="6.69691"/>
- <line fill="none" stroke="#a0a0a0" id="svg_61" y2="17.84241" x2="13.36979" y1="17.84241" x1="6.69691"/>
- <g id="svg_54">
- <path transform="rotate(-45, 12.5448, 11.7085)" stroke="none" fill="#606060" id="svg_31" d="m11.24329,8.73944l0,2.79974l2.53499,0.07777l0,-2.95528c1.78134,0.07777 2.26093,1.39987 2.12391,2.95528c-0.06851,1.63318 -1.30175,3.49967 -3.49418,3.26636c-2.19242,-0.31108 -2.87755,-1.39987 -3.15161,-2.72197c-0.27406,-1.39987 0.41108,-3.34413 1.98689,-3.4219z"/>
- <rect opacity="0.95" transform="rotate(-45, 16.2485, 15.1732)" stroke="none" fill="url(#svg_53)" id="svg_50" height="4.85445" width="2.57974" y="12.746" x="15.04047"/>
- </g>
- </svg>
-</g>
-
-<g id="source">
-<svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 55 52">
- <text xml:space="preserve" text-anchor="middle" font-family="monospace" font-size="24" stroke="none" fill="#019191" id="svg_40" y="15" x="28.23" font-weight="bold">s</text>
- <text xml:space="preserve" text-anchor="middle" font-family="monospace" font-size="24" stroke="none" fill="#019191" id="svg_47" y="30" x="28.23" font-weight="bold">v</text>
- <text xml:space="preserve" text-anchor="middle" font-family="monospace" font-size="24" stroke="none" fill="#019191" id="svg_48" y="44" x="28.23" font-weight="bold">g</text>
- <line stroke-width="3" fill="none" stroke="#aa0000" id="svg_51" y2="43" x2="16" y1="25" x1="5"/>
- <line id="svg_62" stroke-width="3" fill="none" stroke="#aa0000" y2="8" x2="16" y1="26" x1="5"/>
- <line id="svg_63" stroke-width="3" fill="none" stroke="#aa0000" y2="43" x2="39" y1="25" x1="50"/>
- <line id="svg_64" stroke-width="3" fill="none" stroke="#aa0000" y2="8" x2="39" y1="26" x1="51"/>
- </svg>
-</g>
-
-<g id="wireframe">
- <svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
- <circle stroke="#000000" fill="none" id="svg_49" r="8" cy="9.5" cx="9.5"/>
- <rect stroke="#000000" fill="none" id="svg_52" height="14" width="14" y="8.5" x="8.5"/>
- </svg>
-</g>
-
-<g id="undo">
-<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
- <defs>
- <linearGradient id="svg_66" x1="0.04297" y1="0.00391" x2="0.21484" y2="0.875">
- <stop offset="0" stop-color="#f7f963" stop-opacity="1"/>
- <stop offset="1" stop-color="#d3c310" stop-opacity="1"/>
- </linearGradient>
- </defs>
- <path transform="rotate(-90, 10.3017, 11.5526)" d="m6.70188,10.72562l6.55493,-7.13388l6.65817,7.24912l-3.79441,0.03193l0,2.72259c-0.04257,2.74017 -2.76516,5.83068 -7.81235,6.02135c-5.18575,0 -7.1226,-3.75464 -7.49302,-7.41944c0.61736,1.6754 3.14913,3.78397 5.3716,3.67918c2.71635,0.1048 4.41501,-0.61714 4.41501,-2.50184l0,-2.64901l-3.89995,0z" id="svg_45" fill="url(#svg_66)" stroke="#b7a800"/>
- </svg>
-</g>
-
-<g id="redo">
-<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
- <defs>
- <linearGradient y2="1" x2="1" y1="0" x1="1" id="svg_71">
- <stop stop-opacity="1" stop-color="#98fc46" offset="0"/>
- <stop stop-opacity="1" stop-color="#56aa25" offset="1"/>
- </linearGradient>
- </defs>
- <path transform="rotate(-90, 12.7299, 11.5526)" d="m9.11294,12.43144l6.54089,6.84566l6.6439,-6.95624l-3.78628,-0.03064l0,-2.61259c-0.04248,-2.62946 -2.75924,-5.5951 -7.79561,-5.77807c-5.17464,0 -7.10734,3.60294 -7.47697,7.11967c0.61604,-1.60771 3.14238,-3.63109 5.36009,-3.53053c2.71053,-0.10056 4.40555,0.59221 4.40555,2.40076l0,2.54198l-3.89159,0z" id="svg_45" fill="url(#svg_71)" stroke="#44aa00"/>
- </svg>
-</g>
-
-<g id="clone">
-<svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 18 18">
- <defs>
- <linearGradient y2="1" x2="1" y1="0" x1="0" id="svg_36">
- <stop stop-opacity="1" stop-color="#f9f3de" offset="0"/>
- <stop stop-opacity="1" stop-color="#ccbd8f" offset="1"/>
- </linearGradient>
- <linearGradient y2="0.80078" x2="0.42578" y1="0" x1="0" id="svg_69">
- <stop stop-opacity="1" stop-color="#f9f3de" offset="0"/>
- <stop stop-opacity="1" stop-color="#af995b" offset="1"/>
- </linearGradient>
- </defs>
- <path stroke="#8f5902" fill="url(#svg_69)" id="svg_34" d="m2.11676,16.32061l-0.13787,-5.05515l1.93015,-2.02206l10.11029,0l2.02206,2.29779l0,4.77941l-13.92463,0z"/>
- <rect x="7.85379" y="6.30027" width="2.2932" height="4.3407" id="svg_38" fill="url(#svg_36)" stroke="#8f5902" rx="1" ry="1"/>
- <circle stroke="#8f5902" fill="url(#svg_36)" id="svg_35" r="2.96392" cy="4.48149" cx="9.11757"/>
- <line x1="2.44838" y1="12.03512" x2="15.5524" y2="12.03512" id="svg_39" stroke="#f9f3de" fill="none"/>
- <path d="m6.72427,12.55859l4.74203,0l-2.30831,2.07258l-2.43372,-2.07258z" id="svg_43" fill="#000000" stroke="none"/>
-</svg>
-</g>
-
-<g id="delete">
-<svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
- <rect ry="3" rx="3" stroke="#800000" fill="#aa0000" id="svg_37" height="20.29514" width="21.17486" y="1.70304" x="1.42011"/>
- <rect ry="3" rx="3" stroke="#ff5555" fill="#aa0000" id="svg_67" height="18.63022" width="19.61118" y="2.53597" x="2.20258"/>
- <line stroke-width="2" fill="none" stroke="#ffffff" id="svg_68" y2="16.85127" x2="17.00646" y1="6.85127" x1="7.00646"/>
- <line stroke-width="2" id="svg_70" fill="none" stroke="#ffffff" y2="16.85127" x2="7.00646" y1="6.85127" x1="17.00646"/>
- </svg>
-</g>
-
-<g id="go_up">
- <svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 18 18">
- <defs>
- <linearGradient y2="0" x2="0.7" y1="0" x1="0" id="svg_74">
- <stop stop-opacity="1" stop-color="#afe853" offset="0"/>
- <stop stop-opacity="1" stop-color="#52a310" offset="1"/>
- </linearGradient>
- </defs>
- <path stroke="#008000" fill="url(#svg_74)" id="svg_33" d="m5.38492,16.77043l7.07692,0l0,-5.23077l4.15385,0l-7.69231,-10.15385l-7.69231,10.15385l4.15385,0l0,5.23077z"/>
- </svg>
-</g>
-
-<g id="go_down">
-<svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 18 18">
- <defs>
- <linearGradient y2="0" x2="0.7" y1="0" x1="0" id="svg_75">
- <stop stop-opacity="1" stop-color="#afe853" offset="0"/>
- <stop stop-opacity="1" stop-color="#52a310" offset="1"/>
- </linearGradient>
- </defs>
- <path stroke="#008000" fill="url(#svg_75)" id="svg_33" d="m5.3015,1.69202l6.93483,0l0,5.07323l4.07045,0l-7.53786,9.84803l-7.53786,-9.84803l4.07045,0l0,-5.07323z"/>
- </svg>
-</g>
-
-<g id="move_bottom">
-<svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 23 23">
- <defs>
- <linearGradient y2="0" x2="1" y1="0" x1="0" id="svg_80">
- <stop stop-opacity="1" stop-color="#bc7f05" offset="0"/>
- <stop stop-opacity="1" stop-color="#fcfc9f" offset="1"/>
- </linearGradient>
- </defs>
- <line stroke-width="2" fill="none" stroke="#000000" id="svg_72" y2="2.5" x2="22" y1="2.5" x1="10.5"/>
- <line id="svg_73" stroke-width="2" fill="none" stroke="#000000" y2="6.5" x2="21.99844" y1="6.5" x1="10.49844"/>
- <line id="svg_74" stroke-width="2" fill="none" stroke="#000000" y2="10.5" x2="21.99922" y1="10.5" x1="10.49922"/>
- <line id="svg_75" stroke-width="2" fill="none" stroke="#000000" y2="14.5" x2="21.99922" y1="14.5" x1="10.49922"/>
- <rect stroke="#000000" fill="url(#svg_80)" id="svg_77" height="2.2" width="20" y="17.65" x="1.65"/>
- <path stroke="none" fill="#000000" id="svg_81" d="m4.25,1.55l2.35,0l0,11.05l2,0l-3.175,3.45l-3.175,-3.45l2,0l0,-11.05z"/>
- </svg>
-</g>
-
-<g id="move_top">
-<svg viewBox="0 0 23 23" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
- <defs>
- <linearGradient id="svg_86" x1="0" y1="0" x2="1" y2="0">
- <stop offset="0" stop-color="#9fdcf4" stop-opacity="1"/>
- <stop offset="1" stop-color="#617e96" stop-opacity="1"/>
- </linearGradient>
- </defs>
- <line x1="1.3" y1="8.19922" x2="12.8" y2="8.19922" id="svg_72" stroke="#000000" fill="none" stroke-width="2"/>
- <line x1="1.29844" y1="12.19922" x2="12.79844" y2="12.19922" stroke="#000000" fill="none" stroke-width="2" id="svg_73"/>
- <line x1="1.29922" y1="16.19922" x2="12.79922" y2="16.19922" stroke="#000000" fill="none" stroke-width="2" id="svg_74"/>
- <line x1="1.29922" y1="20.19922" x2="12.79922" y2="20.19922" stroke="#000000" fill="none" stroke-width="2" id="svg_75"/>
- <rect x="1.55" y="1.85" width="20" height="3.2" id="svg_77" fill="url(#svg_86)" stroke="#000000"/>
- <path d="m16.83475,21.14603l2.33207,0l0,-11.04578l1.98474,0l-3.15077,-3.44869l-3.15077,3.44869l1.98474,0l0,11.04578z" id="svg_81" fill="#000000" stroke="none"/>
- </svg>
-</g>
-
-<g id="to_path">
-<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
- <defs>
- <linearGradient y2="0.46875" x2="0.42969" y1="0.10156" x1="0.10547" id="svg_105">
- <stop stop-color="#ff0000" offset="0"/>
- <stop stop-opacity="0" stop-color="#ff0000" offset="1"/>
- </linearGradient>
- </defs>
- <g>
- <circle cx="21" cy="21.3125" r="18.44531" id="svg_120" fill="url(#svg_105)" stroke="#000000"/>
- <path fill="none" stroke="#000000" d="m2.875,21.3125c-0.375,-9.25 7.75,-18.875 17.75,-18" id="svg_115"/>
- <line x1="25.375" y1="3.0625" x2="8.5" y2="3.0625" id="svg_116" stroke="#808080" fill="none"/>
- <line x1="2.625" y1="24.75" x2="2.625" y2="9.8125" id="svg_117" stroke="#808080" fill="none"/>
- <circle cx="8.5" cy="2.9375" r="1.95313" fill="#00ffff" stroke="#0000ff" stroke-width="0.5" id="svg_118"/>
- <circle cx="2.625" cy="9.8125" r="1.95313" fill="#00ffff" stroke="#0000ff" stroke-width="0.5" id="svg_119"/>
- <circle cx="20.875" cy="3.1875" r="2.5" id="svg_112" fill="#00ffff" stroke="#0000ff"/>
- <circle cx="2.875" cy="21.0625" r="2.5" fill="#00ffff" stroke="#0000ff" id="svg_114"/>
- </g>
-</svg>
-</g>
-
-<g id="link_controls">
-<svg viewBox="0 0 24 24" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg">
- <path stroke-width="2" id="svg_102" d="m9.875,23c-2,-4.25 -1.6875,-7.375 1.6875,-10.5c3.375,-3.125 7.5625,-2.75 11.0625,2" stroke="#8dd35f" fill="none"/>
- <line fill="none" stroke="#606060" id="svg_109" y2="4" x2="19" y1="19" x1="4"/>
- <circle stroke="#0000ff" fill="#00ffff" id="svg_111" r="2.17578" cy="11.5" cx="11.5"/>
- <circle stroke-width="0.5" id="svg_121" stroke="#0000ff" fill="#00ffff" r="2.26172" cy="4" cx="19"/>
- <circle id="svg_123" stroke-width="0.5" stroke="#0000ff" fill="#00ffff" r="2.26172" cy="19" cx="4"/>
-</svg>
-</g>
-
-<g id="reorient">
-<svg viewBox="0 0 24 24" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg">
- <defs>
- <linearGradient y2="1" x2="1" y1="1" x1="0" id="svg_113">
- <stop stop-opacity="0" stop-color="#0000ff" offset="0"/>
- <stop stop-opacity="1" stop-color="#507ece" offset="1"/>
- </linearGradient>
- </defs>
- <rect stroke-dasharray="2,2" stroke="#0000ff" fill="none" id="svg_108" height="19.125" width="18.625" y="2.625" x="2.875"/>
- <rect transform="rotate(45, 12.2344, 12.1719)" stroke="#000000" fill="url(#svg_113)" id="svg_107" height="6.125" width="16" y="9.10848" x="4.23267"/>
-</svg>
-</g>
-
-<g id="group">
-<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
- <defs>
- <linearGradient id="svg_90" x1="0" y1="0" x2="1" y2="1">
- <stop offset="0" stop-color="#ccddff" stop-opacity="1"/>
- <stop offset="1" stop-color="#789fed" stop-opacity="1"/>
- </linearGradient>
- <linearGradient id="svg_92" x1="0" y1="0" x2="1" y2="1">
- <stop offset="0" stop-color="#70a1e5" stop-opacity="1"/>
- <stop offset="1" stop-color="#4b6baf" stop-opacity="1"/>
- </linearGradient>
- </defs>
- <rect x="13.5" y="0.5" width="2" height="2" fill="#a0a0a0" stroke="#555555" id="svg_79"/>
- <rect x="13.5" y="13.5" width="2" height="2" fill="#a0a0a0" stroke="#555555" id="svg_82"/>
- <rect x="0.5" y="13.5" width="2" height="2" fill="#a0a0a0" stroke="#555555" id="svg_83"/>
- <rect x="2.5" y="2.5" width="8" height="7" fill="#a0a0a0" stroke="#555555" id="svg_85"/>
- <rect x="2.5" y="2.5" width="8" height="7" fill="url(#svg_90)" stroke="url(#svg_92)" id="svg_87"/>
- <rect x="5.5" y="6.5" width="8" height="7" id="svg_84" fill="#7399d6" stroke="url(#svg_92)"/>
- <rect x="0.5" y="0.5" width="2" height="2" id="svg_78" fill="#a0a0a0" stroke="#555555"/>
- </svg>
-</g>
-
-<g id="ungroup">
-<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
- <defs>
- <linearGradient id="svg_90" x1="0" y1="0" x2="1" y2="1">
- <stop offset="0" stop-color="#ccddff" stop-opacity="1"/>
- <stop offset="1" stop-color="#789fed" stop-opacity="1"/>
- </linearGradient>
- <linearGradient id="svg_92" x1="0" y1="0" x2="1" y2="1">
- <stop offset="0" stop-color="#70a1e5" stop-opacity="1"/>
- <stop offset="1" stop-color="#4b6baf" stop-opacity="1"/>
- </linearGradient>
- </defs>
- <rect x="2.5" y="2.5" width="8" height="7" fill="url(#svg_90)" stroke="url(#svg_92)" id="svg_87"/>
- <rect x="5.5" y="6.5" width="8" height="7" id="svg_84" fill="#7399d6" stroke="url(#svg_92)"/>
- <rect x="9.5" y="1.5" width="2" height="2" fill="#a0a0a0" stroke="#555555" id="svg_79"/>
- <rect x="1.5" y="8.5" width="2" height="2" fill="#a0a0a0" stroke="#555555" id="svg_83"/>
- <rect x="1.5" y="1.5" width="2" height="2" id="svg_78" fill="#a0a0a0" stroke="#555555"/>
- <rect id="svg_93" x="12.5" y="5.5" width="2" height="2" fill="#a0a0a0" stroke="#555555"/>
- <rect id="svg_94" x="12.5" y="12.5" width="2" height="2" fill="#a0a0a0" stroke="#555555"/>
- <rect id="svg_95" x="4.5" y="12.5" width="2" height="2" fill="#a0a0a0" stroke="#555555"/>
- <rect id="svg_96" x="4.5" y="5.5" width="2" height="2" fill="#a0a0a0" stroke="#555555"/>
-</svg>
-</g>
-
-<g id="width">
- <svg width="100" height="100" xmlns="http://www.w3.org/2000/svg">
- <path id="svg_6" d="m19,42.5l-7.5,7.5l7.5,7.5l0,-15zm0,7.5l62,0l0,-7.5l7.5,7.5l-7.5,7.5l0,-7.5" stroke-width="8" stroke="#000000" fill="#000000"/>
- </svg>
-</g>
-
-<g id="height">
- <svg width="100" height="100" xmlns="http://www.w3.org/2000/svg">
- <path transform="rotate(90, 50, 50)" fill="#000000" stroke="#000000" stroke-width="8" d="m19,42.5l-7.5,7.5l7.5,7.5l0,-15zm0,7.5l62,0l0,-7.5l7.5,7.5l-7.5,7.5l0,-7.5" id="svg_6"/>
- </svg>
-</g>
-
-<g id="c_radius">
-<svg width="20" height="20" xmlns="http://www.w3.org/2000/svg">
- <rect stroke="#404040" fill="none" stroke-width="0.5" x="2.37501" y="2.4375" width="43.9375" height="43.9375" id="svg_1" rx="13" ry="13"/>
- <path fill="none" stroke="#000000" d="m2.43674,15.88952l13.73722,0l0.08978,-13.46483m0.08978,14.08493" id="svg_3"/>
- <line fill="none" stroke="#000000" x1="16.35107" y1="15.88934" x2="5.20504" y2="5.20504" id="svg_4" stroke-dasharray="2,2"/>
-</svg>
-</g>
-
-<g id="angle">
-<svg width="50" height="50" xmlns="http://www.w3.org/2000/svg">
- <path stroke-width="2" stroke-dasharray="1,3" id="svg_6" d="m32.78778,41.03469c-0.40379,-8.68145 -4.50873,-16.79003 -12.11365,-20.5932" stroke="#000000" fill="none"/>
- <path id="svg_7" d="m29.20348,7.67055l-24.20348,34.47921l41.16472,0" stroke-width="3" stroke="#404040" fill="none"/>
-</svg>
-</g>
-
-<g id="blur">
-<svg width="300" height="300" xmlns="http://www.w3.org/2000/svg">
- <!-- Created with SVG-edit - http://svg-edit.googlecode.com/ -->
- <defs>
- <filter id="svg_4_blur" x="-50%" y="-50%" width="200%" height="200%">
- <feGaussianBlur stdDeviation="25"/>
- </filter>
- </defs>
- <circle fill="#000000" stroke="#000000" stroke-width="5" stroke-dasharray="null" cx="150" cy="150" r="91.80151" id="svg_4" filter="url(#svg_4_blur)"/>
-</svg>
-</g>
-
-<g id="fontsize">
-<svg width="50" height="50" xmlns="http://www.w3.org/2000/svg" xmlns:xml="http://www.w3.org/XML/1998/namespace">
- <text fill="#606060" stroke="none" x="14.451" y="41.4587" id="svg_2" font-size="26" font-family="serif" text-anchor="middle" xml:space="preserve">T</text>
- <text fill="#000000" stroke="none" x="28.853" y="41.8685" font-size="52" font-family="serif" text-anchor="middle" xml:space="preserve" id="svg_3">T</text>
-</svg>
-</g>
-
-<g id="align">
- <svg width="22" height="22" xmlns="http://www.w3.org/2000/svg">
- <rect stroke="#606060" fill="#c0c0c0" id="svg_4" height="7" width="12" y="7.5" x="4.5"/>
- <rect stroke="#c15909" fill="#ef9a23" id="svg_2" height="40" width="2" y="-10" x="9.5"/>
- <rect stroke="#ffffff" fill="none" id="svg_5" height="5" width="10" y="8.5" x="5.5"/>
- </svg>
-</g>
-
-<g id="align_left">
- <svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22 22">
- <rect stroke="#606060" fill="#ffffff" id="svg_4" height="7" width="12" y="2.5" x="2.5"/>
- <rect stroke="none" fill="#c0c0c0" id="svg_5" height="4" width="11" y="4" x="2"/>
- <rect id="svg_6" stroke="#606060" fill="#ffffff" height="7" width="18" y="12.5" x="2.5"/>
- <rect id="svg_7" stroke="none" fill="#c0c0c0" height="4" width="17" y="14" x="2"/>
- <rect stroke="#c15909" fill="#ef9a23" id="svg_2" height="40" width="2" y="-10" x="1.5"/>
- </svg>
-</g>
-
-<g id="align_center">
- <svg viewBox="0 0 22 22" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
- <rect x="1.5" y="12.5" width="18" height="7" fill="#c0c0c0" stroke="#606060" id="svg_6"/>
- <rect x="4.5" y="2.5" width="12" height="7" id="svg_4" fill="#c0c0c0" stroke="#606060"/>
- <rect x="9.5" y="-10" width="2" height="40" id="svg_2" fill="#ef9a23" stroke="#c15909"/>
- <rect x="2.5" y="13.5" width="16" height="5" fill="none" stroke="#ffffff" id="svg_7"/>
- <rect x="5.5" y="3.5" width="10" height="5" id="svg_5" fill="none" stroke="#ffffff"/>
- </svg>
-</g>
-
-<g id="align_right">
- <svg viewBox="0 0 22 22" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
- <rect x="7.5" y="2.5" width="12" height="7" id="svg_4" fill="#ffffff" stroke="#606060"/>
- <rect x="9" y="4" width="11" height="4" id="svg_5" fill="#c0c0c0" stroke="none"/>
- <rect x="1.5" y="12.5" width="18" height="7" fill="#ffffff" stroke="#606060" id="svg_6"/>
- <rect x="3" y="14" width="17" height="4" fill="#c0c0c0" stroke="none" id="svg_7"/>
- <rect x="18.5" y="-10" width="2" height="40" id="svg_2" fill="#ef9a23" stroke="#c15909"/>
- </svg>
-</g>
-
-<g id="align_top">
- <svg viewBox="0 0 22 22" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
- <g transform="rotate(90, 11, 11)" id="svg_1">
- <rect x="2.5" y="3.5" width="12" height="7" id="svg_4" fill="#ffffff" stroke="#606060"/>
- <rect x="2" y="5" width="11" height="4" id="svg_5" fill="#c0c0c0" stroke="none"/>
- <rect x="2.5" y="13.5" width="18" height="7" fill="#ffffff" stroke="#606060" id="svg_6"/>
- <rect x="2" y="15" width="17" height="4" fill="#c0c0c0" stroke="none" id="svg_7"/>
- <rect x="1.5" y="-9" width="2" height="40" id="svg_2" fill="#ef9a23" stroke="#c15909"/>
- </g>
- </svg>
-</g>
-
-<g id="align_middle">
-<svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22 22">
- <g transform="rotate(90, 12, 11.5)" id="svg_1">
- <rect id="svg_6" stroke="#606060" fill="#c0c0c0" height="7" width="18" y="14" x="3"/>
- <rect stroke="#606060" fill="#c0c0c0" id="svg_4" height="7" width="12" y="4" x="6"/>
- <rect stroke="#c15909" fill="#ef9a23" id="svg_2" height="40" width="2" y="-8.5" x="11"/>
- <rect id="svg_7" stroke="#ffffff" fill="none" height="5" width="16" y="15" x="4"/>
- <rect stroke="#ffffff" fill="none" id="svg_5" height="5" width="10" y="5" x="7"/>
- </g>
-</svg>
-</g>
-
-<g id="align_bottom">
-<svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22 22">
- <g transform="rotate(90, 11, 11)" id="svg_1">
- <rect stroke="#606060" fill="#ffffff" id="svg_4" height="7" width="12" y="2.5" x="7.5"/>
- <rect stroke="none" fill="#c0c0c0" id="svg_5" height="4" width="11" y="4" x="9"/>
- <rect id="svg_6" stroke="#606060" fill="#ffffff" height="7" width="18" y="12.5" x="1.5"/>
- <rect id="svg_7" stroke="none" fill="#c0c0c0" height="4" width="17" y="14" x="3"/>
- <rect stroke="#c15909" fill="#ef9a23" id="svg_2" height="40" width="2" y="-10" x="18.5"/>
- </g>
-</svg>
-</g>
-
-<g id="linecap_butt">
-<svg width="100" height="100" xmlns="http://www.w3.org/2000/svg" xmlns:se="http://svg-edit.googlecode.com" xmlns:xlink="http://www.w3.org/1999/xlink">
- <!-- Created with SVG-edit - http://svg-edit.googlecode.com/ -->
- <defs>
- <linearGradient id="svg_8" x1="0.8" y1="1" x2="0.2" y2="1">
- <stop offset="0" stop-color="#000000" stop-opacity="1"/>
- <stop offset="1" stop-color="#000000" stop-opacity="0"/>
- </linearGradient>
- </defs>
- <g>
- <rect fill="url(#svg_8)" stroke="#a0a0a0" stroke-width="2" x="-15.20196" y="43.5974" width="94.8373" height="50.3728" id="svg_3" transform="rotate(-45, 32.2148, 68.7832)"/>
- <path id="svg_1" d="m6.63133,95.07755l59.17514,-59.17514" stroke-width="3" stroke="#00ffff" fill="none"/>
- <path id="svg_2" d="m51.62893,36.10742l13.05662,-13.05662l13.05661,13.05662l-13.05661,13.05662l-13.05662,-13.05662z" stroke="none" fill="#00ffff"/>
- </g>
-</svg>
-</g>
-
-<g id="linecap_square">
-<svg width="100" height="100" xmlns="http://www.w3.org/2000/svg" xmlns:se="http://svg-edit.googlecode.com" xmlns:xlink="http://www.w3.org/1999/xlink">
- <!-- Created with SVG-edit - http://svg-edit.googlecode.com/ -->
- <defs>
- <linearGradient id="svg_8" x1="0.8" y1="1" x2="0.2" y2="1">
- <stop offset="0" stop-color="#000000" stop-opacity="1"/>
- <stop offset="1" stop-color="#000000" stop-opacity="0"/>
- </linearGradient>
- </defs>
- <g>
- <rect fill="url(#svg_8)" stroke="none" x="-18.51568" y="35.5974" width="117.46469" height="50.3728" id="svg_3" transform="rotate(-45, 40.2168, 60.7832)"/>
- <path id="svg_1" d="m6.63133,95.07755l59.17514,-59.17514" stroke-width="3" stroke="#00ffff" fill="none"/>
- <path id="svg_2" d="m51.62893,36.10742l13.05662,-13.05662l13.05661,13.05662l-13.05661,13.05662l-13.05662,-13.05662z" stroke="none" fill="#00ffff"/>
- </g>
-</svg>
-</g>
-
-<g id="linecap_round">
-<svg width="100" height="100" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:se="http://svg-edit.googlecode.com">
- <!-- Created with SVG-edit - http://svg-edit.googlecode.com/ -->
- <defs>
- <linearGradient y2="1" x2="0.2" y1="1" x1="0.8" id="svg_8">
- <stop stop-opacity="1" stop-color="#000000" offset="0"/>
- <stop stop-opacity="0" stop-color="#000000" offset="1"/>
- </linearGradient>
- </defs>
- <g>
- <path transform="rotate(-45, 41.5117, 59.4648)" id="svg_3" d="m-19.0679,34.2946l94.8359,0c36.499,-1.4142 33.67101,48.9569 0,50.3711l-94.8359,0l0,-50.3711z" stroke-width="2" stroke="#a0a0a0" fill="url(#svg_8)"/>
- <path id="svg_1" d="m6.63133,95.07755l59.17515,-59.17515" stroke-width="3" stroke="#00ffff" fill="none"/>
- <path id="svg_2" d="m51.62893,36.10742l13.05662,-13.05662l13.05661,13.05662l-13.05661,13.05662l-13.05662,-13.05662z" stroke="none" fill="#00ffff"/>
- </g>
-</svg>
-</g>
-
-<g id="linejoin_miter">
-<svg width="100" height="100" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:se="http://svg-edit.googlecode.com">
- <!-- Created with SVG-edit - http://svg-edit.googlecode.com/ -->
- <defs>
- <linearGradient y2="1" x2="0.2" y1="1" x1="0.8" id="svg_8">
- <stop stop-opacity="1" stop-color="#000000" offset="0"/>
- <stop stop-opacity="0" stop-color="#000000" offset="1"/>
- </linearGradient>
- </defs>
- <g>
- <path fill="none" stroke="url(#svg_8)" stroke-width="49" d="m-15,-35l75,85l-75,75" id="svg_6"/>
- <path transform="rotate(90, 57.8925, 50.2519)" fill="#00ffff" stroke="none" d="m44.83592,50.25187l13.05661,-13.05663l13.05661,13.05663l-13.05661,13.05662l-13.05661,-13.05662z" id="svg_2"/>
- <path id="svg_4" d="m-15,-35l75,85l-75,75" stroke-width="3" stroke="#00ffff" fill="none"/>
- </g>
-</svg>
-</g>
-
-<g id="linejoin_bevel">
-<svg width="100" height="100" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:se="http://svg-edit.googlecode.com">
- <!-- Created with SVG-edit - http://svg-edit.googlecode.com/ -->
- <defs>
- <linearGradient y2="1" x2="0.2" y1="1" x1="0.8" id="svg_8">
- <stop stop-opacity="1" stop-color="#000000" offset="0"/>
- <stop stop-opacity="0" stop-color="#000000" offset="1"/>
- </linearGradient>
- </defs>
- <g>
- <path stroke-linejoin="bevel" fill="none" stroke="url(#svg_8)" stroke-width="49" d="m-15,-35l75,85l-75,75" id="svg_6"/>
- <path transform="rotate(90, 57.8925, 50.2519)" fill="#00ffff" stroke="none" d="m44.83592,50.25187l13.05661,-13.05663l13.05661,13.05663l-13.05661,13.05662l-13.05661,-13.05662z" id="svg_2"/>
- <path id="svg_4" d="m-15,-35l75,85l-75,75" stroke-width="3" stroke="#00ffff" fill="none"/>
- </g>
-</svg>
-</g>
-
-<g id="linejoin_round">
-<svg width="100" height="100" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:se="http://svg-edit.googlecode.com">
- <!-- Created with SVG-edit - http://svg-edit.googlecode.com/ -->
- <defs>
- <linearGradient y2="1" x2="0.2" y1="1" x1="0.8" id="svg_8">
- <stop stop-opacity="1" stop-color="#000000" offset="0"/>
- <stop stop-opacity="0" stop-color="#000000" offset="1"/>
- </linearGradient>
- </defs>
- <g>
- <path stroke-linejoin="round" fill="none" stroke="url(#svg_8)" stroke-width="49" d="m-15,-35l75,85l-75,75" id="svg_6"/>
- <path transform="rotate(90, 57.8925, 50.2519)" fill="#00ffff" stroke="none" d="m44.83592,50.25187l13.05661,-13.05663l13.05661,13.05663l-13.05661,13.05662l-13.05661,-13.05662z" id="svg_2"/>
- <path id="svg_4" d="m-15,-35l75,85l-75,75" stroke-width="3" stroke="#00ffff" fill="none"/>
- </g>
-</svg>
-</g>
-
-<g id="eye">
-<svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 17 17">
- <defs>
- <linearGradient y2="0.79688" x2="0.5625" y1="0.19141" x1="0.42969" id="svg_91">
- <stop stop-opacity="1" stop-color="#d3a16b" offset="0"/>
- <stop stop-opacity="1" stop-color="#a37c53" offset="1"/>
- </linearGradient>
- </defs>
- <path stroke="none" fill="url(#svg_91)" id="svg_9" d="m0.12852,8.18338c3.59931,-7.71208 13.19749,-7.36932 16.75236,0.08569c-3.02165,7.5407 -13.59741,7.66924 -16.75236,-0.08569z"/>
- <path id="svg_76" stroke="none" fill="#ffffff" d="m0.33033,8.2557c3.5173,-4.97159 12.89675,-4.75063 16.37062,0.05524c-2.95279,4.86111 -13.28756,4.94397 -16.37062,-0.05524z"/>
- <circle stroke="none" fill="#4f92c1" id="svg_88" r="3.08008" cy="7.71116" cx="8.45861"/>
- <circle stroke="none" fill="#000000" id="svg_89" r="1.27539" cy="7.6539" cx="8.43159"/>
- </svg>
-</g>
-
-<g id="no_color">
- <svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
- <line fill="none" stroke="#d40000" id="svg_90" y2="24" x2="24" y1="0" x1="0"/>
- <line id="svg_92" fill="none" stroke="#d40000" y2="24" x2="0" y1="0" x1="24"/>
- </svg>
-</g>
-
-<g id="ok">
- <svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
- <defs>
- <linearGradient y2="0.65625" x2="0.94141" y1="0.43359" x1="0.42969" id="svg_106">
- <stop stop-opacity="1" stop-color="#38ff45" offset="0"/>
- <stop stop-opacity="1" stop-color="#127c0c" offset="1"/>
- </linearGradient>
- </defs>
- <path transform="rotate(45, 12, 10)" stroke="#005500" fill="url(#svg_106)" id="svg_101" d="m7.9,15.9l4.9,-0.05l0,-13.75l3.8,0l0,17.6l-8.7,0l0,-3.8z"/>
- </svg>
-</g>
-
-<g id="cancel">
-<svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
- <defs>
- <linearGradient y2="0.65625" x2="0.94141" y1="0.43359" x1="0.42969" id="svg_9">
- <stop stop-opacity="1" stop-color="#ff3838" offset="0"/>
- <stop stop-opacity="1" stop-color="#7a0c0c" offset="1"/>
- </linearGradient>
- </defs>
- <path stroke="#550000" fill="url(#svg_9)" id="svg_101" d="m2.10526,10.52632l7.36842,0l0,-7.36842l3.68421,0l0,7.36842l7.36842,0l0,3.68421l-7.36842,0l0,7.36842l-3.68421,0l0,-7.36842l-7.36842,0l0,-3.68421z" transform="rotate(45, 11.3, 12.3)"/>
- </svg>
-</g>
-
-<g id="warning">
-<svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
- <defs>
- <linearGradient y2="0.98047" x2="0.57813" y1="0.44922" x1="0.56641" id="svg_110">
- <stop stop-opacity="1" stop-color="#ffff00" offset="0"/>
- <stop stop-opacity="1" stop-color="#9e9e00" offset="1"/>
- </linearGradient>
- </defs>
- <path d="m1.42857,21.55559l10.71429,-19.36489l10.71429,19.20352l-21.42857,0.16137z" id="svg_44" fill="url(#svg_110)" stroke="#916d1f" stroke-width="2"/>
- <path stroke="none" fill="#000000" id="svg_103" d="m11.98371,14.68571c-0.57143,-3.82857 -1.82857,-6.4 0.11429,-6.4c2.11429,0 0.74286,2.57143 0.11429,6.4l-0.22857,0z"/>
- <circle stroke="none" fill="#000000" id="svg_104" r="1.17578" cy="17.37143" cx="12.14308"/>
- </svg>
-</g>
-
-<g id="node_delete">
-<svg width="24" height="24" xmlns="http://www.w3.org/2000/svg">
- <path stroke-width="2" id="svg_102" d="m4.1953,19.42128c15.49391,-15.53349 -0.21065,0.1581 15.61084,-15.57944" stroke="#8dd35f" fill="none"/>
- <circle stroke-width="0.5" id="svg_121" stroke="#0000ff" fill="#00ffff" r="2.26172" cy="4" cx="19.75"/>
- <circle id="svg_123" stroke-width="0.5" stroke="#0000ff" fill="#00ffff" r="2.26172" cy="19.40299" cx="4.0653"/>
- <circle id="svg_7" stroke-width="0.5" stroke="#0000ff" fill="#00ffff" r="2.26172" cy="11.625" cx="11.9375"/>
- <g transform="rotate(-45.291072845458984 9.81157112121582,9.244086265563965) " id="svg_6">
- <line stroke-linecap="round" id="svg_4" y2="9.45264" x2="15.14996" y1="9.3943" x1="4.47318" stroke-dasharray="null" stroke-width="2" stroke="#ff0000" fill="none"/>
- <line stroke-linecap="round" id="svg_5" y2="14.46579" x2="9.66571" y1="4.02238" x1="9.7824" stroke-dasharray="null" stroke-width="2" stroke="#ff0000" fill="none"/>
- </g>
-</svg>
-</g>
-
-<g id="node_clone">
-<svg width="24" height="24" xmlns="http://www.w3.org/2000/svg">
- <path stroke-width="2" id="svg_102" d="m4.1953,19.42128c15.49391,-15.53349 -0.21065,0.1581 15.61084,-15.57944" stroke="#8dd35f" fill="none"/>
- <circle stroke-width="0.5" id="svg_121" stroke="#0000ff" fill="#00ffff" r="2.26172" cy="4" cx="19.75"/>
- <circle id="svg_123" stroke-width="0.5" stroke="#0000ff" fill="#00ffff" r="2.26172" cy="19.40299" cx="4.0653"/>
- <circle id="svg_7" stroke-width="0.5" stroke="#0000ff" fill="#00ffff" r="2.26172" cy="11.625" cx="11.9375"/>
- <line stroke-linecap="round" id="svg_5" y2="14.46579" x2="9.66571" y1="4.02238" x1="9.7824" stroke-dasharray="null" stroke-width="2" stroke="#0000ff" fill="#0000ff"/>
- <line stroke-linecap="round" id="svg_4" y2="9.45264" x2="15.14996" y1="9.3943" x1="4.47318" stroke-dasharray="null" stroke-width="2" stroke="#0000ff" fill="#0000ff"/>
-</svg>
-</g>
-
-<g id="svg_eof"/>
-
-</svg>
diff --git a/files_svgedit/images/svg_edit_icons.svgz b/files_svgedit/images/svg_edit_icons.svgz
deleted file mode 100644
index cb8c80cc5..000000000
--- a/files_svgedit/images/svg_edit_icons.svgz
+++ /dev/null
Binary files differ
diff --git a/files_svgedit/images/text.png b/files_svgedit/images/text.png
deleted file mode 100644
index 5652e2fab..000000000
--- a/files_svgedit/images/text.png
+++ /dev/null
Binary files differ
diff --git a/files_svgedit/images/text.svg b/files_svgedit/images/text.svg
deleted file mode 100644
index 5c28753c3..000000000
--- a/files_svgedit/images/text.svg
+++ /dev/null
@@ -1,157 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://web.resource.org/cc/"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="22.000000px"
- height="22.000000px"
- id="svg1306"
- sodipodi:version="0.32"
- inkscape:version="0.42.2"
- sodipodi:docbase="/home/andreas/projekt/bild/tango/22"
- sodipodi:docname="draw-text2.svg">
- <defs
- id="defs1308">
- <linearGradient
- id="linearGradient3682">
- <stop
- style="stop-color:#1f1f1f;stop-opacity:1.0000000;"
- offset="0.0000000"
- id="stop3684" />
- <stop
- style="stop-color:#5c5c5c;stop-opacity:1.0000000;"
- offset="1.0000000"
- id="stop3686" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient3558">
- <stop
- style="stop-color:#000000;stop-opacity:1;"
- offset="0"
- id="stop3560" />
- <stop
- style="stop-color:#000000;stop-opacity:0;"
- offset="1"
- id="stop3562" />
- </linearGradient>
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3558"
- id="radialGradient3564"
- cx="22.571428"
- cy="30.857143"
- fx="22.571428"
- fy="30.857143"
- r="15.571428"
- gradientTransform="matrix(1.000000,0.000000,0.000000,0.651376,4.300378e-15,10.75754)"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- id="linearGradient2834">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop2836" />
- <stop
- style="stop-color:#b3b3b3;stop-opacity:0.0000000;"
- offset="1.0000000"
- id="stop2838" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2834"
- id="linearGradient2840"
- x1="19.944447"
- y1="16.527262"
- x2="24.133829"
- y2="19.642126"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.498259,0.000000,0.000000,0.466519,-0.799974,-0.839637)" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3682"
- id="linearGradient3688"
- x1="23.305620"
- y1="24.843527"
- x2="14.388516"
- y2="9.5902243"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.498259,0.000000,0.000000,0.488600,-0.799974,-1.273557)" />
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="14.000000"
- inkscape:cx="17.541947"
- inkscape:cy="12.572768"
- inkscape:current-layer="layer1"
- showgrid="false"
- inkscape:grid-bbox="true"
- inkscape:document-units="px"
- showguides="true"
- inkscape:guide-bbox="true"
- inkscape:window-width="1280"
- inkscape:window-height="885"
- inkscape:window-x="0"
- inkscape:window-y="25" />
- <metadata
- id="metadata1311">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- id="layer1"
- inkscape:label="Layer 1"
- inkscape:groupmode="layer">
- <path
- sodipodi:type="arc"
- style="opacity:0.47368422;color:#000000;fill:url(#radialGradient3564);fill-opacity:1.0000000;fill-rule:nonzero;stroke:none;stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible"
- id="path3556"
- sodipodi:cx="22.571428"
- sodipodi:cy="30.857143"
- sodipodi:rx="15.571428"
- sodipodi:ry="10.142858"
- d="M 38.142857 30.857143 A 15.571428 10.142858 0 1 1 7.0000000,30.857143 A 15.571428 10.142858 0 1 1 38.142857 30.857143 z"
- transform="matrix(0.706422,0.000000,0.000000,0.208015,-4.944952,13.47138)" />
- <path
- style="font-size:54.869392px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125.00000%;writing-mode:lr-tb;text-anchor:start;fill:url(#linearGradient3688);fill-opacity:1.0000000;stroke:#000000;stroke-width:1.0000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-opacity:1.0000000;font-family:Bitstream Vera Sans"
- d="M 15.189363,15.520771 L 7.1531447,15.520771 L 5.8598048,19.513834 L 0.51627279,19.513834 L 8.1009381,0.48837876 L 14.228221,0.48837876 L 21.560524,19.464779 L 16.444188,19.464779 L 15.189363,15.520771 M 8.3990779,12.473977 L 13.858901,12.473977 L 11.171254,5.1526958 L 8.3990779,12.473977"
- id="text1314"
- sodipodi:nodetypes="ccccccccccccc" />
- <path
- style="font-size:54.869392px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125.00000%;writing-mode:lr-tb;text-anchor:start;opacity:0.37912086;fill:none;fill-opacity:1.0000000;stroke:url(#linearGradient2840);stroke-width:1.0000008;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-opacity:1.0000000;font-family:Bitstream Vera Sans"
- d="M 15.684541,15.159554 L 6.6710758,15.159554 L 5.4166733,18.527305 L 2.0035414,18.527305 L 8.7384662,1.4621947 L 13.512484,1.4621947 L 20.022564,18.410463 L 16.899702,18.410463 L 15.684541,15.159554 z "
- id="path2047"
- sodipodi:nodetypes="ccccccccc" />
- <image
- id="image2089"
- height="459.00000"
- width="400.00000"
- sodipodi:absref="/home/andreas/palette2.png"
- xlink:href="/home/andreas/palette2.png"
- x="-354.93631"
- y="-214.53793" />
- <path
- style="fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#999999;stroke-width:1.0000007;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-opacity:1.0000000;opacity:0.51098901"
- d="M 8.1686844,13.551882 L 14.147791,13.551882"
- id="path5142"
- sodipodi:nodetypes="cc" />
- </g>
-</svg>
diff --git a/files_svgedit/images/to_path.png b/files_svgedit/images/to_path.png
deleted file mode 100644
index 4209828db..000000000
--- a/files_svgedit/images/to_path.png
+++ /dev/null
Binary files differ
diff --git a/files_svgedit/images/undo.png b/files_svgedit/images/undo.png
deleted file mode 100644
index cd4ab955f..000000000
--- a/files_svgedit/images/undo.png
+++ /dev/null
Binary files differ
diff --git a/files_svgedit/images/view-refresh.png b/files_svgedit/images/view-refresh.png
deleted file mode 100644
index 3fd71d6e5..000000000
--- a/files_svgedit/images/view-refresh.png
+++ /dev/null
Binary files differ
diff --git a/files_svgedit/images/wave.png b/files_svgedit/images/wave.png
deleted file mode 100644
index 10fa7122d..000000000
--- a/files_svgedit/images/wave.png
+++ /dev/null
Binary files differ
diff --git a/files_svgedit/images/wireframe.png b/files_svgedit/images/wireframe.png
deleted file mode 100644
index 89db7e9e3..000000000
--- a/files_svgedit/images/wireframe.png
+++ /dev/null
Binary files differ
diff --git a/files_svgedit/images/zoom.png b/files_svgedit/images/zoom.png
deleted file mode 100644
index c4fb6f17d..000000000
--- a/files_svgedit/images/zoom.png
+++ /dev/null
Binary files differ
diff --git a/files_svgedit/jgraduate/images/AlphaBar.png b/files_svgedit/jgraduate/images/AlphaBar.png
deleted file mode 100644
index 2950daeb8..000000000
--- a/files_svgedit/jgraduate/images/AlphaBar.png
+++ /dev/null
Binary files differ
diff --git a/files_svgedit/jgraduate/images/Bars.png b/files_svgedit/jgraduate/images/Bars.png
deleted file mode 100644
index a9801ec19..000000000
--- a/files_svgedit/jgraduate/images/Bars.png
+++ /dev/null
Binary files differ
diff --git a/files_svgedit/jgraduate/images/Maps.png b/files_svgedit/jgraduate/images/Maps.png
deleted file mode 100644
index de33e3de2..000000000
--- a/files_svgedit/jgraduate/images/Maps.png
+++ /dev/null
Binary files differ
diff --git a/files_svgedit/jgraduate/images/NoColor.png b/files_svgedit/jgraduate/images/NoColor.png
deleted file mode 100644
index ae3614551..000000000
--- a/files_svgedit/jgraduate/images/NoColor.png
+++ /dev/null
Binary files differ
diff --git a/files_svgedit/jgraduate/images/bar-opacity.png b/files_svgedit/jgraduate/images/bar-opacity.png
deleted file mode 100644
index e42ad0812..000000000
--- a/files_svgedit/jgraduate/images/bar-opacity.png
+++ /dev/null
Binary files differ
diff --git a/files_svgedit/jgraduate/images/map-opacity.png b/files_svgedit/jgraduate/images/map-opacity.png
deleted file mode 100644
index 6756cee6d..000000000
--- a/files_svgedit/jgraduate/images/map-opacity.png
+++ /dev/null
Binary files differ
diff --git a/files_svgedit/jgraduate/images/mappoint.gif b/files_svgedit/jgraduate/images/mappoint.gif
deleted file mode 100644
index f5f855745..000000000
--- a/files_svgedit/jgraduate/images/mappoint.gif
+++ /dev/null
Binary files differ
diff --git a/files_svgedit/jgraduate/images/mappoint_c.png b/files_svgedit/jgraduate/images/mappoint_c.png
deleted file mode 100644
index d0a6e1cea..000000000
--- a/files_svgedit/jgraduate/images/mappoint_c.png
+++ /dev/null
Binary files differ
diff --git a/files_svgedit/jgraduate/images/mappoint_f.png b/files_svgedit/jgraduate/images/mappoint_f.png
deleted file mode 100644
index 563ff87c2..000000000
--- a/files_svgedit/jgraduate/images/mappoint_f.png
+++ /dev/null
Binary files differ
diff --git a/files_svgedit/jgraduate/images/picker.gif b/files_svgedit/jgraduate/images/picker.gif
deleted file mode 100644
index 374d89104..000000000
--- a/files_svgedit/jgraduate/images/picker.gif
+++ /dev/null
Binary files differ
diff --git a/files_svgedit/jgraduate/images/preview-opacity.png b/files_svgedit/jgraduate/images/preview-opacity.png
deleted file mode 100644
index 0dd9a2f8b..000000000
--- a/files_svgedit/jgraduate/images/preview-opacity.png
+++ /dev/null
Binary files differ
diff --git a/files_svgedit/jgraduate/images/rangearrows.gif b/files_svgedit/jgraduate/images/rangearrows.gif
deleted file mode 100644
index 218872ccc..000000000
--- a/files_svgedit/jgraduate/images/rangearrows.gif
+++ /dev/null
Binary files differ
diff --git a/files_svgedit/jgraduate/images/rangearrows2.gif b/files_svgedit/jgraduate/images/rangearrows2.gif
deleted file mode 100644
index fdeb54a10..000000000
--- a/files_svgedit/jgraduate/images/rangearrows2.gif
+++ /dev/null
Binary files differ
diff --git a/files_svgedit/js/jgraduate/LICENSE b/files_svgedit/js/jgraduate/LICENSE
deleted file mode 100644
index d64569567..000000000
--- a/files_svgedit/js/jgraduate/LICENSE
+++ /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/files_svgedit/js/jgraduate/README b/files_svgedit/js/jgraduate/README
deleted file mode 100644
index ef3e21ff8..000000000
--- a/files_svgedit/js/jgraduate/README
+++ /dev/null
@@ -1,3 +0,0 @@
-jGraduate - A jQuery plugin for picking gradients
-
-Licensed under the Apache License 2. See LICENSE for more information.
diff --git a/files_svgedit/js/jgraduate/jpicker-1.0.12.min.js b/files_svgedit/js/jgraduate/jpicker-1.0.12.min.js
deleted file mode 100644
index 9b408ad92..000000000
--- a/files_svgedit/js/jgraduate/jpicker-1.0.12.min.js
+++ /dev/null
@@ -1 +0,0 @@
-(function(e,a){var d=function(t,k){var o=this,j=t.find("img"),B=0,A=100,s=100,z=0,w=100,r=100,q=0,p=0,m,n=function(x){var y=t.offset();m={left:y.left+parseInt(t.css("border-left-width")),top:y.top+parseInt(t.css("border-top-width"))};u(x);o.draw();e(document).bind("mousemove",l).bind("mouseup",h);x.stopPropagation();x.preventDefault();return false;},l=function(x){u(x);o.draw();x.stopPropagation();x.preventDefault();return false;},h=function(x){e(document).unbind("mouseup",h).unbind("mousemove",l);x.stopPropagation();x.preventDefault();return false;},u=function(E){var C=E.pageX-m.left,x=E.pageY-m.top,D=t.w,y=t.h;if(C<0){C=0;}else{if(C>D){C=D;}}if(x<0){x=0;}else{if(x>y){x=y;}}o.set_X(((C/D)*s)+B);o.set_Y(((x/y)*r)+z);e.isFunction(o.valuesChanged)&&o.valuesChanged(o);};e.extend(true,o,{settings:k,valuesChanged:e.isFunction(arguments[2])&&arguments[2]||null,get_X:function(){return q;},set_X:function(x){x=Math.floor(x);if(q==x){return;}if(x<B){x=B;}else{if(x>A){x=A;}}q=x;},get_Y:function(){return p;},set_Y:function(x){x=Math.floor(x);if(p==x){return;}if(x<z){x=z;}else{if(x>w){x=w;}}p=x;},set_RangeX:function(y,x){if(B==y&&A==x){return;}if(y>x){return;}B=y;A=x;s=A-B;},set_RangeY:function(y,x){if(z==y&&w==x){return;}if(y>x){return;}z=y;w=x;r=w-z;},draw:function(){var D=0,x=0,F=t.w,C=t.h,E=j.w,y=j.h;if(s>0){if(q==A){D=F;}else{D=Math.floor((q/s)*F);}}if(r>0){if(p==w){x=C;}else{x=Math.floor((p/r)*C);}}if(E>F){D=(F>>1)-(E>>1);}else{D-=E>>1;}if(y>C){x=(C>>1)-(y>>1);}else{x-=y>>1;}j.css({left:D+"px",top:x+"px"});},destroy:function(){e(document).unbind("mouseup",h).unbind("mousemove",l);t.unbind("mousedown",n);t=null;j=null;o.valuesChanged=null;}});var v=o.settings;j.src=v.arrow&&v.arrow.image;j.w=v.arrow&&v.arrow.width||j.width();j.h=v.arrow&&v.arrow.height||j.height();t.w=v.map&&v.map.width||t.width();t.h=v.map&&v.map.height||t.height();t.bind("mousedown",n);o.draw();e.isFunction(o.valuesChanged)&&o.valuesChanged(o);},b=function(m){var l=this,w=function(A){if(A.target.value==""){return;}if(!u.get_R()){s.red.val(0);}if(!u.get_G()){s.green.val(0);}if(!u.get_B()){s.blue.val(0);}if(!u.get_A()){s.alpha.val(100);}q(A);l.setValuesFromHsva();e.isFunction(l.valuesChanged)&&l.valuesChanged(l);},p=function(A){if(A.target.value==""){return;}if(!u.get_H()){s.hue.val(0);}if(!u.get_S()){s.saturation.val(0);}if(!u.get_V()){s.value.val(0);}if(!u.get_A()){s.alpha.val(100);}o(A);l.setValuesFromRgba();e.isFunction(l.valuesChanged)&&l.valuesChanged(l);},r=function(A){if(A.target.value==""){return;}if(!u.get_R()){s.red.val(0);}if(!u.get_G()){s.green.val(0);}if(!u.get_B()){s.blue.val(0);}if(!u.get_H()){s.hue.val(0);}if(!u.get_S()){s.saturation.val(0);}if(!u.get_V()){s.value.val(0);}y(A);l.setValuesFromRgba();e.isFunction(l.valuesChanged)&&l.valuesChanged(l);},t=function(A){if(A.target.value==""){l.setValuesFromRgba();}e.isFunction(l.valuesChanged)&&l.valuesChanged(l);},k=function(A){if(A.target.value==""){l.setValuesFromHsva();}e.isFunction(l.valuesChanged)&&l.valuesChanged(l);},x=function(A){if(A.target.value==""){s.alpha.val(100);}e.isFunction(l.valuesChanged)&&l.valuesChanged(l);},z=function(A){v(A);l.setValuesFromHex();e.isFunction(l.valuesChanged)&&l.valuesChanged(l);},j=function(A){if(A.target.value==""){l.setValuesFromHex();}},o=function(D){if(!n(D)){return D;}var C=h(s.red.val(),0,255),B=h(s.green.val(),0,255),A=h(s.blue.val(),0,255);s.red.val(C!=null?C:"");s.green.val(B!=null?B:"");s.blue.val(A!=null?A:"");},y=function(B){if(!n(B)){return B;}var A=h(s.alpha.val(),0,100);s.alpha.val(A!=null?A:"");},q=function(D){if(!n(D)){return D;}var A=h(s.hue.val(),0,360),B=h(s.saturation.val(),0,100),C=h(s.value.val(),0,100);s.hue.val(A!=null?A:"");s.saturation.val(B!=null?B:"");s.value.val(C!=null?C:"");},v=function(A){if(!n(A)){return A;}s.hex.val(s.hex.val().replace(/[^a-fA-F0-9]/g,"").toLowerCase().substring(0,8));},n=function(A){switch(A.keyCode){case 9:case 16:case 29:case 37:case 38:case 40:return false;case"c".charCodeAt():case"v".charCodeAt():if(A.ctrlKey){return false;}}return true;},h=function(C,B,A){if(C==""||isNaN(C)){return B;}if(C>A){return A;}if(C<B){return B;}return C;};e.extend(true,l,{color:new f(),fields:{hue:m.find(".jPicker_HueText"),saturation:m.find(".jPicker_SaturationText"),value:m.find(".jPicker_BrightnessText"),red:m.find(".jPicker_RedText"),green:m.find(".jPicker_GreenText"),blue:m.find(".jPicker_BlueText"),hex:m.find(".jPicker_HexText"),alpha:m.find(".jPicker_AlphaText")},valuesChanged:e.isFunction(arguments[1])&&arguments[1]||null,bindedHexKeyUp:function(A){z(A);},setValuesFromRgba:function(){u.fromRgba(s.red.val(),s.green.val(),s.blue.val(),s.alpha.val());var B=u.get_Rgba(),A=u.get_H(),C=u.get_S(),D=u.get_V(),E=u.get_A();s.hex.val(B!=null?B:"");s.hue.val(A!=null?A:"");s.saturation.val(C!=null?C:"");s.value.val(D!=null?D:"");s.alpha.val(E!=null?E:"");},setValuesFromHsva:function(){u.fromHsva(s.hue.val(),s.saturation.val(),s.value.val(),s.alpha.val());var B=u.get_Rgba(),E=u.get_R(),C=u.get_G(),A=u.get_B(),D=u.get_A();s.hex.val(B!=null?B:"");s.red.val(E!=null?E:"");s.green.val(C!=null?C:"");s.blue.val(A!=null?A:"");s.alpha.val(D!=null?D:"");},setValuesFromHex:function(){u.fromHex(s.hex.val());var C=u.get_Rgba(),H=u.get_R(),F=u.get_G(),A=u.get_B(),G=u.get_A(),B=u.get_H(),D=u.get_S(),E=u.get_V();s.red.val(H!=null?H:"");s.green.val(F!=null?F:"");s.blue.val(A!=null?A:"");s.alpha.val(G!=null?G:"");s.hue.val(B!=null?B:"");s.saturation.val(D!=null?D:"");s.value.val(E!=null?E:"");},destroy:function(){s.hue.add(s.saturation).add(s.value).unbind("keyup",events.hsvKeyUp).unbind("blur",t);s.red.add(s.green).add(s.blue).unbind("keyup",events.rgbKeyUp).unbind("blur",k);s.alpha.unbind("keyup",alphaKeyUp).unbind("blur",x);s.hex.unbind("keyup",z);s=null;u=null;l.valuesChanged=null;}});var s=l.fields,u=l.color;s.hue.add(s.saturation).add(s.value).bind("keyup",w).bind("blur",t);s.red.add(s.green).add(s.blue).bind("keyup",p).bind("blur",k);s.alpha.bind("keyup",r).bind("blur",x);s.hex.bind("keyup",z).bind("blur",j);if(s.hex.val()!=""){u.fromHex(s.hex.val());l.setValuesFromHex();}};e.jPicker={List:[],Color:function(q){var m=this,j,l,n,o,k,t,p;e.extend(true,m,{get_R:function(){return j;},get_G:function(){return l;},get_B:function(){return n;},get_A:function(){return o;},get_Rgba:function(){return j!=null&&l!=null&&n!=null&&o!=null?g.rgbaToHex({r:j,g:l,b:n,a:o}):null;},get_Hex:function(){var h=m.get_Rgba();return h&&h.substring(0,6)||null;},get_H:function(){return k;},get_S:function(){return t;},get_V:function(){return p;},get_Hsv:function(){return{h:k,s:t,v:p};},fromRgba:function(v,s,h,u){j=v;l=s;n=h;o=u;var r=g.rgbToHsv({r:v,g:s,b:h});k=r.h;t=r.s;p=r.v;},fromHsva:function(h,s,u,v){k=h;t=s;p=u;o=v;var r=g.hsvToRgb({h:h,s:s,v:u});j=r.r;l=r.g;n=r.b;},fromHex:function(s){if(s==null||s==""){j=null;l=null;n=null;o=null;k=null;t=null;p=null;return;}var r=g.hexToRgba(s);j=r.r;l=r.g;n=r.b;o=r.a;var h=g.rgbToHsv({r:r.r,g:r.g,b:r.b});k=h.h;t=h.s;p=h.v;}});if(q){if(q.hex!=null&&q.hex!=""){m.fromHex(q.hex);}else{if(!isNaN(q.r)){m.fromRgba(q.r,q.g,q.b,q.a||100);}else{if(!isNaN(q.h)){m.fromHsva(q.h,q.s,q.v,q.a||100);}}}}},ColorMethods:{hexToRgba:function(m){m=this.validateHex(m);if(m==""){return{r:null,g:null,b:null,a:null};}var l="00",k="00",h="00",j="100";if(m.length==6){m+="ff";}if(m.length>6){l=m.substring(0,2);k=m.substring(2,4);h=m.substring(4,6);j=m.substring(6,m.length);}else{if(m.length>4){l=m.substring(4,m.length);m=m.substring(0,4);}if(m.length>2){k=m.substring(2,m.length);m=m.substring(0,2);}if(m.length>0){h=m.substring(0,m.length);}}return{r:this.hexToInt(l),g:this.hexToInt(k),b:this.hexToInt(h),a:Math.floor((this.hexToInt(j)*100)/255)};},validateHex:function(h){h=h.toLowerCase().replace(/[^a-f0-9]/g,"");if(h.length>8){h=h.substring(0,8);}return h;},rgbaToHex:function(h){return this.intToHex(h.r)+this.intToHex(h.g)+this.intToHex(h.b)+this.intToHex(Math.floor((h.a*255)/100));},intToHex:function(j){var h=Math.floor(j).toString(16);if(h.length==1){h=("0"+h);}return h.toLowerCase();},hexToInt:function(h){return parseInt(h,16);},rgbToHsv:function(l){var o=l.r/255,n=l.g/255,j=l.b/255,k={h:0,s:0,v:0},m=0,h=0,p;if(o>=n&&o>=j){h=o;m=n>j?j:n;}else{if(n>=j&&n>=o){h=n;m=o>j?j:o;}else{h=j;m=n>o?o:n;}}k.v=h;k.s=h?(h-m)/h:0;if(!k.s){k.h=0;}else{p=h-m;if(o==h){k.h=(n-j)/p;}else{if(n==h){k.h=2+(j-o)/p;}else{k.h=4+(o-n)/p;}}k.h=parseInt(k.h*60);if(k.h<0){k.h+=360;}}k.s=Math.floor(k.s*100);k.v=Math.floor(k.v*100);return k;},hsvToRgb:function(n){var r={r:0,g:0,b:0,a:100},m=n.h,x=n.s,u=n.v;if(x==0){if(u==0){r.r=r.g=r.b=0;}else{r.r=r.g=r.b=Math.floor(u*255/100);}}else{if(m==360){m=0;}m/=60;x=x/100;u=u/100;var l=Math.floor(m),o=m-l,k=u*(1-x),j=u*(1-(x*o)),w=u*(1-(x*(1-o)));switch(l){case 0:r.r=u;r.g=w;r.b=k;break;case 1:r.r=j;r.g=u;r.b=k;break;case 2:r.r=k;r.g=u;r.b=w;break;case 3:r.r=k;r.g=j;r.b=u;break;case 4:r.r=w;r.g=k;r.b=u;break;case 5:r.r=u;r.g=k;r.b=j;break;}r.r=Math.floor(r.r*255);r.g=Math.floor(r.g*255);r.b=Math.floor(r.b*255);}return r;}}};var f=e.jPicker.Color,c=e.jPicker.List,g=e.jPicker.ColorMethods;e.fn.jPicker=function(j){var h=arguments;return this.each(function(){var w=e(this),y=e.extend(true,{},e.fn.jPicker.defaults,j);if(w.get(0).nodeName.toLowerCase()=="input"){e.extend(true,y,{window:{bindToInput:true,expandable:true,input:w}});if(g.validateHex(w.val())){y.color.active=new f({hex:w.val(),a:y.color.active.get_A()});y.color.current=new f({hex:w.val(),a:y.color.active.get_A()});}}if(y.window.expandable){w.after('<span class="jPicker_Picker"><span class="jPicker_Color">&nbsp;</span><span class="jPicker_Alpha">&nbsp;</span><span class="jPicker_Icon" title="Click To Open Color Picker">&nbsp;</span><span class="jPicker_Container">&nbsp;</span></span>');}else{y.window.liveUpdate=false;}var U=parseFloat(navigator.appVersion.split("MSIE")[1])<7&&document.body.filters,ay=null,av=null,au=null,T=null,S=null,R=null,Q=null,P=null,O=null,V=null,aa=null,aA=null,ak=null,am=null,ao=null,I=null,aw=null,G=null,Y=null,az=null,M=null,L=null,at=null,aq=null,A=null,l=null,J=null,ap=null,ab=null,ai=null,o=null,m=null,C=null,u=null,an=function(aE){K.active=az.color;var aF=K.active,aG=q.clientPath,aD=aF.get_Hex(),aC=function(aH){ad(aH,100);aH.css({backgroundColor:"transparent",backgroundPosition:"0px 0px",filter:""});};aC(ay);aC(av);aC(au);aC(T);aC(S);aC(R);aC(Q);aC(P);aC(O);aa.add(aA).add(ak).add(am).add(ao).add(I).removeAttr("checked");switch(aE){case"h":aa.attr({checked:true});ay.css({backgroundColor:aD&&aD.length==6?"#"+aD:"transparent"});av.css({backgroundColor:"transparent"});x(av,-256);ad(av,100);x(Q,-256);ad(O,0);break;case"s":aA.attr({checked:true});x(ay,-512);x(av,-768);z(R,aF.get_Hex());x(Q,-512);ad(O,0);break;case"v":ak.attr({checked:true});z(ay,"000000");x(av,-1024);R.css({backgroundColor:aD&&aD.length==6?"#"+aD:"transparent"});x(Q,-768);ad(O,0);break;case"r":am.attr({checked:true});x(av,-1536);x(ay,-1280);x(Q,-1024);x(R,-1280);x(S,-1536);x(T,-1792);ad(O,0);break;case"g":ao.attr({checked:true});x(av,-2048);x(ay,-1792);x(Q,-2048);x(R,-2304);x(S,-2560);x(T,-2816);ad(O,0);break;case"b":I.attr({checked:true});x(av,-2560);x(ay,-2304);x(Q,-3072);x(R,-3328);x(S,-3584);x(T,-3840);ad(O,0);break;case"a":aw.attr({checked:true});x(ay,-512);x(av,-768);ad(av,0);z(R,aF.get_Hex());ad(Q,0);ad(P,0);ad(O,100);break;default:throw ("Invalid Mode");break;}switch(aE){case"h":G.set_RangeX(0,100);G.set_RangeY(0,100);Y.set_RangeY(0,360);break;case"s":case"v":case"a":G.set_RangeX(0,360);G.set_RangeY(0,100);Y.set_RangeY(0,100);break;case"r":case"g":case"b":G.set_RangeX(0,255);G.set_RangeY(0,255);Y.set_RangeY(0,255);break;}K.mode=aE;v();G.draw();Y.draw();ah();if(aj.expandable&&aj.liveUpdate){o.css({backgroundColor:aD&&aD.length==6?"#"+aD:"transparent"});ad(m,100-aF.get_A());if(aj.bindToInput){aj.input.val(aF.get_Rgba()||"").css({backgroundColor:aD&&aD.length==6?"#"+aD:"transparent",color:aF.get_V()>75?"#000000":"#ffffff"});}}e.isFunction(w.liveCallback)&&w.liveCallback(aF);},n=function(){v();G.draw();Y.draw();ah();K.active=az.color;var aD=K.active;if(aj.expandable&&aj.liveUpdate){var aC=aD.get_Hex();o.css({backgroundColor:aC&&aC.length==6?"#"+aC:"transparent"});ad(m,100-aD.get_A());if(aj.bindToInput){aj.input.val(az.fields.hex.val()||"").css({backgroundColor:aC&&aC.length==6?"#"+aC:"transparent",color:aD.get_V()>75?"#000000":"#ffffff"});}}e.isFunction(w.liveCallback)&&w.liveCallback(aD);},B=function(){if(!az||!G||!Y){return;}K.active=az.color;var aC=az.fields,aE=K.active;switch(K.mode){case"h":aC.saturation.val(G.get_X());aC.value.val(100-G.get_Y());if(aE.get_H()==null){aC.hue.val(0);}break;case"s":case"a":aC.hue.val(G.get_X());aC.value.val(100-G.get_Y());if(aE.get_S()==null){aC.saturation.val(0);}break;case"v":aC.hue.val(G.get_X());aC.saturation.val(100-G.get_Y());if(aE.get_V()==null){aC.value.val(0);}break;case"r":aC.green.val(255-G.get_Y());aC.blue.val(G.get_X());if(aE.get_R()==null){aC.red.val(0);}break;case"g":aC.red.val(255-G.get_Y());aC.blue.val(G.get_X());if(aE.get_G()==null){aC.green.val(0);}break;case"b":aC.red.val(G.get_X());aC.green.val(255-G.get_Y());if(aE.get_B()==null){aC.blue.val(0);}break;}if(aE.get_A()==null){aC.alpha.val(100);az.setValuesFromHsva();v();Y.draw();}switch(K.mode){case"h":case"s":case"v":case"a":az.setValuesFromHsva();break;case"r":case"g":case"b":az.setValuesFromRgba();break;}ah();if(aj.expandable&&aj.liveUpdate){var aD=aE.get_Hex();o.css({backgroundColor:aD&&aD.length==6?"#"+aD:"transparent"});ad(m,100-aE.get_A());if(aj.bindToInput){aj.input.val(aE.get_Rgba()||"").css({backgroundColor:aD&&aD.length==6?"#"+aD:"transparent",color:aE.get_V()>75?"#000000":"#ffffff"});}}e.isFunction(w.liveCallback)&&w.liveCallback(aE);},al=function(){if(!az||!G||!Y){return;}K.active=az.color;var aC=az.fields,aE=K.active;switch(K.mode){case"h":aC.hue.val(360-Y.get_Y());if(aE.get_S()==null){aC.saturation.val(0);}if(aE.get_V()==null){aC.value.val(0);}break;case"s":aC.saturation.val(100-Y.get_Y());if(aE.get_H()==null){aC.hue.val(0);}if(aE.get_V()==null){aC.value.val(0);}break;case"v":aC.value.val(100-Y.get_Y());if(aE.get_H()==null){aC.hue.val(0);}if(aE.get_S()==null){aC.saturation.val(0);}break;case"r":aC.red.val(255-Y.get_Y());if(aE.get_G()==null){aC.green.val(0);}if(aE.get_B()==null){aC.blue.val(0);}break;case"g":aC.green.val(255-Y.get_Y());if(aE.get_R()==null){aC.red.val(0);}if(aE.get_B()==null){aC.blue.val(0);}break;case"b":aC.blue.val(255-Y.get_Y());if(aE.get_R()==null){aC.red.val(0);}if(aE.get_G()==null){aC.green.val(0);}break;case"a":aC.alpha.val(100-Y.get_Y());if(aE.get_R()==null){aC.red.val(0);}if(aE.get_G()==null){aC.green.val(0);}if(aE.get_B()==null){aC.blue.val(0);}break;}if(aE.get_A()==null){aC.alpha.val(100);}switch(K.mode){case"h":case"s":case"v":az.setValuesFromHsva();break;case"r":case"g":case"b":case"a":az.setValuesFromRgba();break;}ah();if(aj.expandable&&aj.liveUpdate){var aD=aE.get_Hex();o.css({backgroundColor:aD&&aD.length==6?"#"+aD:"transparent"});ad(m,100-aE.get_A());if(aj.bindToInput){aj.input.val(aE.get_Rgba()||"").css({backgroundColor:aD&&aD.length==6?"#"+aD:"transparent",color:aE.get_V()>75?"#000000":"#ffffff"});}}e.isFunction(w.liveCallback)&&w.liveCallback(aE);},v=function(){K.active=az.color;var aF=0,aE=K.active;switch(w.settings.color.mode){case"h":aF=360-aE.get_H();break;case"s":aF=100-aE.get_S();break;case"v":aF=100-aE.get_V();break;case"r":aF=255-aE.get_R();break;case"g":aF=255-aE.get_G();break;case"b":aF=255-aE.get_B();break;case"a":aF=100-aE.get_A();break;}Y.set_Y(aF);var aD=0,aC=0;switch(w.settings.color.mode){case"h":aD=aE.get_S();aC=100-aE.get_V();break;case"s":case"a":aD=aE.get_H();aC=100-aE.get_V();break;case"v":aD=aE.get_H();aC=100-aE.get_S();break;case"r":aD=aE.get_B();aC=255-aE.get_G();break;case"g":aD=aE.get_B();aC=255-aE.get_R();break;case"b":aD=aE.get_R();aC=255-aE.get_G();break;}G.set_X(aD);G.set_Y(aC);},ah=function(){aB();ar();Z();},aB=function(){try{var aC=az.color.get_Hex();A.css({backgroundColor:aC&&aC.length==6?"#"+aC:"transparent"});ad(A,az.color.get_A());}catch(aD){}},ar=function(){if(!K||!az){return;}K.active=az.color;var aC=K.active;switch(K.mode){case"h":z(ay,new f({h:aC.get_H(),s:100,v:100}).get_Hex());break;case"s":case"a":ad(av,100-aC.get_S());break;case"v":ad(av,aC.get_V());break;case"r":ad(av,aC.get_R()/255*100);break;case"g":ad(av,aC.get_G()/255*100);break;case"b":ad(av,aC.get_B()/255*100);break;}ad(au,100-aC.get_A());},Z=function(){if(!K||!az){return;}K.active=az.color;var aG=K.active;switch(K.mode){case"h":ad(P,100-aG.get_A());break;case"s":var aH=new f({h:aG.get_H(),s:100,v:aG.get_V()});z(R,aH.get_Hex());ad(P,100-aG.get_A());break;case"v":var aJ=new f({h:aG.get_H(),s:aG.get_S(),v:100});z(R,aJ.get_Hex());ad(P,100-aG.get_A());break;case"r":case"g":case"b":var aI=0,aK=0;if(K.mode=="r"){aI=aG.get_B();aK=aG.get_G();}else{if(K.mode=="g"){aI=aG.get_B();aK=aG.get_R();}else{if(K.mode=="b"){aI=aG.get_R();aK=aG.get_G();}}}var aC=aI/255*100,aF=aK/255*100,aE=(255-aI)/255*100,aD=(255-aK)/255*100;ad(T,aD>aE?aE:aD);ad(S,aD>aC?aC:aD);ad(R,aF>aC?aC:aF);ad(Q,aF>aE?aE:aF);ad(P,100-aG.get_A());break;case"a":z(R,aG.get_Hex());break;}},z=function(aC,aD){aC.css({backgroundColor:aD&&aD.length==6?"#"+aD:"transparent"});},t=function(aC,aD){aC.css({backgroundImage:"url("+aD+")"});},x=function(aC,aD){aC.css({backgroundPosition:"0px "+aD+"px"});},ad=function(aD,aC){aD.css({visibility:aC>0?"visible":"hidden"});if(aC>0&&aC<100){aD.css({opacity:aC/100});}else{if(aC==0||aC==100){aD.css({opacity:""});}}},E=function(){az.fields.hex.val(K.current.get_Rgba()||"");az.setValuesFromHex();e.isFunction(az.valuesChanged)&&az.valuesChanged(az);},D=function(aC){an(aC.target.value);},ae=function(){E();},s=function(){E();aj.expandable&&w.hide();e.isFunction(w.cancelCallback)&&w.cancelCallback(K.active);},X=function(){var aD=K.active;K.current=new f({hex:aD.get_Rgba()});var aC=aD.get_Hex();l.css({backgroundColor:aC&&aC.length==6?"#"+aC:"transparent"});ad(l,az.color.get_A());if(aj.expandable){o.css({backgroundColor:aC&&aC.length==6?"#"+aC:"transparent"});ad(m,100-aD.get_A());if(aj.bindToInput){aj.input.val(aD.get_Rgba()||"").css({backgroundColor:aC&&aC.length==6?"#"+aC:"transparent",color:aD.get_V()>75?"#000000":"#ffffff"});}}e.isFunction(w.commitCallback)&&w.commitCallback(aD);},p=function(){X();aj.expandable&&w.hide();},ag=function(){w.show();},W=function(aE){var aC=aj.element,aD=aj.page;M=parseInt(V.css("left"));L=parseInt(V.css("top"));at=aE.pageX;aq=aE.pageY;e(document).bind("mousemove",k).bind("mouseup",r);aE.stopPropagation();aE.preventDefault();return false;},k=function(aC){V.css({left:M-(at-aC.pageX)+"px",top:L-(aq-aC.pageY)+"px"});aC.stopPropagation();aC.preventDefault();return false;},r=function(aC){e(document).unbind("mousemove",k).unbind("mouseup",r);aC.stopPropagation();aC.preventDefault();return false;},F=function(aC){az.fields.hex.val(w.settings.window.input.val());az.bindedHexKeyUp(aC);},H=function(aC){az.fields.hex.val(new f({hex:e(this).attr("title")}).get_Rgba()||"");az.setValuesFromHex();e.isFunction(az.valuesChanged)&&az.valuesChanged(az);};e.extend(true,w,{id:w.attr("id"),settings:y,color:null,icon:null,commitCallback:e.isFunction(h[1])&&h[1]||null,liveCallback:e.isFunction(h[2])&&h[2]||null,cancelCallback:e.isFunction(h[3])&&h[3]||null,show:function(){if(document.all){var aD=false;for(i=0;i<c.length;i++){if(aD){c[i].color.add(c[i].icon).css({display:"none"});}if(c[i].id==w.id){aD=true;}}}K.current=new f({hex:K.active.get_Rgba()});var aC=K.active.get_Hex();l.css({backgroundColor:aC&&aC.length==6?"#"+aC:"transparent"});ad(l,K.active.get_A());V.css({display:"block"});v();},hide:function(){if(document.all){var aC=false;for(i=0;i<c.length;i++){if(aC){c[i].color.add(c[i].icon).css({display:"block"});}if(c[i].id==w.id){aC=true;}}}V.css({display:"none"});},destroy:function(){if(aj.expandable){C=V.find(".jPicker_Icon").unbind("click",ag);}if(aj.bindToInput){aj.input.unbind("keyup",F).unbind("change",F);}aa.add(aA).add(ak).add(am).add(ao).add(I).unbind("click",D);l.unbind("click",ae);ab.unbind("click",s);ap.unbind("click",p);if(aj.expandable){u.unbind("mousedown",W);}V.find(".jPicker_QuickColor").unbind("click",H);aa=null;aA=null;ak=null;am=null;ao=null;I=null;aw=null;ay=null;av=null;au=null;T=null;S=null;R=null;Q=null;P=null;O=null;J=null;A=null;l=null;ap=null;ab=null;ai=null;w.color=null;w.icon=null;G.destroy();G=null;Y.destroy();Y=null;az.destroy();az=null;w.commitCallback=null;w.cancelCallback=null;w.liveCallback=null;V.html("");for(i=0;i<c.length;i++){if(c[i].id==w.id){c.splice(i,1);}}}});var q=w.settings.images,aj=w.settings.window,af=w.settings.localization,K=w.settings.color;V=aj.expandable?w.next().find(".jPicker_Container"):w;if(aj.expandable){V.css({left:aj.position.x=="left"?"-526px":aj.position.x=="center"?"-259px":aj.position.x=="right"?"0px":aj.position.x=="screenCenter"?((e(document).width()>>1)-259)-w.next().offset().left+"px":aj.position.x,position:"absolute",top:aj.position.y=="top"?"-350px":aj.position.y=="center"?"-158px":aj.position.y=="bottom"?"25px":aj.position.y});}if((typeof(K.active)).toString().toLowerCase()=="string"){K.active=new f({hex:K.active});}V.html('<table class="jPicker_table"><tbody>'+(aj.expandable?'<tr><td class="jPicker_MoveBar" colspan="6">&nbsp;</td></tr>':"")+'<tr><td rowspan="9"><h2 class="jPicker_Title">'+(aj.title||af.text.title)+'</h2><div class="jPicker_ColorMap"><span class="jPicker_ColorMap_l1">&nbsp;</span><span class="jPicker_ColorMap_l2">&nbsp;</span><span class="jPicker_ColorMap_l3">&nbsp;</span><img src="'+q.clientPath+q.colorMap.arrow.file+'" class="jPicker_ColorMap_Arrow"/></div></td><td rowspan="9"><div class="jPicker_ColorBar"><span class="jPicker_ColorBar_l1">&nbsp;</span><span class="jPicker_ColorBar_l2">&nbsp;</span><span class="jPicker_ColorBar_l3">&nbsp;</span><span class="jPicker_ColorBar_l4">&nbsp;</span><span class="jPicker_ColorBar_l5">&nbsp;</span><span class="jPicker_ColorBar_l6">&nbsp;</span><img src="'+q.clientPath+q.colorBar.arrow.file+'" class="jPicker_ColorBar_Arrow"/></div></td><td colspan="3" class="jPicker_Preview">'+af.text.newColor+'<div class="jPicker_NewCurrent"><span class="jPicker_Active" title="'+af.tooltips.colors.newColor+'">&nbsp;</span><span class="jPicker_Current" title="'+af.tooltips.colors.currentColor+'">&nbsp;</span></div>'+af.text.currentColor+'</td><td rowspan="9" class="jPicker_OkCancel"><input type="button" class="jPicker_Ok" value="'+af.text.ok+'" title="'+af.tooltips.buttons.ok+'"/><input type="button" class="jPicker_Cancel" value="'+af.text.cancel+'" title="'+af.tooltips.buttons.cancel+'"/><hr/><div class="jPicker_Grid">&nbsp;</div></td></tr><tr><td><input type="radio" class="jPicker_HueRadio" id="jPicker_Hue_'+c.length+'" name="jPicker_Mode_'+c.length+'" value="h" title="'+af.tooltips.hue.radio+'"/></td><td><label for="jPicker_Hue_'+c.length+'" title="'+af.tooltips.hue.radio+'">H:</label></td><td class="jPicker_Text"><input type="text" class="jPicker_HueText" value="'+K.active.get_H()+'" title="'+af.tooltips.hue.textbox+'"/> &deg;</td></tr><tr><td><input type="radio" class="jPicker_SaturationRadio" id="jPicker_Saturation_'+c.length+'" name="jPicker_Mode_'+c.length+'" value="s" title="'+af.tooltips.saturation.radio+'"/></td><td><label for="jPicker_Saturation_'+c.length+'" title="'+af.tooltips.saturation.radio+'">S:</label></td><td class="jPicker_Text"><input type="text" class="jPicker_SaturationText" value="'+K.active.get_S()+'" title="'+af.tooltips.saturation.textbox+'"/> %</td></tr><tr><td><input type="radio" class="jPicker_BrightnessRadio" id="jPicker_Brightness_'+c.length+'" name="jPicker_Mode_'+c.length+'" value="v" title="'+af.tooltips.brightness.radio+'"/><br/><br/></td><td><label for="jPicker_Brightness_'+c.length+'" title="'+af.tooltips.brightness.radio+'">B:</label></td><td class="jPicker_Text"><input type="text" class="jPicker_BrightnessText" value="'+K.active.get_V()+'" title="'+af.tooltips.brightness.textbox+'"/> %</td></tr><tr><td><input type="radio" class="jPicker_RedRadio" id="jPicker_Red_'+c.length+'" name="jPicker_Mode_'+c.length+'" value="r" title="'+af.tooltips.red.radio+'"/></td><td><label for="jPicker_Red_'+c.length+'" title="'+af.tooltips.red.radio+'">R:</label></td><td class="jPicker_Text"><input type="text" class="jPicker_RedText" value="'+K.active.get_R()+'" title="'+af.tooltips.red.textbox+'"/></td></tr><tr><td><input type="radio" class="jPicker_GreenRadio" id="jPicker_Green_'+c.length+'" name="jPicker_Mode_'+c.length+'" value="g" title="'+af.tooltips.green.radio+'"/></td><td><label for="jPicker_Green_'+c.length+'" title="'+af.tooltips.green.radio+'">G:</label></td><td class="jPicker_Text"><input type="text" class="jPicker_GreenText" value="'+K.active.get_G()+'" title="'+af.tooltips.green.textbox+'"/></td></tr><tr><td><input type="radio" class="jPicker_BlueRadio" id="jPicker_Blue_'+c.length+'" name="jPicker_Mode_'+c.length+'" value="b" title="'+af.tooltips.blue.radio+'"/></td><td><label for="jPicker_Blue_'+c.length+'" title="'+af.tooltips.blue.radio+'">B:</label></td><td class="jPicker_Text"><input type="text" class="jPicker_BlueText" value="'+K.active.get_B()+'" title="'+af.tooltips.blue.textbox+'"/></td></tr><tr><td><input type="radio" class="jPicker_AlphaRadio" id="jPicker_Alpha_'+c.length+'" name="jPicker_Mode_'+c.length+'" value="a" title="'+af.tooltips.alpha.radio+'"/></td><td><label for="jPicker_Alpha_'+c.length+'" title="'+af.tooltips.alpha.radio+'">A:</label></td><td class="jPicker_Text"><input type="text" class="jPicker_AlphaText" value="'+K.active.get_A()+'" title="'+af.tooltips.alpha.textbox+'"/> %</td></tr><tr><td class="jPicker_HexCol"><label for="jPicker_Hex_'+c.length+'" title="'+af.tooltips.hex.textbox+'">#:</label></td><td class="jPicker_EnterHex" colspan="2"><input type="text" class="jPicker_HexText" id="jPicker_Hex_'+c.length+'" value="'+K.active.get_Rgba()+'" title="'+af.tooltips.hex.textbox+'"/></td></tr></tbody></table>');aa=V.find(".jPicker_HueRadio");aA=V.find(".jPicker_SaturationRadio");ak=V.find(".jPicker_BrightnessRadio");am=V.find(".jPicker_RedRadio");ao=V.find(".jPicker_GreenRadio");I=V.find(".jPicker_BlueRadio");aw=V.find(".jPicker_AlphaRadio");ay=V.find(".jPicker_ColorMap_l1");av=V.find(".jPicker_ColorMap_l2");au=V.find(".jPicker_ColorMap_l3");T=V.find(".jPicker_ColorBar_l1");S=V.find(".jPicker_ColorBar_l2");R=V.find(".jPicker_ColorBar_l3");Q=V.find(".jPicker_ColorBar_l4");P=V.find(".jPicker_ColorBar_l5");O=V.find(".jPicker_ColorBar_l6");J=V.find(".jPicker_NewCurrent");var ac=K.active.get_Hex();A=V.find(".jPicker_Active").css({backgroundColor:ac&&ac.length==6?"#"+ac:"transparent"});l=V.find(".jPicker_Current").css({backgroundColor:ac&&ac.length==6?"#"+ac:"transparent"});ap=V.find(".jPicker_Ok");ab=V.find(".jPicker_Cancel");ai=V.find(".jPicker_Grid");w.color=e(".Picker_Color");w.icon=e(".jPicker_Icon");az=new b(V,n);G=new d(V.find(".jPicker_ColorMap"),{map:{width:q.colorMap.width,height:q.colorMap.height},arrow:{image:q.clientPath+q.colorMap.arrow.file,width:q.colorMap.arrow.width,height:q.colorMap.arrow.height}},B);Y=new d(V.find(".jPicker_ColorBar"),{map:{width:q.colorBar.width,height:q.colorBar.height},arrow:{image:q.clientPath+q.colorBar.arrow.file,width:q.colorBar.arrow.width,height:q.colorBar.arrow.height}},al);t(ay,q.clientPath+"Maps.png");t(av,q.clientPath+"Maps.png");t(au,q.clientPath+"map-opacity.png");t(T,q.clientPath+"Bars.png");t(S,q.clientPath+"Bars.png");t(R,q.clientPath+"Bars.png");t(Q,q.clientPath+"Bars.png");t(P,q.clientPath+"bar-opacity.png");t(O,q.clientPath+"AlphaBar.png");t(J,q.clientPath+"preview-opacity.png");if(aj.expandable){o=w.next().find(".jPicker_Color").css({backgroundColor:ac&&ac.length==6?"#"+ac:"transparent"});m=w.next().find(".jPicker_Alpha");t(m,q.clientPath+"bar-opacity.png");ad(m,100-K.active.get_A());C=w.next().find(".jPicker_Icon").css({backgroundImage:"url("+q.clientPath+q.picker.file+")"}).bind("click",ag);if(aj.bindToInput){aj.input.bind("keyup",F).bind("change",F);}}aa.add(aA).add(ak).add(am).add(ao).add(I).add(aw).bind("click",D);l.bind("click",ae);ab.bind("click",s);ap.bind("click",p);if(aj.expandable){u=V.find(".jPicker_MoveBar").bind("mousedown",W);}if(K.quickList&&K.quickList.length>0){ai.html("");for(i=0;i<K.quickList.length;i++){if((typeof(K.quickList[i])).toString().toLowerCase()=="string"){K.quickList[i]=new f({hex:K.quickList[i]});}var ax=K.quickList[i].get_Rgba();ai.append('<span class="jPicker_QuickColor" title="'+(ax&&"#"+ax||"")+'">&nbsp;</span>');var N=K.quickList[i].get_Hex();V.find(".jPicker_QuickColor").eq(i).css({backgroundColor:N&&N.length==6?"#"+N:"transparent",backgroundImage:N?"none":"url("+q.clientPath+"NoColor.png)"}).click(H);}}an(K.mode);az.fields.hex.val(K.active.get_Rgba()||"");az.setValuesFromHex();v();ah();if(!aj.expandable){w.show();}c.push(w);});};e.fn.jPicker.defaults={window:{title:null,position:{x:"screenCenter",y:"top"},expandable:false,liveUpdate:true},color:{mode:"h",active:new f({hex:"#ffcc00ff"}),quickList:[new f({h:360,s:33,v:100}),new f({h:360,s:66,v:100}),new f({h:360,s:100,v:100}),new f({h:360,s:100,v:75}),new f({h:360,s:100,v:50}),new f({h:180,s:0,v:100}),new f({h:30,s:33,v:100}),new f({h:30,s:66,v:100}),new f({h:30,s:100,v:100}),new f({h:30,s:100,v:75}),new f({h:30,s:100,v:50}),new f({h:180,s:0,v:90}),new f({h:60,s:33,v:100}),new f({h:60,s:66,v:100}),new f({h:60,s:100,v:100}),new f({h:60,s:100,v:75}),new f({h:60,s:100,v:50}),new f({h:180,s:0,v:80}),new f({h:90,s:33,v:100}),new f({h:90,s:66,v:100}),new f({h:90,s:100,v:100}),new f({h:90,s:100,v:75}),new f({h:90,s:100,v:50}),new f({h:180,s:0,v:70}),new f({h:120,s:33,v:100}),new f({h:120,s:66,v:100}),new f({h:120,s:100,v:100}),new f({h:120,s:100,v:75}),new f({h:120,s:100,v:50}),new f({h:180,s:0,v:60}),new f({h:150,s:33,v:100}),new f({h:150,s:66,v:100}),new f({h:150,s:100,v:100}),new f({h:150,s:100,v:75}),new f({h:150,s:100,v:50}),new f({h:180,s:0,v:50}),new f({h:180,s:33,v:100}),new f({h:180,s:66,v:100}),new f({h:180,s:100,v:100}),new f({h:180,s:100,v:75}),new f({h:180,s:100,v:50}),new f({h:180,s:0,v:40}),new f({h:210,s:33,v:100}),new f({h:210,s:66,v:100}),new f({h:210,s:100,v:100}),new f({h:210,s:100,v:75}),new f({h:210,s:100,v:50}),new f({h:180,s:0,v:30}),new f({h:240,s:33,v:100}),new f({h:240,s:66,v:100}),new f({h:240,s:100,v:100}),new f({h:240,s:100,v:75}),new f({h:240,s:100,v:50}),new f({h:180,s:0,v:20}),new f({h:270,s:33,v:100}),new f({h:270,s:66,v:100}),new f({h:270,s:100,v:100}),new f({h:270,s:100,v:75}),new f({h:270,s:100,v:50}),new f({h:180,s:0,v:10}),new f({h:300,s:33,v:100}),new f({h:300,s:66,v:100}),new f({h:300,s:100,v:100}),new f({h:300,s:100,v:75}),new f({h:300,s:100,v:50}),new f({h:180,s:0,v:0}),new f({h:330,s:33,v:100}),new f({h:330,s:66,v:100}),new f({h:330,s:100,v:100}),new f({h:330,s:100,v:75}),new f({h:330,s:100,v:50}),new f()]},images:{clientPath:"/jPicker/images/",colorMap:{width:256,height:256,arrow:{file:"mappoint.gif",width:15,height:15}},colorBar:{width:20,height:256,arrow:{file:"rangearrows.gif",width:40,height:9}},picker:{file:"picker.gif",width:25,height:24}},localization:{text:{title:"Drag Markers To Pick A Color",newColor:"new",currentColor:"current",ok:"OK",cancel:"Cancel"},tooltips:{colors:{newColor:"New Color - Press &ldquo;OK&rdquo; To Commit",currentColor:"Click To Revert To Original Color"},buttons:{ok:"Commit To This Color Selection",cancel:"Cancel And Revert To Original Color"},hue:{radio:"Set To &ldquo;Hue&rdquo; Color Mode",textbox:"Enter A &ldquo;Hue&rdquo; Value (0-360&deg;)"},saturation:{radio:"Set To &ldquo;Saturation&rdquo; Color Mode",textbox:"Enter A &ldquo;Saturation&rdquo; Value (0-100%)"},brightness:{radio:"Set To &ldquo;Brightness&rdquo; Color Mode",textbox:"Enter A &ldquo;Brightness&rdquo; Value (0-100%)"},red:{radio:"Set To &ldquo;Red&rdquo; Color Mode",textbox:"Enter A &ldquo;Red&rdquo; Value (0-255)"},green:{radio:"Set To &ldquo;Green&rdquo; Color Mode",textbox:"Enter A &ldquo;Green&rdquo; Value (0-255)"},blue:{radio:"Set To &ldquo;Blue&rdquo; Color Mode",textbox:"Enter A &ldquo;Blue&rdquo; Value (0-255)"},alpha:{radio:"Set To &ldquo;Alpha&rdquo; Color Mode",textbox:"Enter A &ldquo;Alpha&rdquo; Value (0-100)"},hex:{textbox:"Enter A &ldquo;Hex&rdquo; Color Value (#000000-#ffffff)"}}}};})(jQuery,"1.0.12"); \ No newline at end of file
diff --git a/files_svgedit/js/jgraduate/jquery.jgraduate.min.js b/files_svgedit/js/jgraduate/jquery.jgraduate.min.js
deleted file mode 100644
index 7a1adde2e..000000000
--- a/files_svgedit/js/jgraduate/jquery.jgraduate.min.js
+++ /dev/null
@@ -1 +0,0 @@
-(function(){var a={svg:"http://www.w3.org/2000/svg",xlink:"http://www.w3.org/1999/xlink"};if(!window.console){window.console=new function(){this.log=function(b){};this.dir=function(b){}}}$.jGraduate={Paint:function(c){var b=c||{};this.alpha=b.alpha||100;if(b.copy){this.type=b.copy.type;this.alpha=b.copy.alpha;this.solidColor=null;this.linearGradient=null;this.radialGradient=null;switch(this.type){case"none":break;case"solidColor":this.solidColor=b.copy.solidColor;break;case"linearGradient":this.linearGradient=b.copy.linearGradient.cloneNode(true);break;case"radialGradient":this.radialGradient=b.copy.radialGradient.cloneNode(true);break}}else{if(b.linearGradient){this.type="linearGradient";this.solidColor=null;this.radialGradient=null;this.linearGradient=b.linearGradient.cloneNode(true)}else{if(b.radialGradient){this.type="radialGradient";this.solidColor=null;this.linearGradient=null;this.radialGradient=b.radialGradient.cloneNode(true)}else{if(b.solidColor){this.type="solidColor";this.solidColor=b.solidColor}else{this.type="none";this.solidColor=null;this.linearGradient=null;this.radialGradient=null}}}}}};jQuery.fn.jGraduateDefaults={paint:new $.jGraduate.Paint(),window:{pickerTitle:"Drag markers to pick a paint",},images:{clientPath:"images/",},};jQuery.fn.jGraduate=function(c){var b=arguments;return this.each(function(){var k=$(this),g=$.extend(true,{},jQuery.fn.jGraduateDefaults,c),p=k.attr("id"),v="#"+k.attr("id")+" ";if(!v){alert("Container element must have an id attribute to maintain unique id strings for sub-elements.");return}var h=function(){if(k.paint.type=="radialGradient"){k.paint.linearGradient=null}else{if(k.paint.type=="linearGradient"){k.paint.radialGradient=null}else{if(k.paint.type=="solidColor"){k.paint.linearGradient=null;k.paint.radialGradient=null}}}$.isFunction(k.okCallback)&&k.okCallback(k.paint);k.hide()},i=function(){$.isFunction(k.cancelCallback)&&k.cancelCallback();k.hide()};$.extend(true,k,{paint:new $.jGraduate.Paint({copy:g.paint}),okCallback:$.isFunction(b[1])&&b[1]||null,cancelCallback:$.isFunction(b[2])&&b[2]||null,});var j=k.position(),r=null;if(k.paint.type=="none"){k.paint=$.jGraduate.Paint({solidColor:"ffffff"})}k.addClass("jGraduate_Picker");k.html('<ul class="jGraduate_tabs"><li class="jGraduate_tab_color jGraduate_tab_current" data-type="col">Solid Color</li><li class="jGraduate_tab_lingrad" data-type="lg">Linear Gradient</li><li class="jGraduate_tab_radgrad" data-type="rg">Radial Gradient</li></ul><div class="jGraduate_colPick"></div><div class="jGraduate_lgPick"></div><div class="jGraduate_rgPick"></div>');var u=$(v+"> .jGraduate_colPick");var q=$(v+"> .jGraduate_lgPick");var f=$(v+"> .jGraduate_rgPick");q.html('<div id="'+p+'_jGraduate_Swatch" class="jGraduate_Swatch"><h2 class="jGraduate_Title">'+g.window.pickerTitle+'</h2><div id="'+p+'_lg_jGraduate_GradContainer" class="jGraduate_GradContainer"></div><div id="'+p+'_lg_jGraduate_Opacity" class="jGraduate_Opacity" title="Click to set overall opacity of the gradient paint"><img id="'+p+'_lg_jGraduate_AlphaArrows" class="jGraduate_AlphaArrows" src="'+g.images.clientPath+'rangearrows2.gif"></img></div></div><div class="jGraduate_Form"><div class="jGraduate_StopSection"><label class="jGraduate_Form_Heading">Begin Stop</label><div class="jGraduate_Form_Section"><label>x:</label><input type="text" id="'+p+'_jGraduate_x1" size="3" title="Enter starting x value between 0.0 and 1.0"/><label> y:</label><input type="text" id="'+p+'_jGraduate_y1" size="3" title="Enter starting y value between 0.0 and 1.0"/><div id="'+p+'_jGraduate_colorBoxBegin" class="colorBox"></div><label id="'+p+'_jGraduate_beginOpacity"> 100%</label></div></div><div class="jGraduate_StopSection"><label class="jGraduate_Form_Heading">End Stop</label><div class="jGraduate_Form_Section"><label>x:</label><input type="text" id="'+p+'_jGraduate_x2" size="3" title="Enter ending x value between 0.0 and 1.0"/><label> y:</label><input type="text" id="'+p+'_jGraduate_y2" size="3" title="Enter ending y value between 0.0 and 1.0"/><div id="'+p+'_jGraduate_colorBoxEnd" class="colorBox"></div><label id="'+p+'_jGraduate_endOpacity">100%</label></div></div><div class="lg_jGraduate_OpacityField"><label class="lg_jGraduate_OpacityLabel">A: </label><input type="text" id="'+p+'_lg_jGraduate_OpacityInput" class="jGraduate_OpacityInput" size="3" value="100"/>%</div></div><div class="jGraduate_OkCancel"><input type="button" id="'+p+'_lg_jGraduate_Ok" class="jGraduate_Ok" value="OK"/><input type="button" id="'+p+'_lg_jGraduate_Cancel" class="jGraduate_Cancel" value="Cancel"/></div><div class="jGraduate_LightBox"></div><div id="'+p+'_jGraduate_stopPicker" class="jGraduate_stopPicker"></div>');f.html('<div class="jGraduate_Swatch"><h2 class="jGraduate_Title">'+g.window.pickerTitle+'</h2><div id="'+p+'_rg_jGraduate_GradContainer" class="jGraduate_GradContainer"></div><div id="'+p+'_rg_jGraduate_Opacity" class="jGraduate_Opacity" title="Click to set overall opacity of the gradient paint"><img id="'+p+'_rg_jGraduate_AlphaArrows" class="jGraduate_AlphaArrows" src="'+g.images.clientPath+'rangearrows2.gif"></img></div></div><div id="jGraduate_radColors" class="jGraduate_StopSection"><label class="jGraduate_Form_Heading">Colors</label><div class="jGraduate_Form_Section jGraduate_Colorblocks"><div class="jGraduate_colorblock"><span>Center:</span><div id="'+p+'_jGraduate_colorBoxCenter" class="colorBox"></div><label id="'+p+'_rg_jGraduate_centerOpacity"> 100%</label></div><div class="jGraduate_colorblock"><span>Outer:</span><div id="'+p+'_jGraduate_colorBoxOuter" class="colorBox"></div><label id="'+p+'_jGraduate_outerOpacity"> 100%</label></div></div></div><div class="jGraduate_StopSection"></div><div class="jGraduate_Form"><div class="jGraduate_StopSection"><label class="jGraduate_Form_Heading">Center Point</label><div class="jGraduate_Form_Section"><label>x:</label><input type="text" id="'+p+'_jGraduate_cx" size="3" title="Enter x value between 0.0 and 1.0"/><label> y:</label><input type="text" id="'+p+'_jGraduate_cy" size="3" title="Enter y value between 0.0 and 1.0"/></div></div><div class="jGraduate_StopSection"><label class="jGraduate_Form_Heading">Focal Point</label><div class="jGraduate_Form_Section"><label>Match center: <input type="checkbox" checked="checked" id="'+p+'_jGraduate_match_ctr"/></label><br/><label>x:</label><input type="text" id="'+p+'_jGraduate_fx" size="3" title="Enter x value between 0.0 and 1.0"/><label> y:</label><input type="text" id="'+p+'_jGraduate_fy" size="3" title="Enter y value between 0.0 and 1.0"/></div></div><div class="jGraduate_RadiusField"><label class="jGraduate_Form_Heading">Radius</label><div class="jGraduate_Form_Section"><div id="'+p+'_jGraduate_RadiusContainer" class="jGraduate_RadiusContainer"></div><input type="text" id="'+p+'_jGraduate_RadiusInput" size="3" value="100"/>%<div id="'+p+'_jGraduate_Radius" class="jGraduate_Radius" title="Click to set radius"><img id="'+p+'_jGraduate_RadiusArrows" class="jGraduate_RadiusArrows" src="'+g.images.clientPath+'rangearrows2.gif"></img></div></div></div></div><div class="rg_jGraduate_OpacityField"><label class="rg_jGraduate_OpacityLabel">A: </label><input type="text" id="'+p+'_rg_jGraduate_OpacityInput" class="jGraduate_OpacityInput" size="3" value="100"/>%</div><div class="jGraduate_OkCancel"><input type="button" id="'+p+'_rg_jGraduate_Ok" class="jGraduate_Ok" value="OK"/><input type="button" id="'+p+'_rg_jGraduate_Cancel" class="jGraduate_Cancel" value="Cancel"/></div><div class="jGraduate_LightBox"></div><div id="'+p+'_rg_jGraduate_stopPicker" class="jGraduate_stopPicker"></div>');var t=256,o=0,n=0,d=15/2,m=t-2*o,l=t-2*n;$.each(["lg","rg"],function(z){var y=p+"_"+this;var w=document.getElementById(y+"_jGraduate_GradContainer");var x=w.appendChild(document.createElementNS(a.svg,"svg"));x.id=y+"_jgraduate_svg";x.setAttribute("width",t);x.setAttribute("height",t);x.setAttribute("xmlns",a.svg)});(function(){var Q=document.getElementById(p+"_lg_jgraduate_svg");if(k.paint.type=="linearGradient"){k.paint.linearGradient.id=p+"_jgraduate_grad";k.paint.linearGradient=Q.appendChild(k.paint.linearGradient.cloneNode(true))}else{var I=Q.appendChild(document.createElementNS(a.svg,"linearGradient"));I.id=p+"_jgraduate_grad";I.setAttribute("x1","0.0");I.setAttribute("y1","0.0");I.setAttribute("x2","1.0");I.setAttribute("y2","1.0");var V=I.appendChild(document.createElementNS(a.svg,"stop"));V.setAttribute("offset","0.0");V.setAttribute("stop-color","#ff0000");var E=I.appendChild(document.createElementNS(a.svg,"stop"));E.setAttribute("offset","1.0");E.setAttribute("stop-color","#ffff00");k.paint.linearGradient=I}var D=k.paint.alpha;$("#"+p+"_lg_jGraduate_OpacityInput").val(D);var S=parseInt(255*(D/100))-4.5;$("#"+p+"_lg_jGraduate_AlphaArrows").css({"margin-left":S});var U=parseFloat(k.paint.linearGradient.getAttribute("x1")||0),C=parseFloat(k.paint.linearGradient.getAttribute("y1")||0),T=parseFloat(k.paint.linearGradient.getAttribute("x2")||1),A=parseFloat(k.paint.linearGradient.getAttribute("y2")||0);var y=document.createElementNS(a.svg,"rect");y.id=p+"_lg_jgraduate_rect";y.setAttribute("x",o);y.setAttribute("y",n);y.setAttribute("width",l);y.setAttribute("height",l);y.setAttribute("fill","url(#"+p+"_jgraduate_grad)");y.setAttribute("fill-opacity","1.0");y=Q.appendChild(y);$("#"+p+"_lg_jgraduate_rect").attr("fill-opacity",D/100);var x=document.createElementNS(a.svg,"image");x.id=p+"_stop1";x.setAttribute("class","stop");x.setAttributeNS(a.xlink,"href",g.images.clientPath+"mappoint.gif");x.setAttributeNS(a.xlink,"title","Begin Stop");x.appendChild(document.createElementNS(a.svg,"title")).appendChild(document.createTextNode("Begin Stop"));x.setAttribute("width",18);x.setAttribute("height",18);x.setAttribute("x",o+m*U-d);x.setAttribute("y",n+l*C-d);x.setAttribute("cursor","move");x=Q.appendChild(x);var P=document.createElementNS(a.svg,"image");P.id=p+"_stop2";P.setAttribute("class","stop");P.setAttributeNS(a.xlink,"href",g.images.clientPath+"mappoint.gif");P.setAttributeNS(a.xlink,"title","End Stop");P.appendChild(document.createElementNS(a.svg,"title")).appendChild(document.createTextNode("End Stop"));P.setAttribute("width",18);P.setAttribute("height",18);P.setAttribute("x",o+m*T-d);P.setAttribute("y",n+l*A-d);P.setAttribute("cursor","move");P=Q.appendChild(P);$("#"+p+"_lg_jGraduate_Ok").bind("click",function(){k.paint.type="linearGradient";k.paint.solidColor=null;h()});$("#"+p+"_lg_jGraduate_Cancel").bind("click",function(Y){i()});var U=k.paint.linearGradient.getAttribute("x1");if(!U){U="0.0"}var G=$("#"+p+"_jGraduate_x1");G.val(U);G.change(function(){if(isNaN(parseFloat(this.value))||this.value<0||this.value>1){this.value=0}k.paint.linearGradient.setAttribute("x1",this.value);x.setAttribute("x",o+m*this.value-d)});var C=k.paint.linearGradient.getAttribute("y1");if(!C){C="0.0"}var F=$("#"+p+"_jGraduate_y1");F.val(C);F.change(function(){if(isNaN(parseFloat(this.value))||this.value<0||this.value>1){this.value=0}k.paint.linearGradient.setAttribute("y1",this.value);x.setAttribute("y",n+l*this.value-d)});var T=k.paint.linearGradient.getAttribute("x2");if(!T){T="1.0"}var K=$("#"+p+"_jGraduate_x2");K.val(T);K.change(function(){if(isNaN(parseFloat(this.value))||this.value<0||this.value>1){this.value=1}k.paint.linearGradient.setAttribute("x2",this.value);P.setAttribute("x",o+m*this.value-d)});var A=k.paint.linearGradient.getAttribute("y2");if(!A){A="0.0"}y2Input=$("#"+p+"_jGraduate_y2");y2Input.val(A);y2Input.change(function(){if(isNaN(parseFloat(this.value))||this.value<0||this.value>1){this.value=0}k.paint.linearGradient.setAttribute("y2",this.value);P.setAttribute("y",n+l*this.value-d)});var J=k.paint.linearGradient.getElementsByTagNameNS(a.svg,"stop");var w=J.length;if(w<2){while(w<2){k.paint.linearGradient.appendChild(document.createElementNS(a.svg,"stop"));++w}J=k.paint.linearGradient.getElementsByTagNameNS(a.svg,"stop")}var X=function(aa,ac){var ab=ac.offset();var Z=(aa.pageX-ab.left-parseInt(ac.css("border-left-width")));if(Z>255){Z=255}if(Z<0){Z=0}var Y=Z-4.5;Z/=255;$("#"+p+"_lg_jGraduate_AlphaArrows").css({"margin-left":Y});$("#"+p+"_lg_jgraduate_rect").attr("fill-opacity",Z);Z=parseInt(Z*100);$("#"+p+"_lg_jGraduate_OpacityInput").val(Z);k.paint.alpha=Z};var W=false;$("#"+p+"_lg_jGraduate_Opacity").mousedown(function(Y){X(Y,$(this));W=true;Y.preventDefault()}).mousemove(function(Y){if(W){X(Y,$(this));Y.preventDefault()}}).mouseup(function(Y){X(Y,$(this));W=false;Y.preventDefault()});var M=null;var B=-1,z=-1;$(".stop, #color_picker_lg_jGraduate_GradContainer image").mousedown(function(Y){M=this;B=Y.clientX;z=Y.clientY;Y.preventDefault()});$("#"+p+"_lg_jgraduate_svg").mousemove(function(aa){if(null!=M){var ac=aa.clientX-B;var Z=aa.clientY-z;B+=ac;z+=Z;var Y=parseFloat(M.getAttribute("x"))+ac;var ae=parseFloat(M.getAttribute("y"))+Z;if(Y<o-d){Y=o-d}if(ae<n-d){ae=n-d}if(Y>o+m-d){Y=o+m-d}if(ae>n+l-d){ae=n+l-d}M.setAttribute("x",Y);M.setAttribute("y",ae);var ad=(Y-o+d)/m;var ab=(ae-n+d)/l;if(M.id==(p+"_stop1")){G.val(ad);F.val(ab);k.paint.linearGradient.setAttribute("x1",ad);k.paint.linearGradient.setAttribute("y1",ab)}else{K.val(ad);y2Input.val(ab);k.paint.linearGradient.setAttribute("x2",ad);k.paint.linearGradient.setAttribute("y2",ab)}aa.preventDefault()}});$("#"+p+"_lg_jgraduate_svg").mouseup(function(Y){M=null});var H=J[0].getAttribute("stop-color");if(!H){H="#000"}beginColorBox=$("#"+p+"_jGraduate_colorBoxBegin");beginColorBox.css({"background-color":H});var R=J[0].getAttribute("stop-opacity");if(!R){R="1.0"}$("#"+p+"lg_jGraduate_beginOpacity").html((R*100)+"%");var N=J[J.length-1].getAttribute("stop-color");if(!N){N="#000"}endColorBox=$("#"+p+"_jGraduate_colorBoxEnd");endColorBox.css({"background-color":N});var L=J[J.length-1].getAttribute("stop-opacity");if(!L){L="1.0"}$("#"+p+"jGraduate_endOpacity").html((L*100)+"%");$("#"+p+"_jGraduate_colorBoxBegin").click(function(){$("div.jGraduate_LightBox").show();var Z=$(this);var Y=(parseFloat(R)*255).toString(16);while(Y.length<2){Y="0"+Y}r=H.substr(1)+Y;$("#"+p+"_jGraduate_stopPicker").css({left:100,bottom:15}).jPicker({window:{title:"Pick the start color and opacity for the gradient"},images:{clientPath:g.images.clientPath},color:{active:r,alphaSupport:true}},function(aa){H=aa.get_Hex()?("#"+aa.get_Hex()):"none";R=aa.get_A()?aa.get_A()/100:1;Z.css("background",H);$("#"+p+"_jGraduate_beginOpacity").html(parseInt(R*100)+"%");J[0].setAttribute("stop-color",H);J[0].setAttribute("stop-opacity",R);$("div.jGraduate_LightBox").hide();$("#"+p+"_jGraduate_stopPicker").hide()},null,function(){$("div.jGraduate_LightBox").hide();$("#"+p+"_jGraduate_stopPicker").hide()})});$("#"+p+"_jGraduate_colorBoxEnd").click(function(){$("div.jGraduate_LightBox").show();var Z=$(this);var Y=(parseFloat(L)*255).toString(16);while(Y.length<2){Y="0"+Y}r=N.substr(1)+Y;$("#"+p+"_jGraduate_stopPicker").css({left:100,top:15}).jPicker({window:{title:"Pick the end color and opacity for the gradient"},images:{clientPath:g.images.clientPath},color:{active:r,alphaSupport:true}},function(aa){N=aa.get_Hex()?("#"+aa.get_Hex()):"none";L=aa.get_A()?aa.get_A()/100:1;Z.css("background",N);$("#"+p+"_jGraduate_endOpacity").html(parseInt(L*100)+"%");J[1].setAttribute("stop-color",N);J[1].setAttribute("stop-opacity",L);$("div.jGraduate_LightBox").hide();$("#"+p+"_jGraduate_stopPicker").hide()},null,function(){$("div.jGraduate_LightBox").hide();$("#"+p+"_jGraduate_stopPicker").hide()})});var O=(k.paint.alpha*255/100).toString(16);while(O.length<2){O="0"+O}r=k.paint.solidColor=="none"?"":k.paint.solidColor+O;u.jPicker({window:{title:g.window.pickerTitle},images:{clientPath:g.images.clientPath},color:{active:r,alphaSupport:true}},function(Y){k.paint.type="solidColor";k.paint.alpha=Y.get_A()?Y.get_A():100;k.paint.solidColor=Y.get_Hex()?Y.get_Hex():"none";k.paint.linearGradient=null;h()},null,function(){i()})}());(function(){var w=document.getElementById(p+"_rg_jgraduate_svg");if(k.paint.type=="radialGradient"){k.paint.radialGradient.id=p+"_rg_jgraduate_grad";k.paint.radialGradient=w.appendChild(k.paint.radialGradient.cloneNode(true))}else{var G=w.appendChild(document.createElementNS(a.svg,"radialGradient"));G.id=p+"_rg_jgraduate_grad";G.setAttribute("cx","0.5");G.setAttribute("cy","0.5");G.setAttribute("r","0.5");var B=G.appendChild(document.createElementNS(a.svg,"stop"));B.setAttribute("offset","0.0");B.setAttribute("stop-color","#ff0000");var E=G.appendChild(document.createElementNS(a.svg,"stop"));E.setAttribute("offset","1.0");E.setAttribute("stop-color","#ffff00");k.paint.radialGradient=G}var R=k.paint.alpha;$("#"+p+"_rg_jGraduate_OpacityInput").val(R);var D=parseInt(255*(R/100))-4.5;$("#"+p+"_rg_jGraduate_AlphaArrows").css({"margin-left":D});var G=k.paint.radialGradient;var M=parseFloat(G.getAttribute("cx")||0.5),K=parseFloat(G.getAttribute("cy")||0.5),O=parseFloat(G.getAttribute("fx")||0.5),N=parseFloat(G.getAttribute("fy")||0.5);var H=G.getAttribute("fx")!=null&&!(M==O&&K==N);var U=document.createElementNS(a.svg,"rect");U.id=p+"_rg_jgraduate_rect";U.setAttribute("x",o);U.setAttribute("y",n);U.setAttribute("width",l);U.setAttribute("height",l);U.setAttribute("fill","url(#"+p+"_rg_jgraduate_grad)");U.setAttribute("fill-opacity","1.0");U=w.appendChild(U);$("#"+p+"_rg_jgraduate_rect").attr("fill-opacity",R/100);var V=document.createElementNS(a.svg,"image");V.id=p+"_center_pt";V.setAttribute("class","stop");V.setAttributeNS(a.xlink,"href",g.images.clientPath+"mappoint_c.png");V.setAttributeNS(a.xlink,"title","Center Point");V.appendChild(document.createElementNS(a.svg,"title")).appendChild(document.createTextNode("Center Point"));V.setAttribute("width",18);V.setAttribute("height",18);V.setAttribute("x",o+m*M-d);V.setAttribute("y",n+l*K-d);V.setAttribute("cursor","move");var A=document.createElementNS(a.svg,"image");A.id=p+"_focus_pt";A.setAttribute("class","stop");A.setAttributeNS(a.xlink,"href",g.images.clientPath+"mappoint_f.png");A.setAttributeNS(a.xlink,"title","Focus Point");A.appendChild(document.createElementNS(a.svg,"title")).appendChild(document.createTextNode("Focus Point"));A.setAttribute("width",18);A.setAttribute("height",18);A.setAttribute("x",o+m*O-d);A.setAttribute("y",n+l*N-d);A.setAttribute("cursor","move");A=w.appendChild(A);V=w.appendChild(V);$("#"+p+"_rg_jGraduate_Ok").bind("click",function(){k.paint.type="radialGradient";k.paint.solidColor=null;h()});$("#"+p+"_rg_jGraduate_Cancel").bind("click",function(ag){i()});var M=k.paint.radialGradient.getAttribute("cx");if(!M){M="0.0"}var af=$("#"+p+"_jGraduate_cx");af.val(M);af.change(function(){if(isNaN(parseFloat(this.value))||this.value<0||this.value>1){this.value=0}k.paint.radialGradient.setAttribute("cx",this.value);V.setAttribute("x",o+m*this.value-d)});var K=k.paint.radialGradient.getAttribute("cy");if(!K){K="0.0"}var P=$("#"+p+"_jGraduate_cy");P.val(K);P.change(function(){if(isNaN(parseFloat(this.value))||this.value<0||this.value>1){this.value=0}k.paint.radialGradient.setAttribute("cy",this.value);V.setAttribute("y",n+l*this.value-d)});var O=k.paint.radialGradient.getAttribute("fx");if(!O){O="1.0"}var ae=$("#"+p+"_jGraduate_fx");ae.val(O);ae.change(function(){if(isNaN(parseFloat(this.value))||this.value<0||this.value>1){this.value=1}k.paint.radialGradient.setAttribute("fx",this.value);A.setAttribute("x",o+m*this.value-d)});var N=k.paint.radialGradient.getAttribute("fy");if(!N){N="0.0"}var Q=$("#"+p+"_jGraduate_fy");Q.val(N);Q.change(function(){if(isNaN(parseFloat(this.value))||this.value<0||this.value>1){this.value=0}k.paint.radialGradient.setAttribute("fy",this.value);A.setAttribute("y",n+l*this.value-d)});if(!H){A.setAttribute("display","none");ae.val("");Q.val("")}$("#"+p+"_jGraduate_match_ctr")[0].checked=!H;var J,I;$("#"+p+"_jGraduate_match_ctr").change(function(){H=!this.checked;A.setAttribute("display",H?"inline":"none");ae.val("");Q.val("");var ai=k.paint.radialGradient;if(!H){J=ai.getAttribute("fx");I=ai.getAttribute("fy");ai.removeAttribute("fx");ai.removeAttribute("fy")}else{var ah=J||0.5;var ag=I||0.5;ai.setAttribute("fx",ah);ai.setAttribute("fy",ag);ae.val(ah);Q.val(ag)}});var T=k.paint.radialGradient.getElementsByTagNameNS(a.svg,"stop");var X=T.length;if(X<2){while(X<2){k.paint.radialGradient.appendChild(document.createElementNS(a.svg,"stop"));++X}T=k.paint.radialGradient.getElementsByTagNameNS(a.svg,"stop")}var ab=k.paint.radialGradient.getAttribute("r")-0;var Z=parseInt((245/2)*(ab))-4.5;$("#"+p+"_jGraduate_RadiusArrows").css({"margin-left":Z});$("#"+p+"_jGraduate_RadiusInput").val(parseInt(ab*100)).change(function(ai){var ah=this.value/100;if(ah<0.01){ah=0.01}k.paint.radialGradient.setAttribute("r",ah);if(ah>2){ah=2}var ag=parseInt((245/2)*ah)-4.5;$("#"+p+"_jGraduate_RadiusArrows").css({"margin-left":ag})});var z=function(ai,ak){var aj=ak.offset();var ah=(ai.pageX-aj.left-parseInt(ak.css("border-left-width")));if(ah>255){ah=255}if(ah<0){ah=0}var ag=ah-4.5;ah/=255;$("#"+p+"_rg_jGraduate_AlphaArrows").css({"margin-left":ag});$("#"+p+"_rg_jgraduate_rect").attr("fill-opacity",ah);ah=parseInt(ah*100);$("#"+p+"_rg_jGraduate_OpacityInput").val(ah);k.paint.alpha=ah};var ad=false;$("#"+p+"_rg_jGraduate_Opacity").mousedown(function(ag){z(ag,$(this));ad=true;ag.preventDefault()}).mousemove(function(ag){if(ad){z(ag,$(this));ag.preventDefault()}}).mouseup(function(ag){z(ag,$(this));ad=false;ag.preventDefault()});var L=function(ai,ak){var aj=ak.offset();var ah=(ai.pageX-aj.left-parseInt(ak.css("border-left-width")));if(ah>245){ah=245}if(ah<=1){ah=1}var ag=ah-5;ah/=(245/2);$("#"+p+"_jGraduate_RadiusArrows").css({"margin-left":ag});k.paint.radialGradient.setAttribute("r",ah);ah=parseInt(ah*100);$("#"+p+"_jGraduate_RadiusInput").val(ah)};var C=false;$("#"+p+"_jGraduate_Radius").mousedown(function(ag){L(ag,$(this));C=true;ag.preventDefault()}).mousemove(function(ag){if(C){L(ag,$(this));ag.preventDefault()}}).mouseup(function(ag){L(ag,$(this));C=false;ag.preventDefault()});var ac=null;var y=-1,x=-1;$(".stop, #color_picker_rg_jGraduate_GradContainer image").mousedown(function(ag){ac=this;y=ag.clientX;x=ag.clientY;ag.preventDefault()});$("#"+p+"_rg_jgraduate_svg").mousemove(function(ai){if(null!=ac){var ak=ai.clientX-y;var ah=ai.clientY-x;y+=ak;x+=ah;var ag=parseFloat(ac.getAttribute("x"))+ak;var am=parseFloat(ac.getAttribute("y"))+ah;if(ag<o-d){ag=o-d}if(am<n-d){am=n-d}if(ag>o+m-d){ag=o+m-d}if(am>n+l-d){am=n+l-d}ac.setAttribute("x",ag);ac.setAttribute("y",am);var al=(ag-o+d)/m;var aj=(am-n+d)/l;if(ac.id==(p+"_center_pt")){af.val(al);P.val(aj);k.paint.radialGradient.setAttribute("cx",al);k.paint.radialGradient.setAttribute("cy",aj);if(!H){k.paint.radialGradient.setAttribute("fx",al);k.paint.radialGradient.setAttribute("fy",aj)}}else{ae.val(al);Q.val(aj);k.paint.radialGradient.setAttribute("fx",al);k.paint.radialGradient.setAttribute("fy",aj)}ai.preventDefault()}});$("#"+p+"_rg_jgraduate_svg").mouseup(function(ag){ac=null});var S=T[0].getAttribute("stop-color");if(!S){S="#000"}centerColorBox=$("#"+p+"_jGraduate_colorBoxCenter");centerColorBox.css({"background-color":S});var W=T[0].getAttribute("stop-opacity");if(!W){W="1.0"}$("#"+p+"jGraduate_centerOpacity").html((W*100)+"%");var F=T[T.length-1].getAttribute("stop-color");if(!F){F="#000"}outerColorBox=$("#"+p+"_jGraduate_colorBoxOuter");outerColorBox.css({"background-color":F});var Y=T[T.length-1].getAttribute("stop-opacity");if(!Y){Y="1.0"}$("#"+p+"rg_jGraduate_outerOpacity").html((Y*100)+"%");$("#"+p+"_jGraduate_colorBoxCenter").click(function(){$("div.jGraduate_LightBox").show();var ah=$(this);var ag=(parseFloat(W)*255).toString(16);while(ag.length<2){ag="0"+ag}r=S.substr(1)+ag;$("#"+p+"_rg_jGraduate_stopPicker").css({left:100,bottom:15}).jPicker({window:{title:"Pick the center color and opacity for the gradient"},images:{clientPath:g.images.clientPath},color:{active:r,alphaSupport:true}},function(ai){S=ai.get_Hex()?("#"+ai.get_Hex()):"none";W=ai.get_A()?ai.get_A()/100:1;ah.css("background",S);$("#"+p+"_rg_jGraduate_centerOpacity").html(parseInt(W*100)+"%");T[0].setAttribute("stop-color",S);T[0].setAttribute("stop-opacity",W);$("div.jGraduate_LightBox").hide();$("#"+p+"_rg_jGraduate_stopPicker").hide()},null,function(){$("div.jGraduate_LightBox").hide();$("#"+p+"_rg_jGraduate_stopPicker").hide()})});$("#"+p+"_jGraduate_colorBoxOuter").click(function(){$("div.jGraduate_LightBox").show();var ah=$(this);var ag=(parseFloat(Y)*255).toString(16);while(ag.length<2){ag="0"+ag}r=F.substr(1)+ag;$("#"+p+"_rg_jGraduate_stopPicker").css({left:100,top:15}).jPicker({window:{title:"Pick the outer color and opacity for the gradient"},images:{clientPath:g.images.clientPath},color:{active:r,alphaSupport:true}},function(ai){F=ai.get_Hex()?("#"+ai.get_Hex()):"none";Y=ai.get_A()?ai.get_A()/100:1;ah.css("background",F);$("#"+p+"_jGraduate_outerOpacity").html(parseInt(Y*100)+"%");T[1].setAttribute("stop-color",F);T[1].setAttribute("stop-opacity",Y);$("div.jGraduate_LightBox").hide();$("#"+p+"_rg_jGraduate_stopPicker").hide()},null,function(){$("div.jGraduate_LightBox").hide();$("#"+p+"_rg_jGraduate_stopPicker").hide()})});var aa=(k.paint.alpha*255/100).toString(16);while(aa.length<2){aa="0"+aa}r=k.paint.solidColor=="none"?"":k.paint.solidColor+aa;u.jPicker({window:{title:g.window.pickerTitle},images:{clientPath:g.images.clientPath},color:{active:r,alphaSupport:true}},function(ag){k.paint.type="solidColor";k.paint.alpha=ag.get_A()?ag.get_A():100;k.paint.solidColor=ag.get_Hex()?ag.get_Hex():"none";k.paint.radialGradient=null;h()},null,function(){i()})}());var s=$(v+" .jGraduate_tabs li");s.click(function(){s.removeClass("jGraduate_tab_current");$(this).addClass("jGraduate_tab_current");$(v+" > div").hide();$(v+" .jGraduate_"+$(this).attr("data-type")+"Pick").show()});$(v+" > div").hide();s.removeClass("jGraduate_tab_current");var e;switch(k.paint.type){case"linearGradient":e=$(v+" .jGraduate_tab_lingrad");break;case"radialGradient":e=$(v+" .jGraduate_tab_radgrad");break;default:e=$(v+" .jGraduate_tab_color");break}e.addClass("jGraduate_tab_current").click();k.show()})}})(); \ No newline at end of file
diff --git a/files_svgedit/js/jquerybbq/jquery.bbq.min.js b/files_svgedit/js/jquerybbq/jquery.bbq.min.js
deleted file mode 100644
index edb781914..000000000
--- a/files_svgedit/js/jquerybbq/jquery.bbq.min.js
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
- * jQuery BBQ: Back Button & Query Library - v1.2.1 - 2/17/2010
- * http://benalman.com/projects/jquery-bbq-plugin/
- *
- * Copyright (c) 2010 "Cowboy" Ben Alman
- * Dual licensed under the MIT and GPL licenses.
- * http://benalman.com/about/license/
- */
-(function($,p){var i,m=Array.prototype.slice,r=decodeURIComponent,a=$.param,c,l,v,b=$.bbq=$.bbq||{},q,u,j,e=$.event.special,d="hashchange",A="querystring",D="fragment",y="elemUrlAttr",g="location",k="href",t="src",x=/^.*\?|#.*$/g,w=/^.*\#/,h,C={};function E(F){return typeof F==="string"}function B(G){var F=m.call(arguments,1);return function(){return G.apply(this,F.concat(m.call(arguments)))}}function n(F){return F.replace(/^[^#]*#?(.*)$/,"$1")}function o(F){return F.replace(/(?:^[^?#]*\?([^#]*).*$)?.*/,"$1")}function f(H,M,F,I,G){var O,L,K,N,J;if(I!==i){K=F.match(H?/^([^#]*)\#?(.*)$/:/^([^#?]*)\??([^#]*)(#?.*)/);J=K[3]||"";if(G===2&&E(I)){L=I.replace(H?w:x,"")}else{N=l(K[2]);I=E(I)?l[H?D:A](I):I;L=G===2?I:G===1?$.extend({},I,N):$.extend({},N,I);L=a(L);if(H){L=L.replace(h,r)}}O=K[1]+(H?"#":L||!K[1]?"?":"")+L+J}else{O=M(F!==i?F:p[g][k])}return O}a[A]=B(f,0,o);a[D]=c=B(f,1,n);c.noEscape=function(G){G=G||"";var F=$.map(G.split(""),encodeURIComponent);h=new RegExp(F.join("|"),"g")};c.noEscape(",/");$.deparam=l=function(I,F){var H={},G={"true":!0,"false":!1,"null":null};$.each(I.replace(/\+/g," ").split("&"),function(L,Q){var K=Q.split("="),P=r(K[0]),J,O=H,M=0,R=P.split("]["),N=R.length-1;if(/\[/.test(R[0])&&/\]$/.test(R[N])){R[N]=R[N].replace(/\]$/,"");R=R.shift().split("[").concat(R);N=R.length-1}else{N=0}if(K.length===2){J=r(K[1]);if(F){J=J&&!isNaN(J)?+J:J==="undefined"?i:G[J]!==i?G[J]:J}if(N){for(;M<=N;M++){P=R[M]===""?O.length:R[M];O=O[P]=M<N?O[P]||(R[M+1]&&isNaN(R[M+1])?{}:[]):J}}else{if($.isArray(H[P])){H[P].push(J)}else{if(H[P]!==i){H[P]=[H[P],J]}else{H[P]=J}}}}else{if(P){H[P]=F?i:""}}});return H};function z(H,F,G){if(F===i||typeof F==="boolean"){G=F;F=a[H?D:A]()}else{F=E(F)?F.replace(H?w:x,""):F}return l(F,G)}l[A]=B(z,0);l[D]=v=B(z,1);$[y]||($[y]=function(F){return $.extend(C,F)})({a:k,base:k,iframe:t,img:t,input:t,form:"action",link:k,script:t});j=$[y];function s(I,G,H,F){if(!E(H)&&typeof H!=="object"){F=H;H=G;G=i}return this.each(function(){var L=$(this),J=G||j()[(this.nodeName||"").toLowerCase()]||"",K=J&&L.attr(J)||"";L.attr(J,a[I](K,H,F))})}$.fn[A]=B(s,A);$.fn[D]=B(s,D);b.pushState=q=function(I,F){if(E(I)&&/^#/.test(I)&&F===i){F=2}var H=I!==i,G=c(p[g][k],H?I:{},H?F:2);p[g][k]=G+(/#/.test(G)?"":"#")};b.getState=u=function(F,G){return F===i||typeof F==="boolean"?v(F):v(G)[F]};b.removeState=function(F){var G={};if(F!==i){G=u();$.each($.isArray(F)?F:arguments,function(I,H){delete G[H]})}q(G,2)};e[d]=$.extend(e[d],{add:function(F){var H;function G(J){var I=J[D]=c();J.getState=function(K,L){return K===i||typeof K==="boolean"?l(I,K):l(I,L)[K]};H.apply(this,arguments)}if($.isFunction(F)){H=F;return G}else{H=F.handler;F.handler=G}}})})(jQuery,this);
-/*
- * jQuery hashchange event - v1.2 - 2/11/2010
- * http://benalman.com/projects/jquery-hashchange-plugin/
- *
- * Copyright (c) 2010 "Cowboy" Ben Alman
- * Dual licensed under the MIT and GPL licenses.
- * http://benalman.com/about/license/
- */
-(function($,i,b){var j,k=$.event.special,c="location",d="hashchange",l="href",f=$.browser,g=document.documentMode,h=f.msie&&(g===b||g<8),e="on"+d in i&&!h;function a(m){m=m||i[c][l];return m.replace(/^[^#]*#?(.*)$/,"$1")}$[d+"Delay"]=100;k[d]=$.extend(k[d],{setup:function(){if(e){return false}$(j.start)},teardown:function(){if(e){return false}$(j.stop)}});j=(function(){var m={},r,n,o,q;function p(){o=q=function(s){return s};if(h){n=$('<iframe src="javascript:0"/>').hide().insertAfter("body")[0].contentWindow;q=function(){return a(n.document[c][l])};o=function(u,s){if(u!==s){var t=n.document;t.open().close();t[c].hash="#"+u}};o(a())}}m.start=function(){if(r){return}var t=a();o||p();(function s(){var v=a(),u=q(t);if(v!==t){o(t=v,u);$(i).trigger(d)}else{if(u!==t){i[c][l]=i[c][l].replace(/#.*/,"")+"#"+u}}r=setTimeout(s,$[d+"Delay"])})()};m.stop=function(){if(!n){r&&clearTimeout(r);r=0}};return m})()})(jQuery,this); \ No newline at end of file
diff --git a/files_svgedit/js/js-hotkeys/README.md b/files_svgedit/js/js-hotkeys/README.md
deleted file mode 100644
index 696e98942..000000000
--- a/files_svgedit/js/js-hotkeys/README.md
+++ /dev/null
@@ -1,45 +0,0 @@
-#About
-**jQuery Hotkeys** is a plug-in that lets you easily add and remove handlers for keyboard events anywhere in your code supporting almost any key combination.
-
-This plugin is based off of the plugin by Tzury Bar Yochay: [jQuery.hotkeys](http://github.com/tzuryby/hotkeys)
-
-The syntax is as follows:
-
- $(expression).bind(types, keys, handler);
- $(expression).unbind(types, handler);
-
- $(document).bind('keydown', 'ctrl+a', fn);
-
- // e.g. replace '$' sign with 'EUR'
- $('input.foo').bind('keyup', '$', function(){
- this.value = this.value.replace('$', 'EUR');
- });
-
-## Types
-Supported types are `'keydown'`, `'keyup'` and `'keypress'`
-
-## Notes
-
-If you want to use more than one modifiers (e.g. alt+ctrl+z) you should define them by an alphabetical order e.g. alt+ctrl+shift
-
-Hotkeys aren't tracked if you're inside of an input element (unless you explicitly bind the hotkey directly to the input). This helps to avoid conflict with normal user typing.
-
-## jQuery Compatibility
-
-Works with jQuery 1.4.2 and newer.
-
-It known to be working with all the major browsers on all available platforms (Win/Mac/Linux)
-
- * IE 6/7/8
- * FF 1.5/2/3
- * Opera-9
- * Safari-3
- * Chrome-0.2
-
-### Addendum
-
-Firefox is the most liberal one in the manner of letting you capture all short-cuts even those that are built-in in the browser such as `Ctrl-t` for new tab, or `Ctrl-a` for selecting all text. You can always bubble them up to the browser by returning `true` in your handler.
-
-Others, (IE) either let you handle built-in short-cuts, but will add their functionality after your code has executed. Or (Opera/Safari) will *not* pass those events to the DOM at all.
-
-*So, if you bind `Ctrl-Q` or `Alt-F4` and your Safari/Opera window is closed don't be surprised.* \ No newline at end of file
diff --git a/files_svgedit/js/js-hotkeys/jquery.hotkeys.min.js b/files_svgedit/js/js-hotkeys/jquery.hotkeys.min.js
deleted file mode 100644
index 52d955174..000000000
--- a/files_svgedit/js/js-hotkeys/jquery.hotkeys.min.js
+++ /dev/null
@@ -1,15 +0,0 @@
-/*
- * jQuery Hotkeys Plugin
- * Copyright 2010, John Resig
- * Dual licensed under the MIT or GPL Version 2 licenses.
- *
- * http://github.com/jeresig/jquery.hotkeys
- *
- * Based upon the plugin by Tzury Bar Yochay:
- * http://github.com/tzuryby/hotkeys
- *
- * Original idea by:
- * Binny V A, http://www.openjs.com/scripts/events/keyboard_shortcuts/
-*/
-
-(function(b){b.hotkeys={version:"0.8",specialKeys:{8:"backspace",9:"tab",13:"return",16:"shift",17:"ctrl",18:"alt",19:"pause",20:"capslock",27:"esc",32:"space",33:"pageup",34:"pagedown",35:"end",36:"home",37:"left",38:"up",39:"right",40:"down",45:"insert",46:"del",96:"0",97:"1",98:"2",99:"3",100:"4",101:"5",102:"6",103:"7",104:"8",105:"9",106:"*",107:"+",109:"-",110:".",111:"/",112:"f1",113:"f2",114:"f3",115:"f4",116:"f5",117:"f6",118:"f7",119:"f8",120:"f9",121:"f10",122:"f11",123:"f12",144:"numlock",145:"scroll",191:"/",224:"meta"},shiftNums:{"`":"~","1":"!","2":"@","3":"#","4":"$","5":"%","6":"^","7":"&","8":"*","9":"(","0":")","-":"_","=":"+",";":": ","'":'"',",":"<",".":">","/":"?","\\":"|"}};function a(d){if(typeof d.data!=="string"){return}var c=d.handler,e=d.data.toLowerCase().split(" ");d.handler=function(n){if(this!==n.target&&(/textarea|select/i.test(n.target.nodeName)||n.target.type==="text")){return}var h=n.type!=="keypress"&&b.hotkeys.specialKeys[n.which],o=String.fromCharCode(n.which).toLowerCase(),k,m="",g={};if(n.altKey&&h!=="alt"){m+="alt+"}if(n.ctrlKey&&h!=="ctrl"){m+="ctrl+"}if(n.metaKey&&!n.ctrlKey&&h!=="meta"){m+="meta+"}if(n.shiftKey&&h!=="shift"){m+="shift+"}if(h){g[m+h]=true}else{g[m+o]=true;g[m+b.hotkeys.shiftNums[o]]=true;if(m==="shift+"){g[b.hotkeys.shiftNums[o]]=true}}for(var j=0,f=e.length;j<f;j++){if(g[e[j]]){return c.apply(this,arguments)}}}}b.each(["keydown","keyup","keypress"],function(){b.event.special[this]={add:a}})})(jQuery); \ No newline at end of file
diff --git a/files_svgedit/js/locale/README.txt b/files_svgedit/js/locale/README.txt
deleted file mode 100644
index 9d6ac5882..000000000
--- a/files_svgedit/js/locale/README.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-This directory holds JSON files that translate the UI strings in SVG-edit.
-Initial translations were done by Narendra Sisodiya putting the English
-strings through the Google Translation API. Humans will need to take these
-automated translations and ensure they make sense.
-
-See AUTHORS for the translations credits.
-
-Languages Already Translated By Humans:
- * lang.cs.js
- * lang.de.js
- * lang.en.js
- * lang.es.js
- * lang.fr.js
- * lang.ja.js
- * lang.nl.js
- * lang.ro.js
- * lang.sk.js
diff --git a/files_svgedit/js/locale/lang.af.js b/files_svgedit/js/locale/lang.af.js
deleted file mode 100644
index 07f132167..000000000
--- a/files_svgedit/js/locale/lang.af.js
+++ /dev/null
@@ -1,173 +0,0 @@
-[
-{"id": "align_relative_to", "title": "Align in verhouding tot ..."},
-{"id": "bkgnd_color", "title": "Verander agtergrondkleur / opaciteit"},
-{"id": "circle_cx", "title": "Verandering sirkel se cx koördineer"},
-{"id": "circle_cy", "title": "Verandering sirkel se cy koördineer"},
-{"id": "circle_r", "title": "Verandering sirkel se radius"},
-{"id": "connector_no_arrow", "textContent": "No arrow"},
-{"id": "copyrightLabel", "textContent": "Powered by"},
-{"id": "cornerRadiusLabel", "title": "Verandering Rechthoek Corner Radius"},
-{"id": "curve_segments", "textContent": "Curve"},
-{"id": "ellipse_cx", "title": "Verandering ellips se cx koördineer"},
-{"id": "ellipse_cy", "title": "Verander ellips se cy koördineer"},
-{"id": "ellipse_rx", "title": "Verandering ellips se x radius"},
-{"id": "ellipse_ry", "title": "Verander ellips se j radius"},
-{"id": "fill_color", "title": "Verandering vul kleur"},
-{"id": "fitToContent", "textContent": "Pas na inhoud"},
-{"id": "fit_to_all", "textContent": "Passing tot al inhoud"},
-{"id": "fit_to_canvas", "textContent": "Passing tot doek"},
-{"id": "fit_to_layer_content", "textContent": "Passing tot laag inhoud"},
-{"id": "fit_to_sel", "textContent": "Passing tot seleksie"},
-{"id": "font_family", "title": "Lettertipe verander Familie"},
-{"id": "icon_large", "textContent": "Large"},
-{"id": "icon_medium", "textContent": "Medium"},
-{"id": "icon_small", "textContent": "Small"},
-{"id": "icon_xlarge", "textContent": "Extra Large"},
-{"id": "image_height", "title": "Verandering prent hoogte"},
-{"id": "image_opt_embed", "textContent": "Embed data (local files)"},
-{"id": "image_opt_ref", "textContent": "Use file reference"},
-{"id": "image_url", "title": "URL verander"},
-{"id": "image_width", "title": "Verander prent breedte"},
-{"id": "includedImages", "textContent": "Included Images"},
-{"id": "largest_object", "textContent": "grootste voorwerp"},
-{"id": "layer_delete", "title": "Verwyder Laag"},
-{"id": "layer_down", "title": "Beweeg afbreek Down"},
-{"id": "layer_new", "title": "Nuwe Layer"},
-{"id": "layer_rename", "title": "Rename Layer"},
-{"id": "layer_up", "title": "Beweeg afbreek Up"},
-{"id": "layersLabel", "textContent": "Lae:"},
-{"id": "line_x1", "title": "Verandering lyn se vertrek x koördinaat"},
-{"id": "line_x2", "title": "Verandering lyn se eindig x koördinaat"},
-{"id": "line_y1", "title": "Verandering lyn se vertrek y koördinaat"},
-{"id": "line_y2", "title": "Verandering lyn se eindig y koördinaat"},
-{"id": "linecap_butt", "title": "Linecap: Butt"},
-{"id": "linecap_round", "title": "Linecap: Round"},
-{"id": "linecap_square", "title": "Linecap: Square"},
-{"id": "linejoin_bevel", "title": "Linejoin: Bevel"},
-{"id": "linejoin_miter", "title": "Linejoin: Miter"},
-{"id": "linejoin_round", "title": "Linejoin: Round"},
-{"id": "main_icon", "title": "Main Menu"},
-{"id": "mode_connect", "title": "Connect two objects"},
-{"id": "page", "textContent": "bladsy"},
-{"id": "palette", "title": "Klik om te verander vul kleur, verskuiwing klik om &#39;n beroerte kleur verander"},
-{"id": "path_node_x", "title": "Change node's x coordinate"},
-{"id": "path_node_y", "title": "Change node's y coordinate"},
-{"id": "rect_height_tool", "title": "Verandering reghoek hoogte"},
-{"id": "rect_width_tool", "title": "Verandering reghoek breedte"},
-{"id": "relativeToLabel", "textContent": "relatief tot:"},
-{"id": "seg_type", "title": "Change Segment type"},
-{"id": "selLayerLabel", "textContent": "Move elements to:"},
-{"id": "selLayerNames", "title": "Move selected elements to a different layer"},
-{"id": "selectedPredefined", "textContent": "Kies gedefinieerde:"},
-{"id": "selected_objects", "textContent": "verkose voorwerpe"},
-{"id": "selected_x", "title": "Change X coordinate"},
-{"id": "selected_y", "title": "Change Y coordinate"},
-{"id": "smallest_object", "textContent": "kleinste voorwerp"},
-{"id": "straight_segments", "textContent": "Straight"},
-{"id": "stroke_color", "title": "Verandering beroerte kleur"},
-{"id": "stroke_style", "title": "Verandering beroerte dash styl"},
-{"id": "stroke_width", "title": "Verandering beroerte breedte"},
-{"id": "svginfo_bg_note", "textContent": "Note: Background will not be saved with image."},
-{"id": "svginfo_change_background", "textContent": "Editor Background"},
-{"id": "svginfo_dim", "textContent": "Doek Dimensions"},
-{"id": "svginfo_editor_prefs", "textContent": "Editor Preferences"},
-{"id": "svginfo_height", "textContent": "Lengte:"},
-{"id": "svginfo_icons", "textContent": "Icon size"},
-{"id": "svginfo_image_props", "textContent": "Image Properties"},
-{"id": "svginfo_lang", "textContent": "Language"},
-{"id": "svginfo_title", "textContent": "Title"},
-{"id": "svginfo_width", "textContent": "Wydte:"},
-{"id": "text", "title": "Verander teks inhoud"},
-{"id": "toggle_stroke_tools", "title": "Show/hide more stroke tools"},
-{"id": "tool_add_subpath", "title": "Add sub-path"},
-{"id": "tool_alignbottom", "title": "Align Bottom"},
-{"id": "tool_aligncenter", "title": "Rig Middel"},
-{"id": "tool_alignleft", "title": "Links Regterkant"},
-{"id": "tool_alignmiddle", "title": "Align Midde"},
-{"id": "tool_alignright", "title": "Lijn regs uit"},
-{"id": "tool_aligntop", "title": "Align Top"},
-{"id": "tool_angle", "title": "Verandering rotasie-hoek"},
-{"id": "tool_blur", "title": "Change gaussian blur value"},
-{"id": "tool_bold", "title": "Vetgedrukte teks"},
-{"id": "tool_circle", "title": "Sirkel"},
-{"id": "tool_clear", "textContent": "Nuwe Beeld"},
-{"id": "tool_clone", "title": "Kloon Element"},
-{"id": "tool_clone_multi", "title": "Kloon Elemente"},
-{"id": "tool_delete", "title": "Verwyder Element"},
-{"id": "tool_delete_multi", "title": "Verwyder geselekteerde Elemente"},
-{"id": "tool_docprops", "textContent": "Document Properties"},
-{"id": "tool_docprops_cancel", "textContent": "Annuleer"},
-{"id": "tool_docprops_save", "textContent": "Spaar"},
-{"id": "tool_ellipse", "title": "Ellips"},
-{"id": "tool_export", "textContent": "Export as PNG"},
-{"id": "tool_eyedropper", "title": "Eye Dropper Tool"},
-{"id": "tool_fhellipse", "title": "Gratis-Hand Ellips"},
-{"id": "tool_fhpath", "title": "Potlood tool"},
-{"id": "tool_fhrect", "title": "Free-hand Rectangle"},
-{"id": "tool_font_size", "title": "Verandering Lettertipe Grootte"},
-{"id": "tool_group", "title": "Groep Elemente"},
-{"id": "tool_image", "title": "Image Gereedskap"},
-{"id": "tool_import", "textContent": "Import SVG"},
-{"id": "tool_italic", "title": "Italic Text"},
-{"id": "tool_line", "title": "Lyn Gereedskap"},
-{"id": "tool_move_bottom", "title": "Skuif na Bottom"},
-{"id": "tool_move_top", "title": "Skuif na bo"},
-{"id": "tool_node_clone", "title": "Clone Node"},
-{"id": "tool_node_delete", "title": "Delete Node"},
-{"id": "tool_node_link", "title": "Link Control Points"},
-{"id": "tool_opacity", "title": "Verander geselekteerde item opaciteit"},
-{"id": "tool_open", "textContent": "Open Beeld"},
-{"id": "tool_path", "title": "Poli Gereedskap"},
-{"id": "tool_rect", "title": "Reghoek"},
-{"id": "tool_redo", "title": "Oordoen"},
-{"id": "tool_reorient", "title": "Reorient path"},
-{"id": "tool_save", "textContent": "Slaan Beeld"},
-{"id": "tool_select", "title": "Select Gereedschap"},
-{"id": "tool_source", "title": "Wysig Bron"},
-{"id": "tool_source_cancel", "textContent": "Annuleer"},
-{"id": "tool_source_save", "textContent": "Spaar"},
-{"id": "tool_square", "title": "Vierkant"},
-{"id": "tool_text", "title": "Text Gereedskap"},
-{"id": "tool_topath", "title": "Convert to Path"},
-{"id": "tool_undo", "title": "Boontoe"},
-{"id": "tool_ungroup", "title": "Ungroup Elemente"},
-{"id": "tool_wireframe", "title": "Wireframe Mode"},
-{"id": "tool_zoom", "title": "Klik op die Gereedskap"},
-{"id": "url_notice", "title": "NOTE: This image cannot be embedded. It will depend on this path to be displayed"},
-{"id": "zoom_panel", "title": "Change zoom vlak"},
-{"id": "sidepanel_handle", "textContent": "L a y e r s", "title": "Drag left/right to resize side panel"},
-{
- "js_strings": {
- "QerrorsRevertToSource": "There were parsing errors in your SVG source.\nRevert back to original SVG source?",
- "QignoreSourceChanges": "Ignore changes made to SVG source?",
- "QmoveElemsToLayer": "Move selected elements to layer '%s'?",
- "QwantToClear": "Do you want to clear the drawing?\nThis will also erase your undo history!",
- "cancel": "Cancel",
- "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.",
- "dupeLayerName": "There is already a layer named that!",
- "enterNewImgURL": "Enter the new image URL",
- "enterNewLayerName": "Please enter the new layer name",
- "enterUniqueLayerName": "Please enter a unique layer name",
- "exportNoBlur": "Blurred elements will appear as un-blurred",
- "exportNoDashArray": "Strokes will appear filled",
- "exportNoImage": "Image elements will not appear",
- "exportNoText": "Text may not appear as expected",
- "exportNoforeignObject": "foreignObject elements will not appear",
- "featNotSupported": "Feature not supported",
- "invalidAttrValGiven": "Invalid value given",
- "key_backspace": "backspace",
- "key_del": "delete",
- "key_down": "down",
- "key_up": "up",
- "layer": "Layer",
- "layerHasThatName": "Layer already has that name",
- "loadingImage": "Loading image, please wait...",
- "noContentToFitTo": "No content to fit to",
- "noteTheseIssues": "Also note the following issues: ",
- "ok": "OK",
- "pathCtrlPtTooltip": "Drag control point to adjust curve properties",
- "pathNodeTooltip": "Drag node to move it. Double-click node to change segment type",
- "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file."
- }
-}
-] \ No newline at end of file
diff --git a/files_svgedit/js/locale/lang.ar.js b/files_svgedit/js/locale/lang.ar.js
deleted file mode 100644
index 26e8fba42..000000000
--- a/files_svgedit/js/locale/lang.ar.js
+++ /dev/null
@@ -1,173 +0,0 @@
-[
-{"id": "align_relative_to", "title": "محاذاة النسبي ل ..."},
-{"id": "bkgnd_color", "title": "تغير لون الخلفية / غموض"},
-{"id": "circle_cx", "title": "دائرة التغيير لتنسيق cx"},
-{"id": "circle_cy", "title": "Change circle's cy coordinate"},
-{"id": "circle_r", "title": "التغيير في دائرة نصف قطرها"},
-{"id": "connector_no_arrow", "textContent": "No arrow"},
-{"id": "copyrightLabel", "textContent": "Powered by"},
-{"id": "cornerRadiusLabel", "title": "تغيير مستطيل ركن الشعاع"},
-{"id": "curve_segments", "textContent": "Curve"},
-{"id": "ellipse_cx", "title": "تغيير شكل البيضاوي cx تنسيق"},
-{"id": "ellipse_cy", "title": "تغيير شكل البيضاوي قبرصي تنسيق"},
-{"id": "ellipse_rx", "title": "تغيير شكل البيضاوي خ نصف قطرها"},
-{"id": "ellipse_ry", "title": "تغيير القطع الناقص في دائرة نصف قطرها ذ"},
-{"id": "fill_color", "title": "تغير لون التعبئة"},
-{"id": "fitToContent", "textContent": "لائقا للمحتوى"},
-{"id": "fit_to_all", "textContent": "يصلح لجميع المحتويات"},
-{"id": "fit_to_canvas", "textContent": "يصلح لوحة زيتية على قماش"},
-{"id": "fit_to_layer_content", "textContent": "يصلح لطبقة المحتوى"},
-{"id": "fit_to_sel", "textContent": "يصلح لاختيار"},
-{"id": "font_family", "title": "تغيير الخط الأسرة"},
-{"id": "icon_large", "textContent": "Large"},
-{"id": "icon_medium", "textContent": "Medium"},
-{"id": "icon_small", "textContent": "Small"},
-{"id": "icon_xlarge", "textContent": "Extra Large"},
-{"id": "image_height", "title": "تغيير ارتفاع الصورة"},
-{"id": "image_opt_embed", "textContent": "Embed data (local files)"},
-{"id": "image_opt_ref", "textContent": "Use file reference"},
-{"id": "image_url", "title": "تغيير العنوان"},
-{"id": "image_width", "title": "تغيير صورة العرض"},
-{"id": "includedImages", "textContent": "Included Images"},
-{"id": "largest_object", "textContent": "أكبر كائن"},
-{"id": "layer_delete", "title": "حذف طبقة"},
-{"id": "layer_down", "title": "تحرك لأسفل طبقة"},
-{"id": "layer_new", "title": "طبقة جديدة"},
-{"id": "layer_rename", "title": "تسمية الطبقة"},
-{"id": "layer_up", "title": "تحرك لأعلى طبقة"},
-{"id": "layersLabel", "textContent": "طبقات:"},
-{"id": "line_x1", "title": "تغيير الخط لبدء تنسيق خ"},
-{"id": "line_x2", "title": "تغيير الخط لانهاء خ تنسيق"},
-{"id": "line_y1", "title": "تغيير الخط لبدء تنسيق ذ"},
-{"id": "line_y2", "title": "تغيير الخط لإنهاء تنسيق ذ"},
-{"id": "linecap_butt", "title": "Linecap: Butt"},
-{"id": "linecap_round", "title": "Linecap: Round"},
-{"id": "linecap_square", "title": "Linecap: Square"},
-{"id": "linejoin_bevel", "title": "Linejoin: Bevel"},
-{"id": "linejoin_miter", "title": "Linejoin: Miter"},
-{"id": "linejoin_round", "title": "Linejoin: Round"},
-{"id": "main_icon", "title": "Main Menu"},
-{"id": "mode_connect", "title": "Connect two objects"},
-{"id": "page", "textContent": "الصفحة"},
-{"id": "palette", "title": "انقر لتغيير لون التعبئة ، تحولا مزدوجا فوق لتغيير لون السكتة الدماغية"},
-{"id": "path_node_x", "title": "Change node's x coordinate"},
-{"id": "path_node_y", "title": "Change node's y coordinate"},
-{"id": "rect_height_tool", "title": "تغيير المستطيل الارتفاع"},
-{"id": "rect_width_tool", "title": "تغيير عرض المستطيل"},
-{"id": "relativeToLabel", "textContent": "بالنسبة إلى:"},
-{"id": "seg_type", "title": "Change Segment type"},
-{"id": "selLayerLabel", "textContent": "Move elements to:"},
-{"id": "selLayerNames", "title": "Move selected elements to a different layer"},
-{"id": "selectedPredefined", "textContent": "حدد سلفا:"},
-{"id": "selected_objects", "textContent": "انتخب الأجسام"},
-{"id": "selected_x", "title": "Change X coordinate"},
-{"id": "selected_y", "title": "Change Y coordinate"},
-{"id": "smallest_object", "textContent": "أصغر كائن"},
-{"id": "straight_segments", "textContent": "Straight"},
-{"id": "stroke_color", "title": "تغير لون السكتة الدماغية"},
-{"id": "stroke_style", "title": "تغيير نمط السكتة الدماغية اندفاعة"},
-{"id": "stroke_width", "title": "تغيير عرض السكتة الدماغية"},
-{"id": "svginfo_bg_note", "textContent": "Note: Background will not be saved with image."},
-{"id": "svginfo_change_background", "textContent": "Editor Background"},
-{"id": "svginfo_dim", "textContent": "Canvas Dimensions"},
-{"id": "svginfo_editor_prefs", "textContent": "Editor Preferences"},
-{"id": "svginfo_height", "textContent": "ارتفاع:"},
-{"id": "svginfo_icons", "textContent": "Icon size"},
-{"id": "svginfo_image_props", "textContent": "Image Properties"},
-{"id": "svginfo_lang", "textContent": "Language"},
-{"id": "svginfo_title", "textContent": "Title"},
-{"id": "svginfo_width", "textContent": "عرض:"},
-{"id": "text", "title": "تغيير محتويات النص"},
-{"id": "toggle_stroke_tools", "title": "Show/hide more stroke tools"},
-{"id": "tool_add_subpath", "title": "Add sub-path"},
-{"id": "tool_alignbottom", "title": "محاذاة القاع"},
-{"id": "tool_aligncenter", "title": "مركز محاذاة"},
-{"id": "tool_alignleft", "title": "محاذاة إلى اليسار"},
-{"id": "tool_alignmiddle", "title": "محاذاة الأوسط"},
-{"id": "tool_alignright", "title": "محاذاة إلى اليمين"},
-{"id": "tool_aligntop", "title": "محاذاة الأعلى"},
-{"id": "tool_angle", "title": "تغيير زاوية الدوران"},
-{"id": "tool_blur", "title": "Change gaussian blur value"},
-{"id": "tool_bold", "title": "نص جريء"},
-{"id": "tool_circle", "title": "دائرة"},
-{"id": "tool_clear", "textContent": "صورة جديدة"},
-{"id": "tool_clone", "title": "استنساخ عنصر"},
-{"id": "tool_clone_multi", "title": "استنساخ الأركان"},
-{"id": "tool_delete", "title": "حذف عنصر"},
-{"id": "tool_delete_multi", "title": "حذف عناصر مختارة"},
-{"id": "tool_docprops", "textContent": "خصائص المستند"},
-{"id": "tool_docprops_cancel", "textContent": "إلغاء"},
-{"id": "tool_docprops_save", "textContent": "حفظ"},
-{"id": "tool_ellipse", "title": "القطع الناقص"},
-{"id": "tool_export", "textContent": "Export as PNG"},
-{"id": "tool_eyedropper", "title": "Eye Dropper Tool"},
-{"id": "tool_fhellipse", "title": "اليد الحرة البيضوي"},
-{"id": "tool_fhpath", "title": "أداة قلم رصاص"},
-{"id": "tool_fhrect", "title": "Free-Hand Rectangle"},
-{"id": "tool_font_size", "title": "تغيير حجم الخط"},
-{"id": "tool_group", "title": "مجموعة عناصر"},
-{"id": "tool_image", "title": "الصورة أداة"},
-{"id": "tool_import", "textContent": "Import SVG"},
-{"id": "tool_italic", "title": "مائل نص"},
-{"id": "tool_line", "title": "خط أداة"},
-{"id": "tool_move_bottom", "title": "الانتقال إلى أسفل"},
-{"id": "tool_move_top", "title": "الانتقال إلى أعلى"},
-{"id": "tool_node_clone", "title": "Clone Node"},
-{"id": "tool_node_delete", "title": "Delete Node"},
-{"id": "tool_node_link", "title": "Link Control Points"},
-{"id": "tool_opacity", "title": "تغيير مختارة غموض البند"},
-{"id": "tool_open", "textContent": "فتح الصورة"},
-{"id": "tool_path", "title": "بولي أداة"},
-{"id": "tool_rect", "title": "المستطيل"},
-{"id": "tool_redo", "title": "إعادته"},
-{"id": "tool_reorient", "title": "Reorient path"},
-{"id": "tool_save", "textContent": "حفظ صورة"},
-{"id": "tool_select", "title": "اختر أداة"},
-{"id": "tool_source", "title": "عدل المصدر"},
-{"id": "tool_source_cancel", "textContent": "إلغاء"},
-{"id": "tool_source_save", "textContent": "حفظ"},
-{"id": "tool_square", "title": "ميدان"},
-{"id": "tool_text", "title": "النص أداة"},
-{"id": "tool_topath", "title": "Convert to Path"},
-{"id": "tool_undo", "title": "التراجع"},
-{"id": "tool_ungroup", "title": "فك تجميع عناصر"},
-{"id": "tool_wireframe", "title": "Wireframe Mode"},
-{"id": "tool_zoom", "title": "أداة تكبير"},
-{"id": "url_notice", "title": "NOTE: This image cannot be embedded. It will depend on this path to be displayed"},
-{"id": "zoom_panel", "title": "تغيير مستوى التكبير"},
-{"id": "sidepanel_handle", "textContent": "L a y e r s", "title": "Drag left/right to resize side panel"},
-{
- "js_strings": {
- "QerrorsRevertToSource": "There were parsing errors in your SVG source.\nRevert back to original SVG source?",
- "QignoreSourceChanges": "Ignore changes made to SVG source?",
- "QmoveElemsToLayer": "Move selected elements to layer '%s'?",
- "QwantToClear": "Do you want to clear the drawing?\nThis will also erase your undo history!",
- "cancel": "Cancel",
- "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.",
- "dupeLayerName": "There is already a layer named that!",
- "enterNewImgURL": "Enter the new image URL",
- "enterNewLayerName": "Please enter the new layer name",
- "enterUniqueLayerName": "Please enter a unique layer name",
- "exportNoBlur": "Blurred elements will appear as un-blurred",
- "exportNoDashArray": "Strokes will appear filled",
- "exportNoImage": "Image elements will not appear",
- "exportNoText": "Text may not appear as expected",
- "exportNoforeignObject": "foreignObject elements will not appear",
- "featNotSupported": "Feature not supported",
- "invalidAttrValGiven": "Invalid value given",
- "key_backspace": "backspace",
- "key_del": "delete",
- "key_down": "down",
- "key_up": "up",
- "layer": "Layer",
- "layerHasThatName": "Layer already has that name",
- "loadingImage": "Loading image, please wait...",
- "noContentToFitTo": "No content to fit to",
- "noteTheseIssues": "Also note the following issues: ",
- "ok": "OK",
- "pathCtrlPtTooltip": "Drag control point to adjust curve properties",
- "pathNodeTooltip": "Drag node to move it. Double-click node to change segment type",
- "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file."
- }
-}
-] \ No newline at end of file
diff --git a/files_svgedit/js/locale/lang.az.js b/files_svgedit/js/locale/lang.az.js
deleted file mode 100644
index 28f63a64d..000000000
--- a/files_svgedit/js/locale/lang.az.js
+++ /dev/null
@@ -1,173 +0,0 @@
-[
-{"id": "align_relative_to", "title": "Align relative to ..."},
-{"id": "bkgnd_color", "title": "Change background color/opacity"},
-{"id": "circle_cx", "title": "Change circle's cx coordinate"},
-{"id": "circle_cy", "title": "Change circle's cy coordinate"},
-{"id": "circle_r", "title": "Change circle's radius"},
-{"id": "connector_no_arrow", "textContent": "No arrow"},
-{"id": "copyrightLabel", "textContent": "Powered by"},
-{"id": "cornerRadiusLabel", "title": "Change Rectangle Corner Radius"},
-{"id": "curve_segments", "textContent": "Curve"},
-{"id": "ellipse_cx", "title": "Change ellipse's cx coordinate"},
-{"id": "ellipse_cy", "title": "Change ellipse's cy coordinate"},
-{"id": "ellipse_rx", "title": "Change ellipse's x radius"},
-{"id": "ellipse_ry", "title": "Change ellipse's y radius"},
-{"id": "fill_color", "title": "Change fill color"},
-{"id": "fitToContent", "textContent": "Fit to Content"},
-{"id": "fit_to_all", "textContent": "Fit to all content"},
-{"id": "fit_to_canvas", "textContent": "Fit to canvas"},
-{"id": "fit_to_layer_content", "textContent": "Fit to layer content"},
-{"id": "fit_to_sel", "textContent": "Fit to selection"},
-{"id": "font_family", "title": "Change Font Family"},
-{"id": "icon_large", "textContent": "Large"},
-{"id": "icon_medium", "textContent": "Medium"},
-{"id": "icon_small", "textContent": "Small"},
-{"id": "icon_xlarge", "textContent": "Extra Large"},
-{"id": "image_height", "title": "Change image height"},
-{"id": "image_opt_embed", "textContent": "Embed data (local files)"},
-{"id": "image_opt_ref", "textContent": "Use file reference"},
-{"id": "image_url", "title": "Change URL"},
-{"id": "image_width", "title": "Change image width"},
-{"id": "includedImages", "textContent": "Included Images"},
-{"id": "largest_object", "textContent": "largest object"},
-{"id": "layer_delete", "title": "Delete Layer"},
-{"id": "layer_down", "title": "Move Layer Down"},
-{"id": "layer_new", "title": "New Layer"},
-{"id": "layer_rename", "title": "Rename Layer"},
-{"id": "layer_up", "title": "Move Layer Up"},
-{"id": "layersLabel", "textContent": "Layers:"},
-{"id": "line_x1", "title": "Change line's starting x coordinate"},
-{"id": "line_x2", "title": "Change line's ending x coordinate"},
-{"id": "line_y1", "title": "Change line's starting y coordinate"},
-{"id": "line_y2", "title": "Change line's ending y coordinate"},
-{"id": "linecap_butt", "title": "Linecap: Butt"},
-{"id": "linecap_round", "title": "Linecap: Round"},
-{"id": "linecap_square", "title": "Linecap: Square"},
-{"id": "linejoin_bevel", "title": "Linejoin: Bevel"},
-{"id": "linejoin_miter", "title": "Linejoin: Miter"},
-{"id": "linejoin_round", "title": "Linejoin: Round"},
-{"id": "main_icon", "title": "Main Menu"},
-{"id": "mode_connect", "title": "Connect two objects"},
-{"id": "page", "textContent": "page"},
-{"id": "palette", "title": "Click to change fill color, shift-click to change stroke color"},
-{"id": "path_node_x", "title": "Change node's x coordinate"},
-{"id": "path_node_y", "title": "Change node's y coordinate"},
-{"id": "rect_height_tool", "title": "Change rectangle height"},
-{"id": "rect_width_tool", "title": "Change rectangle width"},
-{"id": "relativeToLabel", "textContent": "relative to:"},
-{"id": "seg_type", "title": "Change Segment type"},
-{"id": "selLayerLabel", "textContent": "Move elements to:"},
-{"id": "selLayerNames", "title": "Move selected elements to a different layer"},
-{"id": "selectedPredefined", "textContent": "Select predefined:"},
-{"id": "selected_objects", "textContent": "selected objects"},
-{"id": "selected_x", "title": "Change X coordinate"},
-{"id": "selected_y", "title": "Change Y coordinate"},
-{"id": "smallest_object", "textContent": "smallest object"},
-{"id": "straight_segments", "textContent": "Straight"},
-{"id": "stroke_color", "title": "Change stroke color"},
-{"id": "stroke_style", "title": "Change stroke dash style"},
-{"id": "stroke_width", "title": "Change stroke width"},
-{"id": "svginfo_bg_note", "textContent": "Note: Background will not be saved with image."},
-{"id": "svginfo_change_background", "textContent": "Editor Background"},
-{"id": "svginfo_dim", "textContent": "Canvas Dimensions"},
-{"id": "svginfo_editor_prefs", "textContent": "Editor Preferences"},
-{"id": "svginfo_height", "textContent": "Height:"},
-{"id": "svginfo_icons", "textContent": "Icon size"},
-{"id": "svginfo_image_props", "textContent": "Image Properties"},
-{"id": "svginfo_lang", "textContent": "Language"},
-{"id": "svginfo_title", "textContent": "Title"},
-{"id": "svginfo_width", "textContent": "Width:"},
-{"id": "text", "title": "Change text contents"},
-{"id": "toggle_stroke_tools", "title": "Show/hide more stroke tools"},
-{"id": "tool_add_subpath", "title": "Add sub-path"},
-{"id": "tool_alignbottom", "title": "Align Bottom"},
-{"id": "tool_aligncenter", "title": "Align Center"},
-{"id": "tool_alignleft", "title": "Align Left"},
-{"id": "tool_alignmiddle", "title": "Align Middle"},
-{"id": "tool_alignright", "title": "Align Right"},
-{"id": "tool_aligntop", "title": "Align Top"},
-{"id": "tool_angle", "title": "Change rotation angle"},
-{"id": "tool_blur", "title": "Change gaussian blur value"},
-{"id": "tool_bold", "title": "Bold Text"},
-{"id": "tool_circle", "title": "Circle"},
-{"id": "tool_clear", "textContent": "New Image"},
-{"id": "tool_clone", "title": "Clone Element"},
-{"id": "tool_clone_multi", "title": "Clone Elements"},
-{"id": "tool_delete", "title": "Delete Element"},
-{"id": "tool_delete_multi", "title": "Delete Selected Elements"},
-{"id": "tool_docprops", "textContent": "Document Properties"},
-{"id": "tool_docprops_cancel", "textContent": "Cancel"},
-{"id": "tool_docprops_save", "textContent": "OK"},
-{"id": "tool_ellipse", "title": "Ellipse"},
-{"id": "tool_export", "textContent": "Export as PNG"},
-{"id": "tool_eyedropper", "title": "Eye Dropper Tool"},
-{"id": "tool_fhellipse", "title": "Free-Hand Ellipse"},
-{"id": "tool_fhpath", "title": "Pencil Tool"},
-{"id": "tool_fhrect", "title": "Free-Hand Rectangle"},
-{"id": "tool_font_size", "title": "Change Font Size"},
-{"id": "tool_group", "title": "Group Elements"},
-{"id": "tool_image", "title": "Image Tool"},
-{"id": "tool_import", "textContent": "Import SVG"},
-{"id": "tool_italic", "title": "Italic Text"},
-{"id": "tool_line", "title": "Line Tool"},
-{"id": "tool_move_bottom", "title": "Move to Bottom"},
-{"id": "tool_move_top", "title": "Move to Top"},
-{"id": "tool_node_clone", "title": "Clone Node"},
-{"id": "tool_node_delete", "title": "Delete Node"},
-{"id": "tool_node_link", "title": "Link Control Points"},
-{"id": "tool_opacity", "title": "Change selected item opacity"},
-{"id": "tool_open", "textContent": "Open Image"},
-{"id": "tool_path", "title": "Path Tool"},
-{"id": "tool_rect", "title": "Rectangle"},
-{"id": "tool_redo", "title": "Redo"},
-{"id": "tool_reorient", "title": "Reorient path"},
-{"id": "tool_save", "textContent": "Save Image"},
-{"id": "tool_select", "title": "Select Tool"},
-{"id": "tool_source", "title": "Edit Source"},
-{"id": "tool_source_cancel", "textContent": "Cancel"},
-{"id": "tool_source_save", "textContent": "Apply Changes"},
-{"id": "tool_square", "title": "Square"},
-{"id": "tool_text", "title": "Text Tool"},
-{"id": "tool_topath", "title": "Convert to Path"},
-{"id": "tool_undo", "title": "Undo"},
-{"id": "tool_ungroup", "title": "Ungroup Elements"},
-{"id": "tool_wireframe", "title": "Wireframe Mode"},
-{"id": "tool_zoom", "title": "Zoom Tool"},
-{"id": "url_notice", "title": "NOTE: This image cannot be embedded. It will depend on this path to be displayed"},
-{"id": "zoom_panel", "title": "Change zoom level"},
-{"id": "sidepanel_handle", "textContent": "L a y e r s", "title": "Drag left/right to resize side panel"},
-{
- "js_strings": {
- "QerrorsRevertToSource": "There were parsing errors in your SVG source.\nRevert back to original SVG source?",
- "QignoreSourceChanges": "Ignore changes made to SVG source?",
- "QmoveElemsToLayer": "Move selected elements to layer '%s'?",
- "QwantToClear": "Do you want to clear the drawing?\nThis will also erase your undo history!",
- "cancel": "Cancel",
- "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.",
- "dupeLayerName": "There is already a layer named that!",
- "enterNewImgURL": "Enter the new image URL",
- "enterNewLayerName": "Please enter the new layer name",
- "enterUniqueLayerName": "Please enter a unique layer name",
- "exportNoBlur": "Blurred elements will appear as un-blurred",
- "exportNoDashArray": "Strokes will appear filled",
- "exportNoImage": "Image elements will not appear",
- "exportNoText": "Text may not appear as expected",
- "exportNoforeignObject": "foreignObject elements will not appear",
- "featNotSupported": "Feature not supported",
- "invalidAttrValGiven": "Invalid value given",
- "key_backspace": "backspace",
- "key_del": "delete",
- "key_down": "down",
- "key_up": "up",
- "layer": "Layer",
- "layerHasThatName": "Layer already has that name",
- "loadingImage": "Loading image, please wait...",
- "noContentToFitTo": "No content to fit to",
- "noteTheseIssues": "Also note the following issues: ",
- "ok": "OK",
- "pathCtrlPtTooltip": "Drag control point to adjust curve properties",
- "pathNodeTooltip": "Drag node to move it. Double-click node to change segment type",
- "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file."
- }
-}
-] \ No newline at end of file
diff --git a/files_svgedit/js/locale/lang.be.js b/files_svgedit/js/locale/lang.be.js
deleted file mode 100644
index a399f996d..000000000
--- a/files_svgedit/js/locale/lang.be.js
+++ /dev/null
@@ -1,173 +0,0 @@
-[
-{"id": "align_relative_to", "title": "Выраўнаваць па дачыненні да ..."},
-{"id": "bkgnd_color", "title": "Змяненне колеру фону / непразрыстасць"},
-{"id": "circle_cx", "title": "CX змене круга каардынаты"},
-{"id": "circle_cy", "title": "Змены гуртка CY каардынаты"},
-{"id": "circle_r", "title": "Старонка круга&#39;s радыус"},
-{"id": "connector_no_arrow", "textContent": "No arrow"},
-{"id": "copyrightLabel", "textContent": "Powered by"},
-{"id": "cornerRadiusLabel", "title": "Змены прастакутнік Corner Radius"},
-{"id": "curve_segments", "textContent": "Curve"},
-{"id": "ellipse_cx", "title": "Змены эліпса CX каардынаты"},
-{"id": "ellipse_cy", "title": "Змены эліпса CY каардынаты"},
-{"id": "ellipse_rx", "title": "Х змяненні эліпса радыюсам"},
-{"id": "ellipse_ry", "title": "Змены у эліпса радыюсам"},
-{"id": "fill_color", "title": "Змяненне колеру залівання"},
-{"id": "fitToContent", "textContent": "Па памеры ўтрымання"},
-{"id": "fit_to_all", "textContent": "Па памеру ўсе змесціва"},
-{"id": "fit_to_canvas", "textContent": "Памер палатна"},
-{"id": "fit_to_layer_content", "textContent": "По размеру слой ўтрымання"},
-{"id": "fit_to_sel", "textContent": "Выбар памеру"},
-{"id": "font_family", "title": "Змены Сямейства шрыфтоў"},
-{"id": "icon_large", "textContent": "Large"},
-{"id": "icon_medium", "textContent": "Medium"},
-{"id": "icon_small", "textContent": "Small"},
-{"id": "icon_xlarge", "textContent": "Extra Large"},
-{"id": "image_height", "title": "Змена вышыні выявы"},
-{"id": "image_opt_embed", "textContent": "Embed data (local files)"},
-{"id": "image_opt_ref", "textContent": "Use file reference"},
-{"id": "image_url", "title": "Змяніць URL"},
-{"id": "image_width", "title": "Змены шырыня выявы"},
-{"id": "includedImages", "textContent": "Included Images"},
-{"id": "largest_object", "textContent": "найбуйнейшы аб&#39;ект"},
-{"id": "layer_delete", "title": "Выдаліць слой"},
-{"id": "layer_down", "title": "Перамясціць слой на"},
-{"id": "layer_new", "title": "Новы слой"},
-{"id": "layer_rename", "title": "Перайменаваць Слой"},
-{"id": "layer_up", "title": "Перамяшчэнне слоя да"},
-{"id": "layersLabel", "textContent": "Слаі:"},
-{"id": "line_x1", "title": "Змены лінія пачынае каардынаты х"},
-{"id": "line_x2", "title": "Змяненне за перыяд, скончыўся лінія каардынаты х"},
-{"id": "line_y1", "title": "Змены лінія пачынае Y каардынаты"},
-{"id": "line_y2", "title": "Змяненне за перыяд, скончыўся лінія Y каардынаты"},
-{"id": "linecap_butt", "title": "Linecap: Butt"},
-{"id": "linecap_round", "title": "Linecap: Round"},
-{"id": "linecap_square", "title": "Linecap: Square"},
-{"id": "linejoin_bevel", "title": "Linejoin: Bevel"},
-{"id": "linejoin_miter", "title": "Linejoin: Miter"},
-{"id": "linejoin_round", "title": "Linejoin: Round"},
-{"id": "main_icon", "title": "Main Menu"},
-{"id": "mode_connect", "title": "Connect two objects"},
-{"id": "page", "textContent": "старонка"},
-{"id": "palette", "title": "Націсніце для змены колеру залівання, Shift-Click змяніць обводка"},
-{"id": "path_node_x", "title": "Change node's x coordinate"},
-{"id": "path_node_y", "title": "Change node's y coordinate"},
-{"id": "rect_height_tool", "title": "Змены прастакутнік вышынёй"},
-{"id": "rect_width_tool", "title": "Змяненне шырыні прамавугольніка"},
-{"id": "relativeToLabel", "textContent": "па параўнанні з:"},
-{"id": "seg_type", "title": "Change Segment type"},
-{"id": "selLayerLabel", "textContent": "Move elements to:"},
-{"id": "selLayerNames", "title": "Move selected elements to a different layer"},
-{"id": "selectedPredefined", "textContent": "Выберыце прадвызначэньні:"},
-{"id": "selected_objects", "textContent": "выбранымі аб&#39;ектамі"},
-{"id": "selected_x", "title": "Change X coordinate"},
-{"id": "selected_y", "title": "Change Y coordinate"},
-{"id": "smallest_object", "textContent": "маленькі аб&#39;ект"},
-{"id": "straight_segments", "textContent": "Straight"},
-{"id": "stroke_color", "title": "Змяненне колеру інсульт"},
-{"id": "stroke_style", "title": "Змяненне стылю інсульт працяжнік"},
-{"id": "stroke_width", "title": "Змены шырыня штрых"},
-{"id": "svginfo_bg_note", "textContent": "Note: Background will not be saved with image."},
-{"id": "svginfo_change_background", "textContent": "Editor Background"},
-{"id": "svginfo_dim", "textContent": "Canvas Dimensions"},
-{"id": "svginfo_editor_prefs", "textContent": "Editor Preferences"},
-{"id": "svginfo_height", "textContent": "Вышыня:"},
-{"id": "svginfo_icons", "textContent": "Icon size"},
-{"id": "svginfo_image_props", "textContent": "Image Properties"},
-{"id": "svginfo_lang", "textContent": "Language"},
-{"id": "svginfo_title", "textContent": "Title"},
-{"id": "svginfo_width", "textContent": "Шырыня:"},
-{"id": "text", "title": "Змяненне зместу тэксту"},
-{"id": "toggle_stroke_tools", "title": "Show/hide more stroke tools"},
-{"id": "tool_add_subpath", "title": "Add sub-path"},
-{"id": "tool_alignbottom", "title": "Лінаваць па ніжнім краю"},
-{"id": "tool_aligncenter", "title": "Лінаваць па цэнтру"},
-{"id": "tool_alignleft", "title": "Па левым краю"},
-{"id": "tool_alignmiddle", "title": "Выраўнаваць Блізкага"},
-{"id": "tool_alignright", "title": "Па правым краю"},
-{"id": "tool_aligntop", "title": "Лінаваць па верхнім краю"},
-{"id": "tool_angle", "title": "Змены вугла павароту"},
-{"id": "tool_blur", "title": "Change gaussian blur value"},
-{"id": "tool_bold", "title": "Тоўсты тэкст"},
-{"id": "tool_circle", "title": "Круг"},
-{"id": "tool_clear", "textContent": "Новае выява"},
-{"id": "tool_clone", "title": "Клон элемента"},
-{"id": "tool_clone_multi", "title": "Клон Элементы"},
-{"id": "tool_delete", "title": "Выдаліць элемент"},
-{"id": "tool_delete_multi", "title": "Выдаліць выбраныя элементы"},
-{"id": "tool_docprops", "textContent": "Уласцівасці дакумента"},
-{"id": "tool_docprops_cancel", "textContent": "Адмена"},
-{"id": "tool_docprops_save", "textContent": "Захаваць"},
-{"id": "tool_ellipse", "title": "Эліпс"},
-{"id": "tool_export", "textContent": "Export as PNG"},
-{"id": "tool_eyedropper", "title": "Eye Dropper Tool"},
-{"id": "tool_fhellipse", "title": "Свабоднай рукі Эліпс"},
-{"id": "tool_fhpath", "title": "Pencil Tool"},
-{"id": "tool_fhrect", "title": "Свабоднай рукі Прастакутнік"},
-{"id": "tool_font_size", "title": "Змяніць памер шрыфта"},
-{"id": "tool_group", "title": "Група элементаў"},
-{"id": "tool_image", "title": "Image Tool"},
-{"id": "tool_import", "textContent": "Import SVG"},
-{"id": "tool_italic", "title": "Нахілены тэкст"},
-{"id": "tool_line", "title": "Line Tool"},
-{"id": "tool_move_bottom", "title": "Перамясціць уніз"},
-{"id": "tool_move_top", "title": "Перамясціць угару"},
-{"id": "tool_node_clone", "title": "Clone Node"},
-{"id": "tool_node_delete", "title": "Delete Node"},
-{"id": "tool_node_link", "title": "Link Control Points"},
-{"id": "tool_opacity", "title": "Старонка абранага пункта непразрыстасці"},
-{"id": "tool_open", "textContent": "Адкрыць выява"},
-{"id": "tool_path", "title": "Poly Tool"},
-{"id": "tool_rect", "title": "Прамавугольнік"},
-{"id": "tool_redo", "title": "Паўтор"},
-{"id": "tool_reorient", "title": "Reorient path"},
-{"id": "tool_save", "textContent": "Захаваць малюнак"},
-{"id": "tool_select", "title": "Выберыце інструмент"},
-{"id": "tool_source", "title": "Змяніць зыходны"},
-{"id": "tool_source_cancel", "textContent": "Адмена"},
-{"id": "tool_source_save", "textContent": "Захаваць"},
-{"id": "tool_square", "title": "Плошча"},
-{"id": "tool_text", "title": "Тэкст Tool"},
-{"id": "tool_topath", "title": "Convert to Path"},
-{"id": "tool_undo", "title": "Адмяніць"},
-{"id": "tool_ungroup", "title": "Элементы Разгруппировать"},
-{"id": "tool_wireframe", "title": "Wireframe Mode"},
-{"id": "tool_zoom", "title": "Zoom Tool"},
-{"id": "url_notice", "title": "NOTE: This image cannot be embedded. It will depend on this path to be displayed"},
-{"id": "zoom_panel", "title": "Змяненне маштабу"},
-{"id": "sidepanel_handle", "textContent": "L a y e r s", "title": "Drag left/right to resize side panel"},
-{
- "js_strings": {
- "QerrorsRevertToSource": "There were parsing errors in your SVG source.\nRevert back to original SVG source?",
- "QignoreSourceChanges": "Ignore changes made to SVG source?",
- "QmoveElemsToLayer": "Move selected elements to layer '%s'?",
- "QwantToClear": "Do you want to clear the drawing?\nThis will also erase your undo history!",
- "cancel": "Cancel",
- "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.",
- "dupeLayerName": "There is already a layer named that!",
- "enterNewImgURL": "Enter the new image URL",
- "enterNewLayerName": "Please enter the new layer name",
- "enterUniqueLayerName": "Please enter a unique layer name",
- "exportNoBlur": "Blurred elements will appear as un-blurred",
- "exportNoDashArray": "Strokes will appear filled",
- "exportNoImage": "Image elements will not appear",
- "exportNoText": "Text may not appear as expected",
- "exportNoforeignObject": "foreignObject elements will not appear",
- "featNotSupported": "Feature not supported",
- "invalidAttrValGiven": "Invalid value given",
- "key_backspace": "backspace",
- "key_del": "delete",
- "key_down": "down",
- "key_up": "up",
- "layer": "Layer",
- "layerHasThatName": "Layer already has that name",
- "loadingImage": "Loading image, please wait...",
- "noContentToFitTo": "No content to fit to",
- "noteTheseIssues": "Also note the following issues: ",
- "ok": "OK",
- "pathCtrlPtTooltip": "Drag control point to adjust curve properties",
- "pathNodeTooltip": "Drag node to move it. Double-click node to change segment type",
- "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file."
- }
-}
-] \ No newline at end of file
diff --git a/files_svgedit/js/locale/lang.bg.js b/files_svgedit/js/locale/lang.bg.js
deleted file mode 100644
index 3ee57a99a..000000000
--- a/files_svgedit/js/locale/lang.bg.js
+++ /dev/null
@@ -1,173 +0,0 @@
-[
-{"id": "align_relative_to", "title": "Привеждане в сравнение с ..."},
-{"id": "bkgnd_color", "title": "Промяна на цвета на фона / непрозрачност"},
-{"id": "circle_cx", "title": "CX Промяна кръг на координатната"},
-{"id": "circle_cy", "title": "Промяна кръг&#39;s CY координира"},
-{"id": "circle_r", "title": "Промяна кръг радиус"},
-{"id": "connector_no_arrow", "textContent": "No arrow"},
-{"id": "copyrightLabel", "textContent": "Powered by"},
-{"id": "cornerRadiusLabel", "title": "Промяна на правоъгълник Corner Radius"},
-{"id": "curve_segments", "textContent": "Curve"},
-{"id": "ellipse_cx", "title": "Промяна на елипса&#39;s CX координира"},
-{"id": "ellipse_cy", "title": "Промяна на елипса&#39;s CY координира"},
-{"id": "ellipse_rx", "title": "Промяна на елипса&#39;s X радиус"},
-{"id": "ellipse_ry", "title": "Промяна на елипса&#39;s Y радиус"},
-{"id": "fill_color", "title": "Промяна попълнете цвят"},
-{"id": "fitToContent", "textContent": "Fit към съдържание"},
-{"id": "fit_to_all", "textContent": "Побери цялото съдържание"},
-{"id": "fit_to_canvas", "textContent": "Fit на платно"},
-{"id": "fit_to_layer_content", "textContent": "Fit да слой съдържание"},
-{"id": "fit_to_sel", "textContent": "Fit за подбор"},
-{"id": "font_family", "title": "Промяна на шрифта Семейство"},
-{"id": "icon_large", "textContent": "Large"},
-{"id": "icon_medium", "textContent": "Medium"},
-{"id": "icon_small", "textContent": "Small"},
-{"id": "icon_xlarge", "textContent": "Extra Large"},
-{"id": "image_height", "title": "Промяна на изображението височина"},
-{"id": "image_opt_embed", "textContent": "Embed data (local files)"},
-{"id": "image_opt_ref", "textContent": "Use file reference"},
-{"id": "image_url", "title": "Промяна на URL"},
-{"id": "image_width", "title": "Промяна на изображението ширина"},
-{"id": "includedImages", "textContent": "Included Images"},
-{"id": "largest_object", "textContent": "най-големият обект"},
-{"id": "layer_delete", "title": "Изтриване на слой"},
-{"id": "layer_down", "title": "Move слой надолу"},
-{"id": "layer_new", "title": "Нов слой"},
-{"id": "layer_rename", "title": "Преименуване Layer"},
-{"id": "layer_up", "title": "Move Up Layer"},
-{"id": "layersLabel", "textContent": "Слоевете:"},
-{"id": "line_x1", "title": "Промяна на линия, започваща х координира"},
-{"id": "line_x2", "title": "Промяна на линията приключва х координира"},
-{"id": "line_y1", "title": "Промяна линия, започваща Y координира"},
-{"id": "line_y2", "title": "Промяна на линията приключва Y координира"},
-{"id": "linecap_butt", "title": "Linecap: Butt"},
-{"id": "linecap_round", "title": "Linecap: Round"},
-{"id": "linecap_square", "title": "Linecap: Square"},
-{"id": "linejoin_bevel", "title": "Linejoin: Bevel"},
-{"id": "linejoin_miter", "title": "Linejoin: Miter"},
-{"id": "linejoin_round", "title": "Linejoin: Round"},
-{"id": "main_icon", "title": "Main Menu"},
-{"id": "mode_connect", "title": "Connect two objects"},
-{"id": "page", "textContent": "страница"},
-{"id": "palette", "title": "Кликнете, за да промени попълнете цвят, на смени, кликнете да променят цвета си удар"},
-{"id": "path_node_x", "title": "Change node's x coordinate"},
-{"id": "path_node_y", "title": "Change node's y coordinate"},
-{"id": "rect_height_tool", "title": "Промяна на правоъгълник височина"},
-{"id": "rect_width_tool", "title": "Промяна на правоъгълник ширина"},
-{"id": "relativeToLabel", "textContent": "в сравнение с:"},
-{"id": "seg_type", "title": "Change Segment type"},
-{"id": "selLayerLabel", "textContent": "Move elements to:"},
-{"id": "selLayerNames", "title": "Move selected elements to a different layer"},
-{"id": "selectedPredefined", "textContent": "Изберете предварително:"},
-{"id": "selected_objects", "textContent": "избраните обекти"},
-{"id": "selected_x", "title": "Change X coordinate"},
-{"id": "selected_y", "title": "Change Y coordinate"},
-{"id": "smallest_object", "textContent": "най-малката обект"},
-{"id": "straight_segments", "textContent": "Straight"},
-{"id": "stroke_color", "title": "Промяна на инсулт цвят"},
-{"id": "stroke_style", "title": "Промяна на стила удар тире"},
-{"id": "stroke_width", "title": "Промяна на ширината инсулт"},
-{"id": "svginfo_bg_note", "textContent": "Note: Background will not be saved with image."},
-{"id": "svginfo_change_background", "textContent": "Editor Background"},
-{"id": "svginfo_dim", "textContent": "Canvas Dimensions"},
-{"id": "svginfo_editor_prefs", "textContent": "Editor Preferences"},
-{"id": "svginfo_height", "textContent": "Височина:"},
-{"id": "svginfo_icons", "textContent": "Icon size"},
-{"id": "svginfo_image_props", "textContent": "Image Properties"},
-{"id": "svginfo_lang", "textContent": "Language"},
-{"id": "svginfo_title", "textContent": "Title"},
-{"id": "svginfo_width", "textContent": "Ширина:"},
-{"id": "text", "title": "Промяна на текст съдържание"},
-{"id": "toggle_stroke_tools", "title": "Show/hide more stroke tools"},
-{"id": "tool_add_subpath", "title": "Add sub-path"},
-{"id": "tool_alignbottom", "title": "Привеждане Отдолу"},
-{"id": "tool_aligncenter", "title": "Подравняване в средата"},
-{"id": "tool_alignleft", "title": "Подравняване вляво"},
-{"id": "tool_alignmiddle", "title": "Привеждане в Близкия"},
-{"id": "tool_alignright", "title": "Подравняване надясно"},
-{"id": "tool_aligntop", "title": "Привеждане Топ"},
-{"id": "tool_angle", "title": "Промяна ъгъл на завъртане"},
-{"id": "tool_blur", "title": "Change gaussian blur value"},
-{"id": "tool_bold", "title": "Получер текст"},
-{"id": "tool_circle", "title": "Кръгът"},
-{"id": "tool_clear", "textContent": "Ню Имидж"},
-{"id": "tool_clone", "title": "Clone Елемент"},
-{"id": "tool_clone_multi", "title": "Clone Елементи"},
-{"id": "tool_delete", "title": "Изтриване на елемент"},
-{"id": "tool_delete_multi", "title": "Изтриване на избрани елементи"},
-{"id": "tool_docprops", "textContent": "Document Properties"},
-{"id": "tool_docprops_cancel", "textContent": "Отказ"},
-{"id": "tool_docprops_save", "textContent": "Спасявам"},
-{"id": "tool_ellipse", "title": "Елипса"},
-{"id": "tool_export", "textContent": "Export as PNG"},
-{"id": "tool_eyedropper", "title": "Eye Dropper Tool"},
-{"id": "tool_fhellipse", "title": "Свободен Употребявани Елипса"},
-{"id": "tool_fhpath", "title": "Pencil Tool"},
-{"id": "tool_fhrect", "title": "Свободен Употребявани правоъгълник"},
-{"id": "tool_font_size", "title": "Промени размера на буквите"},
-{"id": "tool_group", "title": "Група Елементи"},
-{"id": "tool_image", "title": "Image Tool"},
-{"id": "tool_import", "textContent": "Import SVG"},
-{"id": "tool_italic", "title": "Курсив текст"},
-{"id": "tool_line", "title": "Line Tool"},
-{"id": "tool_move_bottom", "title": "Премести надолу"},
-{"id": "tool_move_top", "title": "Премести в началото"},
-{"id": "tool_node_clone", "title": "Clone Node"},
-{"id": "tool_node_delete", "title": "Delete Node"},
-{"id": "tool_node_link", "title": "Link Control Points"},
-{"id": "tool_opacity", "title": "Промяна на избрания елемент непрозрачност"},
-{"id": "tool_open", "textContent": "Отворете изображението"},
-{"id": "tool_path", "title": "Поли Tool"},
-{"id": "tool_rect", "title": "Правоъгълник"},
-{"id": "tool_redo", "title": "Възстановяване"},
-{"id": "tool_reorient", "title": "Reorient path"},
-{"id": "tool_save", "textContent": "Save Image"},
-{"id": "tool_select", "title": "Select Tool"},
-{"id": "tool_source", "title": "Редактиране Източник"},
-{"id": "tool_source_cancel", "textContent": "Отказ"},
-{"id": "tool_source_save", "textContent": "Спасявам"},
-{"id": "tool_square", "title": "Квадрат"},
-{"id": "tool_text", "title": "Текст Оръдие"},
-{"id": "tool_topath", "title": "Convert to Path"},
-{"id": "tool_undo", "title": "Отмени"},
-{"id": "tool_ungroup", "title": "Разгрупирай Елементи"},
-{"id": "tool_wireframe", "title": "Wireframe Mode"},
-{"id": "tool_zoom", "title": "Zoom Tool"},
-{"id": "url_notice", "title": "NOTE: This image cannot be embedded. It will depend on this path to be displayed"},
-{"id": "zoom_panel", "title": "Промяна на ниво на мащабиране"},
-{"id": "sidepanel_handle", "textContent": "L a y e r s", "title": "Drag left/right to resize side panel"},
-{
- "js_strings": {
- "QerrorsRevertToSource": "There were parsing errors in your SVG source.\nRevert back to original SVG source?",
- "QignoreSourceChanges": "Ignore changes made to SVG source?",
- "QmoveElemsToLayer": "Move selected elements to layer '%s'?",
- "QwantToClear": "Do you want to clear the drawing?\nThis will also erase your undo history!",
- "cancel": "Cancel",
- "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.",
- "dupeLayerName": "There is already a layer named that!",
- "enterNewImgURL": "Enter the new image URL",
- "enterNewLayerName": "Please enter the new layer name",
- "enterUniqueLayerName": "Please enter a unique layer name",
- "exportNoBlur": "Blurred elements will appear as un-blurred",
- "exportNoDashArray": "Strokes will appear filled",
- "exportNoImage": "Image elements will not appear",
- "exportNoText": "Text may not appear as expected",
- "exportNoforeignObject": "foreignObject elements will not appear",
- "featNotSupported": "Feature not supported",
- "invalidAttrValGiven": "Invalid value given",
- "key_backspace": "backspace",
- "key_del": "delete",
- "key_down": "down",
- "key_up": "up",
- "layer": "Layer",
- "layerHasThatName": "Layer already has that name",
- "loadingImage": "Loading image, please wait...",
- "noContentToFitTo": "No content to fit to",
- "noteTheseIssues": "Also note the following issues: ",
- "ok": "OK",
- "pathCtrlPtTooltip": "Drag control point to adjust curve properties",
- "pathNodeTooltip": "Drag node to move it. Double-click node to change segment type",
- "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file."
- }
-}
-] \ No newline at end of file
diff --git a/files_svgedit/js/locale/lang.ca.js b/files_svgedit/js/locale/lang.ca.js
deleted file mode 100644
index e2dd954b9..000000000
--- a/files_svgedit/js/locale/lang.ca.js
+++ /dev/null
@@ -1,173 +0,0 @@
-[
-{"id": "align_relative_to", "title": "Alinear pel que fa a ..."},
-{"id": "bkgnd_color", "title": "Color de fons / opacitat"},
-{"id": "circle_cx", "title": "CX cercle Canvi de coordenades"},
-{"id": "circle_cy", "title": "Cercle Canvi CY coordinar"},
-{"id": "circle_r", "title": "Ràdio de cercle Canvi"},
-{"id": "connector_no_arrow", "textContent": "No arrow"},
-{"id": "copyrightLabel", "textContent": "Powered by"},
-{"id": "cornerRadiusLabel", "title": "Canviar Rectangle Corner Radius"},
-{"id": "curve_segments", "textContent": "Curve"},
-{"id": "ellipse_cx", "title": "Canviar lipse CX coordinar"},
-{"id": "ellipse_cy", "title": "Lipse Canvi CY coordinar"},
-{"id": "ellipse_rx", "title": "Ràdio x lipse Canvi"},
-{"id": "ellipse_ry", "title": "Ràdio i lipse Canvi"},
-{"id": "fill_color", "title": "Canviar el color de farciment"},
-{"id": "fitToContent", "textContent": "Ajustar al contingut"},
-{"id": "fit_to_all", "textContent": "Ajustar a tot el contingut"},
-{"id": "fit_to_canvas", "textContent": "Ajustar a la lona"},
-{"id": "fit_to_layer_content", "textContent": "Ajustar al contingut de la capa d&#39;"},
-{"id": "fit_to_sel", "textContent": "Ajustar a la selecció"},
-{"id": "font_family", "title": "Canviar la font Família"},
-{"id": "icon_large", "textContent": "Large"},
-{"id": "icon_medium", "textContent": "Medium"},
-{"id": "icon_small", "textContent": "Small"},
-{"id": "icon_xlarge", "textContent": "Extra Large"},
-{"id": "image_height", "title": "Canviar l&#39;altura de la imatge"},
-{"id": "image_opt_embed", "textContent": "Embed data (local files)"},
-{"id": "image_opt_ref", "textContent": "Use file reference"},
-{"id": "image_url", "title": "Canviar URL"},
-{"id": "image_width", "title": "Amplada de la imatge Canvi"},
-{"id": "includedImages", "textContent": "Included Images"},
-{"id": "largest_object", "textContent": "objecte més gran"},
-{"id": "layer_delete", "title": "Eliminar capa"},
-{"id": "layer_down", "title": "Mou la capa de Down"},
-{"id": "layer_new", "title": "Nova capa"},
-{"id": "layer_rename", "title": "Canvieu el nom de la capa"},
-{"id": "layer_up", "title": "Mou la capa Up"},
-{"id": "layersLabel", "textContent": "Layers:"},
-{"id": "line_x1", "title": "Canviar la línia de partida de la coordenada x"},
-{"id": "line_x2", "title": "Canviar la línia d&#39;hores de coordenada x"},
-{"id": "line_y1", "title": "Canviar la línia de partida i de coordinar"},
-{"id": "line_y2", "title": "Canviar la línia d&#39;hores de coordenada"},
-{"id": "linecap_butt", "title": "Linecap: Butt"},
-{"id": "linecap_round", "title": "Linecap: Round"},
-{"id": "linecap_square", "title": "Linecap: Square"},
-{"id": "linejoin_bevel", "title": "Linejoin: Bevel"},
-{"id": "linejoin_miter", "title": "Linejoin: Miter"},
-{"id": "linejoin_round", "title": "Linejoin: Round"},
-{"id": "main_icon", "title": "Main Menu"},
-{"id": "mode_connect", "title": "Connect two objects"},
-{"id": "page", "textContent": "Pàgina"},
-{"id": "palette", "title": "Feu clic per canviar el color de farciment, shift-clic per canviar el color del traç"},
-{"id": "path_node_x", "title": "Change node's x coordinate"},
-{"id": "path_node_y", "title": "Change node's y coordinate"},
-{"id": "rect_height_tool", "title": "Rectangle d&#39;alçada Canvi"},
-{"id": "rect_width_tool", "title": "Ample rectangle Canvi"},
-{"id": "relativeToLabel", "textContent": "en relació amb:"},
-{"id": "seg_type", "title": "Change Segment type"},
-{"id": "selLayerLabel", "textContent": "Move elements to:"},
-{"id": "selLayerNames", "title": "Move selected elements to a different layer"},
-{"id": "selectedPredefined", "textContent": "Seleccioneu predefinides:"},
-{"id": "selected_objects", "textContent": "objectes escollits"},
-{"id": "selected_x", "title": "Change X coordinate"},
-{"id": "selected_y", "title": "Change Y coordinate"},
-{"id": "smallest_object", "textContent": "objecte més petit"},
-{"id": "straight_segments", "textContent": "Straight"},
-{"id": "stroke_color", "title": "Canviar el color del traç"},
-{"id": "stroke_style", "title": "Canviar estil de traç guió"},
-{"id": "stroke_width", "title": "Canviar l&#39;amplada del traç"},
-{"id": "svginfo_bg_note", "textContent": "Note: Background will not be saved with image."},
-{"id": "svginfo_change_background", "textContent": "Editor Background"},
-{"id": "svginfo_dim", "textContent": "Canvas Dimensions"},
-{"id": "svginfo_editor_prefs", "textContent": "Editor Preferences"},
-{"id": "svginfo_height", "textContent": "Alçada:"},
-{"id": "svginfo_icons", "textContent": "Icon size"},
-{"id": "svginfo_image_props", "textContent": "Image Properties"},
-{"id": "svginfo_lang", "textContent": "Language"},
-{"id": "svginfo_title", "textContent": "Title"},
-{"id": "svginfo_width", "textContent": "Amplada:"},
-{"id": "text", "title": "Contingut del text"},
-{"id": "toggle_stroke_tools", "title": "Show/hide more stroke tools"},
-{"id": "tool_add_subpath", "title": "Add sub-path"},
-{"id": "tool_alignbottom", "title": "Alinear baix"},
-{"id": "tool_aligncenter", "title": "Alinear al centre"},
-{"id": "tool_alignleft", "title": "Alinear a l&#39;esquerra"},
-{"id": "tool_alignmiddle", "title": "Alinear Medi"},
-{"id": "tool_alignright", "title": "Alinear a la dreta"},
-{"id": "tool_aligntop", "title": "Alinear a dalt"},
-{"id": "tool_angle", "title": "Canviar l&#39;angle de rotació"},
-{"id": "tool_blur", "title": "Change gaussian blur value"},
-{"id": "tool_bold", "title": "Text en negreta"},
-{"id": "tool_circle", "title": "Cercle"},
-{"id": "tool_clear", "textContent": "Nova imatge"},
-{"id": "tool_clone", "title": "Clone Element"},
-{"id": "tool_clone_multi", "title": "Elements Clone"},
-{"id": "tool_delete", "title": "Eliminar element"},
-{"id": "tool_delete_multi", "title": "Elimina els elements seleccionats"},
-{"id": "tool_docprops", "textContent": "Propietats del document"},
-{"id": "tool_docprops_cancel", "textContent": "Cancel"},
-{"id": "tool_docprops_save", "textContent": "Salvar"},
-{"id": "tool_ellipse", "title": "Lipse"},
-{"id": "tool_export", "textContent": "Export as PNG"},
-{"id": "tool_eyedropper", "title": "Eye Dropper Tool"},
-{"id": "tool_fhellipse", "title": "Free-Hand Ellipse"},
-{"id": "tool_fhpath", "title": "Eina Llapis"},
-{"id": "tool_fhrect", "title": "Free-Hand Rectangle"},
-{"id": "tool_font_size", "title": "Change Font Size"},
-{"id": "tool_group", "title": "Elements de Grup de"},
-{"id": "tool_image", "title": "Image Tool"},
-{"id": "tool_import", "textContent": "Import SVG"},
-{"id": "tool_italic", "title": "Text en cursiva"},
-{"id": "tool_line", "title": "L&#39;eina"},
-{"id": "tool_move_bottom", "title": "Mou al final"},
-{"id": "tool_move_top", "title": "Mou al principi"},
-{"id": "tool_node_clone", "title": "Clone Node"},
-{"id": "tool_node_delete", "title": "Delete Node"},
-{"id": "tool_node_link", "title": "Link Control Points"},
-{"id": "tool_opacity", "title": "Canviar la opacitat tema seleccionat"},
-{"id": "tool_open", "textContent": "Obrir imatge"},
-{"id": "tool_path", "title": "Path Tool"},
-{"id": "tool_rect", "title": "Rectangle"},
-{"id": "tool_redo", "title": "Refer"},
-{"id": "tool_reorient", "title": "Reorient path"},
-{"id": "tool_save", "textContent": "Guardar imatge"},
-{"id": "tool_select", "title": "Eina de selecció"},
-{"id": "tool_source", "title": "Font Edita"},
-{"id": "tool_source_cancel", "textContent": "Cancel"},
-{"id": "tool_source_save", "textContent": "Salvar"},
-{"id": "tool_square", "title": "Quadrat"},
-{"id": "tool_text", "title": "Eina de text"},
-{"id": "tool_topath", "title": "Convert to Path"},
-{"id": "tool_undo", "title": "Desfés"},
-{"id": "tool_ungroup", "title": "Desagrupar elements"},
-{"id": "tool_wireframe", "title": "Wireframe Mode"},
-{"id": "tool_zoom", "title": "Zoom Tool"},
-{"id": "url_notice", "title": "NOTE: This image cannot be embedded. It will depend on this path to be displayed"},
-{"id": "zoom_panel", "title": "Canviar el nivell de zoom"},
-{"id": "sidepanel_handle", "textContent": "L a y e r s", "title": "Drag left/right to resize side panel"},
-{
- "js_strings": {
- "QerrorsRevertToSource": "There were parsing errors in your SVG source.\nRevert back to original SVG source?",
- "QignoreSourceChanges": "Ignore changes made to SVG source?",
- "QmoveElemsToLayer": "Move selected elements to layer '%s'?",
- "QwantToClear": "Do you want to clear the drawing?\nThis will also erase your undo history!",
- "cancel": "Cancel",
- "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.",
- "dupeLayerName": "There is already a layer named that!",
- "enterNewImgURL": "Enter the new image URL",
- "enterNewLayerName": "Please enter the new layer name",
- "enterUniqueLayerName": "Please enter a unique layer name",
- "exportNoBlur": "Blurred elements will appear as un-blurred",
- "exportNoDashArray": "Strokes will appear filled",
- "exportNoImage": "Image elements will not appear",
- "exportNoText": "Text may not appear as expected",
- "exportNoforeignObject": "foreignObject elements will not appear",
- "featNotSupported": "Feature not supported",
- "invalidAttrValGiven": "Invalid value given",
- "key_backspace": "backspace",
- "key_del": "delete",
- "key_down": "down",
- "key_up": "up",
- "layer": "Layer",
- "layerHasThatName": "Layer already has that name",
- "loadingImage": "Loading image, please wait...",
- "noContentToFitTo": "No content to fit to",
- "noteTheseIssues": "Also note the following issues: ",
- "ok": "OK",
- "pathCtrlPtTooltip": "Drag control point to adjust curve properties",
- "pathNodeTooltip": "Drag node to move it. Double-click node to change segment type",
- "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file."
- }
-}
-] \ No newline at end of file
diff --git a/files_svgedit/js/locale/lang.cs.js b/files_svgedit/js/locale/lang.cs.js
deleted file mode 100644
index 8b4cbfae7..000000000
--- a/files_svgedit/js/locale/lang.cs.js
+++ /dev/null
@@ -1,176 +0,0 @@
-[
-{"id": "align_relative_to", "title": "Zarovnat relativně"},
-{"id": "bkgnd_color", "title": "Změnit barvu a průhlednost pozadí"},
-{"id": "circle_cx", "title": "Změnit souřadnici X středu kružnice"},
-{"id": "circle_cy", "title": "Změnit souřadnici Y středu kružnice"},
-{"id": "circle_r", "title": "Změnit poloměr kružnice"},
-{"id": "connector_no_arrow", "textContent": "Bez šipky"},
-{"id": "copyrightLabel", "textContent": "Běží na"},
-{"id": "cornerRadiusLabel", "title": "Změnit zaoblení obdélníku"},
-{"id": "curve_segments", "textContent": "křivka"},
-{"id": "ellipse_cx", "title": "Změnit souřadnici X středu elipsy"},
-{"id": "ellipse_cy", "title": "Změnit souřadnici Y středu elipsy"},
-{"id": "ellipse_rx", "title": "Změnit poloměr X elipsy"},
-{"id": "ellipse_ry", "title": "Změnit poloměr Y elipsy"},
-{"id": "fill_color", "title": "Změnit barvu výplně"},
-{"id": "fitToContent", "textContent": "přizpůsobit obsahu"},
-{"id": "fit_to_all", "textContent": "Přizpůsobit veškerému obsahu"},
-{"id": "fit_to_canvas", "textContent": "Přizpůsobit stránce"},
-{"id": "fit_to_layer_content", "textContent": "Přizpůsobit obsahu vrstvy"},
-{"id": "fit_to_sel", "textContent": "Přizpůsobit výběru"},
-{"id": "font_family", "title": "Změnit font"},
-{"id": "icon_large", "textContent": "velké"},
-{"id": "icon_medium", "textContent": "střední"},
-{"id": "icon_small", "textContent": "malé"},
-{"id": "icon_xlarge", "textContent": "největší"},
-{"id": "idLabel", "title": "Změnit ID elementu"},
-{"id": "image_height", "title": "Změnit výšku dokumentu"},
-{"id": "image_opt_embed", "textContent": "Vkládat do dokumentu"},
-{"id": "image_opt_ref", "textContent": "Jen odkazem"},
-{"id": "image_url", "title": "Změnit adresu URL"},
-{"id": "image_width", "title": "Změnit šířku dokumentu"},
-{"id": "includedImages", "textContent": "Vložené obrázky"},
-{"id": "largest_object", "textContent": "největšímu objektu"},
-{"id": "layer_delete", "title": "Odstranit vrstvu"},
-{"id": "layer_down", "title": "Přesunout vrstvu níž"},
-{"id": "layer_new", "title": "Přidat vrstvu"},
-{"id": "layer_rename", "title": "Přejmenovat vrstvu"},
-{"id": "layer_up", "title": "Přesunout vrstvu výš"},
-{"id": "layersLabel", "textContent": "vrstvy:"},
-{"id": "line_x1", "title": "Změnit počáteční souřadnici X úsečky"},
-{"id": "line_x2", "title": "Změnit koncovou souřadnici X úsečky"},
-{"id": "line_y1", "title": "Změnit počáteční souřadnici Y úsečky"},
-{"id": "line_y2", "title": "Změnit koncovou souřadnici X úsečky"},
-{"id": "linecap_butt", "title": "Konec úsečky: přesný"},
-{"id": "linecap_round", "title": "Konec úsečky: zaoblený"},
-{"id": "linecap_square", "title": "Konec úsečky: s čtvercovým přesahem"},
-{"id": "linejoin_bevel", "title": "Styl napojení úseček: zkosené"},
-{"id": "linejoin_miter", "title": "Styl napojení úseček: ostré"},
-{"id": "linejoin_round", "title": "Styl napojení úseček: oblé"},
-{"id": "main_icon", "title": "Hlavní menu"},
-{"id": "mode_connect", "title": "Spojit dva objekty"},
-{"id": "page", "textContent": "stránce"},
-{"id": "palette", "title": "Kliknutím změníte barvu výplně, kliknutím současně s klávesou shift změníte barvu čáry"},
-{"id": "path_node_x", "title": "Změnit souřadnici X uzlu"},
-{"id": "path_node_y", "title": "Změnit souřadnici Y uzlu"},
-{"id": "rect_height_tool", "title": "Změnit výšku obdélníku"},
-{"id": "rect_width_tool", "title": "Změnit šířku obdélníku"},
-{"id": "relativeToLabel", "textContent": "relatativně k:"},
-{"id": "seg_type", "title": "Změnit typ segmentu"},
-{"id": "selLayerLabel", "textContent": "Přesunout objekty do:"},
-{"id": "selLayerNames", "title": "Přesunout objekty do jiné vrstvy"},
-{"id": "selectedPredefined", "textContent": "vybrat předdefinovaný:"},
-{"id": "selected_objects", "textContent": "zvoleným objektům"},
-{"id": "selected_x", "title": "Změnit souřadnici X"},
-{"id": "selected_y", "title": "Změnit souřadnici Y"},
-{"id": "smallest_object", "textContent": "nejmenšímu objektu"},
-{"id": "straight_segments", "textContent": "úsečka"},
-{"id": "stroke_color", "title": "Změnit barvu čáry"},
-{"id": "stroke_style", "title": "Změnit styl čáry"},
-{"id": "stroke_width", "title": "Změnit šířku čáry"},
-{"id": "svginfo_bg_note", "textContent": "Pozor: obrázek v pozadí nebude uložen jako součást dokumentu."},
-{"id": "svginfo_change_background", "textContent": "Obrázek v pozadí editoru"},
-{"id": "svginfo_dim", "textContent": "Vlastní velikost"},
-{"id": "svginfo_editor_prefs", "textContent": "Nastavení editoru"},
-{"id": "svginfo_height", "textContent": "výška:"},
-{"id": "svginfo_icons", "textContent": "Velikost ikon"},
-{"id": "svginfo_image_props", "textContent": "Vlastnosti dokumentu"},
-{"id": "svginfo_lang", "textContent": "Jazyk"},
-{"id": "svginfo_title", "textContent": "Název"},
-{"id": "svginfo_width", "textContent": "šířka:"},
-{"id": "text", "title": "Změnit text"},
-{"id": "toggle_stroke_tools", "title": "Zobrazit/schovat více možností"},
-{"id": "tool_add_subpath", "title": "Přidat další součást křivky"},
-{"id": "tool_alignbottom", "title": "Zarovnat dolů"},
-{"id": "tool_aligncenter", "title": "Zarovnat nastřed"},
-{"id": "tool_alignleft", "title": "Zarovnat doleva"},
-{"id": "tool_alignmiddle", "title": "Zarovnat nastřed"},
-{"id": "tool_alignright", "title": "Zarovnat doprava"},
-{"id": "tool_aligntop", "title": "Zarovnat nahoru"},
-{"id": "tool_angle", "title": "Změnit úhel natočení"},
-{"id": "tool_blur", "title": "Změnit rozostření"},
-{"id": "tool_bold", "title": "Tučně"},
-{"id": "tool_circle", "title": "Kružnice"},
-{"id": "tool_clear", "textContent": "Nový dokument"},
-{"id": "tool_clone", "title": "Duplikovat"},
-{"id": "tool_clone_multi", "title": "Duplikovat objekty"},
-{"id": "tool_delete", "title": "Odstranit"},
-{"id": "tool_delete_multi", "title": "Odstranit objekty"},
-{"id": "tool_docprops", "textContent": "Vlastnosti dokumentu"},
-{"id": "tool_docprops_cancel", "textContent": "Storno"},
-{"id": "tool_docprops_save", "textContent": "Uložit"},
-{"id": "tool_ellipse", "title": "Elipsa"},
-{"id": "tool_export", "textContent": "Exportovat jako PNG"},
-{"id": "tool_eyedropper", "title": "Kapátko"},
-{"id": "tool_fhellipse", "title": "Elipsa volnou rukou"},
-{"id": "tool_fhpath", "title": "Kresba od ruky"},
-{"id": "tool_fhrect", "title": "Obdélník volnou rukou"},
-{"id": "tool_font_size", "title": "Změnit velikost písma"},
-{"id": "tool_group", "title": "Seskupit objekty"},
-{"id": "tool_image", "title": "Obrázek"},
-{"id": "tool_import", "textContent": "Importovat SVG"},
-{"id": "tool_italic", "title": "Kurzíva"},
-{"id": "tool_line", "title": "Úsečka"},
-{"id": "tool_move_bottom", "title": "Vrstvu úplně dospodu"},
-{"id": "tool_move_top", "title": "Vrstvu úplně nahoru"},
-{"id": "tool_node_clone", "title": "Vložit nový uzel"},
-{"id": "tool_node_delete", "title": "Ostranit uzel"},
-{"id": "tool_node_link", "title": "Provázat ovládací body uzlu"},
-{"id": "tool_opacity", "title": "Změnit průhlednost objektů"},
-{"id": "tool_open", "textContent": "Otevřít dokument"},
-{"id": "tool_openclose_path", "title": "Otevřít/zavřít součást křivky"},
-{"id": "tool_path", "title": "Křivka"},
-{"id": "tool_position", "title": "Zarovnat element na stránku"},
-{"id": "tool_rect", "title": "Obdélník"},
-{"id": "tool_redo", "title": "Znovu"},
-{"id": "tool_reorient", "title": "Změna orientace křivky"},
-{"id": "tool_save", "textContent": "Uložit dokument"},
-{"id": "tool_select", "title": "Výběr a transformace objektů"},
-{"id": "tool_source", "title": "Upravovat SVG kód"},
-{"id": "tool_source_cancel", "textContent": "Storno"},
-{"id": "tool_source_save", "textContent": "Uložit"},
-{"id": "tool_square", "title": "Čtverec"},
-{"id": "tool_text", "title": "Text"},
-{"id": "tool_topath", "title": "Objekt na křivku"},
-{"id": "tool_undo", "title": "Zpět"},
-{"id": "tool_ungroup", "title": "Zrušit seskupení"},
-{"id": "tool_wireframe", "title": "Zobrazit jen kostru"},
-{"id": "tool_zoom", "title": "Přiblížení"},
-{"id": "url_notice", "title": "POZOR: Obrázek nelze uložit s dokumentem. Bude zobrazován z adresáře, kde se nyní nachází."},
-{"id": "zoom_panel", "title": "Změna přiblížení"},
-{"id": "sidepanel_handle", "textContent": "V r s t v y", "title": "Táhnutím změnit velikost"},
-{
- "js_strings": {
- "QerrorsRevertToSource": "Chyba v parsování zdrojového kódu SVG.\nChcete se vrátit k původnímu?",
- "QignoreSourceChanges": "Opravdu chcete stornovat změny provedené v SVG kódu?",
- "QmoveElemsToLayer": "Opravdu chcete přesunout vybrané objekty do vrstvy '%s'?",
- "QwantToClear": "Opravdu chcete smazat současný dokument?\nHistorie změn bude také smazána.",
- "cancel": "Storno",
- "defsFailOnSave": "POZOR: Kvůli nedokonalosti Vašeho prohlížeče se mohou některé části dokumentu špatně vykreslovat (mohou chybět barevné přechody nebo některé objekty). Po uložení dokumentu by se ale vše mělo zobrazovat správně.",
- "dupeLayerName": "Taková vrstva už bohužel existuje",
- "enterNewImgURL": "Vložte adresu URL, na které se nachází vkládaný obrázek",
- "enterNewLayerName": "Zadejte prosím jméno pro novou vrstvu",
- "enterUniqueLayerName": "Zadejte prosím jedinečné jméno pro vrstvu",
- "exportNoBlur": "bez rozostření elementů",
- "exportNoDashArray": "plné tahy",
- "exportNoImage": "bez vložených obrázků",
- "exportNoText": "vložený text může vypadat jinak",
- "exportNoforeignObject": "bez foreignObject objektů",
- "featNotSupported": "Tato vlastnost ještě není k dispozici",
- "invalidAttrValGiven": "Nevhodná hodnota",
- "key_backspace": "backspace",
- "key_del": "delete",
- "key_down": "šipka dolů",
- "key_up": "šipka nahoru",
- "layer": "Vrstva",
- "layerHasThatName": "Vrstva už se tak jmenuje",
- "loadingImage": "Nahrávám obrázek ...",
- "noContentToFitTo": "Vyberte oblast pro přizpůsobení",
- "noteTheseIssues": "Mohou se vyskytnout následující problémy: ",
- "ok": "OK",
- "pathCtrlPtTooltip": "Táhnutím ovládacího bodu myší tvarujete křivku.",
- "pathNodeTooltip": "Táhnutím myši uzel přesunete. Dvojklik mění typ segmentu.",
- "saveFromBrowser": "Použijte nabídku \"Uložit stránku jako ...\" ve Vašem prohlížeči pro uložení dokumentu do souboru %s."
- }
-}
-]
diff --git a/files_svgedit/js/locale/lang.cy.js b/files_svgedit/js/locale/lang.cy.js
deleted file mode 100644
index d3e62ae28..000000000
--- a/files_svgedit/js/locale/lang.cy.js
+++ /dev/null
@@ -1,173 +0,0 @@
-[
-{"id": "align_relative_to", "title": "Alinio perthynas i ..."},
-{"id": "bkgnd_color", "title": "Newid lliw cefndir / Didreiddiad"},
-{"id": "circle_cx", "title": "CX Newid cylch yn cydlynu"},
-{"id": "circle_cy", "title": "Newid cylch&#39;s cy gydgysylltu"},
-{"id": "circle_r", "title": "Newid radiws cylch yn"},
-{"id": "connector_no_arrow", "textContent": "No arrow"},
-{"id": "copyrightLabel", "textContent": "Powered by"},
-{"id": "cornerRadiusLabel", "title": "Newid Hirsgwâr Corner Radiws"},
-{"id": "curve_segments", "textContent": "Curve"},
-{"id": "ellipse_cx", "title": "Newid Ellipse yn CX gydgysylltu"},
-{"id": "ellipse_cy", "title": "Newid Ellipse yn cydlynu cy"},
-{"id": "ellipse_rx", "title": "Radiws Newid Ellipse&#39;s x"},
-{"id": "ellipse_ry", "title": "Radiws Newid Ellipse yn y"},
-{"id": "fill_color", "title": "Newid lliw llenwi"},
-{"id": "fitToContent", "textContent": "Ffit i Cynnwys"},
-{"id": "fit_to_all", "textContent": "Yn addas i bawb content"},
-{"id": "fit_to_canvas", "textContent": "Ffit i ofyn"},
-{"id": "fit_to_layer_content", "textContent": "Ffit cynnwys haen i"},
-{"id": "fit_to_sel", "textContent": "Yn addas at ddewis"},
-{"id": "font_family", "title": "Newid Font Teulu"},
-{"id": "icon_large", "textContent": "Large"},
-{"id": "icon_medium", "textContent": "Medium"},
-{"id": "icon_small", "textContent": "Small"},
-{"id": "icon_xlarge", "textContent": "Extra Large"},
-{"id": "image_height", "title": "Uchder delwedd Newid"},
-{"id": "image_opt_embed", "textContent": "Embed data (local files)"},
-{"id": "image_opt_ref", "textContent": "Use file reference"},
-{"id": "image_url", "title": "Newid URL"},
-{"id": "image_width", "title": "Lled delwedd Newid"},
-{"id": "includedImages", "textContent": "Included Images"},
-{"id": "largest_object", "textContent": "gwrthrych mwyaf"},
-{"id": "layer_delete", "title": "Dileu Haen"},
-{"id": "layer_down", "title": "Symud Haen i Lawr"},
-{"id": "layer_new", "title": "Haen Newydd"},
-{"id": "layer_rename", "title": "Ail-enwi Haen"},
-{"id": "layer_up", "title": "Symud Haen Up"},
-{"id": "layersLable", "textContent": "Haen:"},
-{"id": "line_x1", "title": "Newid llinell yn cychwyn x gydgysylltu"},
-{"id": "line_x2", "title": "Newid llinell yn diweddu x gydgysylltu"},
-{"id": "line_y1", "title": "Newid llinell ar y cychwyn yn cydlynu"},
-{"id": "line_y2", "title": "Newid llinell yn dod i ben y gydgysylltu"},
-{"id": "linecap_butt", "title": "Linecap: Butt"},
-{"id": "linecap_round", "title": "Linecap: Round"},
-{"id": "linecap_square", "title": "Linecap: Square"},
-{"id": "linejoin_bevel", "title": "Linejoin: Bevel"},
-{"id": "linejoin_miter", "title": "Linejoin: Miter"},
-{"id": "linejoin_round", "title": "Linejoin: Round"},
-{"id": "main_icon", "title": "Main Menu"},
-{"id": "mode_connect", "title": "Connect two objects"},
-{"id": "page", "textContent": "tudalen"},
-{"id": "palette", "title": "Cliciwch yma i lenwi newid lliw, sifft-cliciwch i newid lliw strôc"},
-{"id": "path_node_x", "title": "Change node's x coordinate"},
-{"id": "path_node_y", "title": "Change node's y coordinate"},
-{"id": "rect_height_tool", "title": "Uchder petryal Newid"},
-{"id": "rect_width_tool", "title": "Lled petryal Newid"},
-{"id": "relativeToLabel", "textContent": "cymharol i:"},
-{"id": "seg_type", "title": "Change Segment type"},
-{"id": "selLayerLabel", "textContent": "Move elements to:"},
-{"id": "selLayerNames", "title": "Move selected elements to a different layer"},
-{"id": "selectedPredefined", "textContent": "Rhagosodol Dewis:"},
-{"id": "selected_objects", "textContent": "gwrthrychau etholedig"},
-{"id": "selected_x", "title": "Change X coordinate"},
-{"id": "selected_y", "title": "Change Y coordinate"},
-{"id": "smallest_object", "textContent": "lleiaf gwrthrych"},
-{"id": "straight_segments", "textContent": "Straight"},
-{"id": "stroke_color", "title": "Newid lliw strôc"},
-{"id": "stroke_style", "title": "Newid arddull strôc diferyn"},
-{"id": "stroke_width", "title": "Lled strôc Newid"},
-{"id": "svginfo_bg_note", "textContent": "Note: Background will not be saved with image."},
-{"id": "svginfo_change_background", "textContent": "Editor Background"},
-{"id": "svginfo_dim", "textContent": "Canvas Dimensions"},
-{"id": "svginfo_editor_prefs", "textContent": "Editor Preferences"},
-{"id": "svginfo_height", "textContent": "Uchder:"},
-{"id": "svginfo_icons", "textContent": "Icon size"},
-{"id": "svginfo_image_props", "textContent": "Image Properties"},
-{"id": "svginfo_lang", "textContent": "Language"},
-{"id": "svginfo_title", "textContent": "Title"},
-{"id": "svginfo_width", "textContent": "Lled:"},
-{"id": "text", "title": "Cynnwys testun Newid"},
-{"id": "toggle_stroke_tools", "title": "Show/hide more stroke tools"},
-{"id": "tool_add_subpath", "title": "Add sub-path"},
-{"id": "tool_alignbottom", "title": "Alinio Gwaelod"},
-{"id": "tool_aligncenter", "title": "Alinio Center"},
-{"id": "tool_alignleft", "title": "Alinio Chwith"},
-{"id": "tool_alignmiddle", "title": "Alinio Canol"},
-{"id": "tool_alignright", "title": "Alinio Hawl"},
-{"id": "tool_aligntop", "title": "Alinio Top"},
-{"id": "tool_angle", "title": "Ongl cylchdro Newid"},
-{"id": "tool_blur", "title": "Change gaussian blur value"},
-{"id": "tool_bold", "title": "Testun Bras"},
-{"id": "tool_circle", "title": "Cylch"},
-{"id": "tool_clear", "textContent": "Newydd Delwedd"},
-{"id": "tool_clone", "title": "Clone Elfen"},
-{"id": "tool_clone_multi", "title": "Elfennau Clone "},
-{"id": "tool_delete", "title": "Dileu Elfen"},
-{"id": "tool_delete_multi", "title": "Elfennau Selected Dileu"},
-{"id": "tool_docprops", "textContent": "Document Eiddo"},
-{"id": "tool_docprops_cancel", "textContent": "Canslo"},
-{"id": "tool_docprops_save", "textContent": "Cadw"},
-{"id": "tool_ellipse", "title": "Ellipse"},
-{"id": "tool_export", "textContent": "Export as PNG"},
-{"id": "tool_eyedropper", "title": "Eye Dropper Tool"},
-{"id": "tool_fhellipse", "title": "Rhad ac am ddim Hand Ellipse"},
-{"id": "tool_fhpath", "title": "Teclyn pensil"},
-{"id": "tool_fhrect", "title": "Hand rhad ac am ddim Hirsgwâr"},
-{"id": "tool_font_size", "title": "Newid Maint Ffont"},
-{"id": "tool_group", "title": "Elfennau Grŵp"},
-{"id": "tool_image", "title": "Offer Delwedd"},
-{"id": "tool_import", "textContent": "Import SVG"},
-{"id": "tool_italic", "title": "Italig Testun"},
-{"id": "tool_line", "title": "Llinell Offer"},
-{"id": "tool_move_bottom", "title": "Symud i&#39;r Gwaelod"},
-{"id": "tool_move_top", "title": "Symud i&#39;r Top"},
-{"id": "tool_node_clone", "title": "Clone Node"},
-{"id": "tool_node_delete", "title": "Delete Node"},
-{"id": "tool_node_link", "title": "Link Control Points"},
-{"id": "tool_opacity", "title": "Newid dewis Didreiddiad eitem"},
-{"id": "tool_open", "textContent": "Delwedd Agored"},
-{"id": "tool_path", "title": "Offer poly"},
-{"id": "tool_rect", "title": "Petryal"},
-{"id": "tool_redo", "title": "Ail-wneud"},
-{"id": "tool_reorient", "title": "Reorient path"},
-{"id": "tool_save", "textContent": "Cadw Delwedd"},
-{"id": "tool_select", "title": "Dewiswch Offer"},
-{"id": "tool_source", "title": "Golygu Ffynhonnell"},
-{"id": "tool_source_cancel", "textContent": "Canslo"},
-{"id": "tool_source_save", "textContent": "Cadw"},
-{"id": "tool_square", "title": "Sgwâr"},
-{"id": "tool_text", "title": "Testun Offer"},
-{"id": "tool_topath", "title": "Convert to Path"},
-{"id": "tool_undo", "title": "Dadwneud"},
-{"id": "tool_ungroup", "title": "Elfennau Ungroup"},
-{"id": "tool_wireframe", "title": "Wireframe Mode"},
-{"id": "tool_zoom", "title": "Offer Chwyddo"},
-{"id": "url_notice", "title": "NOTE: This image cannot be embedded. It will depend on this path to be displayed"},
-{"id": "zoom_panel", "title": "Newid lefel chwyddo"},
-{"id": "sidepanel_handle", "textContent": "L a y e r s", "title": "Drag left/right to resize side panel"},
-{
- "js_strings": {
- "QerrorsRevertToSource": "There were parsing errors in your SVG source.\nRevert back to original SVG source?",
- "QignoreSourceChanges": "Ignore changes made to SVG source?",
- "QmoveElemsToLayer": "Move selected elements to layer '%s'?",
- "QwantToClear": "Do you want to clear the drawing?\nThis will also erase your undo history!",
- "cancel": "Cancel",
- "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.",
- "dupeLayerName": "There is already a layer named that!",
- "enterNewImgURL": "Enter the new image URL",
- "enterNewLayerName": "Please enter the new layer name",
- "enterUniqueLayerName": "Please enter a unique layer name",
- "exportNoBlur": "Blurred elements will appear as un-blurred",
- "exportNoDashArray": "Strokes will appear filled",
- "exportNoImage": "Image elements will not appear",
- "exportNoText": "Text may not appear as expected",
- "exportNoforeignObject": "foreignObject elements will not appear",
- "featNotSupported": "Feature not supported",
- "invalidAttrValGiven": "Invalid value given",
- "key_backspace": "backspace",
- "key_del": "delete",
- "key_down": "down",
- "key_up": "up",
- "layer": "Layer",
- "layerHasThatName": "Layer already has that name",
- "loadingImage": "Loading image, please wait...",
- "noContentToFitTo": "No content to fit to",
- "noteTheseIssues": "Also note the following issues: ",
- "ok": "OK",
- "pathCtrlPtTooltip": "Drag control point to adjust curve properties",
- "pathNodeTooltip": "Drag node to move it. Double-click node to change segment type",
- "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file."
- }
-}
-] \ No newline at end of file
diff --git a/files_svgedit/js/locale/lang.da.js b/files_svgedit/js/locale/lang.da.js
deleted file mode 100644
index a081e0b9f..000000000
--- a/files_svgedit/js/locale/lang.da.js
+++ /dev/null
@@ -1,173 +0,0 @@
-[
-{"id": "align_relative_to", "title": "Juster i forhold til ..."},
-{"id": "bkgnd_color", "title": "Skift baggrundsfarve / uigennemsigtighed"},
-{"id": "circle_cx", "title": "Skift cirklens cx koordinere"},
-{"id": "circle_cy", "title": "Skift cirklens cy koordinere"},
-{"id": "circle_r", "title": "Skift cirklens radius"},
-{"id": "connector_no_arrow", "textContent": "No arrow"},
-{"id": "copyrightLabel", "textContent": "Powered by"},
-{"id": "cornerRadiusLabel", "title": "Skift Rektangel Corner Radius"},
-{"id": "curve_segments", "textContent": "Curve"},
-{"id": "ellipse_cx", "title": "Skift ellipse&#39;s cx koordinere"},
-{"id": "ellipse_cy", "title": "Skift ellipse&#39;s cy koordinere"},
-{"id": "ellipse_rx", "title": "Skift ellipse&#39;s x radius"},
-{"id": "ellipse_ry", "title": "Skift ellipse&#39;s y radius"},
-{"id": "fill_color", "title": "Skift fyldfarve"},
-{"id": "fitToContent", "textContent": "Tilpas til indhold"},
-{"id": "fit_to_all", "textContent": "Passer til alt indhold"},
-{"id": "fit_to_canvas", "textContent": "Tilpas til lærred"},
-{"id": "fit_to_layer_content", "textContent": "Tilpas til lag indhold"},
-{"id": "fit_to_sel", "textContent": "Tilpas til udvælgelse"},
-{"id": "font_family", "title": "Skift Font Family"},
-{"id": "icon_large", "textContent": "Large"},
-{"id": "icon_medium", "textContent": "Medium"},
-{"id": "icon_small", "textContent": "Small"},
-{"id": "icon_xlarge", "textContent": "Extra Large"},
-{"id": "image_height", "title": "Skift billede højde"},
-{"id": "image_opt_embed", "textContent": "Embed data (local files)"},
-{"id": "image_opt_ref", "textContent": "Use file reference"},
-{"id": "image_url", "title": "Skift webadresse"},
-{"id": "image_width", "title": "Skift billede bredde"},
-{"id": "includedImages", "textContent": "Included Images"},
-{"id": "largest_object", "textContent": "største objekt"},
-{"id": "layer_delete", "title": "Slet Layer"},
-{"id": "layer_down", "title": "Flyt lag ned"},
-{"id": "layer_new", "title": "New Layer"},
-{"id": "layer_rename", "title": "Omdøb Layer"},
-{"id": "layer_up", "title": "Flyt Layer Up"},
-{"id": "layersLable", "textContent": "Lag:"},
-{"id": "line_x1", "title": "Skift linie&#39;s start x-koordinat"},
-{"id": "line_x2", "title": "Skift Line&#39;s slutter x-koordinat"},
-{"id": "line_y1", "title": "Skift linjens start y-koordinat"},
-{"id": "line_y2", "title": "Skift Line&#39;s slutter y-koordinat"},
-{"id": "linecap_butt", "title": "Linecap: Butt"},
-{"id": "linecap_round", "title": "Linecap: Round"},
-{"id": "linecap_square", "title": "Linecap: Square"},
-{"id": "linejoin_bevel", "title": "Linejoin: Bevel"},
-{"id": "linejoin_miter", "title": "Linejoin: Miter"},
-{"id": "linejoin_round", "title": "Linejoin: Round"},
-{"id": "main_icon", "title": "Main Menu"},
-{"id": "mode_connect", "title": "Connect two objects"},
-{"id": "page", "textContent": "side"},
-{"id": "palette", "title": "Klik for at ændre fyldfarve, shift-klik for at ændre stregfarve"},
-{"id": "path_node_x", "title": "Change node's x coordinate"},
-{"id": "path_node_y", "title": "Change node's y coordinate"},
-{"id": "rect_height_tool", "title": "Skift rektangel højde"},
-{"id": "rect_width_tool", "title": "Skift rektanglets bredde"},
-{"id": "relativeToLabel", "textContent": "i forhold til:"},
-{"id": "seg_type", "title": "Change Segment type"},
-{"id": "selLayerLabel", "textContent": "Move elements to:"},
-{"id": "selLayerNames", "title": "Move selected elements to a different layer"},
-{"id": "selectedPredefined", "textContent": "Vælg foruddefinerede:"},
-{"id": "selected_objects", "textContent": "valgte objekter"},
-{"id": "selected_x", "title": "Change X coordinate"},
-{"id": "selected_y", "title": "Change Y coordinate"},
-{"id": "smallest_object", "textContent": "mindste objekt"},
-{"id": "straight_segments", "textContent": "Straight"},
-{"id": "stroke_color", "title": "Skift stregfarve"},
-{"id": "stroke_style", "title": "Skift slagtilfælde Dash stil"},
-{"id": "stroke_width", "title": "Skift slagtilfælde bredde"},
-{"id": "svginfo_bg_note", "textContent": "Note: Background will not be saved with image."},
-{"id": "svginfo_change_background", "textContent": "Editor Background"},
-{"id": "svginfo_dim", "textContent": "Canvas Dimensions"},
-{"id": "svginfo_editor_prefs", "textContent": "Editor Preferences"},
-{"id": "svginfo_height", "textContent": "Højde:"},
-{"id": "svginfo_icons", "textContent": "Icon size"},
-{"id": "svginfo_image_props", "textContent": "Image Properties"},
-{"id": "svginfo_lang", "textContent": "Language"},
-{"id": "svginfo_title", "textContent": "Title"},
-{"id": "svginfo_width", "textContent": "Bredde:"},
-{"id": "text", "title": "Skift tekst indhold"},
-{"id": "toggle_stroke_tools", "title": "Show/hide more stroke tools"},
-{"id": "tool_add_subpath", "title": "Add sub-path"},
-{"id": "tool_alignbottom", "title": "Juster Bottom"},
-{"id": "tool_aligncenter", "title": "Centrer"},
-{"id": "tool_alignleft", "title": "Venstrejusteret"},
-{"id": "tool_alignmiddle", "title": "Juster Mellemøsten"},
-{"id": "tool_alignright", "title": "Højrejusteret"},
-{"id": "tool_aligntop", "title": "Juster Top"},
-{"id": "tool_angle", "title": "Skift rotationsvinkel"},
-{"id": "tool_blur", "title": "Change gaussian blur value"},
-{"id": "tool_bold", "title": "Fed tekst"},
-{"id": "tool_circle", "title": "Cirkel"},
-{"id": "tool_clear", "textContent": "Nyt billede"},
-{"id": "tool_clone", "title": "Klon Element"},
-{"id": "tool_clone_multi", "title": "Klon Elements"},
-{"id": "tool_delete", "title": "Slet Element"},
-{"id": "tool_delete_multi", "title": "Slet markerede elementer"},
-{"id": "tool_docprops", "textContent": "Document Properties"},
-{"id": "tool_docprops_cancel", "textContent": "Annuller"},
-{"id": "tool_docprops_save", "textContent": "Gemme"},
-{"id": "tool_ellipse", "title": "Ellipse"},
-{"id": "tool_export", "textContent": "Export as PNG"},
-{"id": "tool_eyedropper", "title": "Eye Dropper Tool"},
-{"id": "tool_fhellipse", "title": "Free-Hand Ellipse"},
-{"id": "tool_fhpath", "title": "Pencil Tool"},
-{"id": "tool_fhrect", "title": "Free-Hand Rektangel"},
-{"id": "tool_font_size", "title": "Skift skriftstørrelse"},
-{"id": "tool_group", "title": "Gruppe Elements"},
-{"id": "tool_image", "title": "Image Tool"},
-{"id": "tool_import", "textContent": "Import SVG"},
-{"id": "tool_italic", "title": "Italic Text"},
-{"id": "tool_line", "title": "Line Tool"},
-{"id": "tool_move_bottom", "title": "Flyt til bund"},
-{"id": "tool_move_top", "title": "Flyt til toppen"},
-{"id": "tool_node_clone", "title": "Clone Node"},
-{"id": "tool_node_delete", "title": "Delete Node"},
-{"id": "tool_node_link", "title": "Link Control Points"},
-{"id": "tool_opacity", "title": "Skift valgte element opacitet"},
-{"id": "tool_open", "textContent": "Open Image"},
-{"id": "tool_path", "title": "Path Tool"},
-{"id": "tool_rect", "title": "Rektangel"},
-{"id": "tool_redo", "title": "Redo"},
-{"id": "tool_reorient", "title": "Reorient path"},
-{"id": "tool_save", "textContent": "Gem billede"},
-{"id": "tool_select", "title": "Select Tool"},
-{"id": "tool_source", "title": "Edit Source"},
-{"id": "tool_source_cancel", "textContent": "Annuller"},
-{"id": "tool_source_save", "textContent": "Gemme"},
-{"id": "tool_square", "title": "Firkant"},
-{"id": "tool_text", "title": "Tekstværktøj"},
-{"id": "tool_topath", "title": "Convert to Path"},
-{"id": "tool_undo", "title": "Fortryd"},
-{"id": "tool_ungroup", "title": "Opdel Elements"},
-{"id": "tool_wireframe", "title": "Wireframe Mode"},
-{"id": "tool_zoom", "title": "Zoom Tool"},
-{"id": "url_notice", "title": "NOTE: This image cannot be embedded. It will depend on this path to be displayed"},
-{"id": "zoom_panel", "title": "Skift zoomniveau"},
-{"id": "sidepanel_handle", "textContent": "L a y e r s", "title": "Drag left/right to resize side panel"},
-{
- "js_strings": {
- "QerrorsRevertToSource": "There were parsing errors in your SVG source.\nRevert back to original SVG source?",
- "QignoreSourceChanges": "Ignore changes made to SVG source?",
- "QmoveElemsToLayer": "Move selected elements to layer '%s'?",
- "QwantToClear": "Do you want to clear the drawing?\nThis will also erase your undo history!",
- "cancel": "Cancel",
- "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.",
- "dupeLayerName": "There is already a layer named that!",
- "enterNewImgURL": "Enter the new image URL",
- "enterNewLayerName": "Please enter the new layer name",
- "enterUniqueLayerName": "Please enter a unique layer name",
- "exportNoBlur": "Blurred elements will appear as un-blurred",
- "exportNoDashArray": "Strokes will appear filled",
- "exportNoImage": "Image elements will not appear",
- "exportNoText": "Text may not appear as expected",
- "exportNoforeignObject": "foreignObject elements will not appear",
- "featNotSupported": "Feature not supported",
- "invalidAttrValGiven": "Invalid value given",
- "key_backspace": "backspace",
- "key_del": "delete",
- "key_down": "down",
- "key_up": "up",
- "layer": "Layer",
- "layerHasThatName": "Layer already has that name",
- "loadingImage": "Loading image, please wait...",
- "noContentToFitTo": "No content to fit to",
- "noteTheseIssues": "Also note the following issues: ",
- "ok": "OK",
- "pathCtrlPtTooltip": "Drag control point to adjust curve properties",
- "pathNodeTooltip": "Drag node to move it. Double-click node to change segment type",
- "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file."
- }
-}
-] \ No newline at end of file
diff --git a/files_svgedit/js/locale/lang.de.js b/files_svgedit/js/locale/lang.de.js
deleted file mode 100644
index 7bd961362..000000000
--- a/files_svgedit/js/locale/lang.de.js
+++ /dev/null
@@ -1,173 +0,0 @@
-[
-{"id": "align_relative_to", "title": "Relativ zu einem anderem Objekt ausrichten ..."},
-{"id": "bkgnd_color", "title": "Hintergrundfarbe ändern / Opazität"},
-{"id": "circle_cx", "title": "Kreiszentrum (cx) ändern"},
-{"id": "circle_cy", "title": "Kreiszentrum (cy) ändern"},
-{"id": "circle_r", "title": "Kreisradius (r) ändern"},
-{"id": "connector_no_arrow", "textContent": "Kein Pfeil"},
-{"id": "copyrightLabel", "textContent": "angetrieben durch"},
-{"id": "cornerRadiusLabel", "title": "Eckenradius des Rechtecks ändern"},
-{"id": "curve_segments", "textContent": "Kurve"},
-{"id": "ellipse_cx", "title": "Ellipsenzentrum (cx) ändern"},
-{"id": "ellipse_cy", "title": "Ellipsenzentrum (cy) ändern"},
-{"id": "ellipse_rx", "title": "Ellipsenradius (x) ändern"},
-{"id": "ellipse_ry", "title": "Ellipsenradius (y) ändern"},
-{"id": "fill_color", "title": "Füllfarbe ändern"},
-{"id": "fitToContent", "textContent": "An den Inhalt anpassen"},
-{"id": "fit_to_all", "textContent": "An gesamten Inhalt anpassen"},
-{"id": "fit_to_canvas", "textContent": "An die Zeichenfläche anpassen"},
-{"id": "fit_to_layer_content", "textContent": "An Inhalt der Ebene anpassen"},
-{"id": "fit_to_sel", "textContent": "An die Auswahl anpassen"},
-{"id": "font_family", "title": "Schriftart wählen"},
-{"id": "icon_large", "textContent": "Groß"},
-{"id": "icon_medium", "textContent": "Mittel"},
-{"id": "icon_small", "textContent": "Klein"},
-{"id": "icon_xlarge", "textContent": "Sehr Groß"},
-{"id": "image_height", "title": "Bildhöhe ändern"},
-{"id": "image_opt_embed", "textContent": "Daten einbetten (lokale Dateien)"},
-{"id": "image_opt_ref", "textContent": "Benutze die Datei Referenz"},
-{"id": "image_url", "title": "URL ändern"},
-{"id": "image_width", "title": "Bildbreite ändern"},
-{"id": "includedImages", "textContent": "Eingefügte Bilder"},
-{"id": "largest_object", "textContent": "größtes Objekt"},
-{"id": "layer_delete", "title": "Ebene löschen"},
-{"id": "layer_down", "title": "Ebene nach unten verschieben"},
-{"id": "layer_new", "title": "Neue Ebene"},
-{"id": "layer_rename", "title": "Ebene umbenennen"},
-{"id": "layer_up", "title": "Ebene nach oben verschieben"},
-{"id": "layersLabel", "textContent": "Ebenen:"},
-{"id": "line_x1", "title": "X-Koordinate des Linienanfangs ändern"},
-{"id": "line_x2", "title": "X-Koordinate des Linienendes ändern"},
-{"id": "line_y1", "title": "Y-Koordinate des Linienanfangs ändern"},
-{"id": "line_y2", "title": "Y-Koordinate des Linienendes ändern"},
-{"id": "page", "textContent": "Seite"},
-{"id": "linecap_butt", "title": "Form der Linienendung: Stumpf"},
-{"id": "linecap_round", "title": "Form der Linienendung: Rund"},
-{"id": "linecap_square", "title": "Form der Linienendung: Rechteckig"},
-{"id": "linejoin_bevel", "title": "Zusammentreffen von zwei Linien: abgeschrägte Kante"},
-{"id": "linejoin_miter", "title": "Zusammentreffen von zwei Linien: Gehrung"},
-{"id": "linejoin_round", "title": "Zusammentreffen von zwei Linien: Rund"},
-{"id": "main_icon", "title": "Hauptmenü"},
-{"id": "mode_connect", "title": "Verbinde zwei Objekte"},
-{"id": "palette", "title": "Klick zum Ändern der Füllfarbe, Shift-Klick zum Ändern der Linienfarbe"},
-{"id": "path_node_x", "title": "Ändere die X Koordinate des Knoten"},
-{"id": "path_node_y", "title": "Ändere die Y Koordinate des Knoten"},
-{"id": "rect_height_tool", "title": "Höhe des Rechtecks ändern"},
-{"id": "rect_width_tool", "title": "Breite des Rechtecks ändern"},
-{"id": "relativeToLabel", "textContent": "im Vergleich zu:"},
-{"id": "seg_type", "title": "Ändere den Typ des Segments"},
-{"id": "selLayerLabel", "textContent": "Verschiebe ausgewählte Objekte:"},
-{"id": "selLayerNames", "title": "Verschiebe ausgewählte Objekte auf eine andere Ebene"},
-{"id": "selectedPredefined", "textContent": "Auswahl einer vordefinierten:"},
-{"id": "selected_objects", "textContent": "gewählte Objekte"},
-{"id": "selected_x", "title": "Ändere die X Koordinate"},
-{"id": "selected_y", "title": "Ändere die Y Koordinate"},
-{"id": "smallest_object", "textContent": "kleinstes Objekt"},
-{"id": "straight_segments", "textContent": "Gerade"},
-{"id": "stroke_color", "title": "Linienfarbe ändern"},
-{"id": "stroke_style", "title": "Linienstil ändern"},
-{"id": "stroke_width", "title": "Linienbreite ändern"},
-{"id": "svginfo_bg_note", "textContent": "Anmerkung: Der Hintergrund wird mit der Speicherung des Bildes nicht gespeichert."},
-{"id": "svginfo_change_background", "textContent": "Editor Hintergrund"},
-{"id": "svginfo_dim", "textContent": "Dimension der Zeichenfläche"},
-{"id": "svginfo_editor_prefs", "textContent": "Editor Einstellungen"},
-{"id": "svginfo_height", "textContent": "Höhe:"},
-{"id": "svginfo_icons", "textContent": "Symbol Abmessungen"},
-{"id": "svginfo_image_props", "textContent": "Bildeigenschaften"},
-{"id": "svginfo_lang", "textContent": "Sprache"},
-{"id": "svginfo_title", "textContent": "Titel"},
-{"id": "svginfo_width", "textContent": "Breite:"},
-{"id": "text", "title": "Textinhalt erstellen und bearbeiten"},
-{"id": "toggle_stroke_tools", "title": "Zeige/Verberge weitere Linien Werkzeuge"},
-{"id": "tool_add_subpath", "title": "Teilpfad hinzufügen"},
-{"id": "tool_alignbottom", "title": "Unten ausrichten"},
-{"id": "tool_aligncenter", "title": "Zentriert ausrichten"},
-{"id": "tool_alignleft", "title": "Linksbündig ausrichten"},
-{"id": "tool_alignmiddle", "title": "In der Mitte ausrichten"},
-{"id": "tool_alignright", "title": "Rechtsbündig ausrichten"},
-{"id": "tool_aligntop", "title": "Oben ausrichten"},
-{"id": "tool_angle", "title": "Drehwinkel ändern"},
-{"id": "tool_blur", "title": "Ändere Gaußschen Weichzeichner Wert"},
-{"id": "tool_bold", "title": "Fetter Text"},
-{"id": "tool_circle", "title": "Kreis"},
-{"id": "tool_clear", "textContent": "Neues Bild"},
-{"id": "tool_clone", "title": "Objekt klonen"},
-{"id": "tool_clone_multi", "title": "Ausgewählte Objekte klonen"},
-{"id": "tool_delete", "title": "Objekt löschen"},
-{"id": "tool_delete_multi", "title": "Ausgewählte Objekte löschen"},
-{"id": "tool_docprops", "textContent": "Dokument-Eigenschaften"},
-{"id": "tool_docprops_cancel", "textContent": "Abbrechen"},
-{"id": "tool_docprops_save", "textContent": "OK"},
-{"id": "tool_ellipse", "title": "Ellipse"},
-{"id": "tool_export", "textContent": "Als PNG exportieren"},
-{"id": "tool_eyedropper", "title": "Ableger"},
-{"id": "tool_fhellipse", "title": "Freihand Ellipse"},
-{"id": "tool_fhpath", "title": "Freihandlinien zeichnen"},
-{"id": "tool_fhrect", "title": "Freihand Rechteck"},
-{"id": "tool_font_size", "title": "Schriftgröße einstellen"},
-{"id": "tool_group", "title": "Gruppieren"},
-{"id": "tool_image", "title": "Bild einfügen"},
-{"id": "tool_import", "textContent": "Importiere SVG"},
-{"id": "tool_italic", "title": "Kursiver Text"},
-{"id": "tool_line", "title": "Linien zeichnen"},
-{"id": "tool_move_bottom", "title": "Die gewählten Objekte nach ganz unten schieben"},
-{"id": "tool_move_top", "title": "Die gewählten Objekte nach ganz oben anheben"},
-{"id": "tool_node_clone", "title": "Klone den Knoten"},
-{"id": "tool_node_delete", "title": "Lösche den Knoten"},
-{"id": "tool_node_link", "title": "Gekoppelte oder separate Kontroll Punkte für die Bearbeitung des Pfades"},
-{"id": "tool_opacity", "title": "Opazität des ausgewählten Objekts ändern"},
-{"id": "tool_open", "textContent": "Bild öffnen"},
-{"id": "tool_path", "title": "Pfad zeichnen"},
-{"id": "tool_rect", "title": "Rechteck"},
-{"id": "tool_redo", "title": "Wiederherstellen"},
-{"id": "tool_reorient", "title": "Neuausrichtung des Pfades"},
-{"id": "tool_save", "textContent": "Bild speichern"},
-{"id": "tool_select", "title": "Objekte auswählen und verändern"},
-{"id": "tool_source", "title": "Quellecode bearbeiten"},
-{"id": "tool_source_cancel", "textContent": "Abbrechen"},
-{"id": "tool_source_save", "textContent": "Änderungen akzeptieren"},
-{"id": "tool_square", "title": "Quadrat"},
-{"id": "tool_text", "title": "Text erstellen und bearbeiten"},
-{"id": "tool_topath", "title": "Gewähltes Objekt in einen Pfad konvertieren"},
-{"id": "tool_undo", "title": "Rückgängig"},
-{"id": "tool_ungroup", "title": "Gruppierung aufheben"},
-{"id": "tool_wireframe", "title": "Drahtmodell Modus"},
-{"id": "tool_zoom", "title": "Zoomfaktor vergrößern oder verringern"},
-{"id": "url_notice", "title": "Hinweis: Dieses Bild kann nicht eingebettet werden. Eine Anzeige hängt von diesem Pfad ab."},
-{"id": "zoom_panel", "title": "vergrößern"},
-{"id": "sidepanel_handle", "textContent": "E b e n e n", "title": "Ziehe links/rechts um die Seitenleiste anzupassen"},
-{
- "js_strings": {
- "QerrorsRevertToSource": "Die Syntaxanalyse Ihrer SVG Quelle enthält Fehler.\nOriginal SVG wiederherstellen?",
- "QignoreSourceChanges": "Soll die Änderung am SVG Quelltext ignoriert werden?",
- "QmoveElemsToLayer": "Verschiebe ausgewählte Objekte in die Ebene '%s'?",
- "QwantToClear": "Möchten Sie die Zeichnung löschen?\nDadurch wird auch die Rückgängig Funktion zurückgesetzt!",
- "cancel": "Abbrechen",
- "defsFailOnSave": "Hinweis: Aufgrund eines Fehlers in Ihrem Browser, kann dieses Bild falsch angezeigt werden (fehlende Gradienten oder Elemente). Es wird jedoch richtig angezeigt sobald es tatsächlich gespeichert wird.",
- "dupeLayerName": "Eine Ebene hat bereits diesen Namen!",
- "enterNewImgURL": "Geben Sie die URL für das neue Bild an",
- "enterNewLayerName": "Geben Sie bitte einen neuen Namen für die Ebene ein",
- "enterUniqueLayerName": "Verwenden Sie einen eindeutigen Namen für die Ebene",
- "exportNoBlur": "Verschwommene Elemente werden als un-verschwommen erscheinen.",
- "exportNoDashArray": "Linien werden ausgefüllt angezeigt.",
- "exportNoImage": "Image-Elemente werden nicht angezeigt.",
- "exportNoText": "Text erscheint möglicherweise nicht wie erwartet.",
- "exportNoforeignObject": "Fremde Objekt Elemente werden nicht angezeigt.",
- "featNotSupported": "Diese Eigenschaft wird nicht unterstützt",
- "invalidAttrValGiven": "Fehlerhafter Wert",
- "key_backspace": "Rücktaste",
- "key_del": "Löschen",
- "key_down": "nach unten",
- "key_up": "nach oben",
- "layer": "Ebene",
- "layerHasThatName": "Eine Ebene hat bereits diesen Namen",
- "loadingImage": "Bild wird geladen, bitte warten ...",
- "noContentToFitTo": "Kein Inhalt anzupassen",
- "noteTheseIssues": "Beachten Sie außerdem die folgenden Probleme: ",
- "ok": "OK",
- "pathCtrlPtTooltip": "Ziehe den Kontroll Punkt um die Kurven Eigenschaften anzupassen",
- "pathNodeTooltip": "Ziehe den Knoten zum Verschieben. Doppel Klick um den Segment Typ anzupassen",
- "saveFromBrowser": "Wählen Sie \"Speichern unter ...\" in Ihrem Browser, um das Bild als Datei %s zu speichern."
- }
-}
-] \ No newline at end of file
diff --git a/files_svgedit/js/locale/lang.el.js b/files_svgedit/js/locale/lang.el.js
deleted file mode 100644
index 259408a30..000000000
--- a/files_svgedit/js/locale/lang.el.js
+++ /dev/null
@@ -1,173 +0,0 @@
-[
-{"id": "align_relative_to", "title": "Στοίχιση σε σχέση με ..."},
-{"id": "bkgnd_color", "title": "Αλλαγή χρώματος φόντου / αδιαφάνεια"},
-{"id": "circle_cx", "title": "Cx Αλλαγή κύκλου συντονίζουν"},
-{"id": "circle_cy", "title": "Αλλαγή κύκλου cy συντονίζουν"},
-{"id": "circle_r", "title": "Αλλαγή ακτίνα κύκλου"},
-{"id": "connector_no_arrow", "textContent": "No arrow"},
-{"id": "copyrightLabel", "textContent": "Powered by"},
-{"id": "cornerRadiusLabel", "title": "Αλλαγή ορθογώνιο Corner Radius"},
-{"id": "curve_segments", "textContent": "Curve"},
-{"id": "ellipse_cx", "title": "Αλλαγή ellipse του CX συντονίζουν"},
-{"id": "ellipse_cy", "title": "Αλλαγή ellipse του cy συντονίζουν"},
-{"id": "ellipse_rx", "title": "X ακτίνα Αλλαγή ellipse του"},
-{"id": "ellipse_ry", "title": "Y ακτίνα Αλλαγή ellipse του"},
-{"id": "fill_color", "title": "Αλλαγή συμπληρώστε χρώμα"},
-{"id": "fitToContent", "textContent": "Fit to Content"},
-{"id": "fit_to_all", "textContent": "Ταιριάζει σε όλο το περιεχόμενο"},
-{"id": "fit_to_canvas", "textContent": "Προσαρμογή στο μουσαμά"},
-{"id": "fit_to_layer_content", "textContent": "Προσαρμογή στο περιεχόμενο στρώμα"},
-{"id": "fit_to_sel", "textContent": "Fit to επιλογή"},
-{"id": "font_family", "title": "Αλλαγή γραμματοσειράς Οικογένεια"},
-{"id": "icon_large", "textContent": "Large"},
-{"id": "icon_medium", "textContent": "Medium"},
-{"id": "icon_small", "textContent": "Small"},
-{"id": "icon_xlarge", "textContent": "Extra Large"},
-{"id": "image_height", "title": "Αλλαγή ύψος εικόνας"},
-{"id": "image_opt_embed", "textContent": "Embed data (local files)"},
-{"id": "image_opt_ref", "textContent": "Use file reference"},
-{"id": "image_url", "title": "Αλλαγή URL"},
-{"id": "image_width", "title": "Αλλαγή πλάτος εικόνας"},
-{"id": "includedImages", "textContent": "Included Images"},
-{"id": "largest_object", "textContent": "μεγαλύτερο αντικείμενο"},
-{"id": "layer_delete", "title": "Διαγραφήστρώματος"},
-{"id": "layer_down", "title": "Μετακίνηση Layer Down"},
-{"id": "layer_new", "title": "Νέο Layer"},
-{"id": "layer_rename", "title": "Μετονομασία Layer"},
-{"id": "layer_up", "title": "Μετακίνηση Layer Up"},
-{"id": "layersLable", "textContent": "Στρώματα:"},
-{"id": "line_x1", "title": "Αλλαγή γραμμής εκκίνησης x συντονίζουν"},
-{"id": "line_x2", "title": "Αλλαγή γραμμής λήγει x συντονίζουν"},
-{"id": "line_y1", "title": "Αλλαγή γραμμής εκκίνησης y συντονίζουν"},
-{"id": "line_y2", "title": "Αλλαγή γραμμής λήγει y συντονίζουν"},
-{"id": "linecap_butt", "title": "Linecap: Butt"},
-{"id": "linecap_round", "title": "Linecap: Round"},
-{"id": "linecap_square", "title": "Linecap: Square"},
-{"id": "linejoin_bevel", "title": "Linejoin: Bevel"},
-{"id": "linejoin_miter", "title": "Linejoin: Miter"},
-{"id": "linejoin_round", "title": "Linejoin: Round"},
-{"id": "main_icon", "title": "Main Menu"},
-{"id": "mode_connect", "title": "Connect two objects"},
-{"id": "page", "textContent": "σελίδα"},
-{"id": "palette", "title": "Κάντε κλικ για να συμπληρώσετε την αλλαγή χρώματος, στροφή κλικ για να αλλάξετε το χρώμα εγκεφαλικό"},
-{"id": "path_node_x", "title": "Change node's x coordinate"},
-{"id": "path_node_y", "title": "Change node's y coordinate"},
-{"id": "rect_height_tool", "title": "Αλλαγή ύψος ορθογωνίου"},
-{"id": "rect_width_tool", "title": "Αλλαγή πλάτους ορθογώνιο"},
-{"id": "relativeToLabel", "textContent": "σε σχέση με:"},
-{"id": "seg_type", "title": "Change Segment type"},
-{"id": "selLayerLabel", "textContent": "Move elements to:"},
-{"id": "selLayerNames", "title": "Move selected elements to a different layer"},
-{"id": "selectedPredefined", "textContent": "Επιλογή προκαθορισμένων:"},
-{"id": "selected_objects", "textContent": "εκλέγεται αντικείμενα"},
-{"id": "selected_x", "title": "Change X coordinate"},
-{"id": "selected_y", "title": "Change Y coordinate"},
-{"id": "smallest_object", "textContent": "μικρότερο αντικείμενο"},
-{"id": "straight_segments", "textContent": "Straight"},
-{"id": "stroke_color", "title": "Αλλαγή χρώματος εγκεφαλικό"},
-{"id": "stroke_style", "title": "Αλλαγή στυλ παύλα εγκεφαλικό"},
-{"id": "stroke_width", "title": "Αλλαγή πλάτος γραμμής"},
-{"id": "svginfo_bg_note", "textContent": "Note: Background will not be saved with image."},
-{"id": "svginfo_change_background", "textContent": "Editor Background"},
-{"id": "svginfo_dim", "textContent": "Canvas Dimensions"},
-{"id": "svginfo_editor_prefs", "textContent": "Editor Preferences"},
-{"id": "svginfo_height", "textContent": "Ύψος:"},
-{"id": "svginfo_icons", "textContent": "Icon size"},
-{"id": "svginfo_image_props", "textContent": "Image Properties"},
-{"id": "svginfo_lang", "textContent": "Language"},
-{"id": "svginfo_title", "textContent": "Title"},
-{"id": "svginfo_width", "textContent": "Πλάτος:"},
-{"id": "text", "title": "Αλλαγή περιεχόμενο κειμένου"},
-{"id": "toggle_stroke_tools", "title": "Show/hide more stroke tools"},
-{"id": "tool_add_subpath", "title": "Add sub-path"},
-{"id": "tool_alignbottom", "title": "Στοίχισηκάτω"},
-{"id": "tool_aligncenter", "title": "Στοίχισηστοκέντρο"},
-{"id": "tool_alignleft", "title": "Στοίχισηαριστερά"},
-{"id": "tool_alignmiddle", "title": "Ευθυγράμμιση Μέση"},
-{"id": "tool_alignright", "title": "Στοίχισηδεξιά"},
-{"id": "tool_aligntop", "title": "Στοίχισηπάνω"},
-{"id": "tool_angle", "title": "Αλλαγή γωνία περιστροφής"},
-{"id": "tool_blur", "title": "Change gaussian blur value"},
-{"id": "tool_bold", "title": "Bold Text"},
-{"id": "tool_circle", "title": "Κύκλος"},
-{"id": "tool_clear", "textContent": "Νέα εικόνα"},
-{"id": "tool_clone", "title": "Clone Element"},
-{"id": "tool_clone_multi", "title": "Clone Στοιχεία"},
-{"id": "tool_delete", "title": "Διαγραφή Στοιχείων [Delete/Backspace]"},
-{"id": "tool_delete_multi", "title": "Διαγραφή επιλεγμένων στοιχείων"},
-{"id": "tool_docprops", "textContent": "Ιδιότητες εγγράφου"},
-{"id": "tool_docprops_cancel", "textContent": "Άκυρο"},
-{"id": "tool_docprops_save", "textContent": "Αποθηκεύω"},
-{"id": "tool_ellipse", "title": "Ellipse"},
-{"id": "tool_export", "textContent": "Export as PNG"},
-{"id": "tool_eyedropper", "title": "Eye Dropper Tool"},
-{"id": "tool_fhellipse", "title": "Δωρεάν-Hand Ellipse"},
-{"id": "tool_fhpath", "title": "Εργαλείομολυβιού"},
-{"id": "tool_fhrect", "title": "Δωρεάν-Hand ορθογώνιο"},
-{"id": "tool_font_size", "title": "Αλλαγή μεγέθους γραμματοσειράς"},
-{"id": "tool_group", "title": "Ομάδα Στοιχεία"},
-{"id": "tool_image", "title": "Image Tool"},
-{"id": "tool_import", "textContent": "Import SVG"},
-{"id": "tool_italic", "title": "Πλάγιους"},
-{"id": "tool_line", "title": "Line Tool"},
-{"id": "tool_move_bottom", "title": "Μετακίνηση προς τα κάτω"},
-{"id": "tool_move_top", "title": "Μετακίνηση στην αρχή"},
-{"id": "tool_node_clone", "title": "Clone Node"},
-{"id": "tool_node_delete", "title": "Delete Node"},
-{"id": "tool_node_link", "title": "Link Control Points"},
-{"id": "tool_opacity", "title": "Αλλαγή αδιαφάνεια επιλεγμένο σημείο"},
-{"id": "tool_open", "textContent": "Άνοιγμα εικόνας"},
-{"id": "tool_path", "title": "Path Tool"},
-{"id": "tool_rect", "title": "Ορθογώνιο"},
-{"id": "tool_redo", "title": "Redo"},
-{"id": "tool_reorient", "title": "Reorient path"},
-{"id": "tool_save", "textContent": "Αποθήκευση εικόνας"},
-{"id": "tool_select", "title": "Select Tool"},
-{"id": "tool_source", "title": "Επεξεργασία Πηγή"},
-{"id": "tool_source_cancel", "textContent": "Άκυρο"},
-{"id": "tool_source_save", "textContent": "Αποθηκεύω"},
-{"id": "tool_square", "title": "Τετράγωνο"},
-{"id": "tool_text", "title": "Κείμενο Tool"},
-{"id": "tool_topath", "title": "Convert to Path"},
-{"id": "tool_undo", "title": "Αναίρεση"},
-{"id": "tool_ungroup", "title": "Κατάργηση ομαδοποίησης Στοιχεία"},
-{"id": "tool_wireframe", "title": "Wireframe Mode"},
-{"id": "tool_zoom", "title": "Zoom Tool"},
-{"id": "url_notice", "title": "NOTE: This image cannot be embedded. It will depend on this path to be displayed"},
-{"id": "zoom_panel", "title": "Αλλαγή επίπεδο μεγέθυνσης"},
-{"id": "sidepanel_handle", "textContent": "L a y e r s", "title": "Drag left/right to resize side panel"},
-{
- "js_strings": {
- "QerrorsRevertToSource": "There were parsing errors in your SVG source.\nRevert back to original SVG source?",
- "QignoreSourceChanges": "Ignore changes made to SVG source?",
- "QmoveElemsToLayer": "Move selected elements to layer '%s'?",
- "QwantToClear": "Do you want to clear the drawing?\nThis will also erase your undo history!",
- "cancel": "Cancel",
- "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.",
- "dupeLayerName": "There is already a layer named that!",
- "enterNewImgURL": "Enter the new image URL",
- "enterNewLayerName": "Please enter the new layer name",
- "enterUniqueLayerName": "Please enter a unique layer name",
- "exportNoBlur": "Blurred elements will appear as un-blurred",
- "exportNoDashArray": "Strokes will appear filled",
- "exportNoImage": "Image elements will not appear",
- "exportNoText": "Text may not appear as expected",
- "exportNoforeignObject": "foreignObject elements will not appear",
- "featNotSupported": "Feature not supported",
- "invalidAttrValGiven": "Invalid value given",
- "key_backspace": "backspace",
- "key_del": "delete",
- "key_down": "down",
- "key_up": "up",
- "layer": "Layer",
- "layerHasThatName": "Layer already has that name",
- "loadingImage": "Loading image, please wait...",
- "noContentToFitTo": "No content to fit to",
- "noteTheseIssues": "Also note the following issues: ",
- "ok": "OK",
- "pathCtrlPtTooltip": "Drag control point to adjust curve properties",
- "pathNodeTooltip": "Drag node to move it. Double-click node to change segment type",
- "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file."
- }
-}
-] \ No newline at end of file
diff --git a/files_svgedit/js/locale/lang.en.js b/files_svgedit/js/locale/lang.en.js
deleted file mode 100644
index d6451de18..000000000
--- a/files_svgedit/js/locale/lang.en.js
+++ /dev/null
@@ -1,176 +0,0 @@
-[
-{"id": "align_relative_to", "title": "Align relative to ..."},
-{"id": "bkgnd_color", "title": "Change background color/opacity"},
-{"id": "circle_cx", "title": "Change circle's cx coordinate"},
-{"id": "circle_cy", "title": "Change circle's cy coordinate"},
-{"id": "circle_r", "title": "Change circle's radius"},
-{"id": "connector_no_arrow", "textContent": "No arrow"},
-{"id": "copyrightLabel", "textContent": "Powered by"},
-{"id": "cornerRadiusLabel", "title": "Change Rectangle Corner Radius"},
-{"id": "curve_segments", "textContent": "Curve"},
-{"id": "ellipse_cx", "title": "Change ellipse's cx coordinate"},
-{"id": "ellipse_cy", "title": "Change ellipse's cy coordinate"},
-{"id": "ellipse_rx", "title": "Change ellipse's x radius"},
-{"id": "ellipse_ry", "title": "Change ellipse's y radius"},
-{"id": "fill_color", "title": "Change fill color"},
-{"id": "fitToContent", "textContent": "Fit to Content"},
-{"id": "fit_to_all", "textContent": "Fit to all content"},
-{"id": "fit_to_canvas", "textContent": "Fit to canvas"},
-{"id": "fit_to_layer_content", "textContent": "Fit to layer content"},
-{"id": "fit_to_sel", "textContent": "Fit to selection"},
-{"id": "font_family", "title": "Change Font Family"},
-{"id": "icon_large", "textContent": "Large"},
-{"id": "icon_medium", "textContent": "Medium"},
-{"id": "icon_small", "textContent": "Small"},
-{"id": "icon_xlarge", "textContent": "Extra Large"},
-{"id": "idLabel", "title": "Identify the element"},
-{"id": "image_height", "title": "Change image height"},
-{"id": "image_opt_embed", "textContent": "Embed data (local files)"},
-{"id": "image_opt_ref", "textContent": "Use file reference"},
-{"id": "image_url", "title": "Change URL"},
-{"id": "image_width", "title": "Change image width"},
-{"id": "includedImages", "textContent": "Included Images"},
-{"id": "largest_object", "textContent": "largest object"},
-{"id": "layer_delete", "title": "Delete Layer"},
-{"id": "layer_down", "title": "Move Layer Down"},
-{"id": "layer_new", "title": "New Layer"},
-{"id": "layer_rename", "title": "Rename Layer"},
-{"id": "layer_up", "title": "Move Layer Up"},
-{"id": "layersLabel", "textContent": "Layers:"},
-{"id": "line_x1", "title": "Change line's starting x coordinate"},
-{"id": "line_x2", "title": "Change line's ending x coordinate"},
-{"id": "line_y1", "title": "Change line's starting y coordinate"},
-{"id": "line_y2", "title": "Change line's ending y coordinate"},
-{"id": "linecap_butt", "title": "Linecap: Butt"},
-{"id": "linecap_round", "title": "Linecap: Round"},
-{"id": "linecap_square", "title": "Linecap: Square"},
-{"id": "linejoin_bevel", "title": "Linejoin: Bevel"},
-{"id": "linejoin_miter", "title": "Linejoin: Miter"},
-{"id": "linejoin_round", "title": "Linejoin: Round"},
-{"id": "main_icon", "title": "Main Menu"},
-{"id": "mode_connect", "title": "Connect two objects"},
-{"id": "page", "textContent": "page"},
-{"id": "palette", "title": "Click to change fill color, shift-click to change stroke color"},
-{"id": "path_node_x", "title": "Change node's x coordinate"},
-{"id": "path_node_y", "title": "Change node's y coordinate"},
-{"id": "rect_height_tool", "title": "Change rectangle height"},
-{"id": "rect_width_tool", "title": "Change rectangle width"},
-{"id": "relativeToLabel", "textContent": "relative to:"},
-{"id": "seg_type", "title": "Change Segment type"},
-{"id": "selLayerLabel", "textContent": "Move elements to:"},
-{"id": "selLayerNames", "title": "Move selected elements to a different layer"},
-{"id": "selectedPredefined", "textContent": "Select predefined:"},
-{"id": "selected_objects", "textContent": "selected objects"},
-{"id": "selected_x", "title": "Change X coordinate"},
-{"id": "selected_y", "title": "Change Y coordinate"},
-{"id": "smallest_object", "textContent": "smallest object"},
-{"id": "straight_segments", "textContent": "Straight"},
-{"id": "stroke_color", "title": "Change stroke color"},
-{"id": "stroke_style", "title": "Change stroke dash style"},
-{"id": "stroke_width", "title": "Change stroke width by 1, shift-click to change by 0.1"},
-{"id": "svginfo_bg_note", "textContent": "Note: Background will not be saved with image."},
-{"id": "svginfo_change_background", "textContent": "Editor Background"},
-{"id": "svginfo_dim", "textContent": "Canvas Dimensions"},
-{"id": "svginfo_editor_prefs", "textContent": "Editor Preferences"},
-{"id": "svginfo_height", "textContent": "Height:"},
-{"id": "svginfo_icons", "textContent": "Icon size"},
-{"id": "svginfo_image_props", "textContent": "Image Properties"},
-{"id": "svginfo_lang", "textContent": "Language"},
-{"id": "svginfo_title", "textContent": "Title"},
-{"id": "svginfo_width", "textContent": "Width:"},
-{"id": "text", "title": "Change text contents"},
-{"id": "toggle_stroke_tools", "title": "Show/hide more stroke tools"},
-{"id": "tool_add_subpath", "title": "Add sub-path"},
-{"id": "tool_alignbottom", "title": "Align Bottom"},
-{"id": "tool_aligncenter", "title": "Align Center"},
-{"id": "tool_alignleft", "title": "Align Left"},
-{"id": "tool_alignmiddle", "title": "Align Middle"},
-{"id": "tool_alignright", "title": "Align Right"},
-{"id": "tool_aligntop", "title": "Align Top"},
-{"id": "tool_angle", "title": "Change rotation angle"},
-{"id": "tool_blur", "title": "Change gaussian blur value"},
-{"id": "tool_bold", "title": "Bold Text"},
-{"id": "tool_circle", "title": "Circle"},
-{"id": "tool_clear", "textContent": "New Image"},
-{"id": "tool_clone", "title": "Clone Element"},
-{"id": "tool_clone_multi", "title": "Clone Elements"},
-{"id": "tool_delete", "title": "Delete Element"},
-{"id": "tool_delete_multi", "title": "Delete Selected Elements"},
-{"id": "tool_docprops", "textContent": "Document Properties"},
-{"id": "tool_docprops_cancel", "textContent": "Cancel"},
-{"id": "tool_docprops_save", "textContent": "OK"},
-{"id": "tool_ellipse", "title": "Ellipse"},
-{"id": "tool_export", "textContent": "Export as PNG"},
-{"id": "tool_eyedropper", "title": "Eye Dropper Tool"},
-{"id": "tool_fhellipse", "title": "Free-Hand Ellipse"},
-{"id": "tool_fhpath", "title": "Pencil Tool"},
-{"id": "tool_fhrect", "title": "Free-Hand Rectangle"},
-{"id": "tool_font_size", "title": "Change Font Size"},
-{"id": "tool_group", "title": "Group Elements"},
-{"id": "tool_image", "title": "Image Tool"},
-{"id": "tool_import", "textContent": "Import SVG"},
-{"id": "tool_italic", "title": "Italic Text"},
-{"id": "tool_line", "title": "Line Tool"},
-{"id": "tool_move_bottom", "title": "Move to Bottom"},
-{"id": "tool_move_top", "title": "Move to Top"},
-{"id": "tool_node_clone", "title": "Clone Node"},
-{"id": "tool_node_delete", "title": "Delete Node"},
-{"id": "tool_node_link", "title": "Link Control Points"},
-{"id": "tool_opacity", "title": "Change selected item opacity"},
-{"id": "tool_open", "textContent": "Open Image"},
-{"id": "tool_openclose_path", "title": "Open/close sub-path"},
-{"id": "tool_path", "title": "Path Tool"},
-{"id": "tool_position", "title": "Align Element to Page"},
-{"id": "tool_rect", "title": "Rectangle"},
-{"id": "tool_redo", "title": "Redo"},
-{"id": "tool_reorient", "title": "Reorient path"},
-{"id": "tool_save", "textContent": "Save Image"},
-{"id": "tool_select", "title": "Select Tool"},
-{"id": "tool_source", "title": "Edit Source"},
-{"id": "tool_source_cancel", "textContent": "Cancel"},
-{"id": "tool_source_save", "textContent": "Apply Changes"},
-{"id": "tool_square", "title": "Square"},
-{"id": "tool_text", "title": "Text Tool"},
-{"id": "tool_topath", "title": "Convert to Path"},
-{"id": "tool_undo", "title": "Undo"},
-{"id": "tool_ungroup", "title": "Ungroup Elements"},
-{"id": "tool_wireframe", "title": "Wireframe Mode"},
-{"id": "tool_zoom", "title": "Zoom Tool"},
-{"id": "url_notice", "title": "NOTE: This image cannot be embedded. It will depend on this path to be displayed"},
-{"id": "zoom_panel", "title": "Change zoom level"},
-{"id": "sidepanel_handle", "textContent": "L a y e r s", "title": "Drag left/right to resize side panel"},
-{
- "js_strings": {
- "QerrorsRevertToSource": "There were parsing errors in your SVG source.\nRevert back to original SVG source?",
- "QignoreSourceChanges": "Ignore changes made to SVG source?",
- "QmoveElemsToLayer": "Move selected elements to layer '%s'?",
- "QwantToClear": "Do you want to clear the drawing?\nThis will also erase your undo history!",
- "cancel": "Cancel",
- "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.",
- "dupeLayerName": "There is already a layer named that!",
- "enterNewImgURL": "Enter the new image URL",
- "enterNewLayerName": "Please enter the new layer name",
- "enterUniqueLayerName": "Please enter a unique layer name",
- "exportNoBlur": "Blurred elements will appear as un-blurred",
- "exportNoDashArray": "Strokes will appear filled",
- "exportNoImage": "Image elements will not appear",
- "exportNoText": "Text may not appear as expected",
- "exportNoforeignObject": "foreignObject elements will not appear",
- "featNotSupported": "Feature not supported",
- "invalidAttrValGiven": "Invalid value given",
- "key_backspace": "backspace",
- "key_del": "delete",
- "key_down": "down",
- "key_up": "up",
- "layer": "Layer",
- "layerHasThatName": "Layer already has that name",
- "loadingImage": "Loading image, please wait...",
- "noContentToFitTo": "No content to fit to",
- "noteTheseIssues": "Also note the following issues: ",
- "ok": "OK",
- "pathCtrlPtTooltip": "Drag control point to adjust curve properties",
- "pathNodeTooltip": "Drag node to move it. Double-click node to change segment type",
- "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file."
- }
-}
-] \ No newline at end of file
diff --git a/files_svgedit/js/locale/lang.es.js b/files_svgedit/js/locale/lang.es.js
deleted file mode 100644
index 29a66bd81..000000000
--- a/files_svgedit/js/locale/lang.es.js
+++ /dev/null
@@ -1,174 +0,0 @@
-[
-{"id": "align_relative_to", "title": "Alinear con respecto a ..."},
-{"id": "bkgnd_color", "title": "Cambiar color de fondo / opacidad"},
-{"id": "circle_cx", "title": "Cambiar la posición horizonral CX del círculo"},
-{"id": "circle_cy", "title": "Cambiar la posición vertical CY del círculo"},
-{"id": "circle_r", "title": "Cambiar el radio del círculo"},
-{"id": "connector_no_arrow", "textContent": "Sin flecha"},
-{"id": "copyrightLabel", "textContent": "Powered by"},
-{"id": "cornerRadiusLabel", "title": "Cambiar el radio de las esquinas del rectángulo"},
-{"id": "curve_segments", "textContent": "Curva"},
-{"id": "ellipse_cx", "title": "Cambiar la posición horizontal CX de la elipse"},
-{"id": "ellipse_cy", "title": "Cambiar la posición vertical CY de la elipse"},
-{"id": "ellipse_rx", "title": "Cambiar el radio horizontal X de la elipse"},
-{"id": "ellipse_ry", "title": "Cambiar el radio vertical Y de la elipse"},
-{"id": "fill_color", "title": "Cambiar el color de relleno"},
-{"id": "fitToContent", "textContent": "Ajustar al contenido"},
-{"id": "fit_to_all", "textContent": "Ajustar a todo el contenido"},
-{"id": "fit_to_canvas", "textContent": "Ajustar al lienzo"},
-{"id": "fit_to_layer_content", "textContent": "Ajustar al contenido de la capa"},
-{"id": "fit_to_sel", "textContent": "Ajustar a la selección"},
-{"id": "font_family", "title": "Tipo de fuente"},
-{"id": "icon_large", "textContent": "Grande"},
-{"id": "icon_medium", "textContent": "Mediano"},
-{"id": "icon_small", "textContent": "Pequeño"},
-{"id": "icon_xlarge", "textContent": "Muy grande"},
-{"id": "image_height", "title": "Cambiar la altura de la imagen"},
-{"id": "image_opt_embed", "textContent": "Integrar imágenes en forma de datos (archivos locales)"},
-{"id": "image_opt_ref", "textContent": "Usar la referencia del archivo"},
-{"id": "image_url", "title": "Modificar URL"},
-{"id": "image_width", "title": "Cambiar el ancho de la imagen"},
-{"id": "includedImages", "textContent": "Imágenes integradas"},
-{"id": "largest_object", "textContent": "El objeto más grande"},
-{"id": "layer_delete", "title": "Suprimir capa"},
-{"id": "layer_down", "title": "Mover la capa hacia abajo"},
-{"id": "layer_new", "title": "Nueva capa"},
-{"id": "layer_rename", "title": "Renombrar capa"},
-{"id": "layer_up", "title": "Mover la capa hacia arriba"},
-{"id": "layersLabel", "textContent": "Capas:"},
-{"id": "line_x1", "title": "Cambiar la posición horizontal X del comienzo de la línea"},
-{"id": "line_x2", "title": "Cambiar la posición horizontal X del final de la línea"},
-{"id": "line_y1", "title": "Cambiar la posición vertical Y del comienzo de la línea"},
-{"id": "line_y2", "title": "Cambiar la posición vertical Y del final de la línea"},
-{"id": "linecap_butt", "title": "Final de la línea: en el nodo"},
-{"id": "linecap_round", "title": "Final de la línea: redondeada"},
-{"id": "linecap_square", "title": "Final de la línea: cuadrada"},
-{"id": "linejoin_bevel", "title": "Unión: biselada"},
-{"id": "linejoin_miter", "title": "Unión: recta"},
-{"id": "linejoin_round", "title": "Unión: redondeada"},
-{"id": "main_icon", "title": "Menú principal"},
-{"id": "mode_connect", "title": "Conectar dos objetos"},
-{"id": "page", "textContent": "Página"},
-{"id": "palette", "title": "Haga clic para cambiar el color de relleno. Pulse Mayús y haga clic para cambiar el color del contorno."},
-{"id": "path_node_x", "title": "Cambiar la posición horizontal X del nodo"},
-{"id": "path_node_y", "title": "Cambiar la posición vertical Y del nodo"},
-{"id": "rect_height_tool", "title": "Cambiar la altura del rectángulo"},
-{"id": "rect_width_tool", "title": "Cambiar el ancho rectángulo"},
-{"id": "relativeToLabel", "textContent": "en relación con:"},
-{"id": "seg_type", "title": "Cambiar el tipo de segmento"},
-{"id": "selLayerLabel", "textContent": "Desplazar objetos a:"},
-{"id": "selLayerNames", "title": "Mover los objetos seleccionados a otra capa"},
-{"id": "selectedPredefined", "textContent": "Seleccionar predefinido:"},
-{"id": "selected_objects", "textContent": "Objetos seleccionados"},
-{"id": "selected_x", "title": "Cambiar la posición horizontal X"},
-{"id": "selected_y", "title": "Cambiar la posición vertical Y"},
-{"id": "smallest_object", "textContent": "El objeto más pequeño"},
-{"id": "straight_segments", "textContent": "Recta"},
-{"id": "stroke_color", "title": "Cambiar el color del contorno"},
-{"id": "stroke_style", "title": "Cambiar el estilo del trazo del contorno"},
-{"id": "stroke_width", "title": "Cambiar el grosor del contorno"},
-{"id": "svginfo_bg_note", "textContent": "Nota: El fondo no se guardará junto con la imagen."},
-{"id": "svginfo_change_background", "textContent": "Fondo del editor"},
-{"id": "svginfo_dim", "textContent": "Tamaño del lienzo"},
-{"id": "svginfo_editor_prefs", "textContent": "Preferencias del Editor"},
-{"id": "svginfo_height", "textContent": "Alto:"},
-{"id": "svginfo_icons", "textContent": "Tamaño de los iconos"},
-{"id": "svginfo_image_props", "textContent": "Propiedades de la Imagen"},
-{"id": "svginfo_lang", "textContent": "Idioma"},
-{"id": "svginfo_title", "textContent": "Título"},
-{"id": "svginfo_width", "textContent": "Ancho:"},
-{"id": "text", "title": "Modificar el texto"},
-{"id": "toggle_stroke_tools", "title": "Mostrar/ocultar herramientas de trazo adicionales"},
-{"id": "tool_add_subpath", "title": "Añadir subtrazado"},
-{"id": "tool_alignbottom", "title": "Alinear parte inferior"},
-{"id": "tool_aligncenter", "title": "Centrar verticalmente"},
-{"id": "tool_alignleft", "title": "Alinear lado izquierdo"},
-{"id": "tool_alignmiddle", "title": "Centrar horizontalmente"},
-{"id": "tool_alignright", "title": "Alinear lado derecho"},
-{"id": "tool_aligntop", "title": "Alinear parte superior"},
-{"id": "tool_angle", "title": "Cambiar ángulo de rotación"},
-{"id": "tool_blur", "title": "Ajustar desenfoque gausiano"},
-{"id": "tool_bold", "title": "Texto en negrita"},
-{"id": "tool_circle", "title": "Círculo"},
-{"id": "tool_clear", "textContent": "Nueva imagen"},
-{"id": "tool_clone", "title": "Clonar objeto"},
-{"id": "tool_clone_multi", "title": " Clonar objetos"},
-{"id": "tool_delete", "title": "Suprimir objeto"},
-{"id": "tool_delete_multi", "title": "Suprimir los objetos seleccionados"},
-{"id": "tool_docprops", "textContent": "Propiedades del documento"},
-{"id": "tool_docprops_cancel", "textContent": "Cancelar"},
-{"id": "tool_docprops_save", "textContent": "OK"},
-{"id": "tool_ellipse", "title": "Elipse"},
-{"id": "tool_export", "textContent": "Exportar como PNG"},
-{"id": "tool_eyedropper", "title": "Herramienta de pipeta"},
-{"id": "tool_fhellipse", "title": "Elipse a mano alzada"},
-{"id": "tool_fhpath", "title": "Herramienta de lápiz"},
-{"id": "tool_fhrect", "title": "Rectángulo a mano alzada"},
-{"id": "tool_font_size", "title": "Tamaño de la fuente"},
-{"id": "tool_group", "title": "Agrupar objetos"},
-{"id": "tool_image", "title": "Insertar imagen"},
-{"id": "tool_import", "textContent": "Importar un archivo SVG"},
-{"id": "tool_italic", "title": "Texto en cursiva"},
-{"id": "tool_line", "title": "Trazado de líneas"},
-{"id": "tool_move_bottom", "title": "Mover abajo"},
-{"id": "tool_move_top", "title": "Mover arriba"},
-{"id": "tool_node_clone", "title": "Clonar nodo"},
-{"id": "tool_node_delete", "title": "Suprimir nodo"},
-{"id": "tool_node_link", "title": "Enlazar puntos de control"},
-{"id": "tool_opacity", "title": "Cambiar la opacidad del objeto seleccionado"},
-{"id": "tool_open", "textContent": "Abrir imagen"},
-{"id": "tool_path", "title": "Herramienta de trazado"},
-{"id": "tool_rect", "title": "Rectángulo"},
-{"id": "tool_redo", "title": "Rehacer"},
-{"id": "tool_reorient", "title": "Reorientar el trazado"},
-{"id": "tool_save", "textContent": "Guardar imagen"},
-{"id": "tool_select", "title": "Herramienta de selección"},
-{"id": "tool_source", "title": "Editar código fuente"},
-{"id": "tool_source_cancel", "textContent": "Cancelar"},
-{"id": "tool_source_save", "textContent": "Aplicar cambios"},
-{"id": "tool_square", "title": "Cuadrado"},
-{"id": "tool_text", "title": "Insertar texto"},
-{"id": "tool_topath", "title": "Convertir a trazado"},
-{"id": "tool_undo", "title": "Deshacer"},
-{"id": "tool_ungroup", "title": "Desagrupar objetos"},
-{"id": "tool_wireframe", "title": "Modo marco de alambre"},
-{"id": "tool_zoom", "title": "Zoom"},
-{"id": "url_notice", "title": "NOTA: La imagen no puede ser integrada. El contenido mostrado dependerá de la imagen ubicada en esta ruta. "},
-{"id": "zoom_panel", "title": "Cambiar el nivel de zoom"},
-{"id": "sidepanel_handle", "textContent": "C a p a s", "title": "Arrastrar hacia la izquierda/derecha para modificar el tamaño del panel lateral"},
-{
- "js_strings": {
- "Aceptar": "OK",
- "QerrorsRevertToSource": "Existen errores sintácticos en su código fuente SVG.\n¿Desea volver al código fuente SVG original?",
- "QignoreSourceChanges": "¿Desea ignorar los cambios realizados sobre el código fuente SVG?",
- "QmoveElemsToLayer": "¿Desplazar los elementos seleccionados a la capa '%s'?",
- "QwantToClear": "¿Desea borrar el dibujo?\n¡El historial de acciones también se borrará!",
- "cancel": "Cancelar",
- "defsFailOnSave": "NOTA: Debido a un fallo de su navegador, es posible que la imagen aparezca de forma incorrecta (ciertas gradaciones o elementos podría perderse). La imagen aparecerá en su forma correcta una vez guardada.",
- "dupeLayerName": "¡Ya existe una capa con este nombre!",
- "enterNewImgURL": "Introduzca la nueva URL de la imagen.",
- "enterNewLayerName": "Introduzca el nuevo nombre de la capa.",
- "enterUniqueLayerName": "Introduzca otro nombre distinto para la capa.",
- "exportNoBlur": "Los elementos desenfocados aparecerán enfocados",
- "exportNoDashArray": "Los contornos aparecerán rellenos",
- "exportNoImage": "Los elementos “Imagen” no aparecerán",
- "exportNoText": "La apariencia del texto puede cambiar",
- "exportNoforeignObject": "Los elementos “foreignObject” no aparecerán",
- "featNotSupported": "Función no compatible.",
- "invalidAttrValGiven": "Valor no válido",
- "key_backspace": "retroceso",
- "key_del": "suprimir",
- "key_down": "abajo",
- "key_up": "arriba",
- "layer": "Capa",
- "layerHasThatName": "El nombre introducido es el nombre actual de la capa.",
- "loadingImage": "Cargando imagen. Espere, por favor.",
- "noContentToFitTo": "No existe un contenido al que ajustarse.",
- "noteTheseIssues": "Existen además los problemas siguientes:",
- "pathCtrlPtTooltip": "Arrastre el punto de control para ajustar las propiedades de la curva.",
- "pathNodeTooltip": "Arrastre el nodo para desplazarlo. Haga doble clic sobre el nodo para cambiar el tipo de segmento.",
- "saveFromBrowser": "Seleccionar \"Guardar como...\" en su navegador para guardar la imagen en forma de archivo %s."
- }
-}
-]
-
diff --git a/files_svgedit/js/locale/lang.et.js b/files_svgedit/js/locale/lang.et.js
deleted file mode 100644
index df60ee0cc..000000000
--- a/files_svgedit/js/locale/lang.et.js
+++ /dev/null
@@ -1,173 +0,0 @@
-[
-{"id": "align_relative_to", "title": "Viia võrreldes ..."},
-{"id": "bkgnd_color", "title": "Muuda tausta värvi / läbipaistmatus"},
-{"id": "circle_cx", "title": "Muuda ringi&#39;s cx kooskõlastada"},
-{"id": "circle_cy", "title": "Muuda ringi&#39;s cy kooskõlastada"},
-{"id": "circle_r", "title": "Muuda ring on raadiusega"},
-{"id": "connector_no_arrow", "textContent": "No arrow"},
-{"id": "copyrightLabel", "textContent": "Powered by"},
-{"id": "cornerRadiusLabel", "title": "Muuda ristkülik Nurgakabe Raadius"},
-{"id": "curve_segments", "textContent": "Curve"},
-{"id": "ellipse_cx", "title": "Muuda ellips&#39;s cx kooskõlastada"},
-{"id": "ellipse_cy", "title": "Muuda ellips&#39;s cy kooskõlastada"},
-{"id": "ellipse_rx", "title": "Muuda ellips&#39;s x raadius"},
-{"id": "ellipse_ry", "title": "Muuda ellips&#39;s y raadius"},
-{"id": "fill_color", "title": "Muuda täitke värvi"},
-{"id": "fitToContent", "textContent": "Fit to Content"},
-{"id": "fit_to_all", "textContent": "Sobita kogu sisu"},
-{"id": "fit_to_canvas", "textContent": "Sobita lõuend"},
-{"id": "fit_to_layer_content", "textContent": "Sobita kiht sisu"},
-{"id": "fit_to_sel", "textContent": "Fit valiku"},
-{"id": "font_family", "title": "Muutke Kirjasinperhe"},
-{"id": "icon_large", "textContent": "Large"},
-{"id": "icon_medium", "textContent": "Medium"},
-{"id": "icon_small", "textContent": "Small"},
-{"id": "icon_xlarge", "textContent": "Extra Large"},
-{"id": "image_height", "title": "Muuda pilt kõrgus"},
-{"id": "image_opt_embed", "textContent": "Embed data (local files)"},
-{"id": "image_opt_ref", "textContent": "Use file reference"},
-{"id": "image_url", "title": "Change URL"},
-{"id": "image_width", "title": "Muuda pilt laius"},
-{"id": "includedImages", "textContent": "Included Images"},
-{"id": "largest_object", "textContent": "suurim objekt"},
-{"id": "layer_delete", "title": "Kustuta Kiht"},
-{"id": "layer_down", "title": "Liiguta kiht alla"},
-{"id": "layer_new", "title": "Uus kiht"},
-{"id": "layer_rename", "title": "Nimeta kiht"},
-{"id": "layer_up", "title": "Liiguta kiht üles"},
-{"id": "layersLabel", "textContent": "Kihid:"},
-{"id": "line_x1", "title": "Muuda rööbastee algab x-koordinaadi"},
-{"id": "line_x2", "title": "Muuda Line lõpeb x-koordinaadi"},
-{"id": "line_y1", "title": "Muuda rööbastee algab y-koordinaadi"},
-{"id": "line_y2", "title": "Muuda Line lõppenud y-koordinaadi"},
-{"id": "linecap_butt", "title": "Linecap: Butt"},
-{"id": "linecap_round", "title": "Linecap: Round"},
-{"id": "linecap_square", "title": "Linecap: Square"},
-{"id": "linejoin_bevel", "title": "Linejoin: Bevel"},
-{"id": "linejoin_miter", "title": "Linejoin: Miter"},
-{"id": "linejoin_round", "title": "Linejoin: Round"},
-{"id": "main_icon", "title": "Main Menu"},
-{"id": "mode_connect", "title": "Connect two objects"},
-{"id": "page", "textContent": "lehekülg"},
-{"id": "palette", "title": "Click muuta täitke värvi, Shift-nuppu, et muuta insult värvi"},
-{"id": "path_node_x", "title": "Change node's x coordinate"},
-{"id": "path_node_y", "title": "Change node's y coordinate"},
-{"id": "rect_height_tool", "title": "Muuda ristküliku kõrgus"},
-{"id": "rect_width_tool", "title": "Muuda ristküliku laius"},
-{"id": "relativeToLabel", "textContent": "võrreldes:"},
-{"id": "seg_type", "title": "Change Segment type"},
-{"id": "selLayerLabel", "textContent": "Move elements to:"},
-{"id": "selLayerNames", "title": "Move selected elements to a different layer"},
-{"id": "selectedPredefined", "textContent": "Valige eelmääratletud:"},
-{"id": "selected_objects", "textContent": "valitud objektide"},
-{"id": "selected_x", "title": "Change X coordinate"},
-{"id": "selected_y", "title": "Change Y coordinate"},
-{"id": "smallest_object", "textContent": "väikseim objekt"},
-{"id": "straight_segments", "textContent": "Straight"},
-{"id": "stroke_color", "title": "Muuda insult värvi"},
-{"id": "stroke_style", "title": "Muuda insult kriips stiil"},
-{"id": "stroke_width", "title": "Muuda insult laius"},
-{"id": "svginfo_bg_note", "textContent": "Note: Background will not be saved with image."},
-{"id": "svginfo_change_background", "textContent": "Editor Background"},
-{"id": "svginfo_dim", "textContent": "Canvas Dimensions"},
-{"id": "svginfo_editor_prefs", "textContent": "Editor Preferences"},
-{"id": "svginfo_height", "textContent": "Kõrgus:"},
-{"id": "svginfo_icons", "textContent": "Icon size"},
-{"id": "svginfo_image_props", "textContent": "Image Properties"},
-{"id": "svginfo_lang", "textContent": "Language"},
-{"id": "svginfo_title", "textContent": "Title"},
-{"id": "svginfo_width", "textContent": "Laius:"},
-{"id": "text", "title": "Muuda teksti sisu"},
-{"id": "toggle_stroke_tools", "title": "Show/hide more stroke tools"},
-{"id": "tool_add_subpath", "title": "Add sub-path"},
-{"id": "tool_alignbottom", "title": "Viia Bottom"},
-{"id": "tool_aligncenter", "title": "Keskele joondamine"},
-{"id": "tool_alignleft", "title": "Vasakjoondus"},
-{"id": "tool_alignmiddle", "title": "Viia Lähis -"},
-{"id": "tool_alignright", "title": "Paremjoondus"},
-{"id": "tool_aligntop", "title": "Viia Üles"},
-{"id": "tool_angle", "title": "Muuda Pöördenurk"},
-{"id": "tool_blur", "title": "Change gaussian blur value"},
-{"id": "tool_bold", "title": "Rasvane kiri"},
-{"id": "tool_circle", "title": "Circle"},
-{"id": "tool_clear", "textContent": "Uus pilt"},
-{"id": "tool_clone", "title": "Kloonide Element"},
-{"id": "tool_clone_multi", "title": "Kloonide Elements"},
-{"id": "tool_delete", "title": "Kustuta Element"},
-{"id": "tool_delete_multi", "title": "Kustuta valitud elemendid [Delete/Backspace]"},
-{"id": "tool_docprops", "textContent": "Dokumendi omadused"},
-{"id": "tool_docprops_cancel", "textContent": "Tühista"},
-{"id": "tool_docprops_save", "textContent": "Salvestama"},
-{"id": "tool_ellipse", "title": "Ellips"},
-{"id": "tool_export", "textContent": "Export as PNG"},
-{"id": "tool_eyedropper", "title": "Eye Dropper Tool"},
-{"id": "tool_fhellipse", "title": "Online-Hand Ellips"},
-{"id": "tool_fhpath", "title": "Pencil Tool"},
-{"id": "tool_fhrect", "title": "Online-Hand Ristkülik"},
-{"id": "tool_font_size", "title": "Change font size"},
-{"id": "tool_group", "title": "Rühma elemendid"},
-{"id": "tool_image", "title": "Pilt Tool"},
-{"id": "tool_import", "textContent": "Import SVG"},
-{"id": "tool_italic", "title": "Kursiiv"},
-{"id": "tool_line", "title": "Line Tool"},
-{"id": "tool_move_bottom", "title": "Liiguta alla"},
-{"id": "tool_move_top", "title": "Liiguta üles"},
-{"id": "tool_node_clone", "title": "Clone Node"},
-{"id": "tool_node_delete", "title": "Delete Node"},
-{"id": "tool_node_link", "title": "Link Control Points"},
-{"id": "tool_opacity", "title": "Muuda valitud elemendi läbipaistmatus"},
-{"id": "tool_open", "textContent": "Pildi avamine"},
-{"id": "tool_path", "title": "Path Tool"},
-{"id": "tool_rect", "title": "Ristkülik"},
-{"id": "tool_redo", "title": "Redo"},
-{"id": "tool_reorient", "title": "Reorient path"},
-{"id": "tool_save", "textContent": "Salvesta pilt"},
-{"id": "tool_select", "title": "Vali Tool"},
-{"id": "tool_source", "title": "Muuda Allikas"},
-{"id": "tool_source_cancel", "textContent": "Tühista"},
-{"id": "tool_source_save", "textContent": "Salvestama"},
-{"id": "tool_square", "title": "Nelinurkne"},
-{"id": "tool_text", "title": "Tekst Tool"},
-{"id": "tool_topath", "title": "Convert to Path"},
-{"id": "tool_undo", "title": "Undo"},
-{"id": "tool_ungroup", "title": "Lõhu Elements"},
-{"id": "tool_wireframe", "title": "Wireframe Mode"},
-{"id": "tool_zoom", "title": "Zoom Tool"},
-{"id": "url_notice", "title": "NOTE: This image cannot be embedded. It will depend on this path to be displayed"},
-{"id": "zoom_panel", "title": "Muuda suumi taset"},
-{"id": "sidepanel_handle", "textContent": "L a y e r s", "title": "Drag left/right to resize side panel"},
-{
- "js_strings": {
- "QerrorsRevertToSource": "There were parsing errors in your SVG source.\nRevert back to original SVG source?",
- "QignoreSourceChanges": "Ignore changes made to SVG source?",
- "QmoveElemsToLayer": "Move selected elements to layer '%s'?",
- "QwantToClear": "Do you want to clear the drawing?\nThis will also erase your undo history!",
- "cancel": "Cancel",
- "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.",
- "dupeLayerName": "There is already a layer named that!",
- "enterNewImgURL": "Enter the new image URL",
- "enterNewLayerName": "Please enter the new layer name",
- "enterUniqueLayerName": "Please enter a unique layer name",
- "exportNoBlur": "Blurred elements will appear as un-blurred",
- "exportNoDashArray": "Strokes will appear filled",
- "exportNoImage": "Image elements will not appear",
- "exportNoText": "Text may not appear as expected",
- "exportNoforeignObject": "foreignObject elements will not appear",
- "featNotSupported": "Feature not supported",
- "invalidAttrValGiven": "Invalid value given",
- "key_backspace": "backspace",
- "key_del": "delete",
- "key_down": "down",
- "key_up": "up",
- "layer": "Layer",
- "layerHasThatName": "Layer already has that name",
- "loadingImage": "Loading image, please wait...",
- "noContentToFitTo": "No content to fit to",
- "noteTheseIssues": "Also note the following issues: ",
- "ok": "OK",
- "pathCtrlPtTooltip": "Drag control point to adjust curve properties",
- "pathNodeTooltip": "Drag node to move it. Double-click node to change segment type",
- "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file."
- }
-}
-] \ No newline at end of file
diff --git a/files_svgedit/js/locale/lang.fa.js b/files_svgedit/js/locale/lang.fa.js
deleted file mode 100644
index 941e73d75..000000000
--- a/files_svgedit/js/locale/lang.fa.js
+++ /dev/null
@@ -1,174 +0,0 @@
-[
-{"id": "align_relative_to", "title": "‫تراز نسبت به ...‬"},
-{"id": "bkgnd_color", "title": "‫تغییر رنگ پس زمینه / تاری‬"},
-{"id": "circle_cx", "title": "‫تغییر مختصات cx دایره‬"},
-{"id": "circle_cy", "title": "‫تغییر مختصات cy دایره‬"},
-{"id": "circle_r", "title": "‫تغییر شعاع دایره‬"},
-{"id": "connector_no_arrow", "textContent": "No arrow"},
-{"id": "copyrightLabel", "textContent": "Powered by"},
-{"id": "cornerRadiusLabel", "title": "‫تغییر شعاع گوشه مستطیل‬"},
-{"id": "cornerRadiusLabel", "title": "‫شعاع گوشه:‬"},
-{"id": "curve_segments", "textContent": "‫منحنی‬"},
-{"id": "ellipse_cx", "title": "‫تغییر مختصات cx بیضی‬"},
-{"id": "ellipse_cy", "title": "‫تغییر مختصات cy بیضی‬"},
-{"id": "ellipse_rx", "title": "‫تغییر شعاع rx بیضی‬"},
-{"id": "ellipse_ry", "title": "‫تغییر شعاع ry بیضی‬"},
-{"id": "fill_color", "title": "‫تغییر رنگ‬"},
-{"id": "fitToContent", "textContent": "‫هم اندازه شدن با محتوا‬"},
-{"id": "fit_to_all", "textContent": "‫هم اندازه شدن با همه محتویات‬"},
-{"id": "fit_to_canvas", "textContent": "‫هم اندازه شدن با صفحه مجازی (بوم)‬"},
-{"id": "fit_to_layer_content", "textContent": "‫هم اندازه شدن با محتوای لایه‬"},
-{"id": "fit_to_sel", "textContent": "‫هم اندازه شدن با اشیاء انتخاب شده‬"},
-{"id": "font_family", "title": "‫تغییر خانواده قلم‬"},
-{"id": "icon_large", "textContent": "‫بزرگ‬"},
-{"id": "icon_medium", "textContent": "‫متوسط‬"},
-{"id": "icon_small", "textContent": "‫کوچک‬"},
-{"id": "icon_xlarge", "textContent": "‫خیلی بزرگ‬"},
-{"id": "image_height", "title": "‫تغییر ارتفاع تصویر‬"},
-{"id": "image_opt_embed", "textContent": "‫داده های جای داده شده (پرونده های محلی)‬"},
-{"id": "image_opt_ref", "textContent": "‫استفاده از ارجاع به پرونده‬"},
-{"id": "image_url", "title": "‫تغییر نشانی وب (url)‬"},
-{"id": "image_width", "title": "‫تغییر عرض تصویر‬"},
-{"id": "includedImages", "textContent": "‫تصاویر گنجانده شده‬"},
-{"id": "largest_object", "textContent": "‫بزرگترین شئ‬"},
-{"id": "layer_delete", "title": "‫حذف لایه‬"},
-{"id": "layer_down", "title": "‫انتقال لایه به پایین‬"},
-{"id": "layer_new", "title": "‫لایه جدید‬"},
-{"id": "layer_rename", "title": "‫تغییر نام لایه‬"},
-{"id": "layer_up", "title": "‫انتقال لایه به بالا‬"},
-{"id": "layersLabel", "textContent": "‫لایه:‬"},
-{"id": "line_x1", "title": "‫تغییر مختصات x آغاز خط‬"},
-{"id": "line_x2", "title": "‫تغییر مختصات x پایان خط‬"},
-{"id": "line_y1", "title": "‫تغییر مختصات y آغاز خط‬"},
-{"id": "line_y2", "title": "‫تغییر مختصات y پایان خط‬"},
-{"id": "linecap_butt", "title": "Linecap: Butt"},
-{"id": "linecap_round", "title": "Linecap: Round"},
-{"id": "linecap_square", "title": "Linecap: Square"},
-{"id": "linejoin_bevel", "title": "Linejoin: Bevel"},
-{"id": "linejoin_miter", "title": "Linejoin: Miter"},
-{"id": "linejoin_round", "title": "Linejoin: Round"},
-{"id": "main_icon", "title": "Main Menu"},
-{"id": "mode_connect", "title": "Connect two objects"},
-{"id": "page", "textContent": "‫صفحه‬"},
-{"id": "palette", "title": "‫برای تغییر رنگ، کلیک کنید. برای تغییر رنگ لبه، کلید تبدیل (shift) را فشرده و کلیک کنید‬"},
-{"id": "path_node_x", "title": "‫تغییر مختصات x نقطه‬"},
-{"id": "path_node_y", "title": "‫تغییر مختصات y نقطه‬"},
-{"id": "rect_height_tool", "title": "‫تغییر ارتفاع مستطیل‬"},
-{"id": "rect_width_tool", "title": "‫تغییر عرض مستطیل‬"},
-{"id": "relativeToLabel", "textContent": "‫نسبت به:‬"},
-{"id": "seg_type", "title": "‫تغییر نوع قطعه (segment)‬"},
-{"id": "selLayerLabel", "textContent": "‫انتقال عناصر به:‬"},
-{"id": "selLayerNames", "title": "‫انتقال عناصر انتخاب شده به یک لایه متفاوت‬"},
-{"id": "selectedPredefined", "textContent": "‫از پیش تعریف شده را انتخاب کنید:‬"},
-{"id": "selected_objects", "textContent": "‫اشیاء انتخاب شده‬"},
-{"id": "selected_x", "title": "‫تغییر مختصات X‬"},
-{"id": "selected_y", "title": "‫تغییر مختصات Y‬"},
-{"id": "smallest_object", "textContent": "‫کوچکترین شئ‬"},
-{"id": "straight_segments", "textContent": "‫مستقیم‬"},
-{"id": "stroke_color", "title": "‫تغییر رنگ لبه‬"},
-{"id": "stroke_style", "title": "‫تغییر نقطه چین لبه‬"},
-{"id": "stroke_width", "title": "‫تغییر عرض لبه‬"},
-{"id": "svginfo_bg_note", "textContent": "‫توجه: پس زمینه همراه تصویر ذخیره نخواهد شد.‬"},
-{"id": "svginfo_change_background", "textContent": "‫پس زمینه ویراستار‬"},
-{"id": "svginfo_dim", "textContent": "‫ابعاد صفحه مجازی (بوم)‬"},
-{"id": "svginfo_editor_prefs", "textContent": "‫تنظیمات ویراستار‬"},
-{"id": "svginfo_height", "textContent": "‫ارتفاع:‬"},
-{"id": "svginfo_icons", "textContent": "‫اندازه شمایل‬"},
-{"id": "svginfo_image_props", "textContent": "‫مشخصات تصویر‬"},
-{"id": "svginfo_lang", "textContent": "‫زبان‬"},
-{"id": "svginfo_title", "textContent": "‫عنوان‬"},
-{"id": "svginfo_width", "textContent": "‫عرض:‬"},
-{"id": "text", "title": "‫تغییر محتویات متن‬"},
-{"id": "toggle_stroke_tools", "title": "Show/hide more stroke tools"},
-{"id": "tool_add_subpath", "title": "Add sub-path"},
-{"id": "tool_alignbottom", "title": "‫تراز پایین‬"},
-{"id": "tool_aligncenter", "title": "‫وسط چین‬"},
-{"id": "tool_alignleft", "title": "‫چپ چین‬"},
-{"id": "tool_alignmiddle", "title": "‫تراز میانه‬"},
-{"id": "tool_alignright", "title": "‫راست چین‬"},
-{"id": "tool_aligntop", "title": "‫تراز بالا‬"},
-{"id": "tool_angle", "title": "‫تغییر زاویه چرخش‬"},
-{"id": "tool_blur", "title": "Change gaussian blur value"},
-{"id": "tool_bold", "title": "‫متن توپر ‬"},
-{"id": "tool_circle", "title": "‫دایره‬"},
-{"id": "tool_clear", "textContent": "‫تصویر جدید ‬"},
-{"id": "tool_clone", "title": "‫ایجاد کپی از عنصر ‬"},
-{"id": "tool_clone_multi", "title": "‫ایجاد کپی از عناصر ‬"},
-{"id": "tool_delete", "title": "‫حذف عنصر ‬"},
-{"id": "tool_delete_multi", "title": "‫حذف عناصر انتخاب شده ‬"},
-{"id": "tool_docprops", "textContent": "‫مشخصات سند ‬"},
-{"id": "tool_docprops_cancel", "textContent": "‫لغو‬"},
-{"id": "tool_docprops_save", "textContent": "‫تأیید‬"},
-{"id": "tool_ellipse", "title": "‫بیضی‬"},
-{"id": "tool_export", "textContent": "Export as PNG"},
-{"id": "tool_eyedropper", "title": "Eye Dropper Tool"},
-{"id": "tool_fhellipse", "title": "‫بیضی با قابلیت تغییر پویا‬"},
-{"id": "tool_fhpath", "title": "‫ابزار مداد ‬"},
-{"id": "tool_fhrect", "title": "‫مستطیل با قابلیت تغییر پویا‬"},
-{"id": "tool_font_size", "title": "‫تغییر اندازه قلم‬"},
-{"id": "tool_group", "title": "‫قرار دادن عناصر در گروه ‬"},
-{"id": "tool_image", "title": "‫ابزار تصویر ‬"},
-{"id": "tool_import", "textContent": "Import SVG"},
-{"id": "tool_italic", "title": "‫متن کج ‬"},
-{"id": "tool_line", "title": "‫ابزار خط ‬"},
-{"id": "tool_move_bottom", "title": "‫انتقال به پایین ترین ‬"},
-{"id": "tool_move_top", "title": "‫انتقال به بالاترین ‬"},
-{"id": "tool_node_clone", "title": "‫ایجاد کپی از نقطه‬"},
-{"id": "tool_node_delete", "title": "‫حذف نقطه‬"},
-{"id": "tool_node_link", "title": "‫پیوند دادن نقاط کنترل‬"},
-{"id": "tool_opacity", "title": "‫تغییر تاری عنصر انتخاب شده‬"},
-{"id": "tool_open", "textContent": "‫باز کردن تصویر ‬"},
-{"id": "tool_path", "title": "‫ابزار مسیر ‬"},
-{"id": "tool_rect", "title": "‫مستطیل‬"},
-{"id": "tool_redo", "title": "‫ازنو ‬"},
-{"id": "tool_reorient", "title": "‫جهت دهی مجدد مسیر‬"},
-{"id": "tool_save", "textContent": "‫ذخیره تصویر ‬"},
-{"id": "tool_select", "title": "‫ابزار انتخاب ‬"},
-{"id": "tool_source", "title": "‫ویرایش منبع ‬"},
-{"id": "tool_source_cancel", "textContent": "‫لغو‬"},
-{"id": "tool_source_save", "textContent": "‫اعمال تغییرات‬"},
-{"id": "tool_square", "title": "‫مربع‬"},
-{"id": "tool_text", "title": "‫ابزار متن ‬"},
-{"id": "tool_topath", "title": "‫تبدیل به مسیر‬"},
-{"id": "tool_undo", "title": "‫واگرد ‬"},
-{"id": "tool_ungroup", "title": "‫خارج کردن عناصر از گروه ‬"},
-{"id": "tool_wireframe", "title": "‫حالت نمایش لبه ها ‬"},
-{"id": "tool_zoom", "title": "‫ابزار بزرگ نمایی ‬"},
-{"id": "url_notice", "title": "NOTE: This image cannot be embedded. It will depend on this path to be displayed"},
-{"id": "zoom_panel", "title": "‫تغییر بزرگ نمایی‬"},
-{"id": "sidepanel_handle", "textContent": "‫لایه ها‬", "title": "‫برای تغییر اندازه منوی کناری، آن را به سمت راست/چپ بکشید ‬"},
-{
- "js_strings": {
- "QerrorsRevertToSource": "‫در منبع SVG شما خطاهای تجزیه (parse) وجود داشت.\nبه منبع SVG اصلی بازگردانده شود؟‬",
- "QignoreSourceChanges": "‫تغییرات اعمال شده در منبع SVG نادیده گرفته شوند؟‬",
- "QmoveElemsToLayer": "‫عناصر انتخاب شده به لایه '%s' منتقل شوند؟‬",
- "QwantToClear": "‫آیا مطمئن هستید که می خواهید نقاشی را پاک کنید؟\nاین عمل باعث حذف تاریخچه واگرد شما خواهد شد!‬",
- "cancel": "‫لغو‬",
- "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.",
- "dupeLayerName": "‫لایه ای با آن نام وجود دارد!‬",
- "enterNewImgURL": "‫نشانی وب (url) تصویر جدید را وارد کنید‬",
- "enterNewLayerName": "‫لطفا نام لایه جدید را وارد کنید‬",
- "enterUniqueLayerName": "‫لطفا یک نام لایه یکتا انتخاب کنید‬",
- "exportNoBlur": "Blurred elements will appear as un-blurred",
- "exportNoDashArray": "Strokes will appear filled",
- "exportNoImage": "Image elements will not appear",
- "exportNoText": "Text may not appear as expected",
- "exportNoforeignObject": "foreignObject elements will not appear",
- "featNotSupported": "‫این ویژگی پشتیبانی نشده است‬",
- "invalidAttrValGiven": "‫مقدار داده شده نامعتبر است‬",
- "key_backspace": "‫پس بر ‬",
- "key_del": "‫حذف ‬",
- "key_down": "‫پایین ‬",
- "key_up": "‫بالا ‬",
- "layer": "‫لایه‬",
- "layerHasThatName": "‫لایه از قبل آن نام را دارد‬",
- "loadingImage": "Loading image, please wait...",
- "noContentToFitTo": "‫محتوایی برای هم اندازه شدن وجود ندارد‬",
- "noteTheseIssues": "Also note the following issues: ",
- "ok": "‫تأیید‬",
- "pathCtrlPtTooltip": "‫برای تنظیم مشخصات منحنی، نقطه کنترل را بکشید‬",
- "pathNodeTooltip": "‫برای جابه جا کردن نقطه، آن را بکشید. برای تغییر قطعه (segment)، روی نقطه دوبار کلیک کنید‬",
- "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file."
- }
-}
-] \ No newline at end of file
diff --git a/files_svgedit/js/locale/lang.fi.js b/files_svgedit/js/locale/lang.fi.js
deleted file mode 100644
index a2ce312dc..000000000
--- a/files_svgedit/js/locale/lang.fi.js
+++ /dev/null
@@ -1,173 +0,0 @@
-[
-{"id": "align_relative_to", "title": "Kohdista suhteessa ..."},
-{"id": "bkgnd_color", "title": "Vaihda taustaväri / sameuden"},
-{"id": "circle_cx", "title": "Muuta Circlen CX koordinoida"},
-{"id": "circle_cy", "title": "Muuta Circlen CY koordinoida"},
-{"id": "circle_r", "title": "Muuta ympyrän säde"},
-{"id": "connector_no_arrow", "textContent": "No arrow"},
-{"id": "copyrightLabel", "textContent": "Powered by"},
-{"id": "cornerRadiusLabel", "title": "Muuta suorakaide Corner Säde"},
-{"id": "curve_segments", "textContent": "Curve"},
-{"id": "ellipse_cx", "title": "Muuta ellipsi&#39;s CX koordinoida"},
-{"id": "ellipse_cy", "title": "Muuta ellipsi&#39;s CY koordinoida"},
-{"id": "ellipse_rx", "title": "Muuta ellipsi&#39;s x säde"},
-{"id": "ellipse_ry", "title": "Muuta ellipsi n y säde"},
-{"id": "fill_color", "title": "Muuta täyttöväri"},
-{"id": "fitToContent", "textContent": "Sovita Content"},
-{"id": "fit_to_all", "textContent": "Sovita kaikki content"},
-{"id": "fit_to_canvas", "textContent": "Sovita kangas"},
-{"id": "fit_to_layer_content", "textContent": "Sovita kerros sisältöön"},
-{"id": "fit_to_sel", "textContent": "Sovita valinta"},
-{"id": "font_family", "title": "Muuta Font Family"},
-{"id": "icon_large", "textContent": "Large"},
-{"id": "icon_medium", "textContent": "Medium"},
-{"id": "icon_small", "textContent": "Small"},
-{"id": "icon_xlarge", "textContent": "Extra Large"},
-{"id": "image_height", "title": "Muuta kuvan korkeus"},
-{"id": "image_opt_embed", "textContent": "Embed data (local files)"},
-{"id": "image_opt_ref", "textContent": "Use file reference"},
-{"id": "image_url", "title": "Muuta URL"},
-{"id": "image_width", "title": "Muuta kuvan leveys"},
-{"id": "includedImages", "textContent": "Included Images"},
-{"id": "largest_object", "textContent": "Suurin kohde"},
-{"id": "layer_delete", "title": "Poista Layer"},
-{"id": "layer_down", "title": "Siirrä Layer alas"},
-{"id": "layer_new", "title": "New Layer"},
-{"id": "layer_rename", "title": "Nimeä Layer"},
-{"id": "layer_up", "title": "Siirrä Layer"},
-{"id": "layersLabel", "textContent": "Kerrosten:"},
-{"id": "line_x1", "title": "Muuta Linen alkaa x-koordinaatti"},
-{"id": "line_x2", "title": "Muuta Linen päättyy x koordinoida"},
-{"id": "line_y1", "title": "Muuta Linen alkaa y-koordinaatti"},
-{"id": "line_y2", "title": "Muuta Linen päättyy y koordinoida"},
-{"id": "linecap_butt", "title": "Linecap: Butt"},
-{"id": "linecap_round", "title": "Linecap: Round"},
-{"id": "linecap_square", "title": "Linecap: Square"},
-{"id": "linejoin_bevel", "title": "Linejoin: Bevel"},
-{"id": "linejoin_miter", "title": "Linejoin: Miter"},
-{"id": "linejoin_round", "title": "Linejoin: Round"},
-{"id": "main_icon", "title": "Main Menu"},
-{"id": "mode_connect", "title": "Connect two objects"},
-{"id": "page", "textContent": "sivulta"},
-{"id": "palette", "title": "Klikkaa muuttaa täyttöväri, Shift-click vaihtaa aivohalvauksen väriä"},
-{"id": "path_node_x", "title": "Change node's x coordinate"},
-{"id": "path_node_y", "title": "Change node's y coordinate"},
-{"id": "rect_height_tool", "title": "Muuta suorakaiteen korkeus"},
-{"id": "rect_width_tool", "title": "Muuta suorakaiteen leveys"},
-{"id": "relativeToLabel", "textContent": "suhteessa:"},
-{"id": "seg_type", "title": "Change Segment type"},
-{"id": "selLayerLabel", "textContent": "Move elements to:"},
-{"id": "selLayerNames", "title": "Move selected elements to a different layer"},
-{"id": "selectedPredefined", "textContent": "Valitse ennalta:"},
-{"id": "selected_objects", "textContent": "valittujen objektien"},
-{"id": "selected_x", "title": "Change X coordinate"},
-{"id": "selected_y", "title": "Change Y coordinate"},
-{"id": "smallest_object", "textContent": "pienin kohde"},
-{"id": "straight_segments", "textContent": "Straight"},
-{"id": "stroke_color", "title": "Muuta aivohalvaus väri"},
-{"id": "stroke_style", "title": "Muuta aivohalvaus Dash tyyli"},
-{"id": "stroke_width", "title": "Muuta aivohalvaus leveys"},
-{"id": "svginfo_bg_note", "textContent": "Note: Background will not be saved with image."},
-{"id": "svginfo_change_background", "textContent": "Editor Background"},
-{"id": "svginfo_dim", "textContent": "Canvas Dimensions"},
-{"id": "svginfo_editor_prefs", "textContent": "Editor Preferences"},
-{"id": "svginfo_height", "textContent": "Korkeus:"},
-{"id": "svginfo_icons", "textContent": "Icon size"},
-{"id": "svginfo_image_props", "textContent": "Image Properties"},
-{"id": "svginfo_lang", "textContent": "Language"},
-{"id": "svginfo_title", "textContent": "Title"},
-{"id": "svginfo_width", "textContent": "Leveys:"},
-{"id": "text", "title": "Muuta tekstin sisältö"},
-{"id": "toggle_stroke_tools", "title": "Show/hide more stroke tools"},
-{"id": "tool_add_subpath", "title": "Add sub-path"},
-{"id": "tool_alignbottom", "title": "Align Bottom"},
-{"id": "tool_aligncenter", "title": "Keskitä"},
-{"id": "tool_alignleft", "title": "Tasaa vasemmalle"},
-{"id": "tool_alignmiddle", "title": "Kohdista Lähi"},
-{"id": "tool_alignright", "title": "Tasaa oikealle"},
-{"id": "tool_aligntop", "title": "Kohdista Top"},
-{"id": "tool_angle", "title": "Muuta kiertokulma"},
-{"id": "tool_blur", "title": "Change gaussian blur value"},
-{"id": "tool_bold", "title": "Lihavoitu teksti"},
-{"id": "tool_circle", "title": "Ympyrään"},
-{"id": "tool_clear", "textContent": "Uusi kuva"},
-{"id": "tool_clone", "title": "Clone Element"},
-{"id": "tool_clone_multi", "title": "Clone Elements"},
-{"id": "tool_delete", "title": "Poista Element"},
-{"id": "tool_delete_multi", "title": "Poista valitut Elements"},
-{"id": "tool_docprops", "textContent": "Asiakirjan ominaisuudet"},
-{"id": "tool_docprops_cancel", "textContent": "Peruuta"},
-{"id": "tool_docprops_save", "textContent": "Tallentaa"},
-{"id": "tool_ellipse", "title": "Soikion"},
-{"id": "tool_export", "textContent": "Export as PNG"},
-{"id": "tool_eyedropper", "title": "Eye Dropper Tool"},
-{"id": "tool_fhellipse", "title": "Free-Hand Ellipse"},
-{"id": "tool_fhpath", "title": "Kynätyökalu"},
-{"id": "tool_fhrect", "title": "Free-Hand suorakaide"},
-{"id": "tool_font_size", "title": "Muuta fontin kokoa"},
-{"id": "tool_group", "title": "Tuoteryhmään Elements"},
-{"id": "tool_image", "title": "Image Tool"},
-{"id": "tool_import", "textContent": "Import SVG"},
-{"id": "tool_italic", "title": "Kursivoitu"},
-{"id": "tool_line", "title": "Viivatyökalulla"},
-{"id": "tool_move_bottom", "title": "Move to Bottom"},
-{"id": "tool_move_top", "title": "Move to Top"},
-{"id": "tool_node_clone", "title": "Clone Node"},
-{"id": "tool_node_delete", "title": "Delete Node"},
-{"id": "tool_node_link", "title": "Link Control Points"},
-{"id": "tool_opacity", "title": "Muuta valitun kohteen läpinäkyvyys"},
-{"id": "tool_open", "textContent": "Avaa kuva"},
-{"id": "tool_path", "title": "Path Tool"},
-{"id": "tool_rect", "title": "Suorakulmiossa"},
-{"id": "tool_redo", "title": "Tulppaamalla ilmakanavan"},
-{"id": "tool_reorient", "title": "Reorient path"},
-{"id": "tool_save", "textContent": "Save Image"},
-{"id": "tool_select", "title": "Valitse työkalu"},
-{"id": "tool_source", "title": "Muokkaa lähdekoodipaketti"},
-{"id": "tool_source_cancel", "textContent": "Peruuta"},
-{"id": "tool_source_save", "textContent": "Tallentaa"},
-{"id": "tool_square", "title": "Neliö"},
-{"id": "tool_text", "title": "Työkalua"},
-{"id": "tool_topath", "title": "Convert to Path"},
-{"id": "tool_undo", "title": "Kumoa"},
-{"id": "tool_ungroup", "title": "Ungroup Elements"},
-{"id": "tool_wireframe", "title": "Wireframe Mode"},
-{"id": "tool_zoom", "title": "Suurennustyökalu"},
-{"id": "url_notice", "title": "NOTE: This image cannot be embedded. It will depend on this path to be displayed"},
-{"id": "zoom_panel", "title": "Muuta suurennustaso"},
-{"id": "sidepanel_handle", "textContent": "L a y e r s", "title": "Drag left/right to resize side panel"},
-{
- "js_strings": {
- "QerrorsRevertToSource": "There were parsing errors in your SVG source.\nRevert back to original SVG source?",
- "QignoreSourceChanges": "Ignore changes made to SVG source?",
- "QmoveElemsToLayer": "Move selected elements to layer '%s'?",
- "QwantToClear": "Do you want to clear the drawing?\nThis will also erase your undo history!",
- "cancel": "Cancel",
- "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.",
- "dupeLayerName": "There is already a layer named that!",
- "enterNewImgURL": "Enter the new image URL",
- "enterNewLayerName": "Please enter the new layer name",
- "enterUniqueLayerName": "Please enter a unique layer name",
- "exportNoBlur": "Blurred elements will appear as un-blurred",
- "exportNoDashArray": "Strokes will appear filled",
- "exportNoImage": "Image elements will not appear",
- "exportNoText": "Text may not appear as expected",
- "exportNoforeignObject": "foreignObject elements will not appear",
- "featNotSupported": "Feature not supported",
- "invalidAttrValGiven": "Invalid value given",
- "key_backspace": "backspace",
- "key_del": "delete",
- "key_down": "down",
- "key_up": "up",
- "layer": "Layer",
- "layerHasThatName": "Layer already has that name",
- "loadingImage": "Loading image, please wait...",
- "noContentToFitTo": "No content to fit to",
- "noteTheseIssues": "Also note the following issues: ",
- "ok": "OK",
- "pathCtrlPtTooltip": "Drag control point to adjust curve properties",
- "pathNodeTooltip": "Drag node to move it. Double-click node to change segment type",
- "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file."
- }
-}
-] \ No newline at end of file
diff --git a/files_svgedit/js/locale/lang.fr.js b/files_svgedit/js/locale/lang.fr.js
deleted file mode 100644
index de8e2302a..000000000
--- a/files_svgedit/js/locale/lang.fr.js
+++ /dev/null
@@ -1,176 +0,0 @@
-[
-{"id": "align_relative_to", "title": "Aligner par rapport à ..."},
-{"id": "bkgnd_color", "title": "Changer la couleur d'arrière-plan / l'opacité"},
-{"id": "circle_cx", "title": "Changer la position horizontale cx du cercle"},
-{"id": "circle_cy", "title": "Changer la position verticale cy du cercle"},
-{"id": "circle_r", "title": "Changer le rayon du cercle"},
-{"id": "connector_no_arrow", "textContent": "Sans flèches"},
-{"id": "copyrightLabel", "textContent": "Powered by"},
-{"id": "cornerRadiusLabel", "title": "Changer le rayon des coins du rectangle"},
-{"id": "curve_segments", "textContent": "Courbe"},
-{"id": "ellipse_cx", "title": "Changer la position horizontale cx de l'ellipse"},
-{"id": "ellipse_cy", "title": "Changer la position verticale cy de l'ellipse"},
-{"id": "ellipse_rx", "title": "Changer le rayon horizontal x de l'ellipse"},
-{"id": "ellipse_ry", "title": "Changer le rayon vertical y de l'ellipse"},
-{"id": "fill_color", "title": "Changer la couleur de remplissage"},
-{"id": "fitToContent", "textContent": "Ajuster au contenu"},
-{"id": "fit_to_all", "textContent": "Ajuster au contenu de tous les calques"},
-{"id": "fit_to_canvas", "textContent": "Ajuster au canevas"},
-{"id": "fit_to_layer_content", "textContent": "Ajuster au contenu du calque"},
-{"id": "fit_to_sel", "textContent": "Ajuster à la sélection"},
-{"id": "font_family", "title": "Changer la famille de police"},
-{"id": "icon_large", "textContent": "Grande"},
-{"id": "icon_medium", "textContent": "Moyenne"},
-{"id": "icon_small", "textContent": "Petite"},
-{"id": "icon_xlarge", "textContent": "Super-Grande"},
-{"id": "idLabel", "title": "Identifier l'élément"},
-{"id": "image_height", "title": "Changer la hauteur de l'image"},
-{"id": "image_opt_embed", "textContent": "Incorporer les images en tant que données (fichiers locaux)"},
-{"id": "image_opt_ref", "textContent": "Utiliser la référence des images "},
-{"id": "image_url", "title": "Modifier l'URL"},
-{"id": "image_width", "title": "Changer la largeur de l'image"},
-{"id": "includedImages", "textContent": "Images incorporées"},
-{"id": "largest_object", "textContent": "Plus gros objet"},
-{"id": "layer_delete", "title": "Supprimer le calque"},
-{"id": "layer_down", "title": "Descendre le calque"},
-{"id": "layer_new", "title": "Nouveau calque"},
-{"id": "layer_rename", "title": "Renommer le calque"},
-{"id": "layer_up", "title": "Monter le calque"},
-{"id": "layersLabel", "textContent": "Calques :"},
-{"id": "line_x1", "title": "Changer la position horizontale x de début de la ligne"},
-{"id": "line_x2", "title": "Changer la position horizontale x de fin de la ligne"},
-{"id": "line_y1", "title": "Changer la position verticale y de début de la ligne"},
-{"id": "line_y2", "title": "Changer la position verticale y de fin de la ligne"},
-{"id": "linecap_butt", "title": "Terminaison : Sur le nœud"},
-{"id": "linecap_round", "title": "Terminaison : Arrondie"},
-{"id": "linecap_square", "title": "Terminaison : Carrée"},
-{"id": "linejoin_bevel", "title": "Raccord : Biseauté"},
-{"id": "linejoin_miter", "title": "Raccord : Droit"},
-{"id": "linejoin_round", "title": "Raccord : Arrondi"},
-{"id": "main_icon", "title": "Menu principal"},
-{"id": "mode_connect", "title": "Connecter deux objets"},
-{"id": "page", "textContent": "Page"},
-{"id": "palette", "title": "Cliquer pour changer la couleur de remplissage, Shift-Clic pour changer la couleur de contour"},
-{"id": "path_node_x", "title": "Changer la positon horizontale x du nœud"},
-{"id": "path_node_y", "title": "Changer la position verticale y du nœud"},
-{"id": "rect_height_tool", "title": "Changer la hauteur du rectangle"},
-{"id": "rect_width_tool", "title": "Changer la largeur du rectangle"},
-{"id": "relativeToLabel", "textContent": "Relativement à:"},
-{"id": "seg_type", "title": "Changer le type du Segment"},
-{"id": "selLayerLabel", "textContent": "Déplacer éléments vers:"},
-{"id": "selLayerNames", "title": "Déplacer les éléments sélectionnés vers un autre calque"},
-{"id": "selectedPredefined", "textContent": "Sélectionner prédéfinis:"},
-{"id": "selected_objects", "textContent": "Objets sélectionnés"},
-{"id": "selected_x", "title": "Changer la position horizontale X"},
-{"id": "selected_y", "title": "Changer la position verticale Y"},
-{"id": "smallest_object", "textContent": "Plus petit objet"},
-{"id": "straight_segments", "textContent": "Droit"},
-{"id": "stroke_color", "title": "Changer la couleur du contour"},
-{"id": "stroke_style", "title": "Changer le style du contour"},
-{"id": "stroke_width", "title": "Changer la largeur du contour de 1, Shift-Click pour changer la largeur de 0.1"},
-{"id": "svginfo_bg_note", "textContent": "Note: La toile de fond n'est pas sauvegardée avec l'image."},
-{"id": "svginfo_change_background", "textContent": "Toile de fond de l'Éditeur"},
-{"id": "svginfo_dim", "textContent": "Dimensions du canevas"},
-{"id": "svginfo_editor_prefs", "textContent": "Préférences de l'Éditeur"},
-{"id": "svginfo_height", "textContent": "Hauteur:"},
-{"id": "svginfo_icons", "textContent": "Taille des icônes"},
-{"id": "svginfo_image_props", "textContent": "Propriétés de l'Image"},
-{"id": "svginfo_lang", "textContent": "Langue"},
-{"id": "svginfo_title", "textContent": "Titre"},
-{"id": "svginfo_width", "textContent": "Largeur:"},
-{"id": "text", "title": "Changer le contenu du texte"},
-{"id": "toggle_stroke_tools", "title": "Montrer/Cacher plus d'outils de Contour"},
-{"id": "tool_add_subpath", "title": "Ajouter un sous-chemin"},
-{"id": "tool_alignbottom", "title": "Aligner le bas des objets"},
-{"id": "tool_aligncenter", "title": "Centrer verticalement"},
-{"id": "tool_alignleft", "title": "Aligner les côtés gauches"},
-{"id": "tool_alignmiddle", "title": "Centrer horizontalement"},
-{"id": "tool_alignright", "title": "Aligner les côtés droits"},
-{"id": "tool_aligntop", "title": "Aligner le haut des objets"},
-{"id": "tool_angle", "title": "Changer l'angle de rotation"},
-{"id": "tool_blur", "title": "Changer la valeur du flou gaussien"},
-{"id": "tool_bold", "title": "Texte en gras"},
-{"id": "tool_circle", "title": "Cercle"},
-{"id": "tool_clear", "textContent": "Nouvelle image"},
-{"id": "tool_clone", "title": "Cloner l'élément"},
-{"id": "tool_clone_multi", "title": "Cloner les éléments"},
-{"id": "tool_delete", "title": "Supprimer l'élément"},
-{"id": "tool_delete_multi", "title": "Supprimer les éléments sélectionnés"},
-{"id": "tool_docprops", "textContent": "Propriétés du document"},
-{"id": "tool_docprops_cancel", "textContent": "Annuler"},
-{"id": "tool_docprops_save", "textContent": "OK"},
-{"id": "tool_ellipse", "title": "Ellipse"},
-{"id": "tool_export", "textContent": "Exporter au format PNG"},
-{"id": "tool_eyedropper", "title": "Outil Pipette"},
-{"id": "tool_fhellipse", "title": "Ellipse main levée"},
-{"id": "tool_fhpath", "title": "Crayon à main levée"},
-{"id": "tool_fhrect", "title": "Rectangle main levée"},
-{"id": "tool_font_size", "title": "Changer la taille de la police"},
-{"id": "tool_group", "title": "Grouper les éléments"},
-{"id": "tool_image", "title": "Outil Image"},
-{"id": "tool_import", "textContent": "Importer un objet SVG"},
-{"id": "tool_italic", "title": "Texte en italique"},
-{"id": "tool_line", "title": "Tracer des lignes"},
-{"id": "tool_move_bottom", "title": "Déplacer vers le bas"},
-{"id": "tool_move_top", "title": "Déplacer vers le haut"},
-{"id": "tool_node_clone", "title": "Cloner le nœud"},
-{"id": "tool_node_delete", "title": "Supprimer le nœud"},
-{"id": "tool_node_link", "title": "Rendre les points de contrôle solidaires"},
-{"id": "tool_opacity", "title": "Changer l'opacité de l'élément sélectionné"},
-{"id": "tool_open", "textContent": "Ouvrir une image"},
-{"id": "tool_openclose_path", "title": "Ouvrir/Fermer sous-chemin"},
-{"id": "tool_path", "title": "Outil Chemin"},
-{"id": "tool_position", "title": "Aligner l'élément relativement à la Page"},
-{"id": "tool_rect", "title": "Rectangle"},
-{"id": "tool_redo", "title": "Refaire l'action"},
-{"id": "tool_reorient", "title": "Réorienter le chemin"},
-{"id": "tool_save", "textContent": "Enregistrer l'image"},
-{"id": "tool_select", "title": "Outil de sélection"},
-{"id": "tool_source", "title": "Modifier la source"},
-{"id": "tool_source_cancel", "textContent": "Annuler"},
-{"id": "tool_source_save", "textContent": "Appliquer Modifications"},
-{"id": "tool_square", "title": "Carré"},
-{"id": "tool_text", "title": "Outil Texte"},
-{"id": "tool_topath", "title": "Convertir en chemin"},
-{"id": "tool_undo", "title": "Annuler l'action"},
-{"id": "tool_ungroup", "title": "Dégrouper les éléments"},
-{"id": "tool_wireframe", "title": "Mode Fil de Fer"},
-{"id": "tool_zoom", "title": "Zoom"},
-{"id": "url_notice", "title": "NOTE: Cette image ne peut être incorporée en tant que données. Le contenu affiché sera celui de l'image située à cette adresse"},
-{"id": "zoom_panel", "title": "Changer le niveau de zoom"},
-{"id": "sidepanel_handle", "textContent": "C A L Q U E S", "title": "Tirer vers la gauche/droite pour redimensionner le panneau"},
-{
- "js_strings": {
- "QerrorsRevertToSource": "Il y a des erreurs d'analyse syntaxique dans votre code-source SVG.\nRevenir au code-source SVG avant modifications ?",
- "QignoreSourceChanges": "Ignorer les modifications faites à la source SVG ?",
- "QmoveElemsToLayer": "Déplacer les éléments sélectionnés vers le calque '%s' ?",
- "QwantToClear": "Voulez-vous effacer le dessin ?\nL'historique de vos actions sera également effacé !",
- "cancel": "Annuler",
- "defsFailOnSave": "NOTE : À cause d'un bug de votre navigateur, cette image peut être affichée de façon incorrecte (dégradés ou éléments manquants). Cependant, une fois enregistrée, elle sera correcte.",
- "dupeLayerName": "Il existe déjà un calque de ce nom !",
- "enterNewImgURL": "Entrer la nouvelle URL de l'image",
- "enterNewLayerName": "Veuillez entrer le nouveau nom du calque",
- "enterUniqueLayerName": "Veuillez entrer un nom (unique) pour le calque",
- "exportNoBlur": "Les éléments ayant du flou gaussien seront affichés sans flou",
- "exportNoDashArray": "Les contours seront affichés remplis",
- "exportNoImage": "Les éléments Image ne seront pas affichés",
- "exportNoText": "Le texte peut être affiché de façon incorrecte",
- "exportNoforeignObject": "Les éléments foreignObject se seront pas affichés",
- "featNotSupported": "Fonction non supportée",
- "invalidAttrValGiven": "Valeur fournie invalide",
- "key_backspace": "Suppr.",
- "key_del": "Retour Arr.",
- "key_down": "Bas",
- "key_up": "Haut",
- "layer": "Calque",
- "layerHasThatName": "Le calque porte déjà ce nom",
- "loadingImage": "Chargement de l'image, veuillez patienter...",
- "noContentToFitTo": "Il n'y a pas de contenu auquel ajuster",
- "noteTheseIssues": "Notez également les problèmes suivants : ",
- "ok": "OK",
- "pathCtrlPtTooltip": "Glisser-déposer le point de contrôle pour ajuster les propriétés de la courbe",
- "pathNodeTooltip": "Glisser-déposer le nœud pour le déplacer. Double-cliquer le nœud pour changer de type de segment",
- "saveFromBrowser": "Selectionner \"Enregistrer sous...\" dans votre navigateur pour sauvegarder l'image en tant que fichier %s."
- }
-}
-] \ No newline at end of file
diff --git a/files_svgedit/js/locale/lang.fy.js b/files_svgedit/js/locale/lang.fy.js
deleted file mode 100644
index dd615a324..000000000
--- a/files_svgedit/js/locale/lang.fy.js
+++ /dev/null
@@ -1,173 +0,0 @@
-[
-{"id": "align_relative_to", "title": "Útlijne relatyf oan..."},
-{"id": "bkgnd_color", "title": "Eftergrûnkleur/trochsichtigens oanpasse"},
-{"id": "circle_cx", "title": "Feroarje it X-koördinaat fan it middelpunt fan'e sirkel."},
-{"id": "circle_cy", "title": "Feroarje it Y-koördinaat fan it middelpunt fan'e sirkel."},
-{"id": "circle_r", "title": "Feroarje sirkelradius"},
-{"id": "connector_no_arrow", "textContent": "No arrow"},
-{"id": "copyrightLabel", "textContent": "Powered by"},
-{"id": "cornerRadiusLabel", "title": "Hoekeradius oanpasse"},
-{"id": "curve_segments", "textContent": "Bûcht"},
-{"id": "ellipse_cx", "title": "Feroarje it X-koördinaat fan it middelpunt fan'e ellips."},
-{"id": "ellipse_cy", "title": "Feroarje it Y-koördinaat fan it middelpunt fan'e ellips."},
-{"id": "ellipse_rx", "title": "Feroarje ellips X radius"},
-{"id": "ellipse_ry", "title": "Feroarje ellips Y radius"},
-{"id": "fill_color", "title": "Folkleur oanpasse"},
-{"id": "fitToContent", "textContent": "Passe op ynhâld"},
-{"id": "fit_to_all", "textContent": "Op alle ynhâld passe"},
-{"id": "fit_to_canvas", "textContent": "Op kanvas passe"},
-{"id": "fit_to_layer_content", "textContent": "Op laachynhâld passe"},
-{"id": "fit_to_sel", "textContent": "Op seleksje passe"},
-{"id": "font_family", "title": "Lettertype oanpasse"},
-{"id": "icon_large", "textContent": "Grut"},
-{"id": "icon_medium", "textContent": "Middel"},
-{"id": "icon_small", "textContent": "Lyts"},
-{"id": "icon_xlarge", "textContent": "Ekstra grut"},
-{"id": "image_height", "title": "Hichte ôfbielding oanpasse"},
-{"id": "image_opt_embed", "textContent": "Ynformaasje tafoege (lokale triemen)"},
-{"id": "image_opt_ref", "textContent": "Triemreferensje brûke"},
-{"id": "image_url", "title": "URL oanpasse"},
-{"id": "image_width", "title": "Breedte ôfbielding oanpasse"},
-{"id": "includedImages", "textContent": "Ynslúten ôfbieldingen"},
-{"id": "largest_object", "textContent": "Grutste ûnderdiel"},
-{"id": "layer_delete", "title": "Laach fuortsmite"},
-{"id": "layer_down", "title": "Laach omleech bringe"},
-{"id": "layer_new", "title": "Nije laach"},
-{"id": "layer_rename", "title": "Laach omneame"},
-{"id": "layer_up", "title": "Laach omheech bringe"},
-{"id": "layersLabel", "textContent": "Lagen:"},
-{"id": "line_x1", "title": "Feroarje start X koördinaat fan'e line"},
-{"id": "line_x2", "title": "Feroarje ein X koördinaat fan'e line"},
-{"id": "line_y1", "title": "Feroarje start Y koördinaat fan'e line"},
-{"id": "line_y2", "title": "Feroarje ein Y koördinaat fan'e line"},
-{"id": "linecap_butt", "title": "Linecap: Butt"},
-{"id": "linecap_round", "title": "Linecap: Round"},
-{"id": "linecap_square", "title": "Linecap: Square"},
-{"id": "linejoin_bevel", "title": "Linejoin: Bevel"},
-{"id": "linejoin_miter", "title": "Linejoin: Miter"},
-{"id": "linejoin_round", "title": "Linejoin: Round"},
-{"id": "main_icon", "title": "Main Menu"},
-{"id": "mode_connect", "title": "Connect two objects"},
-{"id": "page", "textContent": "Side"},
-{"id": "palette", "title": "Klik om de folkleur te feroarjen, shift-klik om de linekleur te feroarjen."},
-{"id": "path_node_x", "title": "X-koördinaat knooppunt oanpasse"},
-{"id": "path_node_y", "title": "Y-koördinaat knooppunt oanpasse"},
-{"id": "rect_height_tool", "title": "Hichte rjochthoeke oanpasse"},
-{"id": "rect_width_tool", "title": "Breedte rjochthoeke oanpasse"},
-{"id": "relativeToLabel", "textContent": "Relatief tsjinoer:"},
-{"id": "seg_type", "title": "Segmenttype oanpasse"},
-{"id": "selLayerLabel", "textContent": "Ûnderdielen ferplaate nei:"},
-{"id": "selLayerNames", "title": "Selektearre ûnderdielen ferplaatse nei in oare laach"},
-{"id": "selectedPredefined", "textContent": "Selektearje:"},
-{"id": "selected_objects", "textContent": "Selektearre ûnderdielen"},
-{"id": "selected_x", "title": "X-koördinaat oanpasse"},
-{"id": "selected_y", "title": "Y-koördinaat oanpasse"},
-{"id": "smallest_object", "textContent": "Lytste ûnderdiel"},
-{"id": "straight_segments", "textContent": "Rjocht"},
-{"id": "stroke_color", "title": "Linekleur oanpasse"},
-{"id": "stroke_style", "title": "Linestijl oanpasse"},
-{"id": "stroke_width", "title": "Linebreedte oanpasse"},
-{"id": "svginfo_bg_note", "textContent": "Let op: de eftergrûn wurd net mei de ôfbielding bewarre."},
-{"id": "svginfo_change_background", "textContent": "Eftergrûn bewurker"},
-{"id": "svginfo_dim", "textContent": "Kanvasgrutte"},
-{"id": "svginfo_editor_prefs", "textContent": "Eigenskippen bewurker"},
-{"id": "svginfo_height", "textContent": "Hichte:"},
-{"id": "svginfo_icons", "textContent": "Ikoangrutte"},
-{"id": "svginfo_image_props", "textContent": "Ôfbieldingseigenskippen"},
-{"id": "svginfo_lang", "textContent": "Taal"},
-{"id": "svginfo_title", "textContent": "Titel"},
-{"id": "svginfo_width", "textContent": "Breedte:"},
-{"id": "text", "title": "Tekst oanpasse"},
-{"id": "toggle_stroke_tools", "title": "Show/hide more stroke tools"},
-{"id": "tool_add_subpath", "title": "Add sub-path"},
-{"id": "tool_alignbottom", "title": "Ûnder útlijne"},
-{"id": "tool_aligncenter", "title": "Midden útlijne"},
-{"id": "tool_alignleft", "title": "Lofts útlijne"},
-{"id": "tool_alignmiddle", "title": "Midden útlijne"},
-{"id": "tool_alignright", "title": "Rjochts útlijne"},
-{"id": "tool_aligntop", "title": "Boppe útlijne"},
-{"id": "tool_angle", "title": "Draaie"},
-{"id": "tool_blur", "title": "Change gaussian blur value"},
-{"id": "tool_bold", "title": "Fet"},
-{"id": "tool_circle", "title": "Sirkel"},
-{"id": "tool_clear", "textContent": "Nije ôfbielding"},
-{"id": "tool_clone", "title": "Ûnderdiel duplisearje"},
-{"id": "tool_clone_multi", "title": "Ûnderdielen duplisearje"},
-{"id": "tool_delete", "title": "Ûnderdiel fuortsmite"},
-{"id": "tool_delete_multi", "title": "Ûnderdielen fuortsmite"},
-{"id": "tool_docprops", "textContent": "Dokuminteigenskippen"},
-{"id": "tool_docprops_cancel", "textContent": "Ôfbrekke"},
-{"id": "tool_docprops_save", "textContent": "Ok"},
-{"id": "tool_ellipse", "title": "Ellips"},
-{"id": "tool_export", "textContent": "Export as PNG"},
-{"id": "tool_eyedropper", "title": "Eye Dropper Tool"},
-{"id": "tool_fhellipse", "title": "Frije ellips"},
-{"id": "tool_fhpath", "title": "Potlead"},
-{"id": "tool_fhrect", "title": "Frije rjochthoeke"},
-{"id": "tool_font_size", "title": "Lettergrutte oanpasse"},
-{"id": "tool_group", "title": "Ûnderdielen groepearje"},
-{"id": "tool_image", "title": "Ôfbielding"},
-{"id": "tool_import", "textContent": "Import SVG"},
-{"id": "tool_italic", "title": "Skean"},
-{"id": "tool_line", "title": "Line"},
-{"id": "tool_move_bottom", "title": "Nei eftergrûn"},
-{"id": "tool_move_top", "title": "Nei foargrûn"},
-{"id": "tool_node_clone", "title": "Knooppunt duplisearje"},
-{"id": "tool_node_delete", "title": "Knooppunt fuortsmite"},
-{"id": "tool_node_link", "title": "Knooppunten keppelje"},
-{"id": "tool_opacity", "title": "Trochsichtigens oanpasse"},
-{"id": "tool_open", "textContent": "Ôfbielding iepenje"},
-{"id": "tool_path", "title": "Paad"},
-{"id": "tool_rect", "title": "Rjochthoeke"},
-{"id": "tool_redo", "title": "Op 'e nij"},
-{"id": "tool_reorient", "title": "Paad opnij orientearje"},
-{"id": "tool_save", "textContent": "Ôfbielding bewarje"},
-{"id": "tool_select", "title": "Selektearje"},
-{"id": "tool_source", "title": "Boarne oanpasse"},
-{"id": "tool_source_cancel", "textContent": "Ôfbrekke"},
-{"id": "tool_source_save", "textContent": "Feroarings tapasse"},
-{"id": "tool_square", "title": "Fjouwerkant"},
-{"id": "tool_text", "title": "Tekst"},
-{"id": "tool_topath", "title": "Omsette nei paad"},
-{"id": "tool_undo", "title": "Ungedien meitjse"},
-{"id": "tool_ungroup", "title": "Groepering opheffe"},
-{"id": "tool_wireframe", "title": "Triemodel"},
-{"id": "tool_zoom", "title": "Zoom"},
-{"id": "url_notice", "title": "NOTE: This image cannot be embedded. It will depend on this path to be displayed"},
-{"id": "zoom_panel", "title": "Yn-/útzoome"},
-{"id": "sidepanel_handle", "textContent": "L a g e n", "title": "Sleep nei links/rjochts om it sidepaniel grutter as lytser te meitjen"},
-{
- "js_strings": {
- "QerrorsRevertToSource": "Der wiene flaters yn de SVG-boarne.\nWeromgean nei foarige SVG-boarne?",
- "QignoreSourceChanges": "Feroarings yn SVG-boarne negeare?",
- "QmoveElemsToLayer": "Selektearre ûnderdielen ferplaatse nei '%s'?",
- "QwantToClear": "Ôfbielding leechmeitsje? Dit sil ek de skiednis fuortsmite!",
- "cancel": "Ôfbrekke",
- "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.",
- "dupeLayerName": "Der is al in laach mei dy namme!",
- "enterNewImgURL": "Jou de nije URL",
- "enterNewLayerName": "Type in nije laachnamme",
- "enterUniqueLayerName": "Type in unyke laachnamme",
- "exportNoBlur": "Blurred elements will appear as un-blurred",
- "exportNoDashArray": "Strokes will appear filled",
- "exportNoImage": "Image elements will not appear",
- "exportNoText": "Text may not appear as expected",
- "exportNoforeignObject": "foreignObject elements will not appear",
- "featNotSupported": "Funksje wurdt net ûndersteund",
- "invalidAttrValGiven": "Ferkearde waarde jûn",
- "key_backspace": "backspace",
- "key_del": "delete",
- "key_down": "omleech",
- "key_up": "omheech",
- "layer": "Laach",
- "layerHasThatName": "Laach hat dy namme al",
- "loadingImage": "Loading image, please wait...",
- "noContentToFitTo": "Gjin ynhâld om te passen",
- "noteTheseIssues": "Also note the following issues: ",
- "ok": "Ok",
- "pathCtrlPtTooltip": "Fersleepje dit knooppunt om de boocheigenskippen oan te passen.",
- "pathNodeTooltip": "Fersleepje dit knooppunt as dûbelklik om it segmenttype oan te passen.",
- "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file."
- }
-}
-] \ No newline at end of file
diff --git a/files_svgedit/js/locale/lang.ga.js b/files_svgedit/js/locale/lang.ga.js
deleted file mode 100644
index 68659a252..000000000
--- a/files_svgedit/js/locale/lang.ga.js
+++ /dev/null
@@ -1,156 +0,0 @@
-[
-{"id": "align_relative_to", "title": "Ailínigh i gcomparáid leis ..."},
-{"id": "angleLabel", "textContent": "uillinn:"},
-{"id": "bkgnd_color", "title": "Dath cúlra Athraigh / teimhneacht"},
-{"id": "circle_cx", "title": "Athraigh an ciorcal a chomhordú CX"},
-{"id": "circle_cy", "title": "Athraigh an ciorcal a chomhordú ga"},
-{"id": "circle_r", "title": "Athraigh an ciorcal&#39;s ga"},
-{"id": "cornerRadiusLabel", "textContent": "Ga Cúinne:"},
-{"id": "cornerRadiusLabel", "title": "Athraigh Dronuilleog Cúinne na Ga"},
-{"id": "curve_segments", "textContent": "Curve"},
-{"id": "ellipse_cx", "title": "Athraigh Éilips&#39;s CX a chomhordú"},
-{"id": "ellipse_cy", "title": "Athraigh an Éilips a chomhordú ga"},
-{"id": "ellipse_rx", "title": "Éilips Athraigh an gha x"},
-{"id": "ellipse_ry", "title": "Éilips Athraigh an gha y"},
-{"id": "fill_color", "title": "Athraigh an dath a líonadh"},
-{"id": "fill_tool_bottom", "textContent": "líon:"},
-{"id": "fitToContent", "textContent": "Fit to Content"},
-{"id": "fit_to_all", "textContent": "Laghdaigh do gach ábhar"},
-{"id": "fit_to_canvas", "textContent": "Laghdaigh ar chanbhás"},
-{"id": "fit_to_layer_content", "textContent": "Laghdaigh shraith ábhar a"},
-{"id": "fit_to_sel", "textContent": "Laghdaigh a roghnú"},
-{"id": "font_family", "title": "Athraigh an Cló Teaghlaigh"},
-{"id": "icon_large", "textContent": "Large"},
-{"id": "icon_medium", "textContent": "Medium"},
-{"id": "icon_small", "textContent": "Small"},
-{"id": "icon_xlarge", "textContent": "Extra Large"},
-{"id": "iheightLabel", "textContent": "airde:"},
-{"id": "image_height", "title": "Airde íomhá Athrú"},
-{"id": "image_opt_embed", "textContent": "Embed data (local files)"},
-{"id": "image_opt_ref", "textContent": "Use file reference"},
-{"id": "image_url", "title": "Athraigh an URL"},
-{"id": "image_width", "title": "Leithead íomhá Athrú"},
-{"id": "includedImages", "textContent": "Included Images"},
-{"id": "iwidthLabel", "textContent": "leithne:"},
-{"id": "largest_object", "textContent": "réad is mó"},
-{"id": "layer_delete", "title": "Scrios Sraith"},
-{"id": "layer_down", "title": "Bog Sraith Síos"},
-{"id": "layer_new", "title": "Sraith Nua"},
-{"id": "layer_rename", "title": "Athainmnigh Sraith"},
-{"id": "layer_up", "title": "Bog Sraith Suas"},
-{"id": "layersLabel", "textContent": "Layers:"},
-{"id": "line_x1", "title": "Athraigh an líne tosaigh a chomhordú x"},
-{"id": "line_x2", "title": "Athraigh an líne deireadh x chomhordú"},
-{"id": "line_y1", "title": "Athraigh an líne tosaigh a chomhordú y"},
-{"id": "line_y2", "title": "Athrú ar líne deireadh y chomhordú"},
-{"id": "page", "textContent": "leathanach"},
-{"id": "palette", "title": "Cliceáil chun athrú a líonadh dath, aistriú-cliceáil chun dath a athrú stróc"},
-{"id": "path_node_x", "title": "Change node's x coordinate"},
-{"id": "path_node_y", "title": "Change node's y coordinate"},
-{"id": "rect_height_tool", "title": "Airde dronuilleog Athrú"},
-{"id": "rect_width_tool", "title": "Leithead dronuilleog Athrú"},
-{"id": "relativeToLabel", "textContent": "i gcomparáid leis:"},
-{"id": "rheightLabel", "textContent": "Airde:"},
-{"id": "rwidthLabel", "textContent": "leithead:"},
-{"id": "seg_type", "title": "Change Segment type"},
-{"id": "selLayerLabel", "textContent": "Move elements to:"},
-{"id": "selLayerNames", "title": "Move selected elements to a different layer"},
-{"id": "selectedPredefined", "textContent": "Roghnaigh réamhshainithe:"},
-{"id": "selected_objects", "textContent": "réada tofa"},
-{"id": "selected_x", "title": "Change X coordinate"},
-{"id": "selected_y", "title": "Change Y coordinate"},
-{"id": "smallest_object", "textContent": "lú réad"},
-{"id": "straight_segments", "textContent": "Straight"},
-{"id": "stroke_color", "title": "Dath stróc Athrú"},
-{"id": "stroke_style", "title": "Athraigh an stíl Fleasc stróc"},
-{"id": "stroke_tool_bottom", "textContent": "buille:"},
-{"id": "stroke_width", "title": "Leithead stróc Athrú"},
-{"id": "svginfo_bg_note", "textContent": "Note: Background will not be saved with image."},
-{"id": "svginfo_change_background", "textContent": "Editor Background"},
-{"id": "svginfo_dim", "textContent": "Canvas Dimensions"},
-{"id": "svginfo_editor_prefs", "textContent": "Editor Preferences"},
-{"id": "svginfo_height", "textContent": "Airde:"},
-{"id": "svginfo_icons", "textContent": "Icon size"},
-{"id": "svginfo_image_props", "textContent": "Image Properties"},
-{"id": "svginfo_lang", "textContent": "Language"},
-{"id": "svginfo_title", "textContent": "Title"},
-{"id": "svginfo_width", "textContent": "Leithne:"},
-{"id": "text", "title": "Inneachar Athraigh téacs"},
-{"id": "tool_alignbottom", "title": "Cineál Bun"},
-{"id": "tool_aligncenter", "title": "Ailínigh sa Lár"},
-{"id": "tool_alignleft", "title": "Ailínigh ar Chlé"},
-{"id": "tool_alignmiddle", "title": "Cineál Middle"},
-{"id": "tool_alignright", "title": "Ailínigh ar Dheis"},
-{"id": "tool_aligntop", "title": "Cineál Barr"},
-{"id": "tool_angle", "title": "Uillinn rothlaithe Athrú"},
-{"id": "tool_bold", "title": "Trom Téacs"},
-{"id": "tool_circle", "title": "Ciorcal"},
-{"id": "tool_clear", "textContent": "Íomhá Nua"},
-{"id": "tool_clone", "title": "Eilimint Chlónála"},
-{"id": "tool_clone_multi", "title": "Eilimintí Chlónála"},
-{"id": "tool_delete", "title": "Scrios Eilimint"},
-{"id": "tool_delete_multi", "title": "Eilimintí Roghnaithe Scrios [Delete/Backspace]"},
-{"id": "tool_docprops", "textContent": "Doiciméad Airíonna"},
-{"id": "tool_docprops_cancel", "textContent": "Cealaigh"},
-{"id": "tool_docprops_save", "textContent": "Sábháil"},
-{"id": "tool_ellipse", "title": "Éilips"},
-{"id": "tool_fhellipse", "title": "Free-Hand Ellipse"},
-{"id": "tool_fhpath", "title": "Phionsail Uirlis"},
-{"id": "tool_fhrect", "title": "Saor Hand Dronuilleog"},
-{"id": "tool_font_size", "title": "Athraigh Clómhéid"},
-{"id": "tool_group", "title": "Eilimintí Grúpa"},
-{"id": "tool_image", "title": "Íomhá Uirlis"},
-{"id": "tool_italic", "title": "Iodálach Téacs"},
-{"id": "tool_line", "title": "Uirlis Líne"},
-{"id": "tool_move_bottom", "title": "Téigh go Bun"},
-{"id": "tool_move_top", "title": "Téigh go Barr"},
-{"id": "tool_node_clone", "title": "Clone Node"},
-{"id": "tool_node_delete", "title": "Delete Node"},
-{"id": "tool_node_link", "title": "Link Control Points"},
-{"id": "tool_opacity", "title": "Athraigh roghnaithe teimhneacht mír"},
-{"id": "tool_open", "textContent": "Íomhá Oscailte"},
-{"id": "tool_path", "title": "Path Tool"},
-{"id": "tool_rect", "title": "Dronuilleog"},
-{"id": "tool_redo", "title": "Athdhéan"},
-{"id": "tool_reorient", "title": "Reorient path"},
-{"id": "tool_save", "textContent": "Sábháil Íomhá"},
-{"id": "tool_select", "title": "Roghnaigh Uirlis"},
-{"id": "tool_source", "title": "Cuir Foinse"},
-{"id": "tool_source_cancel", "textContent": "Cealaigh"},
-{"id": "tool_source_save", "textContent": "Sábháil"},
-{"id": "tool_square", "title": "Cearnóg"},
-{"id": "tool_text", "title": "Téacs Uirlis"},
-{"id": "tool_topath", "title": "Convert to Path"},
-{"id": "tool_undo", "title": "Cealaigh"},
-{"id": "tool_ungroup", "title": "Eilimintí Díghrúpáil"},
-{"id": "tool_wireframe", "title": "Wireframe Mode"},
-{"id": "tool_zoom", "title": "Zúmáil Uirlis"},
-{"id": "zoomLabel", "textContent": "súmáil isteach:"},
-{"id": "zoom_panel", "title": "Athraigh súmáil leibhéal"},
-{"id": "sidepanel_handle", "textContent": "L a y e r s", "title": "Drag left/right to resize side panel"},
-{
- "js_strings": {
- "QerrorsRevertToSource": "There were parsing errors in your SVG source.\nRevert back to original SVG source?",
- "QignoreSourceChanges": "Ignore changes made to SVG source?",
- "QmoveElemsToLayer": "Move selected elements to layer '%s'?",
- "QwantToClear": "Do you want to clear the drawing?\nThis will also erase your undo history!",
- "cancel": "Cancel",
- "dupeLayerName": "There is already a layer named that!",
- "enterNewImgURL": "Enter the new image URL",
- "enterNewLayerName": "Please enter the new layer name",
- "enterUniqueLayerName": "Please enter a unique layer name",
- "featNotSupported": "Feature not supported",
- "invalidAttrValGiven": "Invalid value given",
- "key_backspace": "backspace",
- "key_del": "delete",
- "key_down": "down",
- "key_up": "up",
- "layer": "Layer",
- "layerHasThatName": "Layer already has that name",
- "noContentToFitTo": "No content to fit to",
- "ok": "OK",
- "pathCtrlPtTooltip": "Drag control point to adjust curve properties",
- "pathNodeTooltip": "Drag node to move it. Double-click node to change segment type"
- }
-}
-] \ No newline at end of file
diff --git a/files_svgedit/js/locale/lang.gl.js b/files_svgedit/js/locale/lang.gl.js
deleted file mode 100644
index 0d7fe2a19..000000000
--- a/files_svgedit/js/locale/lang.gl.js
+++ /dev/null
@@ -1,173 +0,0 @@
-[
-{"id": "align_relative_to", "title": "Aliñar en relación a ..."},
-{"id": "bkgnd_color", "title": "Mudar a cor de fondo / Opacidade"},
-{"id": "circle_cx", "title": "Cx Cambiar círculo de coordenadas"},
-{"id": "circle_cy", "title": "Círculo Cambio cy coordinar"},
-{"id": "circle_r", "title": "Cambiar círculo de raio"},
-{"id": "connector_no_arrow", "textContent": "No arrow"},
-{"id": "copyrightLabel", "textContent": "Powered by"},
-{"id": "cornerRadiusLabel", "title": "Cambiar Corner Rectangle Radius"},
-{"id": "curve_segments", "textContent": "Curve"},
-{"id": "ellipse_cx", "title": "Cambiar elipse cx coordinar"},
-{"id": "ellipse_cy", "title": "Elipse Cambio cy coordinar"},
-{"id": "ellipse_rx", "title": "Raios X Change elipse"},
-{"id": "ellipse_ry", "title": "Radio y Change elipse"},
-{"id": "fill_color", "title": "Cambia-la cor de recheo"},
-{"id": "fitToContent", "textContent": "Axustar ó contido"},
-{"id": "fit_to_all", "textContent": "Axustar a todo o contido"},
-{"id": "fit_to_canvas", "textContent": "Axustar a pantalla"},
-{"id": "fit_to_layer_content", "textContent": "Axustar o contido da capa de"},
-{"id": "fit_to_sel", "textContent": "Axustar a selección"},
-{"id": "font_family", "title": "Cambiar fonte Familia"},
-{"id": "icon_large", "textContent": "Large"},
-{"id": "icon_medium", "textContent": "Medium"},
-{"id": "icon_small", "textContent": "Small"},
-{"id": "icon_xlarge", "textContent": "Extra Large"},
-{"id": "image_height", "title": "Cambiar altura da imaxe"},
-{"id": "image_opt_embed", "textContent": "Embed data (local files)"},
-{"id": "image_opt_ref", "textContent": "Use file reference"},
-{"id": "image_url", "title": "Cambiar URL"},
-{"id": "image_width", "title": "Cambiar o ancho da imaxe"},
-{"id": "includedImages", "textContent": "Included Images"},
-{"id": "largest_object", "textContent": "maior obxecto"},
-{"id": "layer_delete", "title": "Delete Layer"},
-{"id": "layer_down", "title": "Move capa inferior"},
-{"id": "layer_new", "title": "New Layer"},
-{"id": "layer_rename", "title": "Rename Layer"},
-{"id": "layer_up", "title": "Move Layer Up"},
-{"id": "layersLabel", "textContent": "Capas:"},
-{"id": "line_x1", "title": "Cambie a liña de partida coordenada x"},
-{"id": "line_x2", "title": "Cambie a liña acaba coordenada x"},
-{"id": "line_y1", "title": "Cambio na liña do recurso coordinada y"},
-{"id": "line_y2", "title": "Salto de liña acaba coordinada y"},
-{"id": "linecap_butt", "title": "Linecap: Butt"},
-{"id": "linecap_round", "title": "Linecap: Round"},
-{"id": "linecap_square", "title": "Linecap: Square"},
-{"id": "linejoin_bevel", "title": "Linejoin: Bevel"},
-{"id": "linejoin_miter", "title": "Linejoin: Miter"},
-{"id": "linejoin_round", "title": "Linejoin: Round"},
-{"id": "main_icon", "title": "Main Menu"},
-{"id": "mode_connect", "title": "Connect two objects"},
-{"id": "page", "textContent": "Portada"},
-{"id": "palette", "title": "Preme aquí para cambiar a cor de recheo, Shift-clic para cambiar a cor do curso"},
-{"id": "path_node_x", "title": "Change node's x coordinate"},
-{"id": "path_node_y", "title": "Change node's y coordinate"},
-{"id": "rect_height_tool", "title": "Cambiar altura do rectángulo"},
-{"id": "rect_width_tool", "title": "Cambiar a largo rectángulo"},
-{"id": "relativeToLabel", "textContent": "en relación ao:"},
-{"id": "seg_type", "title": "Change Segment type"},
-{"id": "selLayerLabel", "textContent": "Move elements to:"},
-{"id": "selLayerNames", "title": "Move selected elements to a different layer"},
-{"id": "selectedPredefined", "textContent": "Seleccione por defecto:"},
-{"id": "selected_objects", "textContent": "obxectos elixidos"},
-{"id": "selected_x", "title": "Change X coordinate"},
-{"id": "selected_y", "title": "Change Y coordinate"},
-{"id": "smallest_object", "textContent": "menor obxecto"},
-{"id": "straight_segments", "textContent": "Straight"},
-{"id": "stroke_color", "title": "Cambiar a cor do curso"},
-{"id": "stroke_style", "title": "Modifica o estilo do trazo do curso"},
-{"id": "stroke_width", "title": "Cambiar o ancho do curso"},
-{"id": "svginfo_bg_note", "textContent": "Note: Background will not be saved with image."},
-{"id": "svginfo_change_background", "textContent": "Editor Background"},
-{"id": "svginfo_dim", "textContent": "Canvas Dimensions"},
-{"id": "svginfo_editor_prefs", "textContent": "Editor Preferences"},
-{"id": "svginfo_height", "textContent": "Altura:"},
-{"id": "svginfo_icons", "textContent": "Icon size"},
-{"id": "svginfo_image_props", "textContent": "Image Properties"},
-{"id": "svginfo_lang", "textContent": "Language"},
-{"id": "svginfo_title", "textContent": "Title"},
-{"id": "svginfo_width", "textContent": "Ancho:"},
-{"id": "text", "title": "Cambiar o contido de texto"},
-{"id": "toggle_stroke_tools", "title": "Show/hide more stroke tools"},
-{"id": "tool_add_subpath", "title": "Add sub-path"},
-{"id": "tool_alignbottom", "title": "Align bottom"},
-{"id": "tool_aligncenter", "title": "Centrar"},
-{"id": "tool_alignleft", "title": "Aliñar á Esquerda"},
-{"id": "tool_alignmiddle", "title": "Aliñar Medio"},
-{"id": "tool_alignright", "title": "Aliñar á Dereita"},
-{"id": "tool_aligntop", "title": "Align Top"},
-{"id": "tool_angle", "title": "Cambiar o ángulo de xiro"},
-{"id": "tool_blur", "title": "Change gaussian blur value"},
-{"id": "tool_bold", "title": "Bold Text"},
-{"id": "tool_circle", "title": "Circle"},
-{"id": "tool_clear", "textContent": "Nova Imaxe"},
-{"id": "tool_clone", "title": "Clon Element"},
-{"id": "tool_clone_multi", "title": "Elementos Clon"},
-{"id": "tool_delete", "title": "Eliminar Elemento"},
-{"id": "tool_delete_multi", "title": "Eliminar elementos seleccionados"},
-{"id": "tool_docprops", "textContent": "Propriedades do Documento"},
-{"id": "tool_docprops_cancel", "textContent": "Cancelar"},
-{"id": "tool_docprops_save", "textContent": "Gardar"},
-{"id": "tool_ellipse", "title": "Elipse"},
-{"id": "tool_export", "textContent": "Export as PNG"},
-{"id": "tool_eyedropper", "title": "Eye Dropper Tool"},
-{"id": "tool_fhellipse", "title": "Free-Hand Ellipse"},
-{"id": "tool_fhpath", "title": "Ferramenta Lapis"},
-{"id": "tool_fhrect", "title": "Free-Hand Rectangle"},
-{"id": "tool_font_size", "title": "Mudar tamaño de letra"},
-{"id": "tool_group", "title": "Elementos do grupo"},
-{"id": "tool_image", "title": "Image Tool"},
-{"id": "tool_import", "textContent": "Import SVG"},
-{"id": "tool_italic", "title": "Texto en cursiva"},
-{"id": "tool_line", "title": "Ferramenta Liña"},
-{"id": "tool_move_bottom", "title": "Move a Bottom"},
-{"id": "tool_move_top", "title": "Move to Top"},
-{"id": "tool_node_clone", "title": "Clone Node"},
-{"id": "tool_node_delete", "title": "Delete Node"},
-{"id": "tool_node_link", "title": "Link Control Points"},
-{"id": "tool_opacity", "title": "Cambia a opacidade elemento seleccionado"},
-{"id": "tool_open", "textContent": "Abrir Imaxe"},
-{"id": "tool_path", "title": "Path Tool"},
-{"id": "tool_rect", "title": "Rectángulo"},
-{"id": "tool_redo", "title": "Volver"},
-{"id": "tool_reorient", "title": "Reorient path"},
-{"id": "tool_save", "textContent": "Gardar Imaxe"},
-{"id": "tool_select", "title": "Seleccionar a ferramenta"},
-{"id": "tool_source", "title": "Fonte Editar"},
-{"id": "tool_source_cancel", "textContent": "Cancelar"},
-{"id": "tool_source_save", "textContent": "Gardar"},
-{"id": "tool_square", "title": "Cadrado"},
-{"id": "tool_text", "title": "Ferramenta de Texto"},
-{"id": "tool_topath", "title": "Convert to Path"},
-{"id": "tool_undo", "title": "Desfacer"},
-{"id": "tool_ungroup", "title": "Elementos Desagrupadas"},
-{"id": "tool_wireframe", "title": "Wireframe Mode"},
-{"id": "tool_zoom", "title": "Zoom Tool"},
-{"id": "url_notice", "title": "NOTE: This image cannot be embedded. It will depend on this path to be displayed"},
-{"id": "zoom_panel", "title": "Cambiar o nivel de zoom"},
-{"id": "sidepanel_handle", "textContent": "L a y e r s", "title": "Drag left/right to resize side panel"},
-{
- "js_strings": {
- "QerrorsRevertToSource": "There were parsing errors in your SVG source.\nRevert back to original SVG source?",
- "QignoreSourceChanges": "Ignore changes made to SVG source?",
- "QmoveElemsToLayer": "Move selected elements to layer '%s'?",
- "QwantToClear": "Do you want to clear the drawing?\nThis will also erase your undo history!",
- "cancel": "Cancel",
- "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.",
- "dupeLayerName": "There is already a layer named that!",
- "enterNewImgURL": "Enter the new image URL",
- "enterNewLayerName": "Please enter the new layer name",
- "enterUniqueLayerName": "Please enter a unique layer name",
- "exportNoBlur": "Blurred elements will appear as un-blurred",
- "exportNoDashArray": "Strokes will appear filled",
- "exportNoImage": "Image elements will not appear",
- "exportNoText": "Text may not appear as expected",
- "exportNoforeignObject": "foreignObject elements will not appear",
- "featNotSupported": "Feature not supported",
- "invalidAttrValGiven": "Invalid value given",
- "key_backspace": "backspace",
- "key_del": "delete",
- "key_down": "down",
- "key_up": "up",
- "layer": "Layer",
- "layerHasThatName": "Layer already has that name",
- "loadingImage": "Loading image, please wait...",
- "noContentToFitTo": "No content to fit to",
- "noteTheseIssues": "Also note the following issues: ",
- "ok": "OK",
- "pathCtrlPtTooltip": "Drag control point to adjust curve properties",
- "pathNodeTooltip": "Drag node to move it. Double-click node to change segment type",
- "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file."
- }
-}
-] \ No newline at end of file
diff --git a/files_svgedit/js/locale/lang.he.js b/files_svgedit/js/locale/lang.he.js
deleted file mode 100755
index 42f1a8186..000000000
--- a/files_svgedit/js/locale/lang.he.js
+++ /dev/null
@@ -1,173 +0,0 @@
-[
-{"id": "align_relative_to", "title": "יישור ביחס ..."},
-{"id": "bkgnd_color", "title": "שנה את צבע הרקע / אטימות"},
-{"id": "circle_cx", "title": "CX מעגל של שנה לתאם"},
-{"id": "circle_cy", "title": "מעגל שנה של cy לתאם"},
-{"id": "circle_r", "title": "מעגל שנה של רדיוס"},
-{"id": "connector_no_arrow", "textContent": "No arrow"},
-{"id": "copyrightLabel", "textContent": "Powered by"},
-{"id": "cornerRadiusLabel", "title": "לשנות מלבן פינת רדיוס"},
-{"id": "curve_segments", "textContent": "Curve"},
-{"id": "ellipse_cx", "title": "שינוי של אליפסה CX לתאם"},
-{"id": "ellipse_cy", "title": "אליפסה שינוי של cy לתאם"},
-{"id": "ellipse_rx", "title": "אליפסה שינוי של רדיוס x"},
-{"id": "ellipse_ry", "title": "אליפסה שינוי של Y רדיוס"},
-{"id": "fill_color", "title": "שינוי צבע מילוי"},
-{"id": "fitToContent", "textContent": "התאם תוכן"},
-{"id": "fit_to_all", "textContent": "התאם התכנים"},
-{"id": "fit_to_canvas", "textContent": "התאם בד"},
-{"id": "fit_to_layer_content", "textContent": "מתאים לתוכן שכבת"},
-{"id": "fit_to_sel", "textContent": "התאם הבחירה"},
-{"id": "font_family", "title": "שינוי גופן משפחה"},
-{"id": "icon_large", "textContent": "Large"},
-{"id": "icon_medium", "textContent": "Medium"},
-{"id": "icon_small", "textContent": "Small"},
-{"id": "icon_xlarge", "textContent": "Extra Large"},
-{"id": "image_height", "title": "שינוי גובה התמונה"},
-{"id": "image_opt_embed", "textContent": "Embed data (local files)"},
-{"id": "image_opt_ref", "textContent": "Use file reference"},
-{"id": "image_url", "title": "שינוי כתובת"},
-{"id": "image_width", "title": "שינוי רוחב התמונה"},
-{"id": "includedImages", "textContent": "Included Images"},
-{"id": "largest_object", "textContent": "האובייקט הגדול"},
-{"id": "layer_delete", "title": "מחיקת שכבה"},
-{"id": "layer_down", "title": "הזז למטה שכבה"},
-{"id": "layer_new", "title": "שכבהחדשה"},
-{"id": "layer_rename", "title": "שינוי שם שכבה"},
-{"id": "layer_up", "title": "העבר שכבה Up"},
-{"id": "layersLabel", "textContent": "שכבות:"},
-{"id": "line_x1", "title": "שינוי קו ההתחלה של x לתאם"},
-{"id": "line_x2", "title": "שינוי קו הסיום של x לתאם"},
-{"id": "line_y1", "title": "שינוי קו ההתחלה של Y לתאם"},
-{"id": "line_y2", "title": "שינוי קו הסיום של Y לתאם"},
-{"id": "linecap_butt", "title": "Linecap: Butt"},
-{"id": "linecap_round", "title": "Linecap: Round"},
-{"id": "linecap_square", "title": "Linecap: Square"},
-{"id": "linejoin_bevel", "title": "Linejoin: Bevel"},
-{"id": "linejoin_miter", "title": "Linejoin: Miter"},
-{"id": "linejoin_round", "title": "Linejoin: Round"},
-{"id": "main_icon", "title": "Main Menu"},
-{"id": "mode_connect", "title": "Connect two objects"},
-{"id": "page", "textContent": "דף"},
-{"id": "palette", "title": "לחץ כדי לשנות צבע מילוי, לחץ על Shift-לשנות צבע שבץ"},
-{"id": "path_node_x", "title": "Change node's x coordinate"},
-{"id": "path_node_y", "title": "Change node's y coordinate"},
-{"id": "rect_height_tool", "title": "שינוי גובה המלבן"},
-{"id": "rect_width_tool", "title": "שינוי רוחב המלבן"},
-{"id": "relativeToLabel", "textContent": "יחסית:"},
-{"id": "seg_type", "title": "Change Segment type"},
-{"id": "selLayerLabel", "textContent": "Move elements to:"},
-{"id": "selLayerNames", "title": "Move selected elements to a different layer"},
-{"id": "selectedPredefined", "textContent": "בחר מוגדרים מראש:"},
-{"id": "selected_objects", "textContent": "elected objects"},
-{"id": "selected_x", "title": "Change X coordinate"},
-{"id": "selected_y", "title": "Change Y coordinate"},
-{"id": "smallest_object", "textContent": "הקטן אובייקט"},
-{"id": "straight_segments", "textContent": "Straight"},
-{"id": "stroke_color", "title": "שינוי צבע שבץ"},
-{"id": "stroke_style", "title": "דש שבץ שינוי סגנון"},
-{"id": "stroke_width", "title": "שינוי רוחב שבץ"},
-{"id": "svginfo_bg_note", "textContent": "Note: Background will not be saved with image."},
-{"id": "svginfo_change_background", "textContent": "Editor Background"},
-{"id": "svginfo_dim", "textContent": "Canvas Dimensions"},
-{"id": "svginfo_editor_prefs", "textContent": "Editor Preferences"},
-{"id": "svginfo_height", "textContent": "גובה:"},
-{"id": "svginfo_icons", "textContent": "Icon size"},
-{"id": "svginfo_image_props", "textContent": "Image Properties"},
-{"id": "svginfo_lang", "textContent": "Language"},
-{"id": "svginfo_title", "textContent": "Title"},
-{"id": "svginfo_width", "textContent": "רוחב:"},
-{"id": "text", "title": "שינוי תוכן טקסט"},
-{"id": "toggle_stroke_tools", "title": "Show/hide more stroke tools"},
-{"id": "tool_add_subpath", "title": "Add sub-path"},
-{"id": "tool_alignbottom", "title": "יישור תחתון"},
-{"id": "tool_aligncenter", "title": "ישור לאמצע"},
-{"id": "tool_alignleft", "title": "יישור לשמאל"},
-{"id": "tool_alignmiddle", "title": "יישור התיכון"},
-{"id": "tool_alignright", "title": "יישור לימין"},
-{"id": "tool_aligntop", "title": "יישור למעלה"},
-{"id": "tool_angle", "title": "שינוי זווית הסיבוב"},
-{"id": "tool_blur", "title": "Change gaussian blur value"},
-{"id": "tool_bold", "title": "טקסט מודגש"},
-{"id": "tool_circle", "title": "Circle"},
-{"id": "tool_clear", "textContent": "תמונה חדשה"},
-{"id": "tool_clone", "title": "Clone Element"},
-{"id": "tool_clone_multi", "title": "אלמנטים המשובטים"},
-{"id": "tool_delete", "title": "מחיקת אלמנט"},
-{"id": "tool_delete_multi", "title": "אלמנטים נבחרים מחק"},
-{"id": "tool_docprops", "textContent": "מאפייני מסמך"},
-{"id": "tool_docprops_cancel", "textContent": "ביטול"},
-{"id": "tool_docprops_save", "textContent": "לשמור"},
-{"id": "tool_ellipse", "title": "אליפסה"},
-{"id": "tool_export", "textContent": "Export as PNG"},
-{"id": "tool_eyedropper", "title": "Eye Dropper Tool"},
-{"id": "tool_fhellipse", "title": "Free-Hand אליפסה"},
-{"id": "tool_fhpath", "title": "כלי העיפרון"},
-{"id": "tool_fhrect", "title": "Free-Hand מלבן"},
-{"id": "tool_font_size", "title": "שנה גודל גופן"},
-{"id": "tool_group", "title": "אלמנטים הקבוצה"},
-{"id": "tool_image", "title": "כלי תמונה"},
-{"id": "tool_import", "textContent": "Import SVG"},
-{"id": "tool_italic", "title": "טקסט נטוי"},
-{"id": "tool_line", "title": "כלי הקו"},
-{"id": "tool_move_bottom", "title": "הזז למטה"},
-{"id": "tool_move_top", "title": "עבור לראש הדף"},
-{"id": "tool_node_clone", "title": "Clone Node"},
-{"id": "tool_node_delete", "title": "Delete Node"},
-{"id": "tool_node_link", "title": "Link Control Points"},
-{"id": "tool_opacity", "title": "שינוי הפריט הנבחר אטימות"},
-{"id": "tool_open", "textContent": "פתח תמונה"},
-{"id": "tool_path", "title": "Path Tool"},
-{"id": "tool_rect", "title": "מלבן"},
-{"id": "tool_redo", "title": "בצע שוב"},
-{"id": "tool_reorient", "title": "Reorient path"},
-{"id": "tool_save", "textContent": "שמור תמונה"},
-{"id": "tool_select", "title": "Select Tool"},
-{"id": "tool_source", "title": "מקור ערוך"},
-{"id": "tool_source_cancel", "textContent": "ביטול"},
-{"id": "tool_source_save", "textContent": "לשמור"},
-{"id": "tool_square", "title": "מרובע"},
-{"id": "tool_text", "title": "כלי טקסט"},
-{"id": "tool_topath", "title": "Convert to Path"},
-{"id": "tool_undo", "title": "בטל"},
-{"id": "tool_ungroup", "title": "אלמנטים פרק קבוצה"},
-{"id": "tool_wireframe", "title": "Wireframe Mode"},
-{"id": "tool_zoom", "title": "זום כלי"},
-{"id": "url_notice", "title": "NOTE: This image cannot be embedded. It will depend on this path to be displayed"},
-{"id": "zoom_panel", "title": "שינוי גודל תצוגה"},
-{"id": "sidepanel_handle", "textContent": "L a y e r s", "title": "Drag left/right to resize side panel"},
-{
- "js_strings": {
- "QerrorsRevertToSource": "There were parsing errors in your SVG source.\nRevert back to original SVG source?",
- "QignoreSourceChanges": "Ignore changes made to SVG source?",
- "QmoveElemsToLayer": "Move selected elements to layer '%s'?",
- "QwantToClear": "Do you want to clear the drawing?\nThis will also erase your undo history!",
- "cancel": "Cancel",
- "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.",
- "dupeLayerName": "There is already a layer named that!",
- "enterNewImgURL": "Enter the new image URL",
- "enterNewLayerName": "Please enter the new layer name",
- "enterUniqueLayerName": "Please enter a unique layer name",
- "exportNoBlur": "Blurred elements will appear as un-blurred",
- "exportNoDashArray": "Strokes will appear filled",
- "exportNoImage": "Image elements will not appear",
- "exportNoText": "Text may not appear as expected",
- "exportNoforeignObject": "foreignObject elements will not appear",
- "featNotSupported": "Feature not supported",
- "invalidAttrValGiven": "Invalid value given",
- "key_backspace": "backspace",
- "key_del": "delete",
- "key_down": "down",
- "key_up": "up",
- "layer": "Layer",
- "layerHasThatName": "Layer already has that name",
- "loadingImage": "Loading image, please wait...",
- "noContentToFitTo": "No content to fit to",
- "noteTheseIssues": "Also note the following issues: ",
- "ok": "OK",
- "pathCtrlPtTooltip": "Drag control point to adjust curve properties",
- "pathNodeTooltip": "Drag node to move it. Double-click node to change segment type",
- "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file."
- }
-}
-] \ No newline at end of file
diff --git a/files_svgedit/js/locale/lang.hi.js b/files_svgedit/js/locale/lang.hi.js
deleted file mode 100644
index 754028013..000000000
--- a/files_svgedit/js/locale/lang.hi.js
+++ /dev/null
@@ -1,174 +0,0 @@
-[
-{"id": "align_relative_to", "title": "संरेखित करें रिश्तेदार को ..."},
-{"id": "bkgnd_color", "title": "पृष्ठभूमि का रंग बदल / अस्पष्टता"},
-{"id": "circle_cx", "title": "बदल रहा है चक्र cx समन्वय"},
-{"id": "circle_cy", "title": "परिवर्तन चक्र cy समन्वय है"},
-{"id": "circle_r", "title": "बदल रहा है चक्र त्रिज्या"},
-{"id": "connector_no_arrow", "textContent": "No arrow"},
-{"id": "copyrightLabel", "textContent": "Powered by"},
-{"id": "cornerRadiusLabel", "title": "कोने का रेडियस"},
-{"id": "cornerRadiusLabel", "title": "बदलें आयत कॉर्नर त्रिज्या"},
-{"id": "curve_segments", "textContent": "घुमाव"},
-{"id": "ellipse_cx", "title": "बदलें दीर्घवृत्त है cx समन्वय"},
-{"id": "ellipse_cy", "title": "बदलें दीर्घवृत्त cy समन्वय है"},
-{"id": "ellipse_rx", "title": "बदल रहा है दीर्घवृत्त x त्रिज्या"},
-{"id": "ellipse_ry", "title": "बदल रहा है दीर्घवृत्त y त्रिज्या"},
-{"id": "fill_color", "title": "बदलें का रंग भरना"},
-{"id": "fitToContent", "textContent": "सामग्री के लिए फिट"},
-{"id": "fit_to_all", "textContent": "सभी सामग्री के लिए फिट"},
-{"id": "fit_to_canvas", "textContent": "फिट कैनवास को"},
-{"id": "fit_to_layer_content", "textContent": "फिट परत सामग्री के लिए"},
-{"id": "fit_to_sel", "textContent": "चयन के लिए फिट"},
-{"id": "font_family", "title": "बदलें फ़ॉन्ट परिवार"},
-{"id": "icon_large", "textContent": "बड़ा"},
-{"id": "icon_medium", "textContent": "मध्यम"},
-{"id": "icon_small", "textContent": "छोटा"},
-{"id": "icon_xlarge", "textContent": "बहुत बड़ा"},
-{"id": "image_height", "title": "बदलें छवि ऊँचाई"},
-{"id": "image_opt_embed", "textContent": "एम्बेड डेटा (स्थानीय फ़ाइलें)"},
-{"id": "image_opt_ref", "textContent": "फाइल के संदर्भ का प्रयोग"},
-{"id": "image_url", "title": "बदलें यूआरएल"},
-{"id": "image_width", "title": "बदलें छवि चौड़ाई"},
-{"id": "includedImages", "textContent": "शामिल छवियाँ"},
-{"id": "largest_object", "textContent": "सबसे बड़ी वस्तु"},
-{"id": "layer_delete", "title": "परत हटाएँ"},
-{"id": "layer_down", "title": "परत नीचे ले जाएँ"},
-{"id": "layer_new", "title": "नई परत"},
-{"id": "layer_rename", "title": "परत का नाम बदलें"},
-{"id": "layer_up", "title": "परत ऊपर ले जाएँ"},
-{"id": "layersLabel", "textContent": "परतें:"},
-{"id": "line_x1", "title": "बदल रहा है लाइन x समन्वय शुरू"},
-{"id": "line_x2", "title": "बदल रहा है लाइन x समन्वय समाप्त"},
-{"id": "line_y1", "title": "बदलें रेखा y शुरू हो रहा है समन्वय"},
-{"id": "line_y2", "title": "बदलें रेखा y अंत है समन्वय"},
-{"id": "linecap_butt", "title": "Linecap: Butt"},
-{"id": "linecap_round", "title": "Linecap: Round"},
-{"id": "linecap_square", "title": "Linecap: Square"},
-{"id": "linejoin_bevel", "title": "Linejoin: Bevel"},
-{"id": "linejoin_miter", "title": "Linejoin: Miter"},
-{"id": "linejoin_round", "title": "Linejoin: Round"},
-{"id": "main_icon", "title": "Main Menu"},
-{"id": "mode_connect", "title": "Connect two objects"},
-{"id": "page", "textContent": "पृष्ठ"},
-{"id": "palette", "title": "रंग बदलने पर क्लिक करें, बदलाव भरने के क्लिक करने के लिए स्ट्रोक का रंग बदलने के लिए"},
-{"id": "path_node_x", "title": "नोड का x समकक्ष बदलें"},
-{"id": "path_node_y", "title": "नोड का y समकक्ष बदलें"},
-{"id": "rect_height_tool", "title": "बदलें आयत ऊंचाई"},
-{"id": "rect_width_tool", "title": "बदलें आयत चौड़ाई"},
-{"id": "relativeToLabel", "textContent": "रिश्तेदार को:"},
-{"id": "seg_type", "title": "वर्ग प्रकार बदलें"},
-{"id": "selLayerLabel", "textContent": "अंश को ले जाएँ:"},
-{"id": "selLayerNames", "title": "चयनित अंश को दूसरी परत पर ले जाएँ"},
-{"id": "selectedPredefined", "textContent": "चुनें पूर्वनिर्धारित:"},
-{"id": "selected_objects", "textContent": "निर्वाचित वस्तुओं"},
-{"id": "selected_x", "title": "X समकक्ष बदलें "},
-{"id": "selected_y", "title": "Y समकक्ष बदलें"},
-{"id": "smallest_object", "textContent": "छोटी से छोटी वस्तु"},
-{"id": "straight_segments", "textContent": "सीधे वर्ग"},
-{"id": "stroke_color", "title": "बदलें स्ट्रोक रंग"},
-{"id": "stroke_style", "title": "बदलें स्ट्रोक डेश शैली"},
-{"id": "stroke_width", "title": "बदलें स्ट्रोक चौड़ाई"},
-{"id": "svginfo_bg_note", "textContent": "नोट: पृष्ठभूमि छवि के साथ नहीं बचायी जाएगी"},
-{"id": "svginfo_change_background", "textContent": "संपादक पृष्ठभूमि"},
-{"id": "svginfo_dim", "textContent": "कैनवास आयाम"},
-{"id": "svginfo_editor_prefs", "textContent": "संपादक वरीयताएँ"},
-{"id": "svginfo_height", "textContent": "ऊँचाई:"},
-{"id": "svginfo_icons", "textContent": "चिह्न का आकार"},
-{"id": "svginfo_image_props", "textContent": "छवि के गुण"},
-{"id": "svginfo_lang", "textContent": "भाषा"},
-{"id": "svginfo_title", "textContent": "शीर्षक"},
-{"id": "svginfo_width", "textContent": "चौड़ाई:"},
-{"id": "text", "title": "बदलें पाठ सामग्री"},
-{"id": "toggle_stroke_tools", "title": "Show/hide more stroke tools"},
-{"id": "tool_add_subpath", "title": "Add sub-path"},
-{"id": "tool_alignbottom", "title": "तलमेंपंक्तिबद्धकरें"},
-{"id": "tool_aligncenter", "title": "मध्य में समंजित करें"},
-{"id": "tool_alignleft", "title": " पंक्तिबद्ध करें"},
-{"id": "tool_alignmiddle", "title": "मध्य संरेखित करें"},
-{"id": "tool_alignright", "title": "दायाँपंक्तिबद्धकरें"},
-{"id": "tool_aligntop", "title": "शीर्षमेंपंक्तिबद्धकरें"},
-{"id": "tool_angle", "title": "बदलें रोटेशन कोण"},
-{"id": "tool_blur", "title": "Change gaussian blur value"},
-{"id": "tool_bold", "title": "मोटा पाठ"},
-{"id": "tool_circle", "title": "वृत्त"},
-{"id": "tool_clear", "textContent": "नई छवि"},
-{"id": "tool_clone", "title": "क्लोन अंश"},
-{"id": "tool_clone_multi", "title": "क्लोन अंश को"},
-{"id": "tool_delete", "title": "हटाएँ "},
-{"id": "tool_delete_multi", "title": "हटाएँ चयनित अंश"},
-{"id": "tool_docprops", "textContent": "दस्तावेज़ गुण"},
-{"id": "tool_docprops_cancel", "textContent": "रद्द करें"},
-{"id": "tool_docprops_save", "textContent": "बचाना"},
-{"id": "tool_ellipse", "title": "दीर्घवृत्त"},
-{"id": "tool_export", "textContent": "Export as PNG"},
-{"id": "tool_eyedropper", "title": "Eye Dropper Tool"},
-{"id": "tool_fhellipse", "title": "नि: शुल्क हाथ दीर्घवृत्त"},
-{"id": "tool_fhpath", "title": "पेंसिल उपकरण"},
-{"id": "tool_fhrect", "title": "नि: शुल्क हाथ आयत"},
-{"id": "tool_font_size", "title": "फ़ॉन्ट का आकार बदलें"},
-{"id": "tool_group", "title": "समूह तत्वों"},
-{"id": "tool_image", "title": "छवि उपकरण"},
-{"id": "tool_import", "textContent": "Import SVG"},
-{"id": "tool_italic", "title": "इटैलिक पाठ"},
-{"id": "tool_line", "title": "लाइन उपकरण"},
-{"id": "tool_move_bottom", "title": "नीचे ले जाएँ"},
-{"id": "tool_move_top", "title": "ऊपर ले जाएँ"},
-{"id": "tool_node_clone", "title": "नोड क्लोन"},
-{"id": "tool_node_delete", "title": "नोड हटायें"},
-{"id": "tool_node_link", "title": "कड़ी नियंत्रण बिंदु"},
-{"id": "tool_opacity", "title": "पारदर्शिता बदलें"},
-{"id": "tool_open", "textContent": "छवि खोलें"},
-{"id": "tool_path", "title": "Path Tool"},
-{"id": "tool_rect", "title": "आयत"},
-{"id": "tool_redo", "title": "फिर से करें"},
-{"id": "tool_reorient", "title": "पथ को नई दिशा दें"},
-{"id": "tool_save", "textContent": "सहेजें छवि"},
-{"id": "tool_select", "title": "उपकरण चुनें"},
-{"id": "tool_source", "title": "स्रोत में बदलाव करें"},
-{"id": "tool_source_cancel", "textContent": "रद्द करें"},
-{"id": "tool_source_save", "textContent": "बचाना"},
-{"id": "tool_square", "title": "वर्ग"},
-{"id": "tool_text", "title": "पाठ उपकरण"},
-{"id": "tool_topath", "title": "पथ में बदलें"},
-{"id": "tool_undo", "title": "पूर्ववत करें"},
-{"id": "tool_ungroup", "title": "अंश को समूह से अलग करें"},
-{"id": "tool_wireframe", "title": "रूपरेखा मोड"},
-{"id": "tool_zoom", "title": "ज़ूम उपकरण"},
-{"id": "url_notice", "title": "NOTE: This image cannot be embedded. It will depend on this path to be displayed"},
-{"id": "zoom_panel", "title": "बदलें स्तर ज़ूम"},
-{"id": "sidepanel_handle", "textContent": "प र तें", "title": "दायें/बाएं घसीट कर आकार बदलें"},
-{
- "js_strings": {
- "QerrorsRevertToSource": "आपके एस.वी.जी. स्रोत में त्रुटियों थी.\nक्या आप मूल एस.वी.जी स्रोत पर वापिस जाना चाहते हैं?",
- "QignoreSourceChanges": "एसवीजी स्रोत से लाये बदलावों को ध्यान न दें?",
- "QmoveElemsToLayer": "चयनित अंश को परत '%s' पर ले जाएँ ?",
- "QwantToClear": "क्या आप छवि साफ़ करना चाहते हैं?\nयह आपके उन्डू इतिहास को भी मिटा देगा!",
- "cancel": "रद्द करें",
- "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.",
- "dupeLayerName": "इस नाम कि परत पहले से मौजूद है !",
- "enterNewImgURL": "नई छवि URL दर्ज करें",
- "enterNewLayerName": "कृपया परत का एक नया नाम डालें",
- "enterUniqueLayerName": "कृपया परत का एक अद्वितीय नाम डालें",
- "exportNoBlur": "Blurred elements will appear as un-blurred",
- "exportNoDashArray": "Strokes will appear filled",
- "exportNoImage": "Image elements will not appear",
- "exportNoText": "Text may not appear as expected",
- "exportNoforeignObject": "foreignObject elements will not appear",
- "featNotSupported": "सुविधा असमर्थित है",
- "invalidAttrValGiven": "अमान्य मूल्य",
- "key_backspace": "बैकस्पेस",
- "key_del": "हटायें",
- "key_down": "नीचे",
- "key_up": "ऊपर",
- "layer": "परत",
- "layerHasThatName": "परत का पहले से ही यही नाम है",
- "loadingImage": "Loading image, please wait...",
- "noContentToFitTo": "कोई सामग्री फिट करने के लिए उपलब्ध नहीं",
- "noteTheseIssues": "Also note the following issues: ",
- "ok": "ठीक",
- "pathCtrlPtTooltip": "नियंत्रण बिंदु को खींचें, घुमाव के गुणो समायोजित करने के लिए",
- "pathNodeTooltip": "नोड खींचें उसे हिलाने के लिए. डबल-क्लिक कीजिये वर्ग के प्रकार को बदलने के लिए",
- "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file."
- }
-}
-] \ No newline at end of file
diff --git a/files_svgedit/js/locale/lang.hr.js b/files_svgedit/js/locale/lang.hr.js
deleted file mode 100644
index 59e0c90ac..000000000
--- a/files_svgedit/js/locale/lang.hr.js
+++ /dev/null
@@ -1,173 +0,0 @@
-[
-{"id": "align_relative_to", "title": "Poravnaj u odnosu na ..."},
-{"id": "bkgnd_color", "title": "Promijeni boju pozadine / neprozirnost"},
-{"id": "circle_cx", "title": "Promjena krug&#39;s CX koordinirati"},
-{"id": "circle_cy", "title": "Cy Promijeni krug je koordinirati"},
-{"id": "circle_r", "title": "Promjena krug je radijusa"},
-{"id": "connector_no_arrow", "textContent": "No arrow"},
-{"id": "copyrightLabel", "textContent": "Powered by"},
-{"id": "cornerRadiusLabel", "title": "Promijeni Pravokutnik Corner Radius"},
-{"id": "curve_segments", "textContent": "Curve"},
-{"id": "ellipse_cx", "title": "Promjena elipsa&#39;s CX koordinirati"},
-{"id": "ellipse_cy", "title": "Cy Promijeni elipsa je koordinirati"},
-{"id": "ellipse_rx", "title": "Promijeniti elipsa&#39;s x polumjer"},
-{"id": "ellipse_ry", "title": "Promjena elipsa&#39;s y polumjer"},
-{"id": "fill_color", "title": "Promjena boje ispune"},
-{"id": "fitToContent", "textContent": "Fit to Content"},
-{"id": "fit_to_all", "textContent": "Prilagodi na sve sadržaje"},
-{"id": "fit_to_canvas", "textContent": "Prilagodi na platnu"},
-{"id": "fit_to_layer_content", "textContent": "Prilagodi sloj sadržaj"},
-{"id": "fit_to_sel", "textContent": "Prilagodi odabir"},
-{"id": "font_family", "title": "Promjena fontova"},
-{"id": "icon_large", "textContent": "Large"},
-{"id": "icon_medium", "textContent": "Medium"},
-{"id": "icon_small", "textContent": "Small"},
-{"id": "icon_xlarge", "textContent": "Extra Large"},
-{"id": "image_height", "title": "Promijeni sliku visina"},
-{"id": "image_opt_embed", "textContent": "Embed data (local files)"},
-{"id": "image_opt_ref", "textContent": "Use file reference"},
-{"id": "image_url", "title": "Promijeni URL"},
-{"id": "image_width", "title": "Promijeni sliku širine"},
-{"id": "includedImages", "textContent": "Included Images"},
-{"id": "largest_object", "textContent": "najveći objekt"},
-{"id": "layer_delete", "title": "Brisanje sloja"},
-{"id": "layer_down", "title": "Move Layer Down"},
-{"id": "layer_new", "title": "New Layer"},
-{"id": "layer_rename", "title": "Preimenuj Layer"},
-{"id": "layer_up", "title": "Move Layer Up"},
-{"id": "layersLabel", "textContent": "Layers:"},
-{"id": "line_x1", "title": "Promijeni linija je početak x koordinatu"},
-{"id": "line_x2", "title": "Promjena linije završetak x koordinatu"},
-{"id": "line_y1", "title": "Promijeni linija je početak y koordinatu"},
-{"id": "line_y2", "title": "Promjena linije završetak y koordinatu"},
-{"id": "linecap_butt", "title": "Linecap: Butt"},
-{"id": "linecap_round", "title": "Linecap: Round"},
-{"id": "linecap_square", "title": "Linecap: Square"},
-{"id": "linejoin_bevel", "title": "Linejoin: Bevel"},
-{"id": "linejoin_miter", "title": "Linejoin: Miter"},
-{"id": "linejoin_round", "title": "Linejoin: Round"},
-{"id": "main_icon", "title": "Main Menu"},
-{"id": "mode_connect", "title": "Connect two objects"},
-{"id": "page", "textContent": "stranica"},
-{"id": "palette", "title": "Kliknite promijeniti boju ispune, shift-click to promijeniti boju moždanog udara"},
-{"id": "path_node_x", "title": "Change node's x coordinate"},
-{"id": "path_node_y", "title": "Change node's y coordinate"},
-{"id": "rect_height_tool", "title": "Promijeni pravokutnik visine"},
-{"id": "rect_width_tool", "title": "Promijeni pravokutnik širine"},
-{"id": "relativeToLabel", "textContent": "u odnosu na:"},
-{"id": "seg_type", "title": "Change Segment type"},
-{"id": "selLayerLabel", "textContent": "Move elements to:"},
-{"id": "selLayerNames", "title": "Move selected elements to a different layer"},
-{"id": "selectedPredefined", "textContent": "Select predefinirane:"},
-{"id": "selected_objects", "textContent": "izabrani objekti"},
-{"id": "selected_x", "title": "Change X coordinate"},
-{"id": "selected_y", "title": "Change Y coordinate"},
-{"id": "smallest_object", "textContent": "najmanji objekt"},
-{"id": "straight_segments", "textContent": "Straight"},
-{"id": "stroke_color", "title": "Promjena boje moždani udar"},
-{"id": "stroke_style", "title": "Promijeni stroke crtica stil"},
-{"id": "stroke_width", "title": "Promjena širine moždani udar"},
-{"id": "svginfo_bg_note", "textContent": "Note: Background will not be saved with image."},
-{"id": "svginfo_change_background", "textContent": "Editor Background"},
-{"id": "svginfo_dim", "textContent": "Canvas Dimensions"},
-{"id": "svginfo_editor_prefs", "textContent": "Editor Preferences"},
-{"id": "svginfo_height", "textContent": "Visina:"},
-{"id": "svginfo_icons", "textContent": "Icon size"},
-{"id": "svginfo_image_props", "textContent": "Image Properties"},
-{"id": "svginfo_lang", "textContent": "Language"},
-{"id": "svginfo_title", "textContent": "Title"},
-{"id": "svginfo_width", "textContent": "Širina:"},
-{"id": "text", "title": "Promjena sadržaja teksta"},
-{"id": "toggle_stroke_tools", "title": "Show/hide more stroke tools"},
-{"id": "tool_add_subpath", "title": "Add sub-path"},
-{"id": "tool_alignbottom", "title": "Poravnaj dolje"},
-{"id": "tool_aligncenter", "title": "Centriraj"},
-{"id": "tool_alignleft", "title": "Poravnaj lijevo"},
-{"id": "tool_alignmiddle", "title": "Poravnaj Srednji"},
-{"id": "tool_alignright", "title": "Poravnaj desno"},
-{"id": "tool_aligntop", "title": "Poravnaj Top"},
-{"id": "tool_angle", "title": "Promijeni rotation angle"},
-{"id": "tool_blur", "title": "Change gaussian blur value"},
-{"id": "tool_bold", "title": "Podebljani tekst"},
-{"id": "tool_circle", "title": "Circle"},
-{"id": "tool_clear", "textContent": "Nove slike"},
-{"id": "tool_clone", "title": "Klon Element"},
-{"id": "tool_clone_multi", "title": "Klon Elementi"},
-{"id": "tool_delete", "title": "Brisanje elemenata"},
-{"id": "tool_delete_multi", "title": "Delete Selected Elements [Delete/Backspace]"},
-{"id": "tool_docprops", "textContent": "Svojstva dokumenta"},
-{"id": "tool_docprops_cancel", "textContent": "Odustani"},
-{"id": "tool_docprops_save", "textContent": "Spremiti"},
-{"id": "tool_ellipse", "title": "Elipsa"},
-{"id": "tool_export", "textContent": "Export as PNG"},
-{"id": "tool_eyedropper", "title": "Eye Dropper Tool"},
-{"id": "tool_fhellipse", "title": "Free-Hand Ellipse"},
-{"id": "tool_fhpath", "title": "Pencil Tool"},
-{"id": "tool_fhrect", "title": "Free-Hand Pravokutnik"},
-{"id": "tool_font_size", "title": "Change font size"},
-{"id": "tool_group", "title": "Grupa Elementi"},
-{"id": "tool_image", "title": "Image Tool"},
-{"id": "tool_import", "textContent": "Import SVG"},
-{"id": "tool_italic", "title": "Italic Text"},
-{"id": "tool_line", "title": "Line Tool"},
-{"id": "tool_move_bottom", "title": "Move to Bottom"},
-{"id": "tool_move_top", "title": "Pomakni na vrh"},
-{"id": "tool_node_clone", "title": "Clone Node"},
-{"id": "tool_node_delete", "title": "Delete Node"},
-{"id": "tool_node_link", "title": "Link Control Points"},
-{"id": "tool_opacity", "title": "Promjena odabrane stavke neprozirnost"},
-{"id": "tool_open", "textContent": "Otvori sliku"},
-{"id": "tool_path", "title": "Path Tool"},
-{"id": "tool_rect", "title": "Pravokutnik"},
-{"id": "tool_redo", "title": "Redo"},
-{"id": "tool_reorient", "title": "Reorient path"},
-{"id": "tool_save", "textContent": "Spremanje slike"},
-{"id": "tool_select", "title": "Odaberite alat"},
-{"id": "tool_source", "title": "Uredi Source"},
-{"id": "tool_source_cancel", "textContent": "Odustani"},
-{"id": "tool_source_save", "textContent": "Spremiti"},
-{"id": "tool_square", "title": "Kvadrat"},
-{"id": "tool_text", "title": "Tekst Alat"},
-{"id": "tool_topath", "title": "Convert to Path"},
-{"id": "tool_undo", "title": "Poništi"},
-{"id": "tool_ungroup", "title": "Razgrupiranje Elementi"},
-{"id": "tool_wireframe", "title": "Wireframe Mode"},
-{"id": "tool_zoom", "title": "Alat za zumiranje"},
-{"id": "url_notice", "title": "NOTE: This image cannot be embedded. It will depend on this path to be displayed"},
-{"id": "zoom_panel", "title": "Promjena razine zumiranja"},
-{"id": "sidepanel_handle", "textContent": "L a y e r s", "title": "Drag left/right to resize side panel"},
-{
- "js_strings": {
- "QerrorsRevertToSource": "There were parsing errors in your SVG source.\nRevert back to original SVG source?",
- "QignoreSourceChanges": "Ignore changes made to SVG source?",
- "QmoveElemsToLayer": "Move selected elements to layer '%s'?",
- "QwantToClear": "Do you want to clear the drawing?\nThis will also erase your undo history!",
- "cancel": "Cancel",
- "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.",
- "dupeLayerName": "There is already a layer named that!",
- "enterNewImgURL": "Enter the new image URL",
- "enterNewLayerName": "Please enter the new layer name",
- "enterUniqueLayerName": "Please enter a unique layer name",
- "exportNoBlur": "Blurred elements will appear as un-blurred",
- "exportNoDashArray": "Strokes will appear filled",
- "exportNoImage": "Image elements will not appear",
- "exportNoText": "Text may not appear as expected",
- "exportNoforeignObject": "foreignObject elements will not appear",
- "featNotSupported": "Feature not supported",
- "invalidAttrValGiven": "Invalid value given",
- "key_backspace": "backspace",
- "key_del": "delete",
- "key_down": "down",
- "key_up": "up",
- "layer": "Layer",
- "layerHasThatName": "Layer already has that name",
- "loadingImage": "Loading image, please wait...",
- "noContentToFitTo": "No content to fit to",
- "noteTheseIssues": "Also note the following issues: ",
- "ok": "OK",
- "pathCtrlPtTooltip": "Drag control point to adjust curve properties",
- "pathNodeTooltip": "Drag node to move it. Double-click node to change segment type",
- "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file."
- }
-}
-] \ No newline at end of file
diff --git a/files_svgedit/js/locale/lang.hu.js b/files_svgedit/js/locale/lang.hu.js
deleted file mode 100644
index 9f5d35a44..000000000
--- a/files_svgedit/js/locale/lang.hu.js
+++ /dev/null
@@ -1,173 +0,0 @@
-[
-{"id": "align_relative_to", "title": "Képest Igazítás ..."},
-{"id": "bkgnd_color", "title": "Change background color / homályosság"},
-{"id": "circle_cx", "title": "Change kör CX koordináta"},
-{"id": "circle_cy", "title": "Change kör cy koordináta"},
-{"id": "circle_r", "title": "Change kör sugara"},
-{"id": "connector_no_arrow", "textContent": "No arrow"},
-{"id": "copyrightLabel", "textContent": "Powered by"},
-{"id": "cornerRadiusLabel", "title": "Change téglalap sarok sugara"},
-{"id": "curve_segments", "textContent": "Curve"},
-{"id": "ellipse_cx", "title": "Change ellipszis&#39;s CX koordináta"},
-{"id": "ellipse_cy", "title": "Change ellipszis&#39;s cy koordináta"},
-{"id": "ellipse_rx", "title": "Change ellipszis&#39;s x sugarú"},
-{"id": "ellipse_ry", "title": "Change ellipszis&#39;s y sugara"},
-{"id": "fill_color", "title": "Change töltse color"},
-{"id": "fitToContent", "textContent": "Fit to Content"},
-{"id": "fit_to_all", "textContent": "Illeszkednek az összes tartalom"},
-{"id": "fit_to_canvas", "textContent": "Igazítás a vászonra"},
-{"id": "fit_to_layer_content", "textContent": "Igazítás a réteg tartalma"},
-{"id": "fit_to_sel", "textContent": "Igazítás a kiválasztási"},
-{"id": "font_family", "title": "Change Betűcsalád"},
-{"id": "icon_large", "textContent": "Large"},
-{"id": "icon_medium", "textContent": "Medium"},
-{"id": "icon_small", "textContent": "Small"},
-{"id": "icon_xlarge", "textContent": "Extra Large"},
-{"id": "image_height", "title": "Kép módosítása height"},
-{"id": "image_opt_embed", "textContent": "Embed data (local files)"},
-{"id": "image_opt_ref", "textContent": "Use file reference"},
-{"id": "image_url", "title": "Change URL"},
-{"id": "image_width", "title": "Change kép szélessége"},
-{"id": "includedImages", "textContent": "Included Images"},
-{"id": "largest_object", "textContent": "legnagyobb objektum"},
-{"id": "layer_delete", "title": "Réteg törlése"},
-{"id": "layer_down", "title": "Mozgatása lefelé"},
-{"id": "layer_new", "title": "Új réteg"},
-{"id": "layer_rename", "title": "Réteg átnevezése"},
-{"id": "layer_up", "title": "Move Layer Up"},
-{"id": "layersLabel", "textContent": "Rétegből:"},
-{"id": "line_x1", "title": "A sor kezd x koordináta"},
-{"id": "line_x2", "title": "A sor vége az x koordináta"},
-{"id": "line_y1", "title": "A sor kezd y koordináta"},
-{"id": "line_y2", "title": "A sor vége az y koordináta"},
-{"id": "linecap_butt", "title": "Linecap: Butt"},
-{"id": "linecap_round", "title": "Linecap: Round"},
-{"id": "linecap_square", "title": "Linecap: Square"},
-{"id": "linejoin_bevel", "title": "Linejoin: Bevel"},
-{"id": "linejoin_miter", "title": "Linejoin: Miter"},
-{"id": "linejoin_round", "title": "Linejoin: Round"},
-{"id": "main_icon", "title": "Main Menu"},
-{"id": "mode_connect", "title": "Connect two objects"},
-{"id": "page", "textContent": "Page"},
-{"id": "palette", "title": "Kattints ide a változások töltse szín, shift-click változtatni stroke color"},
-{"id": "path_node_x", "title": "Change node's x coordinate"},
-{"id": "path_node_y", "title": "Change node's y coordinate"},
-{"id": "rect_height_tool", "title": "Change téglalap magassága"},
-{"id": "rect_width_tool", "title": "Change téglalap szélessége"},
-{"id": "relativeToLabel", "textContent": "relatív hogy:"},
-{"id": "seg_type", "title": "Change Segment type"},
-{"id": "selLayerLabel", "textContent": "Move elements to:"},
-{"id": "selLayerNames", "title": "Move selected elements to a different layer"},
-{"id": "selectedPredefined", "textContent": "Válassza ki előre definiált:"},
-{"id": "selected_objects", "textContent": "választott tárgyak"},
-{"id": "selected_x", "title": "Change X coordinate"},
-{"id": "selected_y", "title": "Change Y coordinate"},
-{"id": "smallest_object", "textContent": "legkisebb objektum"},
-{"id": "straight_segments", "textContent": "Straight"},
-{"id": "stroke_color", "title": "Change stroke color"},
-{"id": "stroke_style", "title": "Change stroke kötőjel style"},
-{"id": "stroke_width", "title": "Change stroke width"},
-{"id": "svginfo_bg_note", "textContent": "Note: Background will not be saved with image."},
-{"id": "svginfo_change_background", "textContent": "Editor Background"},
-{"id": "svginfo_dim", "textContent": "Canvas Dimensions"},
-{"id": "svginfo_editor_prefs", "textContent": "Editor Preferences"},
-{"id": "svginfo_height", "textContent": "Magasság:"},
-{"id": "svginfo_icons", "textContent": "Icon size"},
-{"id": "svginfo_image_props", "textContent": "Image Properties"},
-{"id": "svginfo_lang", "textContent": "Language"},
-{"id": "svginfo_title", "textContent": "Title"},
-{"id": "svginfo_width", "textContent": "Szélesség:"},
-{"id": "text", "title": "A szöveg tartalma"},
-{"id": "toggle_stroke_tools", "title": "Show/hide more stroke tools"},
-{"id": "tool_add_subpath", "title": "Add sub-path"},
-{"id": "tool_alignbottom", "title": "Alulra igazítás"},
-{"id": "tool_aligncenter", "title": "Középre igazítás"},
-{"id": "tool_alignleft", "title": "Balra igazítás"},
-{"id": "tool_alignmiddle", "title": "Közép-align"},
-{"id": "tool_alignright", "title": "Jobbra igazítás"},
-{"id": "tool_aligntop", "title": "Align Top"},
-{"id": "tool_angle", "title": "Váltás forgás szög"},
-{"id": "tool_blur", "title": "Change gaussian blur value"},
-{"id": "tool_bold", "title": "Félkövér szöveg"},
-{"id": "tool_circle", "title": "Körbe"},
-{"id": "tool_clear", "textContent": "Új kép"},
-{"id": "tool_clone", "title": "Klónok Element"},
-{"id": "tool_clone_multi", "title": "Klón Elements"},
-{"id": "tool_delete", "title": "Delete Element"},
-{"id": "tool_delete_multi", "title": "A kijelölt elemek"},
-{"id": "tool_docprops", "textContent": "Dokumentum tulajdonságai"},
-{"id": "tool_docprops_cancel", "textContent": "Szakítani"},
-{"id": "tool_docprops_save", "textContent": "Ment"},
-{"id": "tool_ellipse", "title": "Ellipszisszelet"},
-{"id": "tool_export", "textContent": "Export as PNG"},
-{"id": "tool_eyedropper", "title": "Eye Dropper Tool"},
-{"id": "tool_fhellipse", "title": "Free-Hand Ellipse"},
-{"id": "tool_fhpath", "title": "Ceruza eszköz"},
-{"id": "tool_fhrect", "title": "Free-Hand téglalap"},
-{"id": "tool_font_size", "title": "Change font size"},
-{"id": "tool_group", "title": "Csoport elemei"},
-{"id": "tool_image", "title": "Image Tool"},
-{"id": "tool_import", "textContent": "Import SVG"},
-{"id": "tool_italic", "title": "Dőlt szöveg"},
-{"id": "tool_line", "title": "Line Tool"},
-{"id": "tool_move_bottom", "title": "Mozgatás lefelé"},
-{"id": "tool_move_top", "title": "Move to Top"},
-{"id": "tool_node_clone", "title": "Clone Node"},
-{"id": "tool_node_delete", "title": "Delete Node"},
-{"id": "tool_node_link", "title": "Link Control Points"},
-{"id": "tool_opacity", "title": "A kijelölt elem opacity"},
-{"id": "tool_open", "textContent": "Kép megnyitása"},
-{"id": "tool_path", "title": "Path Tool"},
-{"id": "tool_rect", "title": "Téglalapban"},
-{"id": "tool_redo", "title": "Megismétléséhez"},
-{"id": "tool_reorient", "title": "Reorient path"},
-{"id": "tool_save", "textContent": "Kép mentése más"},
-{"id": "tool_select", "title": "Válassza ki az eszközt"},
-{"id": "tool_source", "title": "Szerkesztés Forrás"},
-{"id": "tool_source_cancel", "textContent": "Szakítani"},
-{"id": "tool_source_save", "textContent": "Ment"},
-{"id": "tool_square", "title": "Négyzetes"},
-{"id": "tool_text", "title": "Szöveg eszköz"},
-{"id": "tool_topath", "title": "Convert to Path"},
-{"id": "tool_undo", "title": "Visszavon"},
-{"id": "tool_ungroup", "title": "Szétbont elemei"},
-{"id": "tool_wireframe", "title": "Wireframe Mode"},
-{"id": "tool_zoom", "title": "Zoom Tool"},
-{"id": "url_notice", "title": "NOTE: This image cannot be embedded. It will depend on this path to be displayed"},
-{"id": "zoom_panel", "title": "Change nagyítási"},
-{"id": "sidepanel_handle", "textContent": "L a y e r s", "title": "Drag left/right to resize side panel"},
-{
- "js_strings": {
- "QerrorsRevertToSource": "There were parsing errors in your SVG source.\nRevert back to original SVG source?",
- "QignoreSourceChanges": "Ignore changes made to SVG source?",
- "QmoveElemsToLayer": "Move selected elements to layer '%s'?",
- "QwantToClear": "Do you want to clear the drawing?\nThis will also erase your undo history!",
- "cancel": "Cancel",
- "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.",
- "dupeLayerName": "There is already a layer named that!",
- "enterNewImgURL": "Enter the new image URL",
- "enterNewLayerName": "Please enter the new layer name",
- "enterUniqueLayerName": "Please enter a unique layer name",
- "exportNoBlur": "Blurred elements will appear as un-blurred",
- "exportNoDashArray": "Strokes will appear filled",
- "exportNoImage": "Image elements will not appear",
- "exportNoText": "Text may not appear as expected",
- "exportNoforeignObject": "foreignObject elements will not appear",
- "featNotSupported": "Feature not supported",
- "invalidAttrValGiven": "Invalid value given",
- "key_backspace": "backspace",
- "key_del": "delete",
- "key_down": "down",
- "key_up": "up",
- "layer": "Layer",
- "layerHasThatName": "Layer already has that name",
- "loadingImage": "Loading image, please wait...",
- "noContentToFitTo": "No content to fit to",
- "noteTheseIssues": "Also note the following issues: ",
- "ok": "OK",
- "pathCtrlPtTooltip": "Drag control point to adjust curve properties",
- "pathNodeTooltip": "Drag node to move it. Double-click node to change segment type",
- "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file."
- }
-}
-] \ No newline at end of file
diff --git a/files_svgedit/js/locale/lang.hy.js b/files_svgedit/js/locale/lang.hy.js
deleted file mode 100644
index 08cffbee7..000000000
--- a/files_svgedit/js/locale/lang.hy.js
+++ /dev/null
@@ -1,173 +0,0 @@
-[
-{"id": "align_relative_to", "title": "Align relative to ..."},
-{"id": "bkgnd_color", "title": "Change background color/opacity"},
-{"id": "circle_cx", "title": "Change circle's cx coordinate"},
-{"id": "circle_cy", "title": "Change circle's cy coordinate"},
-{"id": "circle_r", "title": "Change circle's radius"},
-{"id": "connector_no_arrow", "textContent": "No arrow"},
-{"id": "copyrightLabel", "textContent": "Powered by"},
-{"id": "cornerRadiusLabel", "title": "Change Rectangle Corner Radius"},
-{"id": "curve_segments", "textContent": "Curve"},
-{"id": "ellipse_cx", "title": "Change ellipse's cx coordinate"},
-{"id": "ellipse_cy", "title": "Change ellipse's cy coordinate"},
-{"id": "ellipse_rx", "title": "Change ellipse's x radius"},
-{"id": "ellipse_ry", "title": "Change ellipse's y radius"},
-{"id": "fill_color", "title": "Change fill color"},
-{"id": "fitToContent", "textContent": "Fit to Content"},
-{"id": "fit_to_all", "textContent": "Fit to all content"},
-{"id": "fit_to_canvas", "textContent": "Fit to canvas"},
-{"id": "fit_to_layer_content", "textContent": "Fit to layer content"},
-{"id": "fit_to_sel", "textContent": "Fit to selection"},
-{"id": "font_family", "title": "Change Font Family"},
-{"id": "icon_large", "textContent": "Large"},
-{"id": "icon_medium", "textContent": "Medium"},
-{"id": "icon_small", "textContent": "Small"},
-{"id": "icon_xlarge", "textContent": "Extra Large"},
-{"id": "image_height", "title": "Change image height"},
-{"id": "image_opt_embed", "textContent": "Embed data (local files)"},
-{"id": "image_opt_ref", "textContent": "Use file reference"},
-{"id": "image_url", "title": "Change URL"},
-{"id": "image_width", "title": "Change image width"},
-{"id": "includedImages", "textContent": "Included Images"},
-{"id": "largest_object", "textContent": "largest object"},
-{"id": "layer_delete", "title": "Delete Layer"},
-{"id": "layer_down", "title": "Move Layer Down"},
-{"id": "layer_new", "title": "New Layer"},
-{"id": "layer_rename", "title": "Rename Layer"},
-{"id": "layer_up", "title": "Move Layer Up"},
-{"id": "layersLabel", "textContent": "Layers:"},
-{"id": "line_x1", "title": "Change line's starting x coordinate"},
-{"id": "line_x2", "title": "Change line's ending x coordinate"},
-{"id": "line_y1", "title": "Change line's starting y coordinate"},
-{"id": "line_y2", "title": "Change line's ending y coordinate"},
-{"id": "linecap_butt", "title": "Linecap: Butt"},
-{"id": "linecap_round", "title": "Linecap: Round"},
-{"id": "linecap_square", "title": "Linecap: Square"},
-{"id": "linejoin_bevel", "title": "Linejoin: Bevel"},
-{"id": "linejoin_miter", "title": "Linejoin: Miter"},
-{"id": "linejoin_round", "title": "Linejoin: Round"},
-{"id": "main_icon", "title": "Main Menu"},
-{"id": "mode_connect", "title": "Connect two objects"},
-{"id": "page", "textContent": "page"},
-{"id": "palette", "title": "Click to change fill color, shift-click to change stroke color"},
-{"id": "path_node_x", "title": "Change node's x coordinate"},
-{"id": "path_node_y", "title": "Change node's y coordinate"},
-{"id": "rect_height_tool", "title": "Change rectangle height"},
-{"id": "rect_width_tool", "title": "Change rectangle width"},
-{"id": "relativeToLabel", "textContent": "relative to:"},
-{"id": "seg_type", "title": "Change Segment type"},
-{"id": "selLayerLabel", "textContent": "Move elements to:"},
-{"id": "selLayerNames", "title": "Move selected elements to a different layer"},
-{"id": "selectedPredefined", "textContent": "Select predefined:"},
-{"id": "selected_objects", "textContent": "elected objects"},
-{"id": "selected_x", "title": "Change X coordinate"},
-{"id": "selected_y", "title": "Change Y coordinate"},
-{"id": "smallest_object", "textContent": "smallest object"},
-{"id": "straight_segments", "textContent": "Straight"},
-{"id": "stroke_color", "title": "Change stroke color"},
-{"id": "stroke_style", "title": "Change stroke dash style"},
-{"id": "stroke_width", "title": "Change stroke width"},
-{"id": "svginfo_bg_note", "textContent": "Note: Background will not be saved with image."},
-{"id": "svginfo_change_background", "textContent": "Editor Background"},
-{"id": "svginfo_dim", "textContent": "Canvas Dimensions"},
-{"id": "svginfo_editor_prefs", "textContent": "Editor Preferences"},
-{"id": "svginfo_height", "textContent": "Height:"},
-{"id": "svginfo_icons", "textContent": "Icon size"},
-{"id": "svginfo_image_props", "textContent": "Image Properties"},
-{"id": "svginfo_lang", "textContent": "Language"},
-{"id": "svginfo_title", "textContent": "Title"},
-{"id": "svginfo_width", "textContent": "Width:"},
-{"id": "text", "title": "Change text contents"},
-{"id": "toggle_stroke_tools", "title": "Show/hide more stroke tools"},
-{"id": "tool_add_subpath", "title": "Add sub-path"},
-{"id": "tool_alignbottom", "title": "Align Bottom"},
-{"id": "tool_aligncenter", "title": "Align Center"},
-{"id": "tool_alignleft", "title": "Align Left"},
-{"id": "tool_alignmiddle", "title": "Align Middle"},
-{"id": "tool_alignright", "title": "Align Right"},
-{"id": "tool_aligntop", "title": "Align Top"},
-{"id": "tool_angle", "title": "Change rotation angle"},
-{"id": "tool_blur", "title": "Change gaussian blur value"},
-{"id": "tool_bold", "title": "Bold Text"},
-{"id": "tool_circle", "title": "Circle"},
-{"id": "tool_clear", "textContent": "New Image"},
-{"id": "tool_clone", "title": "Clone Element"},
-{"id": "tool_clone_multi", "title": "Clone Elements"},
-{"id": "tool_delete", "title": "Delete Element"},
-{"id": "tool_delete_multi", "title": "Delete Selected Elements"},
-{"id": "tool_docprops", "textContent": "Document Properties"},
-{"id": "tool_docprops_cancel", "textContent": "Cancel"},
-{"id": "tool_docprops_save", "textContent": "Save"},
-{"id": "tool_ellipse", "title": "Ellipse"},
-{"id": "tool_export", "textContent": "Export as PNG"},
-{"id": "tool_eyedropper", "title": "Eye Dropper Tool"},
-{"id": "tool_fhellipse", "title": "Free-Hand Ellipse"},
-{"id": "tool_fhpath", "title": "Pencil Tool"},
-{"id": "tool_fhrect", "title": "Free-Hand Rectangle"},
-{"id": "tool_font_size", "title": "Change Font Size"},
-{"id": "tool_group", "title": "Group Elements"},
-{"id": "tool_image", "title": "Image Tool"},
-{"id": "tool_import", "textContent": "Import SVG"},
-{"id": "tool_italic", "title": "Italic Text"},
-{"id": "tool_line", "title": "Line Tool"},
-{"id": "tool_move_bottom", "title": "Move to Bottom"},
-{"id": "tool_move_top", "title": "Move to Top"},
-{"id": "tool_node_clone", "title": "Clone Node"},
-{"id": "tool_node_delete", "title": "Delete Node"},
-{"id": "tool_node_link", "title": "Link Control Points"},
-{"id": "tool_opacity", "title": "Change selected item opacity"},
-{"id": "tool_open", "textContent": "Open Image"},
-{"id": "tool_path", "title": "Path Tool"},
-{"id": "tool_rect", "title": "Rectangle"},
-{"id": "tool_redo", "title": "Redo"},
-{"id": "tool_reorient", "title": "Reorient path"},
-{"id": "tool_save", "textContent": "Save Image"},
-{"id": "tool_select", "title": "Select Tool"},
-{"id": "tool_source", "title": "Edit Source"},
-{"id": "tool_source_cancel", "textContent": "Cancel"},
-{"id": "tool_source_save", "textContent": "Save"},
-{"id": "tool_square", "title": "Square"},
-{"id": "tool_text", "title": "Text Tool"},
-{"id": "tool_topath", "title": "Convert to Path"},
-{"id": "tool_undo", "title": "Undo"},
-{"id": "tool_ungroup", "title": "Ungroup Elements"},
-{"id": "tool_wireframe", "title": "Wireframe Mode"},
-{"id": "tool_zoom", "title": "Zoom Tool"},
-{"id": "url_notice", "title": "NOTE: This image cannot be embedded. It will depend on this path to be displayed"},
-{"id": "zoom_panel", "title": "Change zoom level"},
-{"id": "sidepanel_handle", "textContent": "L a y e r s", "title": "Drag left/right to resize side panel"},
-{
- "js_strings": {
- "QerrorsRevertToSource": "There were parsing errors in your SVG source.\nRevert back to original SVG source?",
- "QignoreSourceChanges": "Ignore changes made to SVG source?",
- "QmoveElemsToLayer": "Move selected elements to layer '%s'?",
- "QwantToClear": "Do you want to clear the drawing?\nThis will also erase your undo history!",
- "cancel": "Cancel",
- "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.",
- "dupeLayerName": "There is already a layer named that!",
- "enterNewImgURL": "Enter the new image URL",
- "enterNewLayerName": "Please enter the new layer name",
- "enterUniqueLayerName": "Please enter a unique layer name",
- "exportNoBlur": "Blurred elements will appear as un-blurred",
- "exportNoDashArray": "Strokes will appear filled",
- "exportNoImage": "Image elements will not appear",
- "exportNoText": "Text may not appear as expected",
- "exportNoforeignObject": "foreignObject elements will not appear",
- "featNotSupported": "Feature not supported",
- "invalidAttrValGiven": "Invalid value given",
- "key_backspace": "backspace",
- "key_del": "delete",
- "key_down": "down",
- "key_up": "up",
- "layer": "Layer",
- "layerHasThatName": "Layer already has that name",
- "loadingImage": "Loading image, please wait...",
- "noContentToFitTo": "No content to fit to",
- "noteTheseIssues": "Also note the following issues: ",
- "ok": "OK",
- "pathCtrlPtTooltip": "Drag control point to adjust curve properties",
- "pathNodeTooltip": "Drag node to move it. Double-click node to change segment type",
- "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file."
- }
-}
-] \ No newline at end of file
diff --git a/files_svgedit/js/locale/lang.id.js b/files_svgedit/js/locale/lang.id.js
deleted file mode 100644
index 03ef774fe..000000000
--- a/files_svgedit/js/locale/lang.id.js
+++ /dev/null
@@ -1,173 +0,0 @@
-[
-{"id": "align_relative_to", "title": "Rata relatif ..."},
-{"id": "bkgnd_color", "title": "Mengubah warna latar belakang / keburaman"},
-{"id": "circle_cx", "title": "Mengubah koordinat lingkaran cx"},
-{"id": "circle_cy", "title": "Mengubah koordinat cy lingkaran"},
-{"id": "circle_r", "title": "Ubah jari-jari lingkaran"},
-{"id": "connector_no_arrow", "textContent": "No arrow"},
-{"id": "copyrightLabel", "textContent": "Powered by"},
-{"id": "cornerRadiusLabel", "title": "Ubah Corner Rectangle Radius"},
-{"id": "curve_segments", "textContent": "Curve"},
-{"id": "ellipse_cx", "title": "Ubah elips&#39;s cx koordinat"},
-{"id": "ellipse_cy", "title": "Ubah elips&#39;s cy koordinat"},
-{"id": "ellipse_rx", "title": "Ubah elips&#39;s x jari-jari"},
-{"id": "ellipse_ry", "title": "Ubah elips&#39;s y jari-jari"},
-{"id": "fill_color", "title": "Ubah warna mengisi"},
-{"id": "fitToContent", "textContent": "Fit to Content"},
-{"id": "fit_to_all", "textContent": "Cocok untuk semua konten"},
-{"id": "fit_to_canvas", "textContent": "Muat kanvas"},
-{"id": "fit_to_layer_content", "textContent": "Muat konten lapisan"},
-{"id": "fit_to_sel", "textContent": "Fit seleksi"},
-{"id": "font_family", "title": "Ubah Font Keluarga"},
-{"id": "icon_large", "textContent": "Large"},
-{"id": "icon_medium", "textContent": "Medium"},
-{"id": "icon_small", "textContent": "Small"},
-{"id": "icon_xlarge", "textContent": "Extra Large"},
-{"id": "image_height", "title": "Tinggi gambar Perubahan"},
-{"id": "image_opt_embed", "textContent": "Embed data (local files)"},
-{"id": "image_opt_ref", "textContent": "Use file reference"},
-{"id": "image_url", "title": "Ubah URL"},
-{"id": "image_width", "title": "Ubah Lebar gambar"},
-{"id": "includedImages", "textContent": "Included Images"},
-{"id": "largest_object", "textContent": "objek terbesar"},
-{"id": "layer_delete", "title": "Hapus Layer"},
-{"id": "layer_down", "title": "Pindahkan Layer Bawah"},
-{"id": "layer_new", "title": "New Layer"},
-{"id": "layer_rename", "title": "Rename Layer"},
-{"id": "layer_up", "title": "Pindahkan Layer Up"},
-{"id": "layersLabel", "textContent": "Lapisan:"},
-{"id": "line_x1", "title": "Ubah baris mulai x koordinat"},
-{"id": "line_x2", "title": "Ubah baris&#39;s Berakhir x koordinat"},
-{"id": "line_y1", "title": "Ubah baris mulai y koordinat"},
-{"id": "line_y2", "title": "Ubah baris di tiap akhir y koordinat"},
-{"id": "linecap_butt", "title": "Linecap: Butt"},
-{"id": "linecap_round", "title": "Linecap: Round"},
-{"id": "linecap_square", "title": "Linecap: Square"},
-{"id": "linejoin_bevel", "title": "Linejoin: Bevel"},
-{"id": "linejoin_miter", "title": "Linejoin: Miter"},
-{"id": "linejoin_round", "title": "Linejoin: Round"},
-{"id": "main_icon", "title": "Main Menu"},
-{"id": "mode_connect", "title": "Connect two objects"},
-{"id": "page", "textContent": "Halaman"},
-{"id": "palette", "title": "Klik untuk mengubah warna mengisi, shift-klik untuk mengubah warna stroke"},
-{"id": "path_node_x", "title": "Change node's x coordinate"},
-{"id": "path_node_y", "title": "Change node's y coordinate"},
-{"id": "rect_height_tool", "title": "Perubahan tinggi persegi panjang"},
-{"id": "rect_width_tool", "title": "Ubah persegi panjang lebar"},
-{"id": "relativeToLabel", "textContent": "relatif:"},
-{"id": "seg_type", "title": "Change Segment type"},
-{"id": "selLayerLabel", "textContent": "Move elements to:"},
-{"id": "selLayerNames", "title": "Move selected elements to a different layer"},
-{"id": "selectedPredefined", "textContent": "Pilih standar:"},
-{"id": "selected_objects", "textContent": "objek terpilih"},
-{"id": "selected_x", "title": "Change X coordinate"},
-{"id": "selected_y", "title": "Change Y coordinate"},
-{"id": "smallest_object", "textContent": "objek terkecil"},
-{"id": "straight_segments", "textContent": "Straight"},
-{"id": "stroke_color", "title": "Ubah warna stroke"},
-{"id": "stroke_style", "title": "Ubah gaya dash stroke"},
-{"id": "stroke_width", "title": "Ubah stroke width"},
-{"id": "svginfo_bg_note", "textContent": "Note: Background will not be saved with image."},
-{"id": "svginfo_change_background", "textContent": "Editor Background"},
-{"id": "svginfo_dim", "textContent": "Canvas Dimensions"},
-{"id": "svginfo_editor_prefs", "textContent": "Editor Preferences"},
-{"id": "svginfo_height", "textContent": "Ketinggian:"},
-{"id": "svginfo_icons", "textContent": "Icon size"},
-{"id": "svginfo_image_props", "textContent": "Image Properties"},
-{"id": "svginfo_lang", "textContent": "Language"},
-{"id": "svginfo_title", "textContent": "Title"},
-{"id": "svginfo_width", "textContent": "Lebar:"},
-{"id": "text", "title": "Ubah isi teks"},
-{"id": "toggle_stroke_tools", "title": "Show/hide more stroke tools"},
-{"id": "tool_add_subpath", "title": "Add sub-path"},
-{"id": "tool_alignbottom", "title": "Rata Bottom"},
-{"id": "tool_aligncenter", "title": "Rata Tengah"},
-{"id": "tool_alignleft", "title": "Rata Kiri"},
-{"id": "tool_alignmiddle", "title": "Rata Tengah"},
-{"id": "tool_alignright", "title": "Rata Kanan"},
-{"id": "tool_aligntop", "title": "Rata Top"},
-{"id": "tool_angle", "title": "Ubah sudut rotasi"},
-{"id": "tool_blur", "title": "Change gaussian blur value"},
-{"id": "tool_bold", "title": "Bold Teks"},
-{"id": "tool_circle", "title": "Lingkaran"},
-{"id": "tool_clear", "textContent": "Gambar Baru"},
-{"id": "tool_clone", "title": "Clone Elemen"},
-{"id": "tool_clone_multi", "title": "Clone Elemen"},
-{"id": "tool_delete", "title": "Hapus Elemen"},
-{"id": "tool_delete_multi", "title": "Hapus Elemen"},
-{"id": "tool_docprops", "textContent": "Document Properties"},
-{"id": "tool_docprops_cancel", "textContent": "Batal"},
-{"id": "tool_docprops_save", "textContent": "Simpan"},
-{"id": "tool_ellipse", "title": "Ellipse"},
-{"id": "tool_export", "textContent": "Export as PNG"},
-{"id": "tool_eyedropper", "title": "Eye Dropper Tool"},
-{"id": "tool_fhellipse", "title": "Free-Hand Ellipse"},
-{"id": "tool_fhpath", "title": "Pencil Tool"},
-{"id": "tool_fhrect", "title": "Free-Hand Persegi Panjang"},
-{"id": "tool_font_size", "title": "Ubah Ukuran Font"},
-{"id": "tool_group", "title": "Kelompok Elemen"},
-{"id": "tool_image", "title": "Image Tool"},
-{"id": "tool_import", "textContent": "Import SVG"},
-{"id": "tool_italic", "title": "Italic Teks"},
-{"id": "tool_line", "title": "Line Tool"},
-{"id": "tool_move_bottom", "title": "Pindah ke Bawah"},
-{"id": "tool_move_top", "title": "Pindahkan ke Atas"},
-{"id": "tool_node_clone", "title": "Clone Node"},
-{"id": "tool_node_delete", "title": "Delete Node"},
-{"id": "tool_node_link", "title": "Link Control Points"},
-{"id": "tool_opacity", "title": "Mengubah item yang dipilih keburaman"},
-{"id": "tool_open", "textContent": "Membuka Image"},
-{"id": "tool_path", "title": "Path Tool"},
-{"id": "tool_rect", "title": "Rectangle"},
-{"id": "tool_redo", "title": "Redo"},
-{"id": "tool_reorient", "title": "Reorient path"},
-{"id": "tool_save", "textContent": "Save Image"},
-{"id": "tool_select", "title": "Pilih Tool"},
-{"id": "tool_source", "title": "Edit Source"},
-{"id": "tool_source_cancel", "textContent": "Batal"},
-{"id": "tool_source_save", "textContent": "Simpan"},
-{"id": "tool_square", "title": "Kotak"},
-{"id": "tool_text", "title": "Teks Tool"},
-{"id": "tool_topath", "title": "Convert to Path"},
-{"id": "tool_undo", "title": "Undo"},
-{"id": "tool_ungroup", "title": "Ungroup Elemen"},
-{"id": "tool_wireframe", "title": "Wireframe Mode"},
-{"id": "tool_zoom", "title": "Zoom Tool"},
-{"id": "url_notice", "title": "NOTE: This image cannot be embedded. It will depend on this path to be displayed"},
-{"id": "zoom_panel", "title": "Mengubah tingkat pembesaran"},
-{"id": "sidepanel_handle", "textContent": "L a y e r s", "title": "Drag left/right to resize side panel"},
-{
- "js_strings": {
- "QerrorsRevertToSource": "There were parsing errors in your SVG source.\nRevert back to original SVG source?",
- "QignoreSourceChanges": "Ignore changes made to SVG source?",
- "QmoveElemsToLayer": "Move selected elements to layer '%s'?",
- "QwantToClear": "Do you want to clear the drawing?\nThis will also erase your undo history!",
- "cancel": "Cancel",
- "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.",
- "dupeLayerName": "There is already a layer named that!",
- "enterNewImgURL": "Enter the new image URL",
- "enterNewLayerName": "Please enter the new layer name",
- "enterUniqueLayerName": "Please enter a unique layer name",
- "exportNoBlur": "Blurred elements will appear as un-blurred",
- "exportNoDashArray": "Strokes will appear filled",
- "exportNoImage": "Image elements will not appear",
- "exportNoText": "Text may not appear as expected",
- "exportNoforeignObject": "foreignObject elements will not appear",
- "featNotSupported": "Feature not supported",
- "invalidAttrValGiven": "Invalid value given",
- "key_backspace": "backspace",
- "key_del": "delete",
- "key_down": "down",
- "key_up": "up",
- "layer": "Layer",
- "layerHasThatName": "Layer already has that name",
- "loadingImage": "Loading image, please wait...",
- "noContentToFitTo": "No content to fit to",
- "noteTheseIssues": "Also note the following issues: ",
- "ok": "OK",
- "pathCtrlPtTooltip": "Drag control point to adjust curve properties",
- "pathNodeTooltip": "Drag node to move it. Double-click node to change segment type",
- "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file."
- }
-}
-] \ No newline at end of file
diff --git a/files_svgedit/js/locale/lang.is.js b/files_svgedit/js/locale/lang.is.js
deleted file mode 100644
index 9ad606a0b..000000000
--- a/files_svgedit/js/locale/lang.is.js
+++ /dev/null
@@ -1,173 +0,0 @@
-[
-{"id": "align_relative_to", "title": "Jafna miðað við ..."},
-{"id": "bkgnd_color", "title": "Breyta bakgrunnslit / opacity"},
-{"id": "circle_cx", "title": "Cx Breyta hring er að samræma"},
-{"id": "circle_cy", "title": "Breyta hring&#39;s cy samræma"},
-{"id": "circle_r", "title": "Radíus Breyta hringsins er"},
-{"id": "connector_no_arrow", "textContent": "No arrow"},
-{"id": "copyrightLabel", "textContent": "Powered by"},
-{"id": "cornerRadiusLabel", "title": "Breyta rétthyrningur Corner Radíus"},
-{"id": "curve_segments", "textContent": "Curve"},
-{"id": "ellipse_cx", "title": "Breyta sporbaug&#39;s cx samræma"},
-{"id": "ellipse_cy", "title": "Breyta sporbaug&#39;s cy samræma"},
-{"id": "ellipse_rx", "title": "X radíus Breyta sporbaug&#39;s"},
-{"id": "ellipse_ry", "title": "Y radíus Breyta sporbaug&#39;s"},
-{"id": "fill_color", "title": "Breyta fylla color"},
-{"id": "fitToContent", "textContent": "Fit to Content"},
-{"id": "fit_to_all", "textContent": "Laga til efni"},
-{"id": "fit_to_canvas", "textContent": "Fit á striga"},
-{"id": "fit_to_layer_content", "textContent": "Laga til lag efni"},
-{"id": "fit_to_sel", "textContent": "Fit til val"},
-{"id": "font_family", "title": "Change Leturfjölskylda"},
-{"id": "icon_large", "textContent": "Large"},
-{"id": "icon_medium", "textContent": "Medium"},
-{"id": "icon_small", "textContent": "Small"},
-{"id": "icon_xlarge", "textContent": "Extra Large"},
-{"id": "image_height", "title": "Breyta mynd hæð"},
-{"id": "image_opt_embed", "textContent": "Embed data (local files)"},
-{"id": "image_opt_ref", "textContent": "Use file reference"},
-{"id": "image_url", "title": "Breyta URL"},
-{"id": "image_width", "title": "Breyta mynd width"},
-{"id": "includedImages", "textContent": "Included Images"},
-{"id": "largest_object", "textContent": "stærsti hlutinn"},
-{"id": "layer_delete", "title": "Eyða Lag"},
-{"id": "layer_down", "title": "Færa Layer Down"},
-{"id": "layer_new", "title": "Lag"},
-{"id": "layer_rename", "title": "Endurnefna Lag"},
-{"id": "layer_up", "title": "Færa Lag Up"},
-{"id": "layersLabel", "textContent": "Lag:"},
-{"id": "line_x1", "title": "Breyta lína í byrjun x samræma"},
-{"id": "line_x2", "title": "Breyta lína&#39;s Ending x samræma"},
-{"id": "line_y1", "title": "Breyta lína í byrjun y samræma"},
-{"id": "line_y2", "title": "Breyta lína er endir y samræma"},
-{"id": "linecap_butt", "title": "Linecap: Butt"},
-{"id": "linecap_round", "title": "Linecap: Round"},
-{"id": "linecap_square", "title": "Linecap: Square"},
-{"id": "linejoin_bevel", "title": "Linejoin: Bevel"},
-{"id": "linejoin_miter", "title": "Linejoin: Miter"},
-{"id": "linejoin_round", "title": "Linejoin: Round"},
-{"id": "main_icon", "title": "Main Menu"},
-{"id": "mode_connect", "title": "Connect two objects"},
-{"id": "page", "textContent": "síðu"},
-{"id": "palette", "title": "Smelltu hér til að breyta fylla lit, Shift-smelltu til að breyta högg lit"},
-{"id": "path_node_x", "title": "Change node's x coordinate"},
-{"id": "path_node_y", "title": "Change node's y coordinate"},
-{"id": "rect_height_tool", "title": "Breyta rétthyrningur hæð"},
-{"id": "rect_width_tool", "title": "Skipta rétthyrningur width"},
-{"id": "relativeToLabel", "textContent": "hlutfallslegt til:"},
-{"id": "seg_type", "title": "Change Segment type"},
-{"id": "selLayerLabel", "textContent": "Move elements to:"},
-{"id": "selLayerNames", "title": "Move selected elements to a different layer"},
-{"id": "selectedPredefined", "textContent": "Veldu predefined:"},
-{"id": "selected_objects", "textContent": "kjörinn hlutir"},
-{"id": "selected_x", "title": "Change X coordinate"},
-{"id": "selected_y", "title": "Change Y coordinate"},
-{"id": "smallest_object", "textContent": "lítill hluti"},
-{"id": "straight_segments", "textContent": "Straight"},
-{"id": "stroke_color", "title": "Breyta heilablķđfall color"},
-{"id": "stroke_style", "title": "Breyta heilablķđfall þjóta stíl"},
-{"id": "stroke_width", "title": "Breyta heilablķđfall width"},
-{"id": "svginfo_bg_note", "textContent": "Note: Background will not be saved with image."},
-{"id": "svginfo_change_background", "textContent": "Editor Background"},
-{"id": "svginfo_dim", "textContent": "Canvas Dimensions"},
-{"id": "svginfo_editor_prefs", "textContent": "Editor Preferences"},
-{"id": "svginfo_height", "textContent": "Hæð:"},
-{"id": "svginfo_icons", "textContent": "Icon size"},
-{"id": "svginfo_image_props", "textContent": "Image Properties"},
-{"id": "svginfo_lang", "textContent": "Language"},
-{"id": "svginfo_title", "textContent": "Title"},
-{"id": "svginfo_width", "textContent": "Breidd:"},
-{"id": "text", "title": "Breyta texta innihald"},
-{"id": "toggle_stroke_tools", "title": "Show/hide more stroke tools"},
-{"id": "tool_add_subpath", "title": "Add sub-path"},
-{"id": "tool_alignbottom", "title": "Jafna Bottom"},
-{"id": "tool_aligncenter", "title": "Jafna Center"},
-{"id": "tool_alignleft", "title": "Vinstri jöfnun"},
-{"id": "tool_alignmiddle", "title": "Jafna Mið"},
-{"id": "tool_alignright", "title": "Hægri jöfnun"},
-{"id": "tool_aligntop", "title": "Jöfnun Top"},
-{"id": "tool_angle", "title": "Breyting snúningur horn"},
-{"id": "tool_blur", "title": "Change gaussian blur value"},
-{"id": "tool_bold", "title": "Bold Text"},
-{"id": "tool_circle", "title": "Circle"},
-{"id": "tool_clear", "textContent": "New Image"},
-{"id": "tool_clone", "title": "Clone Element"},
-{"id": "tool_clone_multi", "title": "Clone Elements"},
-{"id": "tool_delete", "title": "Eyða Element"},
-{"id": "tool_delete_multi", "title": "Eyða Elements"},
-{"id": "tool_docprops", "textContent": "Document Properties"},
-{"id": "tool_docprops_cancel", "textContent": "Hætta"},
-{"id": "tool_docprops_save", "textContent": "Vista"},
-{"id": "tool_ellipse", "title": "Sporbaugur"},
-{"id": "tool_export", "textContent": "Export as PNG"},
-{"id": "tool_eyedropper", "title": "Eye Dropper Tool"},
-{"id": "tool_fhellipse", "title": "Free-Hand Sporbaugur"},
-{"id": "tool_fhpath", "title": "Blýantur Tól"},
-{"id": "tool_fhrect", "title": "Free-Hand rétthyrningur"},
-{"id": "tool_font_size", "title": "Breyta leturstærð"},
-{"id": "tool_group", "title": "Group Elements"},
-{"id": "tool_image", "title": "Mynd Tól"},
-{"id": "tool_import", "textContent": "Import SVG"},
-{"id": "tool_italic", "title": "Italic Text"},
-{"id": "tool_line", "title": "Line Tool"},
-{"id": "tool_move_bottom", "title": "Færa Bottom"},
-{"id": "tool_move_top", "title": "Fara efst á síðu"},
-{"id": "tool_node_clone", "title": "Clone Node"},
-{"id": "tool_node_delete", "title": "Delete Node"},
-{"id": "tool_node_link", "title": "Link Control Points"},
-{"id": "tool_opacity", "title": "Breyta valin atriði opacity"},
-{"id": "tool_open", "textContent": "Opna mynd"},
-{"id": "tool_path", "title": "Path Tool"},
-{"id": "tool_rect", "title": "Rétthyrningur"},
-{"id": "tool_redo", "title": "Endurtaka"},
-{"id": "tool_reorient", "title": "Reorient path"},
-{"id": "tool_save", "textContent": "Spara Image"},
-{"id": "tool_select", "title": "Veldu Tól"},
-{"id": "tool_source", "title": "Edit Source"},
-{"id": "tool_source_cancel", "textContent": "Hætta"},
-{"id": "tool_source_save", "textContent": "Vista"},
-{"id": "tool_square", "title": "Ferningur"},
-{"id": "tool_text", "title": "Text Tool"},
-{"id": "tool_topath", "title": "Convert to Path"},
-{"id": "tool_undo", "title": "Hætta"},
-{"id": "tool_ungroup", "title": "Ungroup Elements"},
-{"id": "tool_wireframe", "title": "Wireframe Mode"},
-{"id": "tool_zoom", "title": "Zoom Tool"},
-{"id": "url_notice", "title": "NOTE: This image cannot be embedded. It will depend on this path to be displayed"},
-{"id": "zoom_panel", "title": "Breyta Stækkunarstig"},
-{"id": "sidepanel_handle", "textContent": "L a y e r s", "title": "Drag left/right to resize side panel"},
-{
- "js_strings": {
- "QerrorsRevertToSource": "There were parsing errors in your SVG source.\nRevert back to original SVG source?",
- "QignoreSourceChanges": "Ignore changes made to SVG source?",
- "QmoveElemsToLayer": "Move selected elements to layer '%s'?",
- "QwantToClear": "Do you want to clear the drawing?\nThis will also erase your undo history!",
- "cancel": "Cancel",
- "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.",
- "dupeLayerName": "There is already a layer named that!",
- "enterNewImgURL": "Enter the new image URL",
- "enterNewLayerName": "Please enter the new layer name",
- "enterUniqueLayerName": "Please enter a unique layer name",
- "exportNoBlur": "Blurred elements will appear as un-blurred",
- "exportNoDashArray": "Strokes will appear filled",
- "exportNoImage": "Image elements will not appear",
- "exportNoText": "Text may not appear as expected",
- "exportNoforeignObject": "foreignObject elements will not appear",
- "featNotSupported": "Feature not supported",
- "invalidAttrValGiven": "Invalid value given",
- "key_backspace": "backspace",
- "key_del": "delete",
- "key_down": "down",
- "key_up": "up",
- "layer": "Layer",
- "layerHasThatName": "Layer already has that name",
- "loadingImage": "Loading image, please wait...",
- "noContentToFitTo": "No content to fit to",
- "noteTheseIssues": "Also note the following issues: ",
- "ok": "OK",
- "pathCtrlPtTooltip": "Drag control point to adjust curve properties",
- "pathNodeTooltip": "Drag node to move it. Double-click node to change segment type",
- "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file."
- }
-}
-] \ No newline at end of file
diff --git a/files_svgedit/js/locale/lang.it.js b/files_svgedit/js/locale/lang.it.js
deleted file mode 100644
index e5a7759ef..000000000
--- a/files_svgedit/js/locale/lang.it.js
+++ /dev/null
@@ -1,173 +0,0 @@
-[
-{"id": "align_relative_to", "title": "Allineati alla ..."},
-{"id": "bkgnd_color", "title": "Cambia il colore di sfondo / opacità"},
-{"id": "circle_cx", "title": "Cx cerchio Modifica di coordinate"},
-{"id": "circle_cy", "title": "Cambia&#39;s circle CY coordinare"},
-{"id": "circle_r", "title": "Cambia il raggio del cerchio"},
-{"id": "connector_no_arrow", "textContent": "No arrow"},
-{"id": "copyrightLabel", "textContent": "Powered by"},
-{"id": "cornerRadiusLabel", "title": "Cambia Rectangle Corner Radius"},
-{"id": "curve_segments", "textContent": "Curve"},
-{"id": "ellipse_cx", "title": "Cambia dell&#39;ellisse cx coordinare"},
-{"id": "ellipse_cy", "title": "Ellisse Cambia&#39;s CY coordinare"},
-{"id": "ellipse_rx", "title": "Raggio x ellisse Cambia&#39;s"},
-{"id": "ellipse_ry", "title": "Raggio y ellisse Cambia&#39;s"},
-{"id": "fill_color", "title": "Cambia il colore di riempimento"},
-{"id": "fitToContent", "textContent": "Adatta al contenuto"},
-{"id": "fit_to_all", "textContent": "Adatta a tutti i contenuti"},
-{"id": "fit_to_canvas", "textContent": "Adatta alla tela"},
-{"id": "fit_to_layer_content", "textContent": "Adatta a livello di contenuti"},
-{"id": "fit_to_sel", "textContent": "Adatta alla selezione"},
-{"id": "font_family", "title": "Change Font Family"},
-{"id": "icon_large", "textContent": "Large"},
-{"id": "icon_medium", "textContent": "Medium"},
-{"id": "icon_small", "textContent": "Small"},
-{"id": "icon_xlarge", "textContent": "Extra Large"},
-{"id": "image_height", "title": "Cambia l&#39;altezza dell&#39;immagine"},
-{"id": "image_opt_embed", "textContent": "Embed data (local files)"},
-{"id": "image_opt_ref", "textContent": "Use file reference"},
-{"id": "image_url", "title": "Cambia URL"},
-{"id": "image_width", "title": "Cambia la larghezza dell&#39;immagine"},
-{"id": "includedImages", "textContent": "Included Images"},
-{"id": "largest_object", "textContent": "il più grande oggetto"},
-{"id": "layer_delete", "title": "Elimina livello"},
-{"id": "layer_down", "title": "Move Layer Down"},
-{"id": "layer_new", "title": "Nuovo livello"},
-{"id": "layer_rename", "title": "Rinominare il livello"},
-{"id": "layer_up", "title": "Move Layer Up"},
-{"id": "layersLabel", "textContent": "Livelli:"},
-{"id": "line_x1", "title": "Modifica la linea di partenza coordinata x"},
-{"id": "line_x2", "title": "Modifica la linea di fine coordinata x"},
-{"id": "line_y1", "title": "Modifica la linea di partenza coordinata y"},
-{"id": "line_y2", "title": "Modifica la linea di fine coordinata y"},
-{"id": "linecap_butt", "title": "Linecap: Butt"},
-{"id": "linecap_round", "title": "Linecap: Round"},
-{"id": "linecap_square", "title": "Linecap: Square"},
-{"id": "linejoin_bevel", "title": "Linejoin: Bevel"},
-{"id": "linejoin_miter", "title": "Linejoin: Miter"},
-{"id": "linejoin_round", "title": "Linejoin: Round"},
-{"id": "main_icon", "title": "Main Menu"},
-{"id": "mode_connect", "title": "Connect two objects"},
-{"id": "page", "textContent": "Pagina"},
-{"id": "palette", "title": "Fare clic per cambiare il colore di riempimento, shift-click per cambiare colore del tratto"},
-{"id": "path_node_x", "title": "Change node's x coordinate"},
-{"id": "path_node_y", "title": "Change node's y coordinate"},
-{"id": "rect_height_tool", "title": "Cambia l&#39;altezza rettangolo"},
-{"id": "rect_width_tool", "title": "Cambia la larghezza rettangolo"},
-{"id": "relativeToLabel", "textContent": "rispetto al:"},
-{"id": "seg_type", "title": "Change Segment type"},
-{"id": "selLayerLabel", "textContent": "Move elements to:"},
-{"id": "selLayerNames", "title": "Move selected elements to a different layer"},
-{"id": "selectedPredefined", "textContent": "Seleziona predefinite:"},
-{"id": "selected_objects", "textContent": "eletto oggetti"},
-{"id": "selected_x", "title": "Change X coordinate"},
-{"id": "selected_y", "title": "Change Y coordinate"},
-{"id": "smallest_object", "textContent": "più piccolo oggetto"},
-{"id": "straight_segments", "textContent": "Straight"},
-{"id": "stroke_color", "title": "Cambia colore ictus"},
-{"id": "stroke_style", "title": "Cambia lo stile dash ictus"},
-{"id": "stroke_width", "title": "Cambia la larghezza ictus"},
-{"id": "svginfo_bg_note", "textContent": "Note: Background will not be saved with image."},
-{"id": "svginfo_change_background", "textContent": "Editor Background"},
-{"id": "svginfo_dim", "textContent": "Canvas Dimensions"},
-{"id": "svginfo_editor_prefs", "textContent": "Editor Preferences"},
-{"id": "svginfo_height", "textContent": "Altezza:"},
-{"id": "svginfo_icons", "textContent": "Icon size"},
-{"id": "svginfo_image_props", "textContent": "Image Properties"},
-{"id": "svginfo_lang", "textContent": "Language"},
-{"id": "svginfo_title", "textContent": "Title"},
-{"id": "svginfo_width", "textContent": "Ampiezza:"},
-{"id": "text", "title": "Cambia il contenuto del testo"},
-{"id": "toggle_stroke_tools", "title": "Show/hide more stroke tools"},
-{"id": "tool_add_subpath", "title": "Add sub-path"},
-{"id": "tool_alignbottom", "title": "Allinea in basso"},
-{"id": "tool_aligncenter", "title": "Allinea al centro"},
-{"id": "tool_alignleft", "title": "Allinea a sinistra"},
-{"id": "tool_alignmiddle", "title": "Allinea al centro"},
-{"id": "tool_alignright", "title": "Allinea a destra"},
-{"id": "tool_aligntop", "title": "Allinea in alto"},
-{"id": "tool_angle", "title": "Cambia l&#39;angolo di rotazione"},
-{"id": "tool_blur", "title": "Change gaussian blur value"},
-{"id": "tool_bold", "title": "Grassetto"},
-{"id": "tool_circle", "title": "Circle"},
-{"id": "tool_clear", "textContent": "New Image"},
-{"id": "tool_clone", "title": "Clone Element"},
-{"id": "tool_clone_multi", "title": "Clone Elements"},
-{"id": "tool_delete", "title": "Cancellare l&#39;elemento"},
-{"id": "tool_delete_multi", "title": "Elimina elementi selezionati"},
-{"id": "tool_docprops", "textContent": "Proprietà del documento"},
-{"id": "tool_docprops_cancel", "textContent": "Annulla"},
-{"id": "tool_docprops_save", "textContent": "Salvare"},
-{"id": "tool_ellipse", "title": "Ellipse"},
-{"id": "tool_export", "textContent": "Export as PNG"},
-{"id": "tool_eyedropper", "title": "Eye Dropper Tool"},
-{"id": "tool_fhellipse", "title": "Free-Hand Ellipse"},
-{"id": "tool_fhpath", "title": "Lo strumento matita"},
-{"id": "tool_fhrect", "title": "Free-Hand Rectangle"},
-{"id": "tool_font_size", "title": "Modifica dimensione carattere"},
-{"id": "tool_group", "title": "Group Elements"},
-{"id": "tool_image", "title": "Image Tool"},
-{"id": "tool_import", "textContent": "Import SVG"},
-{"id": "tool_italic", "title": "Corsivo"},
-{"id": "tool_line", "title": "Line Tool"},
-{"id": "tool_move_bottom", "title": "Move to Bottom"},
-{"id": "tool_move_top", "title": "Move to Top"},
-{"id": "tool_node_clone", "title": "Clone Node"},
-{"id": "tool_node_delete", "title": "Delete Node"},
-{"id": "tool_node_link", "title": "Link Control Points"},
-{"id": "tool_opacity", "title": "Cambia l&#39;opacità dell&#39;oggetto selezionato"},
-{"id": "tool_open", "textContent": "Apri immagine"},
-{"id": "tool_path", "title": "Path Tool"},
-{"id": "tool_rect", "title": "Rettangolo"},
-{"id": "tool_redo", "title": "Redo"},
-{"id": "tool_reorient", "title": "Reorient path"},
-{"id": "tool_save", "textContent": "Salvare l&#39;immagine"},
-{"id": "tool_select", "title": "Selezionare Tool"},
-{"id": "tool_source", "title": "Edit Source"},
-{"id": "tool_source_cancel", "textContent": "Annulla"},
-{"id": "tool_source_save", "textContent": "Salvare"},
-{"id": "tool_square", "title": "Piazza"},
-{"id": "tool_text", "title": "Strumento Testo"},
-{"id": "tool_topath", "title": "Convert to Path"},
-{"id": "tool_undo", "title": "Annulla"},
-{"id": "tool_ungroup", "title": "Separa Elements"},
-{"id": "tool_wireframe", "title": "Wireframe Mode"},
-{"id": "tool_zoom", "title": "Zoom Tool"},
-{"id": "url_notice", "title": "NOTE: This image cannot be embedded. It will depend on this path to be displayed"},
-{"id": "zoom_panel", "title": "Cambia il livello di zoom"},
-{"id": "sidepanel_handle", "textContent": "L a y e r s", "title": "Drag left/right to resize side panel"},
-{
- "js_strings": {
- "QerrorsRevertToSource": "There were parsing errors in your SVG source.\nRevert back to original SVG source?",
- "QignoreSourceChanges": "Ignore changes made to SVG source?",
- "QmoveElemsToLayer": "Move selected elements to layer '%s'?",
- "QwantToClear": "Do you want to clear the drawing?\nThis will also erase your undo history!",
- "cancel": "Cancel",
- "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.",
- "dupeLayerName": "There is already a layer named that!",
- "enterNewImgURL": "Enter the new image URL",
- "enterNewLayerName": "Please enter the new layer name",
- "enterUniqueLayerName": "Please enter a unique layer name",
- "exportNoBlur": "Blurred elements will appear as un-blurred",
- "exportNoDashArray": "Strokes will appear filled",
- "exportNoImage": "Image elements will not appear",
- "exportNoText": "Text may not appear as expected",
- "exportNoforeignObject": "foreignObject elements will not appear",
- "featNotSupported": "Feature not supported",
- "invalidAttrValGiven": "Invalid value given",
- "key_backspace": "backspace",
- "key_del": "delete",
- "key_down": "down",
- "key_up": "up",
- "layer": "Layer",
- "layerHasThatName": "Layer already has that name",
- "loadingImage": "Loading image, please wait...",
- "noContentToFitTo": "No content to fit to",
- "noteTheseIssues": "Also note the following issues: ",
- "ok": "OK",
- "pathCtrlPtTooltip": "Drag control point to adjust curve properties",
- "pathNodeTooltip": "Drag node to move it. Double-click node to change segment type",
- "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file."
- }
-}
-] \ No newline at end of file
diff --git a/files_svgedit/js/locale/lang.ja.js b/files_svgedit/js/locale/lang.ja.js
deleted file mode 100644
index e0bde6791..000000000
--- a/files_svgedit/js/locale/lang.ja.js
+++ /dev/null
@@ -1,174 +0,0 @@
-[
-{"id": "align_relative_to", "title": "揃える"},
-{"id": "bkgnd_color", "title": "背景色/不透明度の変更"},
-{"id": "circle_cx", "title": "円の中心を変更(X座標)"},
-{"id": "circle_cy", "title": "円の中心を変更(Y座標)"},
-{"id": "circle_r", "title": "変更円の半径"},
-{"id": "connector_no_arrow", "textContent": "No arrow"},
-{"id": "copyrightLabel", "textContent": "Powered by"},
-{"id": "cornerRadiusLabel", "title": "角の半径:"},
-{"id": "cornerRadiusLabel", "title": "長方形の角の半径を変更"},
-{"id": "curve_segments", "textContent": "カーブ"},
-{"id": "ellipse_cx", "title": "楕円の中心を変更(X座標)"},
-{"id": "ellipse_cy", "title": "楕円の中心を変更(Y座標)"},
-{"id": "ellipse_rx", "title": "楕円の半径を変更(X座標)"},
-{"id": "ellipse_ry", "title": "楕円の半径を変更(Y座標)"},
-{"id": "fill_color", "title": "塗りの色を変更"},
-{"id": "fitToContent", "textContent": "コンテンツに合わせる"},
-{"id": "fit_to_all", "textContent": "すべてのコンテンツに合わせる"},
-{"id": "fit_to_canvas", "textContent": "キャンバスに合わせる"},
-{"id": "fit_to_layer_content", "textContent": "レイヤー上のコンテンツに合わせる"},
-{"id": "fit_to_sel", "textContent": "選択対象に合わせる"},
-{"id": "font_family", "title": "フォントファミリーの変更"},
-{"id": "icon_large", "textContent": "Large"},
-{"id": "icon_medium", "textContent": "Medium"},
-{"id": "icon_small", "textContent": "Small"},
-{"id": "icon_xlarge", "textContent": "Extra Large"},
-{"id": "image_height", "title": "画像の高さを変更"},
-{"id": "image_opt_embed", "textContent": "SVGファイルに埋め込む"},
-{"id": "image_opt_ref", "textContent": "画像を参照する"},
-{"id": "image_url", "title": "URLを変更"},
-{"id": "image_width", "title": "画像の幅を変更"},
-{"id": "includedImages", "textContent": "挿入された画像の扱い"},
-{"id": "largest_object", "textContent": "最大のオブジェクト"},
-{"id": "layer_delete", "title": "レイヤの削除"},
-{"id": "layer_down", "title": "レイヤを下へ移動"},
-{"id": "layer_new", "title": "新規レイヤ"},
-{"id": "layer_rename", "title": "レイヤの名前を変更"},
-{"id": "layer_up", "title": "レイヤを上へ移動"},
-{"id": "layersLabel", "textContent": "レイヤ:"},
-{"id": "line_x1", "title": "開始X座標"},
-{"id": "line_x2", "title": "終了X座標"},
-{"id": "line_y1", "title": "開始Y座標"},
-{"id": "line_y2", "title": "終了Y座標"},
-{"id": "linecap_butt", "title": "Linecap: Butt"},
-{"id": "linecap_round", "title": "Linecap: Round"},
-{"id": "linecap_square", "title": "Linecap: Square"},
-{"id": "linejoin_bevel", "title": "Linejoin: Bevel"},
-{"id": "linejoin_miter", "title": "Linejoin: Miter"},
-{"id": "linejoin_round", "title": "Linejoin: Round"},
-{"id": "main_icon", "title": "Main Menu"},
-{"id": "mode_connect", "title": "Connect two objects"},
-{"id": "page", "textContent": "ページ"},
-{"id": "palette", "title": "クリックで塗りの色を選択、Shift+クリックで線の色を選択"},
-{"id": "path_node_x", "title": "ノードのX座標を変更"},
-{"id": "path_node_y", "title": "ノードのY座標を変更"},
-{"id": "rect_height_tool", "title": "長方形の高さを変更"},
-{"id": "rect_width_tool", "title": "長方形の幅を変更"},
-{"id": "relativeToLabel", "textContent": "相対:"},
-{"id": "seg_type", "title": "線分の種類を変更"},
-{"id": "selLayerLabel", "textContent": "移動先レイヤ:"},
-{"id": "selLayerNames", "title": "選択対象を別のレイヤに移動"},
-{"id": "selectedPredefined", "textContent": "デフォルト"},
-{"id": "selected_objects", "textContent": "選択オブジェクト"},
-{"id": "selected_x", "title": "X座標を変更"},
-{"id": "selected_y", "title": "Y座標を変更"},
-{"id": "smallest_object", "textContent": "最小のオブジェクト"},
-{"id": "straight_segments", "textContent": "直線"},
-{"id": "stroke_color", "title": "線の色を変更"},
-{"id": "stroke_style", "title": "線種の変更"},
-{"id": "stroke_width", "title": "線幅の変更"},
-{"id": "svginfo_bg_note", "textContent": "※背景色はファイルに保存されません。"},
-{"id": "svginfo_change_background", "textContent": "エディタの背景色"},
-{"id": "svginfo_dim", "textContent": "キャンバスの大きさ"},
-{"id": "svginfo_editor_prefs", "textContent": "エディタの設定"},
-{"id": "svginfo_height", "textContent": "高さ:"},
-{"id": "svginfo_icons", "textContent": "アイコンの大きさ"},
-{"id": "svginfo_image_props", "textContent": "イメージの設定"},
-{"id": "svginfo_lang", "textContent": "言語"},
-{"id": "svginfo_title", "textContent": "タイトル"},
-{"id": "svginfo_width", "textContent": "幅:"},
-{"id": "text", "title": "テキストの内容の変更"},
-{"id": "toggle_stroke_tools", "title": "Show/hide more stroke tools"},
-{"id": "tool_add_subpath", "title": "Add sub-path"},
-{"id": "tool_alignbottom", "title": "下揃え"},
-{"id": "tool_aligncenter", "title": "中央揃え"},
-{"id": "tool_alignleft", "title": "左揃え"},
-{"id": "tool_alignmiddle", "title": "中央揃え"},
-{"id": "tool_alignright", "title": "右揃え"},
-{"id": "tool_aligntop", "title": "上揃え"},
-{"id": "tool_angle", "title": "回転角の変更"},
-{"id": "tool_blur", "title": "Change gaussian blur value"},
-{"id": "tool_bold", "title": "太字"},
-{"id": "tool_circle", "title": "円"},
-{"id": "tool_clear", "textContent": "新規イメージ"},
-{"id": "tool_clone", "title": "複製"},
-{"id": "tool_clone_multi", "title": "選択対象を複製"},
-{"id": "tool_delete", "title": "削除"},
-{"id": "tool_delete_multi", "title": "選択対象を削除"},
-{"id": "tool_docprops", "textContent": "文書のプロパティ"},
-{"id": "tool_docprops_cancel", "textContent": "キャンセル"},
-{"id": "tool_docprops_save", "textContent": "OK"},
-{"id": "tool_ellipse", "title": "楕円"},
-{"id": "tool_export", "textContent": "Export as PNG"},
-{"id": "tool_eyedropper", "title": "Eye Dropper Tool"},
-{"id": "tool_fhellipse", "title": "フリーハンド楕円"},
-{"id": "tool_fhpath", "title": "鉛筆ツール"},
-{"id": "tool_fhrect", "title": "フリーハンド長方形"},
-{"id": "tool_font_size", "title": "文字サイズの変更"},
-{"id": "tool_group", "title": "グループ化"},
-{"id": "tool_image", "title": "イメージツール"},
-{"id": "tool_import", "textContent": "Import SVG"},
-{"id": "tool_italic", "title": "イタリック体"},
-{"id": "tool_line", "title": "直線ツール"},
-{"id": "tool_move_bottom", "title": "奥に移動"},
-{"id": "tool_move_top", "title": "手前に移動"},
-{"id": "tool_node_clone", "title": "ノードを複製"},
-{"id": "tool_node_delete", "title": "ノードを削除"},
-{"id": "tool_node_link", "title": "制御点の接続"},
-{"id": "tool_opacity", "title": "不透明度"},
-{"id": "tool_open", "textContent": "イメージを開く"},
-{"id": "tool_path", "title": "パスツール"},
-{"id": "tool_rect", "title": "長方形"},
-{"id": "tool_redo", "title": "やり直し"},
-{"id": "tool_reorient", "title": "現在の角度を0度とする"},
-{"id": "tool_save", "textContent": "画像を保存"},
-{"id": "tool_select", "title": "選択ツール"},
-{"id": "tool_source", "title": "ソースの編集"},
-{"id": "tool_source_cancel", "textContent": "キャンセル"},
-{"id": "tool_source_save", "textContent": "適用"},
-{"id": "tool_square", "title": "正方形"},
-{"id": "tool_text", "title": "テキストツール"},
-{"id": "tool_topath", "title": "パスに変換"},
-{"id": "tool_undo", "title": "元に戻す"},
-{"id": "tool_ungroup", "title": "グループ化を解除"},
-{"id": "tool_wireframe", "title": "ワイヤーフレームで表示 [F]"},
-{"id": "tool_zoom", "title": "ズームツール"},
-{"id": "url_notice", "title": "NOTE: This image cannot be embedded. It will depend on this path to be displayed"},
-{"id": "zoom_panel", "title": "ズーム倍率の変更"},
-{"id": "sidepanel_handle", "textContent": "L a y e r s", "title": "ドラッグで幅の調整"},
-{
- "js_strings": {
- "QerrorsRevertToSource": "ソースにエラーがあります。\n元のソースに戻しますか?",
- "QignoreSourceChanges": "ソースの変更を無視しますか?",
- "QmoveElemsToLayer": "選択した要素をレイヤー '%s' に移動しますか?",
- "QwantToClear": "キャンバスをクリアしますか?\nアンドゥ履歴も消去されます。",
- "cancel": "キャンセル",
- "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.",
- "dupeLayerName": "同名のレイヤーが既に存在します。",
- "enterNewImgURL": "画像のURLを入力してください。",
- "enterNewLayerName": "レイヤの新しい名前を入力してください。",
- "enterUniqueLayerName": "新規レイヤの一意な名前を入力してください。",
- "exportNoBlur": "Blurred elements will appear as un-blurred",
- "exportNoDashArray": "Strokes will appear filled",
- "exportNoImage": "Image elements will not appear",
- "exportNoText": "Text may not appear as expected",
- "exportNoforeignObject": "foreignObject elements will not appear",
- "featNotSupported": "機能はサポートされていません。",
- "invalidAttrValGiven": "無効な値が指定されています。",
- "key_backspace": "backspace",
- "key_del": "delete",
- "key_down": "down",
- "key_up": "up",
- "layer": "レイヤ",
- "layerHasThatName": "既に同名が付いています。",
- "loadingImage": "Loading image, please wait...",
- "noContentToFitTo": "合わせる対象のコンテンツがありません。",
- "noteTheseIssues": "Also note the following issues: ",
- "ok": "OK",
- "pathCtrlPtTooltip": "カーブの形状を調整するには、制御点をドラッグしてください。",
- "pathNodeTooltip": "移動するには、ノードをドラッグしてください。ノードをダブルクリックすると線分の種類を変更できます。",
- "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file."
- }
-}
-] \ No newline at end of file
diff --git a/files_svgedit/js/locale/lang.ko.js b/files_svgedit/js/locale/lang.ko.js
deleted file mode 100644
index 9c4f322b0..000000000
--- a/files_svgedit/js/locale/lang.ko.js
+++ /dev/null
@@ -1,173 +0,0 @@
-[
-{"id": "align_relative_to", "title": "정렬 상대적으로 ..."},
-{"id": "bkgnd_color", "title": "배경 색상 변경 / 투명도"},
-{"id": "circle_cx", "title": "변경 동그라미 CX는 좌표"},
-{"id": "circle_cy", "title": "동그라미 싸이 변경 조정할 수있어"},
-{"id": "circle_r", "title": "변경 원의 반지름"},
-{"id": "connector_no_arrow", "textContent": "No arrow"},
-{"id": "copyrightLabel", "textContent": "Powered by"},
-{"id": "cornerRadiusLabel", "title": "변경 직사각형 코너 반경"},
-{"id": "curve_segments", "textContent": "Curve"},
-{"id": "ellipse_cx", "title": "CX는 타원의 좌표 변경"},
-{"id": "ellipse_cy", "title": "싸이 타원 변경 조정할 수있어"},
-{"id": "ellipse_rx", "title": "변경 타원의 x 반지름"},
-{"id": "ellipse_ry", "title": "변경 타원의 y를 반경"},
-{"id": "fill_color", "title": "채우기 색상 변경"},
-{"id": "fitToContent", "textContent": "맞춤 콘텐츠"},
-{"id": "fit_to_all", "textContent": "맞춤 모든 콘텐츠에"},
-{"id": "fit_to_canvas", "textContent": "맞춤 캔버스"},
-{"id": "fit_to_layer_content", "textContent": "레이어에 맞게 콘텐츠"},
-{"id": "fit_to_sel", "textContent": "맞춤 선택"},
-{"id": "font_family", "title": "글꼴 변경 패밀리"},
-{"id": "icon_large", "textContent": "Large"},
-{"id": "icon_medium", "textContent": "Medium"},
-{"id": "icon_small", "textContent": "Small"},
-{"id": "icon_xlarge", "textContent": "Extra Large"},
-{"id": "image_height", "title": "이미지 높이 변경"},
-{"id": "image_opt_embed", "textContent": "Embed data (local files)"},
-{"id": "image_opt_ref", "textContent": "Use file reference"},
-{"id": "image_url", "title": "URL 변경"},
-{"id": "image_width", "title": "이미지 변경 폭"},
-{"id": "includedImages", "textContent": "Included Images"},
-{"id": "largest_object", "textContent": "큰 개체"},
-{"id": "layer_delete", "title": "레이어 삭제"},
-{"id": "layer_down", "title": "레이어 아래로 이동"},
-{"id": "layer_new", "title": "새 레이어"},
-{"id": "layer_rename", "title": "레이어 이름 바꾸기"},
-{"id": "layer_up", "title": "레이어 위로 이동"},
-{"id": "layersLabel", "textContent": "레이어:"},
-{"id": "line_x1", "title": "변경 라인의 X 좌표 시작"},
-{"id": "line_x2", "title": "변경 라인의 X 좌표 결말"},
-{"id": "line_y1", "title": "라인 변경 y를 시작 좌표"},
-{"id": "line_y2", "title": "라인 변경 y를 결말의 좌표"},
-{"id": "linecap_butt", "title": "Linecap: Butt"},
-{"id": "linecap_round", "title": "Linecap: Round"},
-{"id": "linecap_square", "title": "Linecap: Square"},
-{"id": "linejoin_bevel", "title": "Linejoin: Bevel"},
-{"id": "linejoin_miter", "title": "Linejoin: Miter"},
-{"id": "linejoin_round", "title": "Linejoin: Round"},
-{"id": "main_icon", "title": "Main Menu"},
-{"id": "mode_connect", "title": "Connect two objects"},
-{"id": "page", "textContent": "페이지"},
-{"id": "palette", "title": "색상을 클릭, 근무 시간 채우기 스트로크 색상을 변경하려면 변경하려면"},
-{"id": "path_node_x", "title": "Change node's x coordinate"},
-{"id": "path_node_y", "title": "Change node's y coordinate"},
-{"id": "rect_height_tool", "title": "사각형의 높이를 변경"},
-{"id": "rect_width_tool", "title": "사각형의 너비 변경"},
-{"id": "relativeToLabel", "textContent": "상대:"},
-{"id": "seg_type", "title": "Change Segment type"},
-{"id": "selLayerLabel", "textContent": "Move elements to:"},
-{"id": "selLayerNames", "title": "Move selected elements to a different layer"},
-{"id": "selectedPredefined", "textContent": "미리 정의된 선택:"},
-{"id": "selected_objects", "textContent": "당선 개체"},
-{"id": "selected_x", "title": "Change X coordinate"},
-{"id": "selected_y", "title": "Change Y coordinate"},
-{"id": "smallest_object", "textContent": "작은 개체"},
-{"id": "straight_segments", "textContent": "Straight"},
-{"id": "stroke_color", "title": "뇌졸중으로 색상 변경"},
-{"id": "stroke_style", "title": "뇌졸중 변경 대시 스타일"},
-{"id": "stroke_width", "title": "뇌졸중 너비 변경"},
-{"id": "svginfo_bg_note", "textContent": "Note: Background will not be saved with image."},
-{"id": "svginfo_change_background", "textContent": "Editor Background"},
-{"id": "svginfo_dim", "textContent": "Canvas Dimensions"},
-{"id": "svginfo_editor_prefs", "textContent": "Editor Preferences"},
-{"id": "svginfo_height", "textContent": "높이:"},
-{"id": "svginfo_icons", "textContent": "Icon size"},
-{"id": "svginfo_image_props", "textContent": "Image Properties"},
-{"id": "svginfo_lang", "textContent": "Language"},
-{"id": "svginfo_title", "textContent": "Title"},
-{"id": "svginfo_width", "textContent": "너비:"},
-{"id": "text", "title": "텍스트 변경 내용"},
-{"id": "toggle_stroke_tools", "title": "Show/hide more stroke tools"},
-{"id": "tool_add_subpath", "title": "Add sub-path"},
-{"id": "tool_alignbottom", "title": "히프 정렬"},
-{"id": "tool_aligncenter", "title": "정렬 센터"},
-{"id": "tool_alignleft", "title": "왼쪽 정렬"},
-{"id": "tool_alignmiddle", "title": "중간 정렬"},
-{"id": "tool_alignright", "title": "오른쪽 맞춤"},
-{"id": "tool_aligntop", "title": "정렬 탑"},
-{"id": "tool_angle", "title": "회전 각도를 변경"},
-{"id": "tool_blur", "title": "Change gaussian blur value"},
-{"id": "tool_bold", "title": "굵은 텍스트"},
-{"id": "tool_circle", "title": "동그라미"},
-{"id": "tool_clear", "textContent": "새 이미지"},
-{"id": "tool_clone", "title": "클론 요소"},
-{"id": "tool_clone_multi", "title": "클론 요소"},
-{"id": "tool_delete", "title": "요소 삭제"},
-{"id": "tool_delete_multi", "title": "선택한 요소를 삭제"},
-{"id": "tool_docprops", "textContent": "문서 속성"},
-{"id": "tool_docprops_cancel", "textContent": "취소"},
-{"id": "tool_docprops_save", "textContent": "저장"},
-{"id": "tool_ellipse", "title": "타원"},
-{"id": "tool_export", "textContent": "Export as PNG"},
-{"id": "tool_eyedropper", "title": "Eye Dropper Tool"},
-{"id": "tool_fhellipse", "title": "자유 핸드 타원"},
-{"id": "tool_fhpath", "title": "연필 도구"},
-{"id": "tool_fhrect", "title": "자유 핸드 직사각형"},
-{"id": "tool_font_size", "title": "글꼴 크기 변경"},
-{"id": "tool_group", "title": "그룹 요소"},
-{"id": "tool_image", "title": "이미지 도구"},
-{"id": "tool_import", "textContent": "Import SVG"},
-{"id": "tool_italic", "title": "기울임꼴 텍스트"},
-{"id": "tool_line", "title": "선 도구"},
-{"id": "tool_move_bottom", "title": "아래로 이동"},
-{"id": "tool_move_top", "title": "상단으로 이동"},
-{"id": "tool_node_clone", "title": "Clone Node"},
-{"id": "tool_node_delete", "title": "Delete Node"},
-{"id": "tool_node_link", "title": "Link Control Points"},
-{"id": "tool_opacity", "title": "변경 항목을 선택 불투명도"},
-{"id": "tool_open", "textContent": "오픈 이미지"},
-{"id": "tool_path", "title": "Path Tool"},
-{"id": "tool_rect", "title": "직사각형"},
-{"id": "tool_redo", "title": "재실행"},
-{"id": "tool_reorient", "title": "Reorient path"},
-{"id": "tool_save", "textContent": "이미지 저장"},
-{"id": "tool_select", "title": "선택 도구"},
-{"id": "tool_source", "title": "수정 소스"},
-{"id": "tool_source_cancel", "textContent": "취소"},
-{"id": "tool_source_save", "textContent": "저장"},
-{"id": "tool_square", "title": "정사각형"},
-{"id": "tool_text", "title": "텍스트 도구"},
-{"id": "tool_topath", "title": "Convert to Path"},
-{"id": "tool_undo", "title": "취소"},
-{"id": "tool_ungroup", "title": "그룹 해제 요소"},
-{"id": "tool_wireframe", "title": "Wireframe Mode"},
-{"id": "tool_zoom", "title": "줌 도구"},
-{"id": "url_notice", "title": "NOTE: This image cannot be embedded. It will depend on this path to be displayed"},
-{"id": "zoom_panel", "title": "변경 수준으로 확대"},
-{"id": "sidepanel_handle", "textContent": "L a y e r s", "title": "Drag left/right to resize side panel"},
-{
- "js_strings": {
- "QerrorsRevertToSource": "There were parsing errors in your SVG source.\nRevert back to original SVG source?",
- "QignoreSourceChanges": "Ignore changes made to SVG source?",
- "QmoveElemsToLayer": "Move selected elements to layer '%s'?",
- "QwantToClear": "Do you want to clear the drawing?\nThis will also erase your undo history!",
- "cancel": "Cancel",
- "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.",
- "dupeLayerName": "There is already a layer named that!",
- "enterNewImgURL": "Enter the new image URL",
- "enterNewLayerName": "Please enter the new layer name",
- "enterUniqueLayerName": "Please enter a unique layer name",
- "exportNoBlur": "Blurred elements will appear as un-blurred",
- "exportNoDashArray": "Strokes will appear filled",
- "exportNoImage": "Image elements will not appear",
- "exportNoText": "Text may not appear as expected",
- "exportNoforeignObject": "foreignObject elements will not appear",
- "featNotSupported": "Feature not supported",
- "invalidAttrValGiven": "Invalid value given",
- "key_backspace": "backspace",
- "key_del": "delete",
- "key_down": "down",
- "key_up": "up",
- "layer": "Layer",
- "layerHasThatName": "Layer already has that name",
- "loadingImage": "Loading image, please wait...",
- "noContentToFitTo": "No content to fit to",
- "noteTheseIssues": "Also note the following issues: ",
- "ok": "OK",
- "pathCtrlPtTooltip": "Drag control point to adjust curve properties",
- "pathNodeTooltip": "Drag node to move it. Double-click node to change segment type",
- "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file."
- }
-}
-] \ No newline at end of file
diff --git a/files_svgedit/js/locale/lang.lt.js b/files_svgedit/js/locale/lang.lt.js
deleted file mode 100644
index 629bdd5f1..000000000
--- a/files_svgedit/js/locale/lang.lt.js
+++ /dev/null
@@ -1,173 +0,0 @@
-[
-{"id": "align_relative_to", "title": "Derinti palyginti ..."},
-{"id": "bkgnd_color", "title": "Pakeisti fono spalvą / drumstumas"},
-{"id": "circle_cx", "title": "Keisti ratas&#39;s CX koordinuoti"},
-{"id": "circle_cy", "title": "Keisti ratas&#39;s CY koordinuoti"},
-{"id": "circle_r", "title": "Keisti savo apskritimo spindulys"},
-{"id": "connector_no_arrow", "textContent": "No arrow"},
-{"id": "copyrightLabel", "textContent": "Powered by"},
-{"id": "cornerRadiusLabel", "title": "Keisti stačiakampis skyrelį Spindulys"},
-{"id": "curve_segments", "textContent": "Curve"},
-{"id": "ellipse_cx", "title": "Keisti elipse&#39;s CX koordinuoti"},
-{"id": "ellipse_cy", "title": "Keisti elipse&#39;s CY koordinuoti"},
-{"id": "ellipse_rx", "title": "Keisti elipsė &quot;X spindulys"},
-{"id": "ellipse_ry", "title": "Keisti elipse Y spindulys"},
-{"id": "fill_color", "title": "Keisti užpildyti spalvos"},
-{"id": "fitToContent", "textContent": "Talpinti turinys"},
-{"id": "fit_to_all", "textContent": "Talpinti All content"},
-{"id": "fit_to_canvas", "textContent": "Talpinti drobė"},
-{"id": "fit_to_layer_content", "textContent": "Talpinti sluoksnis turinio"},
-{"id": "fit_to_sel", "textContent": "Talpinti atrankos"},
-{"id": "font_family", "title": "Pakeistišriftą Šeima"},
-{"id": "icon_large", "textContent": "Large"},
-{"id": "icon_medium", "textContent": "Medium"},
-{"id": "icon_small", "textContent": "Small"},
-{"id": "icon_xlarge", "textContent": "Extra Large"},
-{"id": "image_height", "title": "Keisti vaizdo aukštis"},
-{"id": "image_opt_embed", "textContent": "Embed data (local files)"},
-{"id": "image_opt_ref", "textContent": "Use file reference"},
-{"id": "image_url", "title": "Pakeisti URL"},
-{"id": "image_width", "title": "Keisti paveikslėlio plotis"},
-{"id": "includedImages", "textContent": "Included Images"},
-{"id": "largest_object", "textContent": "didžiausias objektas"},
-{"id": "layer_delete", "title": "Ištrinti Layer"},
-{"id": "layer_down", "title": "Perkelti sluoksnį Žemyn"},
-{"id": "layer_new", "title": "New Layer"},
-{"id": "layer_rename", "title": "Pervadinti sluoksnį"},
-{"id": "layer_up", "title": "Perkelti sluoksnį Up"},
-{"id": "layersLabel", "textContent": "Sluoksniai:"},
-{"id": "line_x1", "title": "Keisti linijos nuo koordinačių x"},
-{"id": "line_x2", "title": "Keisti linijos baigėsi x koordinuoti"},
-{"id": "line_y1", "title": "Keisti linijos pradžios y koordinačių"},
-{"id": "line_y2", "title": "Keisti linijos baigėsi y koordinačių"},
-{"id": "linecap_butt", "title": "Linecap: Butt"},
-{"id": "linecap_round", "title": "Linecap: Round"},
-{"id": "linecap_square", "title": "Linecap: Square"},
-{"id": "linejoin_bevel", "title": "Linejoin: Bevel"},
-{"id": "linejoin_miter", "title": "Linejoin: Miter"},
-{"id": "linejoin_round", "title": "Linejoin: Round"},
-{"id": "main_icon", "title": "Main Menu"},
-{"id": "mode_connect", "title": "Connect two objects"},
-{"id": "page", "textContent": "puslapis"},
-{"id": "palette", "title": "Spustelėkite norėdami keisti užpildo spalvą, perėjimo spustelėkite pakeisti insultas spalva"},
-{"id": "path_node_x", "title": "Change node's x coordinate"},
-{"id": "path_node_y", "title": "Change node's y coordinate"},
-{"id": "rect_height_tool", "title": "Keisti stačiakampio aukščio"},
-{"id": "rect_width_tool", "title": "Pakeisti stačiakampio plotis"},
-{"id": "relativeToLabel", "textContent": "palyginti:"},
-{"id": "seg_type", "title": "Change Segment type"},
-{"id": "selLayerLabel", "textContent": "Move elements to:"},
-{"id": "selLayerNames", "title": "Move selected elements to a different layer"},
-{"id": "selectedPredefined", "textContent": "Pasirinkite iš anksto:"},
-{"id": "selected_objects", "textContent": "išrinktas objektai"},
-{"id": "selected_x", "title": "Change X coordinate"},
-{"id": "selected_y", "title": "Change Y coordinate"},
-{"id": "smallest_object", "textContent": "mažiausias objektą"},
-{"id": "straight_segments", "textContent": "Straight"},
-{"id": "stroke_color", "title": "Keisti insultas spalva"},
-{"id": "stroke_style", "title": "Keisti insultas brūkšnys stilius"},
-{"id": "stroke_width", "title": "Keisti insultas plotis"},
-{"id": "svginfo_bg_note", "textContent": "Note: Background will not be saved with image."},
-{"id": "svginfo_change_background", "textContent": "Editor Background"},
-{"id": "svginfo_dim", "textContent": "Canvas Dimensions"},
-{"id": "svginfo_editor_prefs", "textContent": "Editor Preferences"},
-{"id": "svginfo_height", "textContent": "Aukštis:"},
-{"id": "svginfo_icons", "textContent": "Icon size"},
-{"id": "svginfo_image_props", "textContent": "Image Properties"},
-{"id": "svginfo_lang", "textContent": "Language"},
-{"id": "svginfo_title", "textContent": "Title"},
-{"id": "svginfo_width", "textContent": "Plotis:"},
-{"id": "text", "title": "Keisti teksto turinys"},
-{"id": "toggle_stroke_tools", "title": "Show/hide more stroke tools"},
-{"id": "tool_add_subpath", "title": "Add sub-path"},
-{"id": "tool_alignbottom", "title": "Lygiuoti apačioje"},
-{"id": "tool_aligncenter", "title": "Lygiuoti"},
-{"id": "tool_alignleft", "title": "Lygiuoti kairėje"},
-{"id": "tool_alignmiddle", "title": "Suderinti Vidurio"},
-{"id": "tool_alignright", "title": "Lygiuoti dešinėje"},
-{"id": "tool_aligntop", "title": "Lygiuoti viršų"},
-{"id": "tool_angle", "title": "Keisti sukimosi kampas"},
-{"id": "tool_blur", "title": "Change gaussian blur value"},
-{"id": "tool_bold", "title": "Pusjuodis"},
-{"id": "tool_circle", "title": "Circle"},
-{"id": "tool_clear", "textContent": "New Image"},
-{"id": "tool_clone", "title": "Klonas Element"},
-{"id": "tool_clone_multi", "title": "Klonas elementai"},
-{"id": "tool_delete", "title": "Naikinti elementą"},
-{"id": "tool_delete_multi", "title": "Pašalinti pasirinktus elementus"},
-{"id": "tool_docprops", "textContent": "Document Properties"},
-{"id": "tool_docprops_cancel", "textContent": "Atšaukti"},
-{"id": "tool_docprops_save", "textContent": "Saugoti"},
-{"id": "tool_ellipse", "title": "Elipse"},
-{"id": "tool_export", "textContent": "Export as PNG"},
-{"id": "tool_eyedropper", "title": "Eye Dropper Tool"},
-{"id": "tool_fhellipse", "title": "Free Hand Elipsė"},
-{"id": "tool_fhpath", "title": "Pencil Tool"},
-{"id": "tool_fhrect", "title": "Free Hand stačiakampis"},
-{"id": "tool_font_size", "title": "Change font size"},
-{"id": "tool_group", "title": "Elementų grupės"},
-{"id": "tool_image", "title": "Image Tool"},
-{"id": "tool_import", "textContent": "Import SVG"},
-{"id": "tool_italic", "title": "Kursyvas"},
-{"id": "tool_line", "title": "Line Tool"},
-{"id": "tool_move_bottom", "title": "Perkelti į apačią"},
-{"id": "tool_move_top", "title": "Perkelti į viršų"},
-{"id": "tool_node_clone", "title": "Clone Node"},
-{"id": "tool_node_delete", "title": "Delete Node"},
-{"id": "tool_node_link", "title": "Link Control Points"},
-{"id": "tool_opacity", "title": "Pakeisti pasirinkto elemento neskaidrumo"},
-{"id": "tool_open", "textContent": "Atidaryti atvaizdą"},
-{"id": "tool_path", "title": "Path Tool"},
-{"id": "tool_rect", "title": "Stačiakampis"},
-{"id": "tool_redo", "title": "Atstatyti"},
-{"id": "tool_reorient", "title": "Reorient path"},
-{"id": "tool_save", "textContent": "Išsaugoti nuotrauką"},
-{"id": "tool_select", "title": "Įrankis"},
-{"id": "tool_source", "title": "Taisyti Šaltinis"},
-{"id": "tool_source_cancel", "textContent": "Atšaukti"},
-{"id": "tool_source_save", "textContent": "Saugoti"},
-{"id": "tool_square", "title": "Aikštė"},
-{"id": "tool_text", "title": "Tekstas Tool"},
-{"id": "tool_topath", "title": "Convert to Path"},
-{"id": "tool_undo", "title": "Atšaukti"},
-{"id": "tool_ungroup", "title": "Išgrupuoti elementai"},
-{"id": "tool_wireframe", "title": "Wireframe Mode"},
-{"id": "tool_zoom", "title": "Zoom Įrankį"},
-{"id": "url_notice", "title": "NOTE: This image cannot be embedded. It will depend on this path to be displayed"},
-{"id": "zoom_panel", "title": "Keisti mastelį"},
-{"id": "sidepanel_handle", "textContent": "L a y e r s", "title": "Drag left/right to resize side panel"},
-{
- "js_strings": {
- "QerrorsRevertToSource": "There were parsing errors in your SVG source.\nRevert back to original SVG source?",
- "QignoreSourceChanges": "Ignore changes made to SVG source?",
- "QmoveElemsToLayer": "Move selected elements to layer '%s'?",
- "QwantToClear": "Do you want to clear the drawing?\nThis will also erase your undo history!",
- "cancel": "Cancel",
- "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.",
- "dupeLayerName": "There is already a layer named that!",
- "enterNewImgURL": "Enter the new image URL",
- "enterNewLayerName": "Please enter the new layer name",
- "enterUniqueLayerName": "Please enter a unique layer name",
- "exportNoBlur": "Blurred elements will appear as un-blurred",
- "exportNoDashArray": "Strokes will appear filled",
- "exportNoImage": "Image elements will not appear",
- "exportNoText": "Text may not appear as expected",
- "exportNoforeignObject": "foreignObject elements will not appear",
- "featNotSupported": "Feature not supported",
- "invalidAttrValGiven": "Invalid value given",
- "key_backspace": "backspace",
- "key_del": "delete",
- "key_down": "down",
- "key_up": "up",
- "layer": "Layer",
- "layerHasThatName": "Layer already has that name",
- "loadingImage": "Loading image, please wait...",
- "noContentToFitTo": "No content to fit to",
- "noteTheseIssues": "Also note the following issues: ",
- "ok": "OK",
- "pathCtrlPtTooltip": "Drag control point to adjust curve properties",
- "pathNodeTooltip": "Drag node to move it. Double-click node to change segment type",
- "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file."
- }
-}
-] \ No newline at end of file
diff --git a/files_svgedit/js/locale/lang.lv.js b/files_svgedit/js/locale/lang.lv.js
deleted file mode 100644
index 0445a6ef5..000000000
--- a/files_svgedit/js/locale/lang.lv.js
+++ /dev/null
@@ -1,173 +0,0 @@
-[
-{"id": "align_relative_to", "title": "Līdzināt, salīdzinot ar ..."},
-{"id": "bkgnd_color", "title": "Change background color / necaurredzamība"},
-{"id": "circle_cx", "title": "Maina aplis&#39;s CX koordinēt"},
-{"id": "circle_cy", "title": "Pārmaiņu loks ir cy koordinēt"},
-{"id": "circle_r", "title": "Pārmaiņu loks ir rādiuss"},
-{"id": "connector_no_arrow", "textContent": "No arrow"},
-{"id": "copyrightLabel", "textContent": "Powered by"},
-{"id": "cornerRadiusLabel", "title": "Maina Taisnstūris Corner Rādiuss"},
-{"id": "curve_segments", "textContent": "Curve"},
-{"id": "ellipse_cx", "title": "Mainīt elipses&#39;s CX koordinēt"},
-{"id": "ellipse_cy", "title": "Mainīt elipses&#39;s cy koordinēt"},
-{"id": "ellipse_rx", "title": "Mainīt elipses&#39;s x rādiuss"},
-{"id": "ellipse_ry", "title": "Mainīt elipses&#39;s y rādiuss"},
-{"id": "fill_color", "title": "Change aizpildījuma krāsu"},
-{"id": "fitToContent", "textContent": "Fit to Content"},
-{"id": "fit_to_all", "textContent": "Fit uz visu saturu"},
-{"id": "fit_to_canvas", "textContent": "Ievietot audekls"},
-{"id": "fit_to_layer_content", "textContent": "Ievietot slānis saturs"},
-{"id": "fit_to_sel", "textContent": "Fit atlases"},
-{"id": "font_family", "title": "Mainīt fonta Family"},
-{"id": "icon_large", "textContent": "Large"},
-{"id": "icon_medium", "textContent": "Medium"},
-{"id": "icon_small", "textContent": "Small"},
-{"id": "icon_xlarge", "textContent": "Extra Large"},
-{"id": "image_height", "title": "Mainīt attēla augstums"},
-{"id": "image_opt_embed", "textContent": "Embed data (local files)"},
-{"id": "image_opt_ref", "textContent": "Use file reference"},
-{"id": "image_url", "title": "Change URL"},
-{"id": "image_width", "title": "Mainīt attēla platumu"},
-{"id": "includedImages", "textContent": "Included Images"},
-{"id": "largest_object", "textContent": "lielākais objekts"},
-{"id": "layer_delete", "title": "Dzēst Layer"},
-{"id": "layer_down", "title": "Pārvietot slāni uz leju"},
-{"id": "layer_new", "title": "New Layer"},
-{"id": "layer_rename", "title": "Pārdēvēt Layer"},
-{"id": "layer_up", "title": "Pārvietot slāni uz augšu"},
-{"id": "layersLabel", "textContent": "Layers:"},
-{"id": "line_x1", "title": "Mainīt līnijas sākas x koordinēt"},
-{"id": "line_x2", "title": "Mainīt līnijas beigu x koordinēt"},
-{"id": "line_y1", "title": "Mainīt līnijas sākas y koordinātu"},
-{"id": "line_y2", "title": "Mainīt līnijas beigu y koordinātu"},
-{"id": "linecap_butt", "title": "Linecap: Butt"},
-{"id": "linecap_round", "title": "Linecap: Round"},
-{"id": "linecap_square", "title": "Linecap: Square"},
-{"id": "linejoin_bevel", "title": "Linejoin: Bevel"},
-{"id": "linejoin_miter", "title": "Linejoin: Miter"},
-{"id": "linejoin_round", "title": "Linejoin: Round"},
-{"id": "main_icon", "title": "Main Menu"},
-{"id": "mode_connect", "title": "Connect two objects"},
-{"id": "page", "textContent": "lapa"},
-{"id": "palette", "title": "Noklikšķiniet, lai mainītu aizpildījuma krāsu, shift-click to mainīt stroke krāsa"},
-{"id": "path_node_x", "title": "Change node's x coordinate"},
-{"id": "path_node_y", "title": "Change node's y coordinate"},
-{"id": "rect_height_tool", "title": "Change Taisnstūra augstums"},
-{"id": "rect_width_tool", "title": "Change taisnstūra platums"},
-{"id": "relativeToLabel", "textContent": "salīdzinājumā ar:"},
-{"id": "seg_type", "title": "Change Segment type"},
-{"id": "selLayerLabel", "textContent": "Move elements to:"},
-{"id": "selLayerNames", "title": "Move selected elements to a different layer"},
-{"id": "selectedPredefined", "textContent": "Izvēlieties iepriekš:"},
-{"id": "selected_objects", "textContent": "ievēlēts objekti"},
-{"id": "selected_x", "title": "Change X coordinate"},
-{"id": "selected_y", "title": "Change Y coordinate"},
-{"id": "smallest_object", "textContent": "mazākais objekts"},
-{"id": "straight_segments", "textContent": "Straight"},
-{"id": "stroke_color", "title": "Change stroke krāsa"},
-{"id": "stroke_style", "title": "Maina stroke domuzīme stils"},
-{"id": "stroke_width", "title": "Change stroke platums"},
-{"id": "svginfo_bg_note", "textContent": "Note: Background will not be saved with image."},
-{"id": "svginfo_change_background", "textContent": "Editor Background"},
-{"id": "svginfo_dim", "textContent": "Canvas Dimensions"},
-{"id": "svginfo_editor_prefs", "textContent": "Editor Preferences"},
-{"id": "svginfo_height", "textContent": "Augstums:"},
-{"id": "svginfo_icons", "textContent": "Icon size"},
-{"id": "svginfo_image_props", "textContent": "Image Properties"},
-{"id": "svginfo_lang", "textContent": "Language"},
-{"id": "svginfo_title", "textContent": "Title"},
-{"id": "svginfo_width", "textContent": "Platums:"},
-{"id": "text", "title": "Mainītu teksta saturs"},
-{"id": "toggle_stroke_tools", "title": "Show/hide more stroke tools"},
-{"id": "tool_add_subpath", "title": "Add sub-path"},
-{"id": "tool_alignbottom", "title": "Līdzināt Bottom"},
-{"id": "tool_aligncenter", "title": "Līdzināt uz centru"},
-{"id": "tool_alignleft", "title": "Līdzināt pa kreisi"},
-{"id": "tool_alignmiddle", "title": "Līdzināt Middle"},
-{"id": "tool_alignright", "title": "Līdzināt pa labi"},
-{"id": "tool_aligntop", "title": "Līdzināt Top"},
-{"id": "tool_angle", "title": "Mainīt griešanās leņķis"},
-{"id": "tool_blur", "title": "Change gaussian blur value"},
-{"id": "tool_bold", "title": "Bold Text"},
-{"id": "tool_circle", "title": "Circle"},
-{"id": "tool_clear", "textContent": "New Image"},
-{"id": "tool_clone", "title": "Klons Element"},
-{"id": "tool_clone_multi", "title": "Klons Elements"},
-{"id": "tool_delete", "title": "Dzēst Element"},
-{"id": "tool_delete_multi", "title": "Delete Selected Elements"},
-{"id": "tool_docprops", "textContent": "Document Properties"},
-{"id": "tool_docprops_cancel", "textContent": "Atcelt"},
-{"id": "tool_docprops_save", "textContent": "Glābt"},
-{"id": "tool_ellipse", "title": "Elipse"},
-{"id": "tool_export", "textContent": "Export as PNG"},
-{"id": "tool_eyedropper", "title": "Eye Dropper Tool"},
-{"id": "tool_fhellipse", "title": "Free-Hand Ellipse"},
-{"id": "tool_fhpath", "title": "Pencil Tool"},
-{"id": "tool_fhrect", "title": "Free-Hand Taisnstūris"},
-{"id": "tool_font_size", "title": "Mainīt fonta izmēru"},
-{"id": "tool_group", "title": "Grupa Elements"},
-{"id": "tool_image", "title": "Image Tool"},
-{"id": "tool_import", "textContent": "Import SVG"},
-{"id": "tool_italic", "title": "Kursīvs"},
-{"id": "tool_line", "title": "Line Tool"},
-{"id": "tool_move_bottom", "title": "Pārvietot uz leju"},
-{"id": "tool_move_top", "title": "Pārvietot uz augšu"},
-{"id": "tool_node_clone", "title": "Clone Node"},
-{"id": "tool_node_delete", "title": "Delete Node"},
-{"id": "tool_node_link", "title": "Link Control Points"},
-{"id": "tool_opacity", "title": "Mainīt izvēlēto objektu necaurredzamība"},
-{"id": "tool_open", "textContent": "Open Image"},
-{"id": "tool_path", "title": "Path"},
-{"id": "tool_rect", "title": "Taisnstūris"},
-{"id": "tool_redo", "title": "Redo"},
-{"id": "tool_reorient", "title": "Reorient path"},
-{"id": "tool_save", "textContent": "Save Image"},
-{"id": "tool_select", "title": "Select Tool"},
-{"id": "tool_source", "title": "Rediģēt Source"},
-{"id": "tool_source_cancel", "textContent": "Atcelt"},
-{"id": "tool_source_save", "textContent": "Glābt"},
-{"id": "tool_square", "title": "Kvadrāts"},
-{"id": "tool_text", "title": "Text Tool"},
-{"id": "tool_topath", "title": "Convert to Path"},
-{"id": "tool_undo", "title": "Atpogāt"},
-{"id": "tool_ungroup", "title": "Atgrupēt Elements"},
-{"id": "tool_wireframe", "title": "Wireframe Mode"},
-{"id": "tool_zoom", "title": "Zoom Tool"},
-{"id": "url_notice", "title": "NOTE: This image cannot be embedded. It will depend on this path to be displayed"},
-{"id": "zoom_panel", "title": "Pārmaiņu mērogu"},
-{"id": "sidepanel_handle", "textContent": "L a y e r s", "title": "Drag left/right to resize side panel"},
-{
- "js_strings": {
- "QerrorsRevertToSource": "There were parsing errors in your SVG source.\nRevert back to original SVG source?",
- "QignoreSourceChanges": "Ignore changes made to SVG source?",
- "QmoveElemsToLayer": "Move selected elements to layer '%s'?",
- "QwantToClear": "Do you want to clear the drawing?\nThis will also erase your undo history!",
- "cancel": "Cancel",
- "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.",
- "dupeLayerName": "There is already a layer named that!",
- "enterNewImgURL": "Enter the new image URL",
- "enterNewLayerName": "Please enter the new layer name",
- "enterUniqueLayerName": "Please enter a unique layer name",
- "exportNoBlur": "Blurred elements will appear as un-blurred",
- "exportNoDashArray": "Strokes will appear filled",
- "exportNoImage": "Image elements will not appear",
- "exportNoText": "Text may not appear as expected",
- "exportNoforeignObject": "foreignObject elements will not appear",
- "featNotSupported": "Feature not supported",
- "invalidAttrValGiven": "Invalid value given",
- "key_backspace": "backspace",
- "key_del": "delete",
- "key_down": "down",
- "key_up": "up",
- "layer": "Layer",
- "layerHasThatName": "Layer already has that name",
- "loadingImage": "Loading image, please wait...",
- "noContentToFitTo": "No content to fit to",
- "noteTheseIssues": "Also note the following issues: ",
- "ok": "OK",
- "pathCtrlPtTooltip": "Drag control point to adjust curve properties",
- "pathNodeTooltip": "Drag node to move it. Double-click node to change segment type",
- "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file."
- }
-}
-] \ No newline at end of file
diff --git a/files_svgedit/js/locale/lang.mk.js b/files_svgedit/js/locale/lang.mk.js
deleted file mode 100644
index 3a8d66658..000000000
--- a/files_svgedit/js/locale/lang.mk.js
+++ /dev/null
@@ -1,173 +0,0 @@
-[
-{"id": "align_relative_to", "title": "Порамни во поглед на ..."},
-{"id": "bkgnd_color", "title": "Смени позадина / непроѕирноста"},
-{"id": "circle_cx", "title": "Промена круг на cx координира"},
-{"id": "circle_cy", "title": "Промена круг&#39;s cy координираат"},
-{"id": "circle_r", "title": "Промена на круг со радиус"},
-{"id": "connector_no_arrow", "textContent": "No arrow"},
-{"id": "copyrightLabel", "textContent": "Powered by"},
-{"id": "cornerRadiusLabel", "title": "Промена правоаголник Corner Radius"},
-{"id": "curve_segments", "textContent": "Curve"},
-{"id": "ellipse_cx", "title": "Промена елипса&#39;s cx координираат"},
-{"id": "ellipse_cy", "title": "Промена на елипса cy координира"},
-{"id": "ellipse_rx", "title": "Промена на елипса x радиус"},
-{"id": "ellipse_ry", "title": "Промена на елипса у радиус"},
-{"id": "fill_color", "title": "Измени пополнете боја"},
-{"id": "fitToContent", "textContent": "Способен да Содржина"},
-{"id": "fit_to_all", "textContent": "Способен да сите содржина"},
-{"id": "fit_to_canvas", "textContent": "Побиране да платно"},
-{"id": "fit_to_layer_content", "textContent": "Способен да слој содржина"},
-{"id": "fit_to_sel", "textContent": "Способен да селекција"},
-{"id": "font_family", "title": "Смени фонт Фамилија"},
-{"id": "icon_large", "textContent": "Large"},
-{"id": "icon_medium", "textContent": "Medium"},
-{"id": "icon_small", "textContent": "Small"},
-{"id": "icon_xlarge", "textContent": "Extra Large"},
-{"id": "image_height", "title": "Промена на слика височина"},
-{"id": "image_opt_embed", "textContent": "Embed data (local files)"},
-{"id": "image_opt_ref", "textContent": "Use file reference"},
-{"id": "image_url", "title": "Промена URL"},
-{"id": "image_width", "title": "Промена Ширина на сликата"},
-{"id": "includedImages", "textContent": "Included Images"},
-{"id": "largest_object", "textContent": "најголемиот објект"},
-{"id": "layer_delete", "title": "Избриши Слој"},
-{"id": "layer_down", "title": "Премести слој долу"},
-{"id": "layer_new", "title": "Нов слој"},
-{"id": "layer_rename", "title": "Преименувај слој"},
-{"id": "layer_up", "title": "Премести слој горе"},
-{"id": "layersLabel", "textContent": "Кори:"},
-{"id": "line_x1", "title": "Промена линија почетна x координира"},
-{"id": "line_x2", "title": "Промена линија завршува x координира"},
-{"id": "line_y1", "title": "Промена линија координираат почетна y"},
-{"id": "line_y2", "title": "Промена линија завршува y координира"},
-{"id": "linecap_butt", "title": "Linecap: Butt"},
-{"id": "linecap_round", "title": "Linecap: Round"},
-{"id": "linecap_square", "title": "Linecap: Square"},
-{"id": "linejoin_bevel", "title": "Linejoin: Bevel"},
-{"id": "linejoin_miter", "title": "Linejoin: Miter"},
-{"id": "linejoin_round", "title": "Linejoin: Round"},
-{"id": "main_icon", "title": "Main Menu"},
-{"id": "mode_connect", "title": "Connect two objects"},
-{"id": "page", "textContent": "страница"},
-{"id": "palette", "title": "Кликни за да внесете промени бојата, промена клик да се промени бојата удар"},
-{"id": "path_node_x", "title": "Change node's x coordinate"},
-{"id": "path_node_y", "title": "Change node's y coordinate"},
-{"id": "rect_height_tool", "title": "Промена правоаголник височина"},
-{"id": "rect_width_tool", "title": "Промена правоаголник Ширина"},
-{"id": "relativeToLabel", "textContent": "во поглед на:"},
-{"id": "seg_type", "title": "Change Segment type"},
-{"id": "selLayerLabel", "textContent": "Move elements to:"},
-{"id": "selLayerNames", "title": "Move selected elements to a different layer"},
-{"id": "selectedPredefined", "textContent": "Изберете предефинирани:"},
-{"id": "selected_objects", "textContent": "избран објекти"},
-{"id": "selected_x", "title": "Change X coordinate"},
-{"id": "selected_y", "title": "Change Y coordinate"},
-{"id": "smallest_object", "textContent": "најмалата објект"},
-{"id": "straight_segments", "textContent": "Straight"},
-{"id": "stroke_color", "title": "Промена боја на мозочен удар"},
-{"id": "stroke_style", "title": "Промена удар цртичка стил"},
-{"id": "stroke_width", "title": "Промена удар Ширина"},
-{"id": "svginfo_bg_note", "textContent": "Note: Background will not be saved with image."},
-{"id": "svginfo_change_background", "textContent": "Editor Background"},
-{"id": "svginfo_dim", "textContent": "Canvas Dimensions"},
-{"id": "svginfo_editor_prefs", "textContent": "Editor Preferences"},
-{"id": "svginfo_height", "textContent": "Висина:"},
-{"id": "svginfo_icons", "textContent": "Icon size"},
-{"id": "svginfo_image_props", "textContent": "Image Properties"},
-{"id": "svginfo_lang", "textContent": "Language"},
-{"id": "svginfo_title", "textContent": "Title"},
-{"id": "svginfo_width", "textContent": "Ширина:"},
-{"id": "text", "title": "Промена текст содржина"},
-{"id": "toggle_stroke_tools", "title": "Show/hide more stroke tools"},
-{"id": "tool_add_subpath", "title": "Add sub-path"},
-{"id": "tool_alignbottom", "title": "Align Bottom"},
-{"id": "tool_aligncenter", "title": "Центрирано"},
-{"id": "tool_alignleft", "title": "Порамни лево Порамни"},
-{"id": "tool_alignmiddle", "title": "Израмни Среден"},
-{"id": "tool_alignright", "title": "Порамни десно"},
-{"id": "tool_aligntop", "title": "Израмни почетокот"},
-{"id": "tool_angle", "title": "Change ротација агол"},
-{"id": "tool_blur", "title": "Change gaussian blur value"},
-{"id": "tool_bold", "title": "Задебелен текст"},
-{"id": "tool_circle", "title": "Круг"},
-{"id": "tool_clear", "textContent": "Нови слики"},
-{"id": "tool_clone", "title": "Клон на Element"},
-{"id": "tool_clone_multi", "title": "Клон Елементи"},
-{"id": "tool_delete", "title": "Бришење на елемент"},
-{"id": "tool_delete_multi", "title": "Избриши Избрани Елементи"},
-{"id": "tool_docprops", "textContent": "Својства на документот"},
-{"id": "tool_docprops_cancel", "textContent": "Откажи"},
-{"id": "tool_docprops_save", "textContent": "Зачувува"},
-{"id": "tool_ellipse", "title": "Елипса"},
-{"id": "tool_export", "textContent": "Export as PNG"},
-{"id": "tool_eyedropper", "title": "Eye Dropper Tool"},
-{"id": "tool_fhellipse", "title": "Free-Hand Елипса"},
-{"id": "tool_fhpath", "title": "Алатка за молив"},
-{"id": "tool_fhrect", "title": "Правоаголник слободна рака"},
-{"id": "tool_font_size", "title": "Изменифонт Големина"},
-{"id": "tool_group", "title": "Група на елементи"},
-{"id": "tool_image", "title": "Алатка за сликата"},
-{"id": "tool_import", "textContent": "Import SVG"},
-{"id": "tool_italic", "title": "Italic текст"},
-{"id": "tool_line", "title": "Line Tool"},
-{"id": "tool_move_bottom", "title": "Move to bottom"},
-{"id": "tool_move_top", "title": "Поместување на почетокот"},
-{"id": "tool_node_clone", "title": "Clone Node"},
-{"id": "tool_node_delete", "title": "Delete Node"},
-{"id": "tool_node_link", "title": "Link Control Points"},
-{"id": "tool_opacity", "title": "Промена избрани ставка непроѕирноста"},
-{"id": "tool_open", "textContent": "Отвори слика"},
-{"id": "tool_path", "title": "Path Tool"},
-{"id": "tool_rect", "title": "Правоаголник"},
-{"id": "tool_redo", "title": "Повтори"},
-{"id": "tool_reorient", "title": "Reorient path"},
-{"id": "tool_save", "textContent": "Зачувај слика"},
-{"id": "tool_select", "title": "Изберете ја алатката"},
-{"id": "tool_source", "title": "Уреди Извор"},
-{"id": "tool_source_cancel", "textContent": "Откажи"},
-{"id": "tool_source_save", "textContent": "Зачувува"},
-{"id": "tool_square", "title": "Квадрат"},
-{"id": "tool_text", "title": "Алатка за текст"},
-{"id": "tool_topath", "title": "Convert to Path"},
-{"id": "tool_undo", "title": "Врати"},
-{"id": "tool_ungroup", "title": "Ungroup Елементи"},
-{"id": "tool_wireframe", "title": "Wireframe Mode"},
-{"id": "tool_zoom", "title": "Алатка за зумирање"},
-{"id": "url_notice", "title": "NOTE: This image cannot be embedded. It will depend on this path to be displayed"},
-{"id": "zoom_panel", "title": "Промена зум ниво"},
-{"id": "sidepanel_handle", "textContent": "L a y e r s", "title": "Drag left/right to resize side panel"},
-{
- "js_strings": {
- "QerrorsRevertToSource": "There were parsing errors in your SVG source.\nRevert back to original SVG source?",
- "QignoreSourceChanges": "Ignore changes made to SVG source?",
- "QmoveElemsToLayer": "Move selected elements to layer '%s'?",
- "QwantToClear": "Do you want to clear the drawing?\nThis will also erase your undo history!",
- "cancel": "Cancel",
- "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.",
- "dupeLayerName": "There is already a layer named that!",
- "enterNewImgURL": "Enter the new image URL",
- "enterNewLayerName": "Please enter the new layer name",
- "enterUniqueLayerName": "Please enter a unique layer name",
- "exportNoBlur": "Blurred elements will appear as un-blurred",
- "exportNoDashArray": "Strokes will appear filled",
- "exportNoImage": "Image elements will not appear",
- "exportNoText": "Text may not appear as expected",
- "exportNoforeignObject": "foreignObject elements will not appear",
- "featNotSupported": "Feature not supported",
- "invalidAttrValGiven": "Invalid value given",
- "key_backspace": "backspace",
- "key_del": "delete",
- "key_down": "down",
- "key_up": "up",
- "layer": "Layer",
- "layerHasThatName": "Layer already has that name",
- "loadingImage": "Loading image, please wait...",
- "noContentToFitTo": "No content to fit to",
- "noteTheseIssues": "Also note the following issues: ",
- "ok": "OK",
- "pathCtrlPtTooltip": "Drag control point to adjust curve properties",
- "pathNodeTooltip": "Drag node to move it. Double-click node to change segment type",
- "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file."
- }
-}
-] \ No newline at end of file
diff --git a/files_svgedit/js/locale/lang.ms.js b/files_svgedit/js/locale/lang.ms.js
deleted file mode 100644
index 2df3218f1..000000000
--- a/files_svgedit/js/locale/lang.ms.js
+++ /dev/null
@@ -1,173 +0,0 @@
-[
-{"id": "align_relative_to", "title": "Rata relatif ..."},
-{"id": "bkgnd_color", "title": "Mengubah warna latar belakang / keburaman"},
-{"id": "circle_cx", "title": "Mengubah koordinat bulatan cx"},
-{"id": "circle_cy", "title": "Mengubah koordinat cy bulatan"},
-{"id": "circle_r", "title": "Tukar jari-jari lingkaran"},
-{"id": "connector_no_arrow", "textContent": "No arrow"},
-{"id": "copyrightLabel", "textContent": "Powered by"},
-{"id": "cornerRadiusLabel", "title": "Tukar Corner Rectangle Radius"},
-{"id": "curve_segments", "textContent": "Curve"},
-{"id": "ellipse_cx", "title": "Tukar elips&#39;s cx koordinat"},
-{"id": "ellipse_cy", "title": "Tukar elips&#39;s cy koordinat"},
-{"id": "ellipse_rx", "title": "Tukar elips&#39;s x jari-jari"},
-{"id": "ellipse_ry", "title": "Tukar elips&#39;s y jari-jari"},
-{"id": "fill_color", "title": "Tukar Warna mengisi"},
-{"id": "fitToContent", "textContent": "Fit to Content"},
-{"id": "fit_to_all", "textContent": "Cocok untuk semua kandungan"},
-{"id": "fit_to_canvas", "textContent": "Muat kanvas"},
-{"id": "fit_to_layer_content", "textContent": "Muat kandungan lapisan"},
-{"id": "fit_to_sel", "textContent": "Fit seleksi"},
-{"id": "font_family", "title": "Tukar Font Keluarga"},
-{"id": "icon_large", "textContent": "Large"},
-{"id": "icon_medium", "textContent": "Medium"},
-{"id": "icon_small", "textContent": "Small"},
-{"id": "icon_xlarge", "textContent": "Extra Large"},
-{"id": "image_height", "title": "Tinggi gambar Kaca"},
-{"id": "image_opt_embed", "textContent": "Embed data (local files)"},
-{"id": "image_opt_ref", "textContent": "Use file reference"},
-{"id": "image_url", "title": "Tukar URL"},
-{"id": "image_width", "title": "Tukar Lebar imej"},
-{"id": "includedImages", "textContent": "Included Images"},
-{"id": "largest_object", "textContent": "objek terbesar"},
-{"id": "layer_delete", "title": "Padam Layer"},
-{"id": "layer_down", "title": "Pindah Layer Bawah"},
-{"id": "layer_new", "title": "New Layer"},
-{"id": "layer_rename", "title": "Rename Layer"},
-{"id": "layer_up", "title": "Pindah Layer Up"},
-{"id": "layersLabel", "textContent": "Lapisan:"},
-{"id": "line_x1", "title": "Ubah baris mulai x koordinat"},
-{"id": "line_x2", "title": "Ubah baris&#39;s Berakhir x koordinat"},
-{"id": "line_y1", "title": "Ubah baris mulai y koordinat"},
-{"id": "line_y2", "title": "Ubah baris di tiap akhir y koordinat"},
-{"id": "linecap_butt", "title": "Linecap: Butt"},
-{"id": "linecap_round", "title": "Linecap: Round"},
-{"id": "linecap_square", "title": "Linecap: Square"},
-{"id": "linejoin_bevel", "title": "Linejoin: Bevel"},
-{"id": "linejoin_miter", "title": "Linejoin: Miter"},
-{"id": "linejoin_round", "title": "Linejoin: Round"},
-{"id": "main_icon", "title": "Main Menu"},
-{"id": "mode_connect", "title": "Connect two objects"},
-{"id": "page", "textContent": "Laman"},
-{"id": "palette", "title": "Klik untuk menukar warna mengisi, shift-klik untuk menukar warna stroke"},
-{"id": "path_node_x", "title": "Change node's x coordinate"},
-{"id": "path_node_y", "title": "Change node's y coordinate"},
-{"id": "rect_height_tool", "title": "Perubahan quality persegi panjang"},
-{"id": "rect_width_tool", "title": "Tukar persegi panjang lebar"},
-{"id": "relativeToLabel", "textContent": "relatif:"},
-{"id": "seg_type", "title": "Change Segment type"},
-{"id": "selLayerLabel", "textContent": "Move elements to:"},
-{"id": "selLayerNames", "title": "Move selected elements to a different layer"},
-{"id": "selectedPredefined", "textContent": "Pilih standard:"},
-{"id": "selected_objects", "textContent": "objek terpilih"},
-{"id": "selected_x", "title": "Change X coordinate"},
-{"id": "selected_y", "title": "Change Y coordinate"},
-{"id": "smallest_object", "textContent": "objek terkecil"},
-{"id": "straight_segments", "textContent": "Straight"},
-{"id": "stroke_color", "title": "Tukar Warna stroke"},
-{"id": "stroke_style", "title": "Tukar gaya dash stroke"},
-{"id": "stroke_width", "title": "Tukar stroke width"},
-{"id": "svginfo_bg_note", "textContent": "Note: Background will not be saved with image."},
-{"id": "svginfo_change_background", "textContent": "Editor Background"},
-{"id": "svginfo_dim", "textContent": "Canvas Dimensions"},
-{"id": "svginfo_editor_prefs", "textContent": "Editor Preferences"},
-{"id": "svginfo_height", "textContent": "Ketinggian:"},
-{"id": "svginfo_icons", "textContent": "Icon size"},
-{"id": "svginfo_image_props", "textContent": "Image Properties"},
-{"id": "svginfo_lang", "textContent": "Language"},
-{"id": "svginfo_title", "textContent": "Title"},
-{"id": "svginfo_width", "textContent": "Lebar:"},
-{"id": "text", "title": "Tukar isi teks"},
-{"id": "toggle_stroke_tools", "title": "Show/hide more stroke tools"},
-{"id": "tool_add_subpath", "title": "Add sub-path"},
-{"id": "tool_alignbottom", "title": "Rata Bottom"},
-{"id": "tool_aligncenter", "title": "Rata Tengah"},
-{"id": "tool_alignleft", "title": "Rata Kiri"},
-{"id": "tool_alignmiddle", "title": "Rata Tengah"},
-{"id": "tool_alignright", "title": "Rata Kanan"},
-{"id": "tool_aligntop", "title": "Rata Popular"},
-{"id": "tool_angle", "title": "Namakan sudut putaran"},
-{"id": "tool_blur", "title": "Change gaussian blur value"},
-{"id": "tool_bold", "title": "Bold Teks"},
-{"id": "tool_circle", "title": "Lingkaran"},
-{"id": "tool_clear", "textContent": "Imej Baru"},
-{"id": "tool_clone", "title": "Clone Elemen"},
-{"id": "tool_clone_multi", "title": "Clone Elemen"},
-{"id": "tool_delete", "title": "Padam Elemen"},
-{"id": "tool_delete_multi", "title": "Padam Elemen"},
-{"id": "tool_docprops", "textContent": "Document Properties"},
-{"id": "tool_docprops_cancel", "textContent": "Batal"},
-{"id": "tool_docprops_save", "textContent": "Simpan"},
-{"id": "tool_ellipse", "title": "Ellipse"},
-{"id": "tool_export", "textContent": "Export as PNG"},
-{"id": "tool_eyedropper", "title": "Eye Dropper Tool"},
-{"id": "tool_fhellipse", "title": "Free-Hand Ellipse"},
-{"id": "tool_fhpath", "title": "Pencil Tool"},
-{"id": "tool_fhrect", "title": "Free-Hand Persegi Panjang"},
-{"id": "tool_font_size", "title": "Ubah Saiz Font"},
-{"id": "tool_group", "title": "Kelompok Elemen"},
-{"id": "tool_image", "title": "Image Tool"},
-{"id": "tool_import", "textContent": "Import SVG"},
-{"id": "tool_italic", "title": "Italic Teks"},
-{"id": "tool_line", "title": "Line Tool"},
-{"id": "tool_move_bottom", "title": "Pindah ke Bawah"},
-{"id": "tool_move_top", "title": "Pindah ke Atas"},
-{"id": "tool_node_clone", "title": "Clone Node"},
-{"id": "tool_node_delete", "title": "Delete Node"},
-{"id": "tool_node_link", "title": "Link Control Points"},
-{"id": "tool_opacity", "title": "Mengubah item yang dipilih keburaman"},
-{"id": "tool_open", "textContent": "Membuka Image"},
-{"id": "tool_path", "title": "Path Tool"},
-{"id": "tool_rect", "title": "Rectangle"},
-{"id": "tool_redo", "title": "Redo"},
-{"id": "tool_reorient", "title": "Reorient path"},
-{"id": "tool_save", "textContent": "Save Image"},
-{"id": "tool_select", "title": "Pilih Tool"},
-{"id": "tool_source", "title": "Edit Source"},
-{"id": "tool_source_cancel", "textContent": "Batal"},
-{"id": "tool_source_save", "textContent": "Simpan"},
-{"id": "tool_square", "title": "Peti"},
-{"id": "tool_text", "title": "Teks Tool"},
-{"id": "tool_topath", "title": "Convert to Path"},
-{"id": "tool_undo", "title": "Undo"},
-{"id": "tool_ungroup", "title": "Ungroup Elemen"},
-{"id": "tool_wireframe", "title": "Wireframe Mode"},
-{"id": "tool_zoom", "title": "Zoom Tool"},
-{"id": "url_notice", "title": "NOTE: This image cannot be embedded. It will depend on this path to be displayed"},
-{"id": "zoom_panel", "title": "Mengubah peringkat pembesaran"},
-{"id": "sidepanel_handle", "textContent": "L a y e r s", "title": "Drag left/right to resize side panel"},
-{
- "js_strings": {
- "QerrorsRevertToSource": "There were parsing errors in your SVG source.\nRevert back to original SVG source?",
- "QignoreSourceChanges": "Ignore changes made to SVG source?",
- "QmoveElemsToLayer": "Move selected elements to layer '%s'?",
- "QwantToClear": "Do you want to clear the drawing?\nThis will also erase your undo history!",
- "cancel": "Cancel",
- "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.",
- "dupeLayerName": "There is already a layer named that!",
- "enterNewImgURL": "Enter the new image URL",
- "enterNewLayerName": "Please enter the new layer name",
- "enterUniqueLayerName": "Please enter a unique layer name",
- "exportNoBlur": "Blurred elements will appear as un-blurred",
- "exportNoDashArray": "Strokes will appear filled",
- "exportNoImage": "Image elements will not appear",
- "exportNoText": "Text may not appear as expected",
- "exportNoforeignObject": "foreignObject elements will not appear",
- "featNotSupported": "Feature not supported",
- "invalidAttrValGiven": "Invalid value given",
- "key_backspace": "backspace",
- "key_del": "delete",
- "key_down": "down",
- "key_up": "up",
- "layer": "Layer",
- "layerHasThatName": "Layer already has that name",
- "loadingImage": "Loading image, please wait...",
- "noContentToFitTo": "No content to fit to",
- "noteTheseIssues": "Also note the following issues: ",
- "ok": "OK",
- "pathCtrlPtTooltip": "Drag control point to adjust curve properties",
- "pathNodeTooltip": "Drag node to move it. Double-click node to change segment type",
- "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file."
- }
-}
-] \ No newline at end of file
diff --git a/files_svgedit/js/locale/lang.mt.js b/files_svgedit/js/locale/lang.mt.js
deleted file mode 100644
index 29f0ed51f..000000000
--- a/files_svgedit/js/locale/lang.mt.js
+++ /dev/null
@@ -1,173 +0,0 @@
-[
-{"id": "align_relative_to", "title": "Jallinjaw relattiv għall - ..."},
-{"id": "bkgnd_color", "title": "Bidla fil-kulur fl-isfond / opaċità"},
-{"id": "circle_cx", "title": "CX ċirku Tibdil jikkoordinaw"},
-{"id": "circle_cy", "title": "Ċirku Tibdil cy jikkoordinaw"},
-{"id": "circle_r", "title": "Raġġ ta &#39;ċirku tal-Bidla"},
-{"id": "connector_no_arrow", "textContent": "No arrow"},
-{"id": "copyrightLabel", "textContent": "Powered by"},
-{"id": "cornerRadiusLabel", "title": "Bidla Rectangle Corner Radius"},
-{"id": "curve_segments", "textContent": "Curve"},
-{"id": "ellipse_cx", "title": "Bidla ellissi&#39;s CX jikkoordinaw"},
-{"id": "ellipse_cy", "title": "Ellissi Tibdil cy jikkoordinaw"},
-{"id": "ellipse_rx", "title": "Raġġ x ellissi Tibdil"},
-{"id": "ellipse_ry", "title": "Raġġ y ellissi Tibdil"},
-{"id": "fill_color", "title": "Bidla imla color"},
-{"id": "fitToContent", "textContent": "Fit għall-kontenut"},
-{"id": "fit_to_all", "textContent": "Tajbin għall-kontenut"},
-{"id": "fit_to_canvas", "textContent": "Xieraq li kanvas"},
-{"id": "fit_to_layer_content", "textContent": "Fit-kontenut ta &#39;saff għal"},
-{"id": "fit_to_sel", "textContent": "Fit-għażla"},
-{"id": "font_family", "title": "Bidla Font Familja"},
-{"id": "icon_large", "textContent": "Large"},
-{"id": "icon_medium", "textContent": "Medium"},
-{"id": "icon_small", "textContent": "Small"},
-{"id": "icon_xlarge", "textContent": "Extra Large"},
-{"id": "image_height", "title": "Għoli image Bidla"},
-{"id": "image_opt_embed", "textContent": "Embed data (local files)"},
-{"id": "image_opt_ref", "textContent": "Use file reference"},
-{"id": "image_url", "title": "Bidla URL"},
-{"id": "image_width", "title": "Wisa image Bidla"},
-{"id": "includedImages", "textContent": "Included Images"},
-{"id": "largest_object", "textContent": "akbar oġġett"},
-{"id": "layer_delete", "title": "Ħassar Layer"},
-{"id": "layer_down", "title": "Move Layer Down"},
-{"id": "layer_new", "title": "New Layer"},
-{"id": "layer_rename", "title": "Semmi mill-ġdid Layer"},
-{"id": "layer_up", "title": "Move Layer Up"},
-{"id": "layersLabel", "textContent": "Saffi:"},
-{"id": "line_x1", "title": "Bidla fil-linja tal-bidu tikkoordina x"},
-{"id": "line_x2", "title": "Linja tal-Bidla li jispiċċa x jikkoordinaw"},
-{"id": "line_y1", "title": "Bidla fil-linja tal-bidu y jikkoordinaw"},
-{"id": "line_y2", "title": "Linja Tibdil jispiċċa y jikkoordinaw"},
-{"id": "linecap_butt", "title": "Linecap: Butt"},
-{"id": "linecap_round", "title": "Linecap: Round"},
-{"id": "linecap_square", "title": "Linecap: Square"},
-{"id": "linejoin_bevel", "title": "Linejoin: Bevel"},
-{"id": "linejoin_miter", "title": "Linejoin: Miter"},
-{"id": "linejoin_round", "title": "Linejoin: Round"},
-{"id": "main_icon", "title": "Main Menu"},
-{"id": "mode_connect", "title": "Connect two objects"},
-{"id": "page", "textContent": "paġna"},
-{"id": "palette", "title": "Ikklikkja biex timla l-bidla fil-kulur, ikklikkja-bidla għall-bidla color stroke"},
-{"id": "path_node_x", "title": "Change node's x coordinate"},
-{"id": "path_node_y", "title": "Change node's y coordinate"},
-{"id": "rect_height_tool", "title": "Għoli rettangolu Bidla"},
-{"id": "rect_width_tool", "title": "Wisa &#39;rettangolu Bidla"},
-{"id": "relativeToLabel", "textContent": "relattiv għall -:"},
-{"id": "seg_type", "title": "Change Segment type"},
-{"id": "selLayerLabel", "textContent": "Move elements to:"},
-{"id": "selLayerNames", "title": "Move selected elements to a different layer"},
-{"id": "selectedPredefined", "textContent": "Select predefiniti:"},
-{"id": "selected_objects", "textContent": "oġġetti elett"},
-{"id": "selected_x", "title": "Change X coordinate"},
-{"id": "selected_y", "title": "Change Y coordinate"},
-{"id": "smallest_object", "textContent": "iżgħar oġġett"},
-{"id": "straight_segments", "textContent": "Straight"},
-{"id": "stroke_color", "title": "Color stroke Bidla"},
-{"id": "stroke_style", "title": "Bidla stroke dash stil"},
-{"id": "stroke_width", "title": "Wisa &#39;puplesija Bidla"},
-{"id": "svginfo_bg_note", "textContent": "Note: Background will not be saved with image."},
-{"id": "svginfo_change_background", "textContent": "Editor Background"},
-{"id": "svginfo_dim", "textContent": "Canvas Dimensions"},
-{"id": "svginfo_editor_prefs", "textContent": "Editor Preferences"},
-{"id": "svginfo_height", "textContent": "Għoli:"},
-{"id": "svginfo_icons", "textContent": "Icon size"},
-{"id": "svginfo_image_props", "textContent": "Image Properties"},
-{"id": "svginfo_lang", "textContent": "Language"},
-{"id": "svginfo_title", "textContent": "Title"},
-{"id": "svginfo_width", "textContent": "Wisa &#39;:"},
-{"id": "text", "title": "Test kontenut Bidla"},
-{"id": "toggle_stroke_tools", "title": "Show/hide more stroke tools"},
-{"id": "tool_add_subpath", "title": "Add sub-path"},
-{"id": "tool_alignbottom", "title": "Tallinja Bottom"},
-{"id": "tool_aligncenter", "title": "Tallinja Center"},
-{"id": "tool_alignleft", "title": "Tallinja Left"},
-{"id": "tool_alignmiddle", "title": "Tallinja Nofsani"},
-{"id": "tool_alignright", "title": "Tallinja Dritt"},
-{"id": "tool_aligntop", "title": "Tallinja Top"},
-{"id": "tool_angle", "title": "Angolu ta &#39;rotazzjoni Bidla"},
-{"id": "tool_blur", "title": "Change gaussian blur value"},
-{"id": "tool_bold", "title": "Bold Test"},
-{"id": "tool_circle", "title": "Circle"},
-{"id": "tool_clear", "textContent": "Image New"},
-{"id": "tool_clone", "title": "Klonu Element"},
-{"id": "tool_clone_multi", "title": "Klonu Elements"},
-{"id": "tool_delete", "title": "Ħassar Element"},
-{"id": "tool_delete_multi", "title": "Elementi Selected Ħassar"},
-{"id": "tool_docprops", "textContent": "Dokument Properties"},
-{"id": "tool_docprops_cancel", "textContent": "Ikkanċella"},
-{"id": "tool_docprops_save", "textContent": "Save"},
-{"id": "tool_ellipse", "title": "Ellissi"},
-{"id": "tool_export", "textContent": "Export as PNG"},
-{"id": "tool_eyedropper", "title": "Eye Dropper Tool"},
-{"id": "tool_fhellipse", "title": "Free Hand-ellissi"},
-{"id": "tool_fhpath", "title": "Lapes Tool"},
-{"id": "tool_fhrect", "title": "Free Hand-Rectangle"},
-{"id": "tool_font_size", "title": "Change font size"},
-{"id": "tool_group", "title": "Grupp Elements"},
-{"id": "tool_image", "title": "Image Tool"},
-{"id": "tool_import", "textContent": "Import SVG"},
-{"id": "tool_italic", "title": "Test korsiv"},
-{"id": "tool_line", "title": "Line Tool"},
-{"id": "tool_move_bottom", "title": "Move to Bottom"},
-{"id": "tool_move_top", "title": "Move to Top"},
-{"id": "tool_node_clone", "title": "Clone Node"},
-{"id": "tool_node_delete", "title": "Delete Node"},
-{"id": "tool_node_link", "title": "Link Control Points"},
-{"id": "tool_opacity", "title": "Bidla magħżula opaċità partita"},
-{"id": "tool_open", "textContent": "Open Image"},
-{"id": "tool_path", "title": "Path Tool"},
-{"id": "tool_rect", "title": "Rettangolu"},
-{"id": "tool_redo", "title": "Jerġa &#39;jagħmel"},
-{"id": "tool_reorient", "title": "Reorient path"},
-{"id": "tool_save", "textContent": "Image Save"},
-{"id": "tool_select", "title": "Select Tool"},
-{"id": "tool_source", "title": "Source Edit"},
-{"id": "tool_source_cancel", "textContent": "Ikkanċella"},
-{"id": "tool_source_save", "textContent": "Save"},
-{"id": "tool_square", "title": "Kwadru"},
-{"id": "tool_text", "title": "Text Tool"},
-{"id": "tool_topath", "title": "Convert to Path"},
-{"id": "tool_undo", "title": "Jneħħu"},
-{"id": "tool_ungroup", "title": "Ungroup Elements"},
-{"id": "tool_wireframe", "title": "Wireframe Mode"},
-{"id": "tool_zoom", "title": "Zoom Tool"},
-{"id": "url_notice", "title": "NOTE: This image cannot be embedded. It will depend on this path to be displayed"},
-{"id": "zoom_panel", "title": "Bidla zoom livell"},
-{"id": "sidepanel_handle", "textContent": "L a y e r s", "title": "Drag left/right to resize side panel"},
-{
- "js_strings": {
- "QerrorsRevertToSource": "There were parsing errors in your SVG source.\nRevert back to original SVG source?",
- "QignoreSourceChanges": "Ignore changes made to SVG source?",
- "QmoveElemsToLayer": "Move selected elements to layer '%s'?",
- "QwantToClear": "Do you want to clear the drawing?\nThis will also erase your undo history!",
- "cancel": "Cancel",
- "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.",
- "dupeLayerName": "There is already a layer named that!",
- "enterNewImgURL": "Enter the new image URL",
- "enterNewLayerName": "Please enter the new layer name",
- "enterUniqueLayerName": "Please enter a unique layer name",
- "exportNoBlur": "Blurred elements will appear as un-blurred",
- "exportNoDashArray": "Strokes will appear filled",
- "exportNoImage": "Image elements will not appear",
- "exportNoText": "Text may not appear as expected",
- "exportNoforeignObject": "foreignObject elements will not appear",
- "featNotSupported": "Feature not supported",
- "invalidAttrValGiven": "Invalid value given",
- "key_backspace": "backspace",
- "key_del": "delete",
- "key_down": "down",
- "key_up": "up",
- "layer": "Layer",
- "layerHasThatName": "Layer already has that name",
- "loadingImage": "Loading image, please wait...",
- "noContentToFitTo": "No content to fit to",
- "noteTheseIssues": "Also note the following issues: ",
- "ok": "OK",
- "pathCtrlPtTooltip": "Drag control point to adjust curve properties",
- "pathNodeTooltip": "Drag node to move it. Double-click node to change segment type",
- "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file."
- }
-}
-] \ No newline at end of file
diff --git a/files_svgedit/js/locale/lang.nl.js b/files_svgedit/js/locale/lang.nl.js
deleted file mode 100644
index 8c7cd41c2..000000000
--- a/files_svgedit/js/locale/lang.nl.js
+++ /dev/null
@@ -1,176 +0,0 @@
-[
-{"id": "align_relative_to", "title": "Uitlijnen relatief ten opzichte van ..."},
-{"id": "bkgnd_color", "title": "Verander achtergrond kleur/doorzichtigheid"},
-{"id": "circle_cx", "title": "Verander het X coordinaat van het cirkel middelpunt"},
-{"id": "circle_cy", "title": "Verander het Y coordinaat van het cirkel middelpunt"},
-{"id": "circle_r", "title": "Verander de cirkel radius"},
-{"id": "connector_no_arrow", "textContent": "Geen pijl"},
-{"id": "copyrightLabel", "textContent": "Mogelijk gemaakt door"},
-{"id": "cornerRadiusLabel", "title": "Verander hoekradius rechthoek"},
-{"id": "curve_segments", "textContent": "Gebogen"},
-{"id": "ellipse_cx", "title": "Verander het X coordinaat van het ellips middelpunt"},
-{"id": "ellipse_cy", "title": "Verander het Y coordinaat van het ellips middelpunt"},
-{"id": "ellipse_rx", "title": "Verander ellips X radius"},
-{"id": "ellipse_ry", "title": "Verander ellips Y radius"},
-{"id": "fill_color", "title": "Verander vul kleur"},
-{"id": "fitToContent", "textContent": "Pas om inhoud"},
-{"id": "fit_to_all", "textContent": "Pas om alle inhoud"},
-{"id": "fit_to_canvas", "textContent": "Pas om canvas"},
-{"id": "fit_to_layer_content", "textContent": "Pas om laag inhoud"},
-{"id": "fit_to_sel", "textContent": "Pas om selectie"},
-{"id": "font_family", "title": "Verander lettertype"},
-{"id": "icon_large", "textContent": "Groot"},
-{"id": "icon_medium", "textContent": "Gemiddeld"},
-{"id": "icon_small", "textContent": "Klein"},
-{"id": "icon_xlarge", "textContent": "Extra groot"},
-{"id": "idLabel", "title": "Identificeer het element"},
-{"id": "image_height", "title": "Verander hoogte afbeelding"},
-{"id": "image_opt_embed", "textContent": "Toevoegen data (lokale bestanden)"},
-{"id": "image_opt_ref", "textContent": "Gebruik bestand referentie"},
-{"id": "image_url", "title": "Verander URL"},
-{"id": "image_width", "title": "Verander breedte afbeelding"},
-{"id": "includedImages", "textContent": "Ingesloten afbeeldingen"},
-{"id": "largest_object", "textContent": "Grootste object"},
-{"id": "layer_delete", "title": "Delete laag"},
-{"id": "layer_down", "title": "Beweeg laag omlaag"},
-{"id": "layer_new", "title": "Nieuwe laag"},
-{"id": "layer_rename", "title": "Hernoem laag"},
-{"id": "layer_up", "title": "Beweeg laag omhoog"},
-{"id": "layersLabel", "textContent": "Lagen:"},
-{"id": "line_x1", "title": "Verander start X coordinaat van de lijn"},
-{"id": "line_x2", "title": "Verander eind X coordinaat van de lijn"},
-{"id": "line_y1", "title": "Verander start Y coordinaat van de lijn"},
-{"id": "line_y2", "title": "Verander eind Y coordinaat van de lijn"},
-{"id": "linecap_butt", "title": "Lijneinde: Geen"},
-{"id": "linecap_round", "title": "Lijneinde: Rond"},
-{"id": "linecap_square", "title": "Lijneinde: Vierkant"},
-{"id": "linejoin_bevel", "title": "Lijnverbinding: Afgestompt"},
-{"id": "linejoin_miter", "title": "Lijnverbinding: Hoek"},
-{"id": "linejoin_round", "title": "Lijnverbinding: Rond"},
-{"id": "main_icon", "title": "Hoofdmenu"},
-{"id": "mode_connect", "title": "Verbind twee objecten"},
-{"id": "page", "textContent": "Pagina"},
-{"id": "palette", "title": "Klik om de vul kleur te veranderen, shift-klik om de lijn kleur te veranderen"},
-{"id": "path_node_x", "title": "Verander X coordinaat knooppunt"},
-{"id": "path_node_y", "title": "Verander Y coordinaat knooppunt"},
-{"id": "rect_height_tool", "title": "Verander hoogte rechthoek"},
-{"id": "rect_width_tool", "title": "Verander breedte rechthoek"},
-{"id": "relativeToLabel", "textContent": "Relatief ten opzichte van:"},
-{"id": "seg_type", "title": "Verander segment type"},
-{"id": "selLayerLabel", "textContent": "Verplaats elementen naar:"},
-{"id": "selLayerNames", "title": "Verplaats geselecteerde elementen naar andere laag"},
-{"id": "selectedPredefined", "textContent": "Kies voorgedefinieerd:"},
-{"id": "selected_objects", "textContent": "Geselecteerde objecten"},
-{"id": "selected_x", "title": "Verander X coordinaat"},
-{"id": "selected_y", "title": "Verander Y coordinaat"},
-{"id": "smallest_object", "textContent": "Kleinste object"},
-{"id": "straight_segments", "textContent": "Recht"},
-{"id": "stroke_color", "title": "Verander lijn kleur"},
-{"id": "stroke_style", "title": "Verander lijn stijl"},
-{"id": "stroke_width", "title": "Verander lijn breedte"},
-{"id": "svginfo_bg_note", "textContent": "Let op: De achtergrond wordt niet opgeslagen met de afbeelding."},
-{"id": "svginfo_change_background", "textContent": "Editor achtergrond"},
-{"id": "svginfo_dim", "textContent": "Canvas afmetingen"},
-{"id": "svginfo_editor_prefs", "textContent": "Editor eigenschappen"},
-{"id": "svginfo_height", "textContent": "Hoogte:"},
-{"id": "svginfo_icons", "textContent": "Icoon grootte"},
-{"id": "svginfo_image_props", "textContent": "Afbeeldingeigenschappen"},
-{"id": "svginfo_lang", "textContent": "Taal"},
-{"id": "svginfo_title", "textContent": "Titel"},
-{"id": "svginfo_width", "textContent": "Breedte:"},
-{"id": "text", "title": "Wijzig tekst"},
-{"id": "toggle_stroke_tools", "title": "Toon/verberg meer lijn gereedschap"},
-{"id": "tool_add_subpath", "title": "Subpad toevoegen"},
-{"id": "tool_alignbottom", "title": "Onder uitlijnen"},
-{"id": "tool_aligncenter", "title": "Centreren"},
-{"id": "tool_alignleft", "title": "Links uitlijnen"},
-{"id": "tool_alignmiddle", "title": "Midden uitlijnen"},
-{"id": "tool_alignright", "title": "Rechts uitlijnen"},
-{"id": "tool_aligntop", "title": "Boven uitlijnen"},
-{"id": "tool_angle", "title": "Draai"},
-{"id": "tool_blur", "title": "Verander Gaussische vervaging waarde"},
-{"id": "tool_bold", "title": "Vet"},
-{"id": "tool_circle", "title": "Cirkel"},
-{"id": "tool_clear", "textContent": "Nieuwe afbeelding"},
-{"id": "tool_clone", "title": "Kloon element"},
-{"id": "tool_clone_multi", "title": "Kloon elementen"},
-{"id": "tool_delete", "title": "Delete element"},
-{"id": "tool_delete_multi", "title": "Delete geselecteerde elementen"},
-{"id": "tool_docprops", "textContent": "Documenteigenschappen"},
-{"id": "tool_docprops_cancel", "textContent": "Annuleren"},
-{"id": "tool_docprops_save", "textContent": "Ok"},
-{"id": "tool_ellipse", "title": "Ellips"},
-{"id": "tool_export", "textContent": "Exporteer als PNG"},
-{"id": "tool_eyedropper", "title": "Kleuren kopieer gereedschap"},
-{"id": "tool_fhellipse", "title": "Vrije stijl ellips"},
-{"id": "tool_fhpath", "title": "Potlood"},
-{"id": "tool_fhrect", "title": "Vrije stijl rechthoek"},
-{"id": "tool_font_size", "title": "Verander lettertype grootte"},
-{"id": "tool_group", "title": "Groepeer elementen"},
-{"id": "tool_image", "title": "Afbeelding"},
-{"id": "tool_import", "textContent": "Importeer SVG"},
-{"id": "tool_italic", "title": "Cursief"},
-{"id": "tool_line", "title": "Lijn"},
-{"id": "tool_move_bottom", "title": "Naar achtergrond"},
-{"id": "tool_move_top", "title": "Naar voorgrond"},
-{"id": "tool_node_clone", "title": "Kloon knooppunt"},
-{"id": "tool_node_delete", "title": "Delete knooppunt"},
-{"id": "tool_node_link", "title": "Koppel controle punten"},
-{"id": "tool_opacity", "title": "Verander opaciteit geselecteerde item"},
-{"id": "tool_open", "textContent": "Open afbeelding"},
-{"id": "tool_openclose_path", "title": "Open/sluit subpad"},
-{"id": "tool_path", "title": "Pad"},
-{"id": "tool_position", "title": "Lijn element uit relatief ten opzichte van de pagina"},
-{"id": "tool_rect", "title": "Rechthoek"},
-{"id": "tool_redo", "title": "Opnieuw doen"},
-{"id": "tool_reorient", "title": "Herorienteer pad"},
-{"id": "tool_save", "textContent": "Afbeelding opslaan"},
-{"id": "tool_select", "title": "Selecteer"},
-{"id": "tool_source", "title": "Bewerk bron"},
-{"id": "tool_source_cancel", "textContent": "Annuleren"},
-{"id": "tool_source_save", "textContent": "Veranderingen toepassen"},
-{"id": "tool_square", "title": "Vierkant"},
-{"id": "tool_text", "title": "Tekst"},
-{"id": "tool_topath", "title": "Zet om naar pad"},
-{"id": "tool_undo", "title": "Ongedaan maken"},
-{"id": "tool_ungroup", "title": "Groepering opheffen"},
-{"id": "tool_wireframe", "title": "Draadmodel"},
-{"id": "tool_zoom", "title": "Zoom"},
-{"id": "url_notice", "title": "Let op: Dit plaatje kan niet worden geintegreerd (embeded). Het hangt af van dit pad om te worden afgebeeld."},
-{"id": "zoom_panel", "title": "In-/uitzoomen"},
-{"id": "sidepanel_handle", "textContent": "L a g e n", "title": "Sleep naar links/rechts om het zijpaneel te vergroten/verkleinen"},
-{
- "js_strings": {
- "QerrorsRevertToSource": "Er waren analyse fouten in je SVG bron.\nTeruggaan naar de originele SVG bron?",
- "QignoreSourceChanges": "Veranderingen in de SVG bron negeren?",
- "QmoveElemsToLayer": "Verplaats geselecteerde elementen naar laag '%s'?",
- "QwantToClear": "Wil je de afbeelding leeg maken?\nDit zal ook de ongedaan maak geschiedenis wissen!",
- "cancel": "Annuleren",
- "defsFailOnSave": "Let op: Vanwege een fout in je browser, kan dit plaatje verkeerd verschijnen (missende hoeken en/of elementen). Het zal goed verschijnen zodra het plaatje echt wordt opgeslagen.",
- "dupeLayerName": "Er is al een laag met die naam!",
- "enterNewImgURL": "Geef de nieuwe afbeelding URL",
- "enterNewLayerName": "Geef een nieuwe laag naam",
- "enterUniqueLayerName": "Geef een unieke laag naam",
- "exportNoBlur": "Vervaagde elementen zullen niet vervaagd worden geexporteerd.",
- "exportNoDashArray": "Lijnstijlen zullen gevuld worden geexporteerd..",
- "exportNoImage": "Plaatjes elementen zullen niet worden geexporteerd.",
- "exportNoText": "Tekst kan mogelijk niet zo worden geexporteerd zoals verwacht.",
- "exportNoforeignObject": "Vreemde objecten zullen niet worden geexporteerd.",
- "featNotSupported": "Functie wordt niet ondersteund",
- "invalidAttrValGiven": "Verkeerde waarde gegeven",
- "key_backspace": "backspace",
- "key_del": "delete",
- "key_down": "omlaag",
- "key_up": "omhoog",
- "layer": "Laag",
- "layerHasThatName": "Laag heeft al die naam",
- "loadingImage": "Laden van het plaatje, even geduld aub...",
- "noContentToFitTo": "Geen inhoud om omheen te passen",
- "noteTheseIssues": "Let op de volgende problemen: ",
- "ok": "Ok",
- "pathCtrlPtTooltip": "Versleep het controle punt om de boog eigenschappen te veranderen",
- "pathNodeTooltip": "Versleep knooppunt om hem te verslepen. Dubbel klik knooppunt om het segment type te veranderen",
- "saveFromBrowser": "Kies \"Save As...\" in je browser om dit plaatje op te slaan als een %s bestand."
- }
-}
-] \ No newline at end of file
diff --git a/files_svgedit/js/locale/lang.no.js b/files_svgedit/js/locale/lang.no.js
deleted file mode 100644
index 3aed595d2..000000000
--- a/files_svgedit/js/locale/lang.no.js
+++ /dev/null
@@ -1,173 +0,0 @@
-[
-{"id": "align_relative_to", "title": "Juster i forhold til ..."},
-{"id": "bkgnd_color", "title": "Endre bakgrunnsfarge / opacity"},
-{"id": "circle_cx", "title": "Endre sirkelens CX koordinatsystem"},
-{"id": "circle_cy", "title": "Endre sirkelens koordinere cy"},
-{"id": "circle_r", "title": "Endre sirkelens radius"},
-{"id": "connector_no_arrow", "textContent": "No arrow"},
-{"id": "copyrightLabel", "textContent": "Powered by"},
-{"id": "cornerRadiusLabel", "title": "Endre rektangel Corner Radius"},
-{"id": "curve_segments", "textContent": "Curve"},
-{"id": "ellipse_cx", "title": "Endre ellipse&#39;s CX koordinatsystem"},
-{"id": "ellipse_cy", "title": "Endre ellipse&#39;s koordinere cy"},
-{"id": "ellipse_rx", "title": "Endre ellipse&#39;s x radius"},
-{"id": "ellipse_ry", "title": "Endre ellipse&#39;s y radius"},
-{"id": "fill_color", "title": "Endre fyllfarge"},
-{"id": "fitToContent", "textContent": "Fit to Content"},
-{"id": "fit_to_all", "textContent": "Passer til alt innhold"},
-{"id": "fit_to_canvas", "textContent": "Tilpass til lerret"},
-{"id": "fit_to_layer_content", "textContent": "Fit to lag innhold"},
-{"id": "fit_to_sel", "textContent": "Tilpass til valg"},
-{"id": "font_family", "title": "Change Font Family"},
-{"id": "icon_large", "textContent": "Large"},
-{"id": "icon_medium", "textContent": "Medium"},
-{"id": "icon_small", "textContent": "Small"},
-{"id": "icon_xlarge", "textContent": "Extra Large"},
-{"id": "image_height", "title": "Endre bilde høyde"},
-{"id": "image_opt_embed", "textContent": "Embed data (local files)"},
-{"id": "image_opt_ref", "textContent": "Use file reference"},
-{"id": "image_url", "title": "Endre URL"},
-{"id": "image_width", "title": "Endre bilde bredde"},
-{"id": "includedImages", "textContent": "Included Images"},
-{"id": "largest_object", "textContent": "største objekt"},
-{"id": "layer_delete", "title": "Slett laget"},
-{"id": "layer_down", "title": "Flytt laget ned"},
-{"id": "layer_new", "title": "Nytt lag"},
-{"id": "layer_rename", "title": "Rename Layer"},
-{"id": "layer_up", "title": "Flytt Layer Up"},
-{"id": "layersLabel", "textContent": "Layers:"},
-{"id": "line_x1", "title": "Endre linje begynner x koordinat"},
-{"id": "line_x2", "title": "Endre linje&#39;s ending x koordinat"},
-{"id": "line_y1", "title": "Endre linje begynner y koordinat"},
-{"id": "line_y2", "title": "Endre linje&#39;s ending y koordinat"},
-{"id": "linecap_butt", "title": "Linecap: Butt"},
-{"id": "linecap_round", "title": "Linecap: Round"},
-{"id": "linecap_square", "title": "Linecap: Square"},
-{"id": "linejoin_bevel", "title": "Linejoin: Bevel"},
-{"id": "linejoin_miter", "title": "Linejoin: Miter"},
-{"id": "linejoin_round", "title": "Linejoin: Round"},
-{"id": "main_icon", "title": "Main Menu"},
-{"id": "mode_connect", "title": "Connect two objects"},
-{"id": "page", "textContent": "side"},
-{"id": "palette", "title": "Click å endre fyllfarge, shift-klikke for å endre slag farge"},
-{"id": "path_node_x", "title": "Change node's x coordinate"},
-{"id": "path_node_y", "title": "Change node's y coordinate"},
-{"id": "rect_height_tool", "title": "Endre rektangel høyde"},
-{"id": "rect_width_tool", "title": "Endre rektangel bredde"},
-{"id": "relativeToLabel", "textContent": "i forhold til:"},
-{"id": "seg_type", "title": "Change Segment type"},
-{"id": "selLayerLabel", "textContent": "Move elements to:"},
-{"id": "selLayerNames", "title": "Move selected elements to a different layer"},
-{"id": "selectedPredefined", "textContent": "Velg forhåndsdefinerte:"},
-{"id": "selected_objects", "textContent": "velges objekter"},
-{"id": "selected_x", "title": "Change X coordinate"},
-{"id": "selected_y", "title": "Change Y coordinate"},
-{"id": "smallest_object", "textContent": "minste objekt"},
-{"id": "straight_segments", "textContent": "Straight"},
-{"id": "stroke_color", "title": "Endre stroke color"},
-{"id": "stroke_style", "title": "Endre stroke dash stil"},
-{"id": "stroke_width", "title": "Endre stroke width"},
-{"id": "svginfo_bg_note", "textContent": "Note: Background will not be saved with image."},
-{"id": "svginfo_change_background", "textContent": "Editor Background"},
-{"id": "svginfo_dim", "textContent": "Canvas Dimensions"},
-{"id": "svginfo_editor_prefs", "textContent": "Editor Preferences"},
-{"id": "svginfo_height", "textContent": "Høyde:"},
-{"id": "svginfo_icons", "textContent": "Icon size"},
-{"id": "svginfo_image_props", "textContent": "Image Properties"},
-{"id": "svginfo_lang", "textContent": "Language"},
-{"id": "svginfo_title", "textContent": "Title"},
-{"id": "svginfo_width", "textContent": "Bredde:"},
-{"id": "text", "title": "Endre tekst innholdet"},
-{"id": "toggle_stroke_tools", "title": "Show/hide more stroke tools"},
-{"id": "tool_add_subpath", "title": "Add sub-path"},
-{"id": "tool_alignbottom", "title": "Align Bottom"},
-{"id": "tool_aligncenter", "title": "Midtstill"},
-{"id": "tool_alignleft", "title": "Venstrejuster"},
-{"id": "tool_alignmiddle", "title": "Rett Middle"},
-{"id": "tool_alignright", "title": "Høyrejuster"},
-{"id": "tool_aligntop", "title": "Align Top"},
-{"id": "tool_angle", "title": "Endre rotasjonsvinkelen"},
-{"id": "tool_blur", "title": "Change gaussian blur value"},
-{"id": "tool_bold", "title": "Fet tekst"},
-{"id": "tool_circle", "title": "Circle"},
-{"id": "tool_clear", "textContent": "New Image"},
-{"id": "tool_clone", "title": "Clone Element"},
-{"id": "tool_clone_multi", "title": "Clone Elements"},
-{"id": "tool_delete", "title": "Slett element"},
-{"id": "tool_delete_multi", "title": "Slett valgte elementer [Delete/Backspace]"},
-{"id": "tool_docprops", "textContent": "Document Properties"},
-{"id": "tool_docprops_cancel", "textContent": "Avbryt"},
-{"id": "tool_docprops_save", "textContent": "Lagre"},
-{"id": "tool_ellipse", "title": "Ellipse"},
-{"id": "tool_export", "textContent": "Export as PNG"},
-{"id": "tool_eyedropper", "title": "Eye Dropper Tool"},
-{"id": "tool_fhellipse", "title": "Free-Hand Ellipse"},
-{"id": "tool_fhpath", "title": "Pencil Tool"},
-{"id": "tool_fhrect", "title": "Free-Hand rektangel"},
-{"id": "tool_font_size", "title": "Endre skriftstørrelse"},
-{"id": "tool_group", "title": "Gruppe Elements"},
-{"id": "tool_image", "title": "Image Tool"},
-{"id": "tool_import", "textContent": "Import SVG"},
-{"id": "tool_italic", "title": "Kursiv tekst"},
-{"id": "tool_line", "title": "Linjeverktøy"},
-{"id": "tool_move_bottom", "title": "Move to Bottom"},
-{"id": "tool_move_top", "title": "Flytt til toppen"},
-{"id": "tool_node_clone", "title": "Clone Node"},
-{"id": "tool_node_delete", "title": "Delete Node"},
-{"id": "tool_node_link", "title": "Link Control Points"},
-{"id": "tool_opacity", "title": "Endre valgte elementet opasitet"},
-{"id": "tool_open", "textContent": "Åpne Image"},
-{"id": "tool_path", "title": "Path Tool"},
-{"id": "tool_rect", "title": "Rektangel"},
-{"id": "tool_redo", "title": "Redo"},
-{"id": "tool_reorient", "title": "Reorient path"},
-{"id": "tool_save", "textContent": "Lagre bilde"},
-{"id": "tool_select", "title": "Select Tool"},
-{"id": "tool_source", "title": "Edit Source"},
-{"id": "tool_source_cancel", "textContent": "Avbryt"},
-{"id": "tool_source_save", "textContent": "Lagre"},
-{"id": "tool_square", "title": "Torg"},
-{"id": "tool_text", "title": "Text Tool"},
-{"id": "tool_topath", "title": "Convert to Path"},
-{"id": "tool_undo", "title": "Angre"},
-{"id": "tool_ungroup", "title": "Dele opp Elements"},
-{"id": "tool_wireframe", "title": "Wireframe Mode"},
-{"id": "tool_zoom", "title": "Zoom Tool"},
-{"id": "url_notice", "title": "NOTE: This image cannot be embedded. It will depend on this path to be displayed"},
-{"id": "zoom_panel", "title": "Endre zoomnivå"},
-{"id": "sidepanel_handle", "textContent": "L a y e r s", "title": "Drag left/right to resize side panel"},
-{
- "js_strings": {
- "QerrorsRevertToSource": "There were parsing errors in your SVG source.\nRevert back to original SVG source?",
- "QignoreSourceChanges": "Ignore changes made to SVG source?",
- "QmoveElemsToLayer": "Move selected elements to layer '%s'?",
- "QwantToClear": "Do you want to clear the drawing?\nThis will also erase your undo history!",
- "cancel": "Cancel",
- "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.",
- "dupeLayerName": "There is already a layer named that!",
- "enterNewImgURL": "Enter the new image URL",
- "enterNewLayerName": "Please enter the new layer name",
- "enterUniqueLayerName": "Please enter a unique layer name",
- "exportNoBlur": "Blurred elements will appear as un-blurred",
- "exportNoDashArray": "Strokes will appear filled",
- "exportNoImage": "Image elements will not appear",
- "exportNoText": "Text may not appear as expected",
- "exportNoforeignObject": "foreignObject elements will not appear",
- "featNotSupported": "Feature not supported",
- "invalidAttrValGiven": "Invalid value given",
- "key_backspace": "backspace",
- "key_del": "delete",
- "key_down": "down",
- "key_up": "up",
- "layer": "Layer",
- "layerHasThatName": "Layer already has that name",
- "loadingImage": "Loading image, please wait...",
- "noContentToFitTo": "No content to fit to",
- "noteTheseIssues": "Also note the following issues: ",
- "ok": "OK",
- "pathCtrlPtTooltip": "Drag control point to adjust curve properties",
- "pathNodeTooltip": "Drag node to move it. Double-click node to change segment type",
- "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file."
- }
-}
-] \ No newline at end of file
diff --git a/files_svgedit/js/locale/lang.pl.js b/files_svgedit/js/locale/lang.pl.js
deleted file mode 100644
index 88a19ce78..000000000
--- a/files_svgedit/js/locale/lang.pl.js
+++ /dev/null
@@ -1,173 +0,0 @@
-[
-{"id": "align_relative_to", "title": "Dostosowanie w stosunku do ..."},
-{"id": "bkgnd_color", "title": "Zmień kolor tła / opacity"},
-{"id": "circle_cx", "title": "Zmiana koła CX koordynacji"},
-{"id": "circle_cy", "title": "Koła Zmian cy koordynacji"},
-{"id": "circle_r", "title": "Zmiana koła promienia"},
-{"id": "connector_no_arrow", "textContent": "No arrow"},
-{"id": "copyrightLabel", "textContent": "Powered by"},
-{"id": "cornerRadiusLabel", "title": "Zmiana prostokąt Corner Radius"},
-{"id": "curve_segments", "textContent": "Curve"},
-{"id": "ellipse_cx", "title": "Zmiana elipsy CX koordynacji"},
-{"id": "ellipse_cy", "title": "Elipsy Zmian cy koordynacji"},
-{"id": "ellipse_rx", "title": "Elipsy Zmian x promieniu"},
-{"id": "ellipse_ry", "title": "Elipsy Zmian y promieniu"},
-{"id": "fill_color", "title": "Zmiana koloru wypełnienia"},
-{"id": "fitToContent", "textContent": "Dopasuj do treści"},
-{"id": "fit_to_all", "textContent": "Dopasuj do wszystkich treści"},
-{"id": "fit_to_canvas", "textContent": "Dopasuj do płótnie"},
-{"id": "fit_to_layer_content", "textContent": "Dopasuj do zawartości warstwy"},
-{"id": "fit_to_sel", "textContent": "Dopasuj do wyboru"},
-{"id": "font_family", "title": "Zmiana czcionki Rodzina"},
-{"id": "icon_large", "textContent": "Large"},
-{"id": "icon_medium", "textContent": "Medium"},
-{"id": "icon_small", "textContent": "Small"},
-{"id": "icon_xlarge", "textContent": "Extra Large"},
-{"id": "image_height", "title": "Wysokość obrazu zmian"},
-{"id": "image_opt_embed", "textContent": "Embed data (local files)"},
-{"id": "image_opt_ref", "textContent": "Use file reference"},
-{"id": "image_url", "title": "Zmień adres URL"},
-{"id": "image_width", "title": "Zmiana image width"},
-{"id": "includedImages", "textContent": "Included Images"},
-{"id": "largest_object", "textContent": "największego obiektu"},
-{"id": "layer_delete", "title": "Usuwanie warstwy"},
-{"id": "layer_down", "title": "Przesuń warstwę w dół"},
-{"id": "layer_new", "title": "Nowa warstwa"},
-{"id": "layer_rename", "title": "Zmiana nazwy warstwy"},
-{"id": "layer_up", "title": "Move Up Layer"},
-{"id": "layersLabel", "textContent": "Warstwy:"},
-{"id": "line_x1", "title": "Zmian od linii współrzędna x"},
-{"id": "line_x2", "title": "Zgodnie Zmian kończące współrzędna x"},
-{"id": "line_y1", "title": "Line y Zmian od współrzędnych"},
-{"id": "line_y2", "title": "Zgodnie Zmian kończące y koordynowanie"},
-{"id": "linecap_butt", "title": "Linecap: Butt"},
-{"id": "linecap_round", "title": "Linecap: Round"},
-{"id": "linecap_square", "title": "Linecap: Square"},
-{"id": "linejoin_bevel", "title": "Linejoin: Bevel"},
-{"id": "linejoin_miter", "title": "Linejoin: Miter"},
-{"id": "linejoin_round", "title": "Linejoin: Round"},
-{"id": "main_icon", "title": "Main Menu"},
-{"id": "mode_connect", "title": "Connect two objects"},
-{"id": "page", "textContent": "strona"},
-{"id": "palette", "title": "Kliknij, aby zmienić kolor wypełnienia, shift kliknij, aby zmienić kolor skok"},
-{"id": "path_node_x", "title": "Change node's x coordinate"},
-{"id": "path_node_y", "title": "Change node's y coordinate"},
-{"id": "rect_height_tool", "title": "Zmiana wysokości prostokąta"},
-{"id": "rect_width_tool", "title": "Szerokość prostokąta Zmień"},
-{"id": "relativeToLabel", "textContent": "w stosunku do:"},
-{"id": "seg_type", "title": "Change Segment type"},
-{"id": "selLayerLabel", "textContent": "Move elements to:"},
-{"id": "selLayerNames", "title": "Move selected elements to a different layer"},
-{"id": "selectedPredefined", "textContent": "Wybierz predefiniowanych:"},
-{"id": "selected_objects", "textContent": "wybranych obiektów"},
-{"id": "selected_x", "title": "Change X coordinate"},
-{"id": "selected_y", "title": "Change Y coordinate"},
-{"id": "smallest_object", "textContent": "Najmniejszy obiekt"},
-{"id": "straight_segments", "textContent": "Straight"},
-{"id": "stroke_color", "title": "Zmień kolor skok"},
-{"id": "stroke_style", "title": "Zmień styl skoku kreska"},
-{"id": "stroke_width", "title": "Szerokość skoku Zmień"},
-{"id": "svginfo_bg_note", "textContent": "Note: Background will not be saved with image."},
-{"id": "svginfo_change_background", "textContent": "Editor Background"},
-{"id": "svginfo_dim", "textContent": "Canvas Dimensions"},
-{"id": "svginfo_editor_prefs", "textContent": "Editor Preferences"},
-{"id": "svginfo_height", "textContent": "Wysokość:"},
-{"id": "svginfo_icons", "textContent": "Icon size"},
-{"id": "svginfo_image_props", "textContent": "Image Properties"},
-{"id": "svginfo_lang", "textContent": "Language"},
-{"id": "svginfo_title", "textContent": "Title"},
-{"id": "svginfo_width", "textContent": "Szerokość:"},
-{"id": "text", "title": "Zmiana treści tekstu"},
-{"id": "toggle_stroke_tools", "title": "Show/hide more stroke tools"},
-{"id": "tool_add_subpath", "title": "Add sub-path"},
-{"id": "tool_alignbottom", "title": "Wyrównaj do dołu"},
-{"id": "tool_aligncenter", "title": "Wyśrodkuj"},
-{"id": "tool_alignleft", "title": "Wyrównaj do lewej"},
-{"id": "tool_alignmiddle", "title": "Align Middle"},
-{"id": "tool_alignright", "title": "Wyrównaj do prawej"},
-{"id": "tool_aligntop", "title": "Wyrównaj do góry"},
-{"id": "tool_angle", "title": "Zmiana kąta obrotu"},
-{"id": "tool_blur", "title": "Change gaussian blur value"},
-{"id": "tool_bold", "title": "Bold Text"},
-{"id": "tool_circle", "title": "Koło"},
-{"id": "tool_clear", "textContent": "New Image"},
-{"id": "tool_clone", "title": "Clone Element"},
-{"id": "tool_clone_multi", "title": "Elementy Clone"},
-{"id": "tool_delete", "title": "Usuń element"},
-{"id": "tool_delete_multi", "title": "Usun Wybrane elementy"},
-{"id": "tool_docprops", "textContent": "Właściwości dokumentu"},
-{"id": "tool_docprops_cancel", "textContent": "Anuluj"},
-{"id": "tool_docprops_save", "textContent": "Zapisać"},
-{"id": "tool_ellipse", "title": "Elipsa"},
-{"id": "tool_export", "textContent": "Export as PNG"},
-{"id": "tool_eyedropper", "title": "Eye Dropper Tool"},
-{"id": "tool_fhellipse", "title": "Wolny-Hand Elipsa"},
-{"id": "tool_fhpath", "title": "Pencil Tool"},
-{"id": "tool_fhrect", "title": "Wolnej ręki prostokąt"},
-{"id": "tool_font_size", "title": "Zmień rozmiar czcionki"},
-{"id": "tool_group", "title": "Elementy Grupa"},
-{"id": "tool_image", "title": "Image Tool"},
-{"id": "tool_import", "textContent": "Import SVG"},
-{"id": "tool_italic", "title": "Kursywa"},
-{"id": "tool_line", "title": "Line Tool"},
-{"id": "tool_move_bottom", "title": "Przenieś do dołu"},
-{"id": "tool_move_top", "title": "Przenieś do góry"},
-{"id": "tool_node_clone", "title": "Clone Node"},
-{"id": "tool_node_delete", "title": "Delete Node"},
-{"id": "tool_node_link", "title": "Link Control Points"},
-{"id": "tool_opacity", "title": "Zmiana stron przezroczystość elementu"},
-{"id": "tool_open", "textContent": "Otwórz obraz"},
-{"id": "tool_path", "title": "Poli Tool"},
-{"id": "tool_rect", "title": "Prostokąt"},
-{"id": "tool_redo", "title": "Redo"},
-{"id": "tool_reorient", "title": "Reorient path"},
-{"id": "tool_save", "textContent": "Zapisz obraz"},
-{"id": "tool_select", "title": "Wybierz narzędzie"},
-{"id": "tool_source", "title": "Edycja źródła"},
-{"id": "tool_source_cancel", "textContent": "Anuluj"},
-{"id": "tool_source_save", "textContent": "Zapisać"},
-{"id": "tool_square", "title": "Kwadrat"},
-{"id": "tool_text", "title": "Tekst Tool"},
-{"id": "tool_topath", "title": "Convert to Path"},
-{"id": "tool_undo", "title": "Cofnij"},
-{"id": "tool_ungroup", "title": "Elementy Rozgrupuj"},
-{"id": "tool_wireframe", "title": "Wireframe Mode"},
-{"id": "tool_zoom", "title": "Zoom Tool"},
-{"id": "url_notice", "title": "NOTE: This image cannot be embedded. It will depend on this path to be displayed"},
-{"id": "zoom_panel", "title": "Zmiana poziomu powiększenia"},
-{"id": "sidepanel_handle", "textContent": "L a y e r s", "title": "Drag left/right to resize side panel"},
-{
- "js_strings": {
- "QerrorsRevertToSource": "There were parsing errors in your SVG source.\nRevert back to original SVG source?",
- "QignoreSourceChanges": "Ignore changes made to SVG source?",
- "QmoveElemsToLayer": "Move selected elements to layer '%s'?",
- "QwantToClear": "Do you want to clear the drawing?\nThis will also erase your undo history!",
- "cancel": "Cancel",
- "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.",
- "dupeLayerName": "There is already a layer named that!",
- "enterNewImgURL": "Enter the new image URL",
- "enterNewLayerName": "Please enter the new layer name",
- "enterUniqueLayerName": "Please enter a unique layer name",
- "exportNoBlur": "Blurred elements will appear as un-blurred",
- "exportNoDashArray": "Strokes will appear filled",
- "exportNoImage": "Image elements will not appear",
- "exportNoText": "Text may not appear as expected",
- "exportNoforeignObject": "foreignObject elements will not appear",
- "featNotSupported": "Feature not supported",
- "invalidAttrValGiven": "Invalid value given",
- "key_backspace": "backspace",
- "key_del": "delete",
- "key_down": "down",
- "key_up": "up",
- "layer": "Layer",
- "layerHasThatName": "Layer already has that name",
- "loadingImage": "Loading image, please wait...",
- "noContentToFitTo": "No content to fit to",
- "noteTheseIssues": "Also note the following issues: ",
- "ok": "OK",
- "pathCtrlPtTooltip": "Drag control point to adjust curve properties",
- "pathNodeTooltip": "Drag node to move it. Double-click node to change segment type",
- "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file."
- }
-}
-] \ No newline at end of file
diff --git a/files_svgedit/js/locale/lang.pt-BR.js b/files_svgedit/js/locale/lang.pt-BR.js
deleted file mode 100644
index 6ae824a89..000000000
--- a/files_svgedit/js/locale/lang.pt-BR.js
+++ /dev/null
@@ -1,157 +0,0 @@
-[
-{"id":"layer_new","title":"Nova Camada"},
-{"id":"layer_delete","title":"Deletar Camada"},
-{"id":"layer_rename","title":"Renomear Camada"},
-{"id":"layer_up","title":"Camada para Cima"},
-{"id":"layer_down","title":"Camada para baixo"},
-{"id":"tool_clear","title":"Nova Imagem"},
-{"id":"tool_open","title":"Abrir Imagem"},
-{"id":"tool_save","title":"Salvar Imagem"},
-{"id":"tool_docprops","title":"Propriedades"},
-{"id":"tool_source","title":"Código"},
-{"id":"tool_undo","title":"Desfazer"},
-{"id":"tool_redo","title":"Refazer"},
-{"id":"tool_clone","title":"Duplicar Elemento"},
-{"id":"tool_delete","title":"Excluir Elemento"},
-{"id":"tool_move_top","title":"Mover para Cima"},
-{"id":"tool_move_bottom","title":"Mover para Baixo"},
-{"id":"group_opacity","title":"Mudar a opacidade"},
-{"id":"angle","title":"Ângulo de rotação"},
-{"id":"tool_clone_multi","title":"Duplicar Elementos"},
-{"id":"tool_delete_multi","title":"Eliminar Elementos"},
-{"id":"tool_alignleft","title":"Alinhar à Esquerda"},
-{"id":"tool_aligncenter","title":"Alinhar ao centro"},
-{"id":"tool_alignright","title":"Alinhar à Direita"},
-{"id":"tool_aligntop","title":"Alinhar Acima"},
-{"id":"tool_alignmiddle","title":"Alinhar no Méio"},
-{"id":"tool_alignbottom","title":"Alinhar Abaixo"},
-{"id":"align_relative_to","title":"Alinhar em relação a ..."},
-{"id":"tool_group","title":"Agrupar"},
-{"id":"tool_ungroup","title":"Desagrupar"},
-{"id":"rect_width","title":"Alterar a largura retângulo"},
-{"id":"rect_height","title":"Alterar altura do retângulo"},
-{"id":"rect_rx","title":"Radio do chanfro"},
-{"id":"image_width","title":"Alterar a largura da imagem"},
-{"id":"image_height","title":"Alterar altura da imagem"},
-{"id":"image_url","title":"Alterar caminho URL"},
-{"id":"circle_cx","title":"Ponto horizontal do centro cx"},
-{"id":"circle_cy","title":"Ponto Vertical do centro cy"},
-{"id":"circle_r","title":"Alterar raio"},
-{"id":"ellipse_cx","title":"Ponto horizontal do centro cx"},
-{"id":"ellipse_cy","title":"Ponto Vertical do centro cy"},
-{"id":"ellipse_rx","title":"Alterar raio horizontal"},
-{"id":"ellipse_ry","title":"Alterar raio vertical"},
-{"id":"line_x1","title":"Ponto horizontal do início da linha x1"},
-{"id":"line_y1","title":"Ponto vertical do início da linha y1"},
-{"id":"line_x2","title":"Ponto horizontal do fim da linha x2"},
-{"id":"line_y2","title":"Ponto vertical do fim da linha y2"},
-{"id":"tool_bold","title":"Negrito"},
-{"id":"tool_italic","title":"Itálico"},
-{"id":"font_family","title":"Fonte"},
-{"id":"font_size","title":"Alterar tamanho da fonte"},
-{"id":"text","title":"Alterar o conteúdo do texto"},
-{"id":"tool_select","title":"Seleção"},
-{"id":"tool_fhpath","title":"Lápis"},
-{"id":"tool_line","title":"Linha"},
-{"id":"tools_rect_show","title":"Quadrado / Retângulo"},
-{"id":"tools_ellipse_show","title":"Elipse / Círculo"},
-{"id":"tool_text","title":"Texto"},
-{"id":"tool_path","title":"Área"},
-{"id":"tool_image","title":"Imagem"},
-{"id":"tool_zoom","title":"Zoom"},
-{"id":"zoom","title":"Alterar o zoom"},
-{"id":"fill_color","title":"Cor do preenchimento"},
-{"id":"stroke_color","title":"Cor do contorno"},
-{"id":"stroke_width","title":"Alterar a largura do contorno"},
-{"id":"stroke_style","title":"Alterar o estilo do contorno"},
-{"id":"palette","title":"Clique para mudar a cor do preenchimento, Shift + Clique para mudar a cor do contorno"},
-{"id":"tool_square","title":"Quadrado"},
-{"id":"tool_rect","title":"Retângulo"},
-{"id":"tool_fhrect","title":"Retangulo à mão-livre"},
-{"id":"tool_circle","title":"Circle"},
-{"id":"tool_ellipse","title":"Elipse"},
-{"id":"tool_fhellipse","title":"Elipse à mão-livre"},
-{"id":"bkgnd_color","title":"Mudar a cor de fundo / opacidade"},
-{"id":"rwidthLabel","textContent":"largura:"},
-{"id":"rheightLabel","textContent":"altura:"},
-{"id":"cornerRadiusLabel","textContent":"Raio:"},
-{"id":"iwidthLabel","textContent":"largura:"},
-{"id":"iheightLabel","textContent":"altura:"},
-{"id":"svginfo_width","textContent":"Largura:"},
-{"id":"svginfo_height","textContent":"Altura:"},
-{"id":"angleLabel","textContent":"ângulo:"},
-{"id":"relativeToLabel","textContent":"em relação ao:"},
-{"id":"zoomLabel","textContent":"zoom:"},
-{"id":"layersLabel","textContent":"Camadas:"},
-{"id":"selectedPredefined","textContent":"Selecionar predefinidos:"},
-{"id":"fitToContent","textContent":"Ajustar ao conteúdo"},
-{"id":"tool_source_save","textContent":"Salvar"},
-{"id":"tool_docprops_save","textContent":"Salvar"},
-{"id":"tool_docprops_cancel","textContent":"Cancelar"},
-{"id":"tool_source_cancel","textContent":"Cancelar"},
-{"id":"fit_to_all","textContent":"Ajustar a todo o conteúdo"},
-{"id":"fit_to_layer_content","textContent":"Ajustar ao conteúdo da camada"},
-{"id":"fit_to_sel","textContent":"Ajustar à seleção"},
-{"id":"fit_to_canvas","textContent":"Ajustar à tela"},
-{"id":"selected_objects","textContent":"objetos selecionados"},
-{"id":"largest_object","textContent":"maior objeto"},
-{"id":"smallest_object","textContent":"menor objeto"},
-{"id":"page","textContent":"Página"},
-{"id":"fill_tool_bottom","textContent":"Preenchimento:"},
-{"id":"stroke_tool_bottom","textContent":"Contorno:"},
-{"id":"path_node_x","title":"Coordenada do ponto x"},
-{"id":"path_node_y","title":"Coordenada do ponto y"},
-{"id":"seg_type","title":"Mudar Tipo de segmento"},
-{"id":"straight_segments","textContent":"Reta"},
-{"id":"curve_segments","textContent":"Curva"},
-{"id":"tool_node_clone","title":"Duplicar ponto"},
-{"id":"tool_node_delete","title":"Deletar ponto"},
-{"id":"selLayerLabel","textContent":"Mover elementos para:"},
-{"id":"selLayerNames","title":"Mover elementos selecionados para outra camada"},
-{"id":"sidepanel_handle","title":"Arraste para os lados para alterar a largura","textContent":"C a m a d a s"},
-{"id":"tool_wireframe","title":"Modo Somente Contornos"},
-{"id":"svginfo_image_props","textContent":"Propriedades da Imagem"},
-{"id":"svginfo_title","textContent":"Título"},
-{"id":"svginfo_dim","textContent":"Dimensões"},
-{"id":"includedImages","textContent":"Imagens incluídas"},
-{"id":"image_opt_embed","textContent":"Embutir dados (arquivos locais)"},
-{"id":"image_opt_ref","textContent":"Usar referência a arquivo"},
-{"id":"svginfo_editor_prefs","textContent":"Preferências"},
-{"id":"svginfo_lang","textContent":"Idioma"},
-{"id":"svginfo_change_background","textContent":"Mudar fundo"},
-{"id":"svginfo_bg_note","textContent":"Aviso: Fundo não será salvo com a imagem."},
-{"id":"svginfo_icons","textContent":"Tamanho do ícone"},
-{"id":"icon_small","textContent":"Pequeno"},
-{"id":"icon_medium","textContent":"Medio"},
-{"id":"icon_large","textContent":"Grande"},
-{"id":"icon_xlarge","textContent":"Extra"},
-{"id":"selected_x","title":"Mudar coodenada x"},
-{"id":"selected_y","title":"Mudar coodenada y"},
-{"id":"tool_topath","title":"Mudar para Área"},
-{"id":"tool_reorient","title":"Reorientar Área"},
-{"id":"tool_node_link","title":"Alinhar ponto de controle da curva"},
-{"js_strings": {
- "invalidAttrValGiven":"Valor inválido",
- "noContentToFitTo":"Sem conteúdo",
- 'layer':"Camada",
- "dupeLayerName":"Já existe uma camada com esse nome",
- "enterUniqueLayerName":"Por favor, insira um nome único",
- "enterNewLayerName":"Por favor, insira o nome da nova camada",
- "layerHasThatName":"A camada já possui este nome",
- "QmoveElemsToLayer":"Mover os elementos selecionados para a camada: '%s'?",
- "QwantToClear":"Deseja apagar o desenho?\nIsso também vai limpar o histórico!",
- "QerrorsRevertToSource":"Foram encontrados erros no seu código SVG.\nVoltar para o código SVG original?",
- "QignoreSourceChanges":"Ignorar mudanças no código SVG?",
- "featNotSupported":"Recurso não suportado",
- "enterNewImgURL":"Insirao caminho URL da imagem",
- "ok":"Ok",
- "cancel":"Cancelar",
- "pathNodeTooltip":"Arraste o ponto para move-lo. \nDuplo-click para mudar o tipo de segmento (Reta / Curva)",
- "pathCtrlPtTooltip":"Arraste ponto de controle da curva para alterar suas propriedades",
- "key_up":"seta pra cima",
- "key_down":"seta pra baixo",
- "key_backspace":"backspace",
- "key_del":"delete"
- }
-}
-]
diff --git a/files_svgedit/js/locale/lang.pt-PT.js b/files_svgedit/js/locale/lang.pt-PT.js
deleted file mode 100644
index 7ac35fd4c..000000000
--- a/files_svgedit/js/locale/lang.pt-PT.js
+++ /dev/null
@@ -1,173 +0,0 @@
-[
-{"id": "align_relative_to", "title": "Alinhar em relação a ..."},
-{"id": "bkgnd_color", "title": "Mudar a cor de fundo / opacidade"},
-{"id": "circle_cx", "title": "Cx Mudar círculo de coordenadas"},
-{"id": "circle_cy", "title": "Círculo Mudança cy coordenar"},
-{"id": "circle_r", "title": "Alterar círculo de raio"},
-{"id": "connector_no_arrow", "textContent": "No arrow"},
-{"id": "copyrightLabel", "textContent": "Powered by"},
-{"id": "cornerRadiusLabel", "title": "Alterar Corner Rectangle Radius"},
-{"id": "curve_segments", "textContent": "Curve"},
-{"id": "ellipse_cx", "title": "Alterar elipse cx coordenar"},
-{"id": "ellipse_cy", "title": "Elipse Mudança cy coordenar"},
-{"id": "ellipse_rx", "title": "Raio X Change elipse"},
-{"id": "ellipse_ry", "title": "Raio y Change elipse"},
-{"id": "fill_color", "title": "Alterar a cor de preenchimento"},
-{"id": "fitToContent", "textContent": "Ajustar ao conteúdo"},
-{"id": "fit_to_all", "textContent": "Ajustar a todo o conteúdo"},
-{"id": "fit_to_canvas", "textContent": "Ajustar à tela"},
-{"id": "fit_to_layer_content", "textContent": "Ajustar o conteúdo da camada de"},
-{"id": "fit_to_sel", "textContent": "Ajustar à selecção"},
-{"id": "font_family", "title": "Alterar fonte Família"},
-{"id": "icon_large", "textContent": "Large"},
-{"id": "icon_medium", "textContent": "Medium"},
-{"id": "icon_small", "textContent": "Small"},
-{"id": "icon_xlarge", "textContent": "Extra Large"},
-{"id": "image_height", "title": "Alterar altura da imagem"},
-{"id": "image_opt_embed", "textContent": "Embed data (local files)"},
-{"id": "image_opt_ref", "textContent": "Use file reference"},
-{"id": "image_url", "title": "Alterar URL"},
-{"id": "image_width", "title": "Alterar a largura da imagem"},
-{"id": "includedImages", "textContent": "Included Images"},
-{"id": "largest_object", "textContent": "maior objeto"},
-{"id": "layer_delete", "title": "Delete Layer"},
-{"id": "layer_down", "title": "Move camada para baixo"},
-{"id": "layer_new", "title": "New Layer"},
-{"id": "layer_rename", "title": "Rename Layer"},
-{"id": "layer_up", "title": "Move Layer Up"},
-{"id": "layersLabel", "textContent": "Camadas:"},
-{"id": "line_x1", "title": "Altere a linha de partida coordenada x"},
-{"id": "line_x2", "title": "Altere a linha está terminando coordenada x"},
-{"id": "line_y1", "title": "Mudança na linha de partida coordenada y"},
-{"id": "line_y2", "title": "Mudança de linha está terminando coordenada y"},
-{"id": "linecap_butt", "title": "Linecap: Butt"},
-{"id": "linecap_round", "title": "Linecap: Round"},
-{"id": "linecap_square", "title": "Linecap: Square"},
-{"id": "linejoin_bevel", "title": "Linejoin: Bevel"},
-{"id": "linejoin_miter", "title": "Linejoin: Miter"},
-{"id": "linejoin_round", "title": "Linejoin: Round"},
-{"id": "main_icon", "title": "Main Menu"},
-{"id": "mode_connect", "title": "Connect two objects"},
-{"id": "page", "textContent": "Página"},
-{"id": "palette", "title": "Clique para mudar a cor de preenchimento, shift-clique para mudar a cor do curso"},
-{"id": "path_node_x", "title": "Change node's x coordinate"},
-{"id": "path_node_y", "title": "Change node's y coordinate"},
-{"id": "rect_height_tool", "title": "Alterar altura do retângulo"},
-{"id": "rect_width_tool", "title": "Alterar a largura retângulo"},
-{"id": "relativeToLabel", "textContent": "em relação ao:"},
-{"id": "seg_type", "title": "Change Segment type"},
-{"id": "selLayerLabel", "textContent": "Move elements to:"},
-{"id": "selLayerNames", "title": "Move selected elements to a different layer"},
-{"id": "selectedPredefined", "textContent": "Selecione predefinidos:"},
-{"id": "selected_objects", "textContent": "objetos eleitos"},
-{"id": "selected_x", "title": "Change X coordinate"},
-{"id": "selected_y", "title": "Change Y coordinate"},
-{"id": "smallest_object", "textContent": "menor objeto"},
-{"id": "straight_segments", "textContent": "Straight"},
-{"id": "stroke_color", "title": "Mudar a cor do curso"},
-{"id": "stroke_style", "title": "Alterar o estilo do traço do curso"},
-{"id": "stroke_width", "title": "Alterar a largura do curso"},
-{"id": "svginfo_bg_note", "textContent": "Note: Background will not be saved with image."},
-{"id": "svginfo_change_background", "textContent": "Editor Background"},
-{"id": "svginfo_dim", "textContent": "Canvas Dimensions"},
-{"id": "svginfo_editor_prefs", "textContent": "Editor Preferences"},
-{"id": "svginfo_height", "textContent": "Altura:"},
-{"id": "svginfo_icons", "textContent": "Icon size"},
-{"id": "svginfo_image_props", "textContent": "Image Properties"},
-{"id": "svginfo_lang", "textContent": "Language"},
-{"id": "svginfo_title", "textContent": "Title"},
-{"id": "svginfo_width", "textContent": "Largura:"},
-{"id": "text", "title": "Alterar o conteúdo de texto"},
-{"id": "toggle_stroke_tools", "title": "Show/hide more stroke tools"},
-{"id": "tool_add_subpath", "title": "Add sub-path"},
-{"id": "tool_alignbottom", "title": "Align Bottom"},
-{"id": "tool_aligncenter", "title": "Alinhar ao centro"},
-{"id": "tool_alignleft", "title": "Alinhar à Esquerda"},
-{"id": "tool_alignmiddle", "title": "Alinhar Médio"},
-{"id": "tool_alignright", "title": "Alinhar à Direita"},
-{"id": "tool_aligntop", "title": "Align Top"},
-{"id": "tool_angle", "title": "Alterar o ângulo de rotação"},
-{"id": "tool_blur", "title": "Change gaussian blur value"},
-{"id": "tool_bold", "title": "Bold Text"},
-{"id": "tool_circle", "title": "Circle"},
-{"id": "tool_clear", "textContent": "Nova Imagem"},
-{"id": "tool_clone", "title": "Clone Element"},
-{"id": "tool_clone_multi", "title": "Elementos Clone"},
-{"id": "tool_delete", "title": "Excluir Elemento"},
-{"id": "tool_delete_multi", "title": "Eliminar elementos selecionados"},
-{"id": "tool_docprops", "textContent": "Propriedades do Documento"},
-{"id": "tool_docprops_cancel", "textContent": "Cancelar"},
-{"id": "tool_docprops_save", "textContent": "Salvar"},
-{"id": "tool_ellipse", "title": "Elipse"},
-{"id": "tool_export", "textContent": "Export as PNG"},
-{"id": "tool_eyedropper", "title": "Eye Dropper Tool"},
-{"id": "tool_fhellipse", "title": "Free-Hand Ellipse"},
-{"id": "tool_fhpath", "title": "Ferramenta Lápis"},
-{"id": "tool_fhrect", "title": "Free-Hand Rectangle"},
-{"id": "tool_font_size", "title": "Alterar tamanho de letra"},
-{"id": "tool_group", "title": "Elementos do Grupo"},
-{"id": "tool_image", "title": "Image Tool"},
-{"id": "tool_import", "textContent": "Import SVG"},
-{"id": "tool_italic", "title": "Texto em itálico"},
-{"id": "tool_line", "title": "Ferramenta Linha"},
-{"id": "tool_move_bottom", "title": "Move to Bottom"},
-{"id": "tool_move_top", "title": "Move to Top"},
-{"id": "tool_node_clone", "title": "Clone Node"},
-{"id": "tool_node_delete", "title": "Delete Node"},
-{"id": "tool_node_link", "title": "Link Control Points"},
-{"id": "tool_opacity", "title": "Mude a opacidade item selecionado"},
-{"id": "tool_open", "textContent": "Abrir Imagem"},
-{"id": "tool_path", "title": "Path Tool"},
-{"id": "tool_rect", "title": "Retângulo"},
-{"id": "tool_redo", "title": "Refazer"},
-{"id": "tool_reorient", "title": "Reorient path"},
-{"id": "tool_save", "textContent": "Salvar Imagem"},
-{"id": "tool_select", "title": "Selecione a ferramenta"},
-{"id": "tool_source", "title": "Fonte Editar"},
-{"id": "tool_source_cancel", "textContent": "Cancelar"},
-{"id": "tool_source_save", "textContent": "Salvar"},
-{"id": "tool_square", "title": "Quadrado"},
-{"id": "tool_text", "title": "Ferramenta de Texto"},
-{"id": "tool_topath", "title": "Convert to Path"},
-{"id": "tool_undo", "title": "Desfazer"},
-{"id": "tool_ungroup", "title": "Elementos Desagrupar"},
-{"id": "tool_wireframe", "title": "Wireframe Mode"},
-{"id": "tool_zoom", "title": "Zoom Tool"},
-{"id": "url_notice", "title": "NOTE: This image cannot be embedded. It will depend on this path to be displayed"},
-{"id": "zoom_panel", "title": "Alterar o nível de zoom"},
-{"id": "sidepanel_handle", "textContent": "L a y e r s", "title": "Drag left/right to resize side panel"},
-{
- "js_strings": {
- "QerrorsRevertToSource": "There were parsing errors in your SVG source.\nRevert back to original SVG source?",
- "QignoreSourceChanges": "Ignore changes made to SVG source?",
- "QmoveElemsToLayer": "Move selected elements to layer '%s'?",
- "QwantToClear": "Do you want to clear the drawing?\nThis will also erase your undo history!",
- "cancel": "Cancel",
- "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.",
- "dupeLayerName": "There is already a layer named that!",
- "enterNewImgURL": "Enter the new image URL",
- "enterNewLayerName": "Please enter the new layer name",
- "enterUniqueLayerName": "Please enter a unique layer name",
- "exportNoBlur": "Blurred elements will appear as un-blurred",
- "exportNoDashArray": "Strokes will appear filled",
- "exportNoImage": "Image elements will not appear",
- "exportNoText": "Text may not appear as expected",
- "exportNoforeignObject": "foreignObject elements will not appear",
- "featNotSupported": "Feature not supported",
- "invalidAttrValGiven": "Invalid value given",
- "key_backspace": "backspace",
- "key_del": "delete",
- "key_down": "down",
- "key_up": "up",
- "layer": "Layer",
- "layerHasThatName": "Layer already has that name",
- "loadingImage": "Loading image, please wait...",
- "noContentToFitTo": "No content to fit to",
- "noteTheseIssues": "Also note the following issues: ",
- "ok": "OK",
- "pathCtrlPtTooltip": "Drag control point to adjust curve properties",
- "pathNodeTooltip": "Drag node to move it. Double-click node to change segment type",
- "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file."
- }
-}
-] \ No newline at end of file
diff --git a/files_svgedit/js/locale/lang.ro.js b/files_svgedit/js/locale/lang.ro.js
deleted file mode 100644
index fedffce74..000000000
--- a/files_svgedit/js/locale/lang.ro.js
+++ /dev/null
@@ -1,173 +0,0 @@
-[
-{"id": "align_relative_to", "title": "Alinierea în raport cu ..."},
-{"id": "bkgnd_color", "title": "Schimbare culoare de fundal / opacitate"},
-{"id": "circle_cx", "title": "Schimbarea coordonatei CX a cercului"},
-{"id": "circle_cy", "title": "Schimbarea coordonatei CY a cercului"},
-{"id": "circle_r", "title": "Schimbarea razei cercului"},
-{"id": "connector_no_arrow", "textContent": "Fără Săgeată"},
-{"id": "copyrightLabel", "textContent": "Powered by"},
-{"id": "cornerRadiusLabel", "title": "Schimbarea Razei Colţului Dreptunghiului"},
-{"id": "curve_segments", "textContent": "Curv"},
-{"id": "ellipse_cx", "title": "Schimbarea coordonatei CX a elipsei"},
-{"id": "ellipse_cy", "title": "Schimbarea coordonatei CY a elipsei"},
-{"id": "ellipse_rx", "title": "Schimbarea razei elipsei X"},
-{"id": "ellipse_ry", "title": "Schimbarea razei elipsei Y"},
-{"id": "fill_color", "title": "Schimbarea culorii de umplere"},
-{"id": "fitToContent", "textContent": "Dimensionare la Conţinut"},
-{"id": "fit_to_all", "textContent": "Potrivire la tot conţinutul"},
-{"id": "fit_to_canvas", "textContent": "Potrivire la Şevalet"},
-{"id": "fit_to_layer_content", "textContent": "Potrivire la conţinutul stratului"},
-{"id": "fit_to_sel", "textContent": "Potrivire la selecţie"},
-{"id": "font_family", "title": "Modificare familie de Fonturi"},
-{"id": "icon_large", "textContent": "Mari"},
-{"id": "icon_medium", "textContent": "Medii"},
-{"id": "icon_small", "textContent": "Mici"},
-{"id": "icon_xlarge", "textContent": "Foarte Mari"},
-{"id": "image_height", "title": "Schimbarea Înălţimii imaginii"},
-{"id": "image_opt_embed", "textContent": "Includeţi Datele (fisiere locale)"},
-{"id": "image_opt_ref", "textContent": "Foloseste referinte la fisiere"},
-{"id": "image_url", "title": "Schimbaţi URL-ul"},
-{"id": "image_width", "title": "Schimbarea Lăţimii imaginii"},
-{"id": "includedImages", "textContent": "Imaginile Incluse"},
-{"id": "largest_object", "textContent": "cel mai mare obiect"},
-{"id": "layer_delete", "title": "Ştergeţi Strat"},
-{"id": "layer_down", "title": "Mutare Strat în Jos"},
-{"id": "layer_new", "title": "Strat Nou"},
-{"id": "layer_rename", "title": "Redenumiţi Strat"},
-{"id": "layer_up", "title": "Mutare Strat în Sus"},
-{"id": "layersLabel", "textContent": "Straturi:"},
-{"id": "line_x1", "title": "Schimbare coordonatei x a punctului de start"},
-{"id": "line_x2", "title": "Schimbare coordonatei x a punctului final"},
-{"id": "line_y1", "title": "Schimbare coordonatei y a punctului de start"},
-{"id": "line_y2", "title": "Schimbare coordonatei y a punctului final"},
-{"id": "linecap_butt", "title": "Capat de linie: Butuc"},
-{"id": "linecap_round", "title": "Capat de linie: Rotund"},
-{"id": "linecap_square", "title": "Capat de linie: Patrat"},
-{"id": "linejoin_bevel", "title": "Articulatia liniei: Tesita"},
-{"id": "linejoin_miter", "title": "Articulatia liniei: Unghi ascutit"},
-{"id": "linejoin_round", "title": "Articulatia liniei: Rotunda"},
-{"id": "main_icon", "title": "Menu Principal"},
-{"id": "mode_connect", "title": "Conectati doua obiecte"},
-{"id": "page", "textContent": "de start"},
-{"id": "palette", "title": "Faceţi clic a schimba culoare de umplere, Shift-click pentru a schimba culoarea de contur"},
-{"id": "path_node_x", "title": "Schimba coordonata x a punctului"},
-{"id": "path_node_y", "title": "Schimba coordonata x a punctului"},
-{"id": "rect_height_tool", "title": "Schimbarea înălţimii dreptunghiului"},
-{"id": "rect_width_tool", "title": "Schimbarea lăţimii dreptunghiului"},
-{"id": "relativeToLabel", "textContent": "în raport cu:"},
-{"id": "seg_type", "title": "Schimba tipul de segment"},
-{"id": "selLayerLabel", "textContent": "Muta elemente la:"},
-{"id": "selLayerNames", "title": "Muta elementele selectate pe un alt strat"},
-{"id": "selectedPredefined", "textContent": "Selecţii predefinite:"},
-{"id": "selected_objects", "textContent": "obiectele alese"},
-{"id": "selected_x", "title": "Schimba coordonata X"},
-{"id": "selected_y", "title": "Schimba coordonata Y"},
-{"id": "smallest_object", "textContent": "cel mai mic obiect"},
-{"id": "straight_segments", "textContent": "Drept"},
-{"id": "stroke_color", "title": "Schimbarea culorii de contur"},
-{"id": "stroke_style", "title": "Schimbarea stilului de contur"},
-{"id": "stroke_width", "title": "Schimbarea lăţime de contur"},
-{"id": "svginfo_bg_note", "textContent": "Nota: Fondul nu va fi salvat cu imaginea."},
-{"id": "svginfo_change_background", "textContent": "Fondul Editorului"},
-{"id": "svginfo_dim", "textContent": "Dimensiunile Sevaletuui"},
-{"id": "svginfo_editor_prefs", "textContent": "Preferintele Editorului"},
-{"id": "svginfo_height", "textContent": "Înălţime:"},
-{"id": "svginfo_icons", "textContent": "Dimensiunile Butoanelor"},
-{"id": "svginfo_image_props", "textContent": "Proprietaţile Imaginii"},
-{"id": "svginfo_lang", "textContent": "Limba"},
-{"id": "svginfo_title", "textContent": "Titlul"},
-{"id": "svginfo_width", "textContent": "Lăţime:"},
-{"id": "text", "title": "Schimbarea Conţinutului textului"},
-{"id": "toggle_stroke_tools", "title": "Aratati/ascundeti mai multe unelte de contur"},
-{"id": "tool_add_subpath", "title": "Adaugati sub-traiectorie"},
-{"id": "tool_alignbottom", "title": "Alinierea jos"},
-{"id": "tool_aligncenter", "title": "Aliniere la centru"},
-{"id": "tool_alignleft", "title": "Aliniere la stânga"},
-{"id": "tool_alignmiddle", "title": "Aliniere la mijloc"},
-{"id": "tool_alignright", "title": "Aliniere la dreapta"},
-{"id": "tool_aligntop", "title": "Alinierea sus"},
-{"id": "tool_angle", "title": "Schimbarea unghiul de rotatie"},
-{"id": "tool_blur", "title": "Schimbarea valorii estomparii gaussiene"},
-{"id": "tool_bold", "title": "Text Îngroşat"},
-{"id": "tool_circle", "title": "Cerc"},
-{"id": "tool_clear", "textContent": "Imagine nouă"},
-{"id": "tool_clone", "title": "Clonare Element"},
-{"id": "tool_clone_multi", "title": "Clonare Elemente"},
-{"id": "tool_delete", "title": "Şterge Element"},
-{"id": "tool_delete_multi", "title": "Ştergeţi Elementele selectate"},
-{"id": "tool_docprops", "textContent": "Propertile Documentului"},
-{"id": "tool_docprops_cancel", "textContent": "Anulaţi"},
-{"id": "tool_docprops_save", "textContent": "Ok"},
-{"id": "tool_ellipse", "title": "Elipsă"},
-{"id": "tool_export", "textContent": "Exportare ca şi PNG"},
-{"id": "tool_eyedropper", "title": "Unealta de Eye Dropper"},
-{"id": "tool_fhellipse", "title": "Elipsă cu mana-libera"},
-{"id": "tool_fhpath", "title": "Unealta de Traiectorie"},
-{"id": "tool_fhrect", "title": "Dreptunghi cu mana-libera"},
-{"id": "tool_font_size", "title": "Schimbă dimensiunea fontului"},
-{"id": "tool_group", "title": "Grupare Elemente"},
-{"id": "tool_image", "title": "Unealta de Imagine"},
-{"id": "tool_import", "textContent": "Importare SVG"},
-{"id": "tool_italic", "title": "Text Înclinat"},
-{"id": "tool_line", "title": "Unealta de Linie"},
-{"id": "tool_move_bottom", "title": "Mutare în jos"},
-{"id": "tool_move_top", "title": "Mutare în sus"},
-{"id": "tool_node_clone", "title": "Cloneaza Punct"},
-{"id": "tool_node_delete", "title": "Sterge Punct"},
-{"id": "tool_node_link", "title": "Uneste Punctele de Control"},
-{"id": "tool_opacity", "title": "Schimbarea selectat opacitate element"},
-{"id": "tool_open", "textContent": "Imagine deschisă"},
-{"id": "tool_path", "title": "Unealta de Path"},
-{"id": "tool_rect", "title": "Dreptunghi"},
-{"id": "tool_redo", "title": "Refacere"},
-{"id": "tool_reorient", "title": "Reorienteaza Traiectoria"},
-{"id": "tool_save", "textContent": "Salvare Imagine"},
-{"id": "tool_select", "title": "Unealta de Selectare"},
-{"id": "tool_source", "title": "Editare Cod Sursa"},
-{"id": "tool_source_cancel", "textContent": "Anulaţi"},
-{"id": "tool_source_save", "textContent": "Folositi Schimbarile"},
-{"id": "tool_square", "title": "Pătrat"},
-{"id": "tool_text", "title": "Unealta de Text"},
-{"id": "tool_topath", "title": "Converteste in Traiectorie"},
-{"id": "tool_undo", "title": "Anulare"},
-{"id": "tool_ungroup", "title": "Anulare Grupare Elemente"},
-{"id": "tool_wireframe", "title": "Mod Schelet"},
-{"id": "tool_zoom", "title": "Unealta de Zoom"},
-{"id": "url_notice", "title": "NOTE: Aceasta imagine nu poate fi inglobata. Va depinde de aceasta traiectorie pentru a fi prezentata."},
-{"id": "zoom_panel", "title": "Schimbarea nivelului de zoom"},
-{"id": "sidepanel_handle", "textContent": "S t r a t u r i", "title": "Trage stanga/dreapta pentru redimensionare panou lateral"},
-{
- "js_strings": {
- "QerrorsRevertToSource": "Sunt erori de parsing in sursa SVG.\nRevenire la sursa SVG orginala?",
- "QignoreSourceChanges": "Ignorati schimbarile la sursa SVG?",
- "QmoveElemsToLayer": "Mutati elementele selectate pe stratul '%s'?",
- "QwantToClear": "Doriti sa stergeti desenul?\nAceasta va sterge si posibilitatea de anulare!",
- "cancel": "Revocare",
- "defsFailOnSave": "NOTE: Din cauza unei erori in browserul dv., aceasta imagine poate apare gresit (fara gradiente sau elemente). Insa va apare corect dupa salvare.",
- "dupeLayerName": "Deja exista un strat numis asa!",
- "enterNewImgURL": "Introduceti noul URL pentru Imagine",
- "enterNewLayerName": "Rog introduceti un nume pentru strat",
- "enterUniqueLayerName": "Rog introduceti un nume unic",
- "exportNoBlur": "Elementele estompate vor apare ne-estompate",
- "exportNoDashArray": "Contururile vor apare pline",
- "exportNoImage": "Elementele de imagine nu vor apare",
- "exportNoText": "Posibil ca textul sa nu apara conform asteptarilor",
- "exportNoforeignObject": "Elementele foreignObject nu vor apare",
- "featNotSupported": "Functie neimplementata",
- "invalidAttrValGiven": "Valoarea data nu este valida",
- "key_backspace": "backspace",
- "key_del": "stergere",
- "key_down": "jos",
- "key_up": "sus",
- "layer": "Strat",
- "layerHasThatName": "Statul deja are acest nume",
- "loadingImage": "Imaginea se incarca, va rugam asteptati...",
- "noContentToFitTo": "Fara continut de referinta",
- "noteTheseIssues": "De asemeni remarcati urmatoarele probleme: ",
- "ok": "OK",
- "pathCtrlPtTooltip": "Trage de punctul de control pt. a-i schimba proprietatile",
- "pathNodeTooltip": "Trage de punct pentru a-l muta. Dublu-clic pentru schimbarea tipului de segment",
- "saveFromBrowser": "Selecteaza \"Salvea ca si...\" in browserul dv. pt. a salva aceasta imafine ca si fisier %s."
- }
-}
-] \ No newline at end of file
diff --git a/files_svgedit/js/locale/lang.ru.js b/files_svgedit/js/locale/lang.ru.js
deleted file mode 100644
index f5c9f2146..000000000
--- a/files_svgedit/js/locale/lang.ru.js
+++ /dev/null
@@ -1,176 +0,0 @@
-[
-{"id": "align_relative_to", "title": "Выровнять по отношению к ..."},
-{"id": "bkgnd_color", "title": "Изменить цвет фона или прозрачность"},
-{"id": "circle_cx", "title": "Изменить горизонтальный координат (CX) окружности"},
-{"id": "circle_cy", "title": "Изменить вертикальный координат (CY) окружности"},
-{"id": "circle_r", "title": "Изменить радиус окружности"},
-{"id": "connector_no_arrow", "textContent": "No arrow"},
-{"id": "copyrightLabel", "textContent": "Powered by"},
-{"id": "cornerRadiusLabel", "title": "Изменить радиус скругления углов прямоугольника"},
-{"id": "cornerRadiusLabel", "title": "Радиус закругленности угла"},
-{"id": "curve_segments", "textContent": "Сплайн"},
-{"id": "ellipse_cx", "title": "Изменить горизонтальный координат (CX) эллипса"},
-{"id": "ellipse_cy", "title": "Изменить вертикальный координат (CY) эллипса"},
-{"id": "ellipse_rx", "title": "Изменить горизонтальный радиус эллипса"},
-{"id": "ellipse_ry", "title": "Изменить вертикальный радиус эллипса"},
-{"id": "fill_color", "title": "Изменить цвет заливки"},
-{"id": "fitToContent", "textContent": "Под размер содержимого"},
-{"id": "fit_to_all", "textContent": "Под размер всех слоев"},
-{"id": "fit_to_canvas", "textContent": "Под размер холста"},
-{"id": "fit_to_layer_content", "textContent": "Под размер содержания слоя"},
-{"id": "fit_to_sel", "textContent": "Под размер выделенного"},
-{"id": "font_family", "title": "Изменить семейство шрифтов"},
-{"id": "icon_large", "textContent": "Большие"},
-{"id": "icon_medium", "textContent": "Средние"},
-{"id": "icon_small", "textContent": "Малые"},
-{"id": "icon_xlarge", "textContent": "Огромные"},
-{"id": "image_height", "title": "Изменить высоту изображения"},
-{"id": "image_opt_embed", "textContent": "Локальные файлы"},
-{"id": "image_opt_ref", "textContent": "По ссылкам"},
-{"id": "image_url", "title": "Изменить URL"},
-{"id": "image_width", "title": "Изменить ширину изображения"},
-{"id": "includedImages", "textContent": "Встроенные изображения"},
-{"id": "largest_object", "textContent": "Наибольший объект"},
-{"id": "layer_delete", "title": "Удалить слой"},
-{"id": "layer_down", "title": "Опустить слой"},
-{"id": "layer_new", "title": "Создать слой"},
-{"id": "layer_rename", "title": "Переименовать Слой"},
-{"id": "layer_up", "title": "Поднять слой"},
-{"id": "layersLabel", "textContent": "Слои:"},
-{"id": "line_x1", "title": "Изменить горизонтальный координат X начальной точки линии"},
-{"id": "line_x2", "title": "Изменить горизонтальный координат X конечной точки линии"},
-{"id": "line_y1", "title": "Изменить вертикальный координат Y начальной точки линии"},
-{"id": "line_y2", "title": "Изменить вертикальный координат Y конечной точки линии"},
-{"id": "linecap_butt", "title": "Linecap: Butt"},
-{"id": "linecap_round", "title": "Linecap: Round"},
-{"id": "linecap_square", "title": "Linecap: Square"},
-{"id": "linejoin_bevel", "title": "Linejoin: Bevel"},
-{"id": "linejoin_miter", "title": "Linejoin: Miter"},
-{"id": "linejoin_round", "title": "Linejoin: Round"},
-{"id": "main_icon", "title": "Main Menu"},
-{"id": "mode_connect", "title": "Connect two objects"},
-{"id": "page", "textContent": "страница"},
-{"id": "palette", "title": "Нажмите для изменения цвета заливки, Shift-Click изменить цвета обводки"},
-{"id": "path_node_x", "title": "Изменить горизонтальную координату узла"},
-{"id": "path_node_y", "title": "Изменить вертикальную координату узла"},
-{"id": "rect_height_tool", "title": "Изменениe высоту прямоугольника"},
-{"id": "rect_width_tool", "title": "Измененить ширину прямоугольника"},
-{"id": "relativeToLabel", "textContent": "По отношению к "},
-{"id": "seg_type", "title": "Изменить вид"},
-{"id": "selLayerLabel", "textContent": "Переместить выделенные элементы:"},
-{"id": "selLayerNames", "title": "Переместить выделенные элементы на другой слой"},
-{"id": "selectedPredefined", "textContent": "Выбирать предопределенный размер"},
-{"id": "selected_objects", "textContent": "Выделенные объекты"},
-{"id": "selected_x", "title": "Изменить горизонтальный координат"},
-{"id": "selected_y", "title": "Изменить вертикальный координат"},
-{"id": "smallest_object", "textContent": "Самый маленький объект"},
-{"id": "straight_segments", "textContent": "Отрезок"},
-{"id": "stroke_color", "title": "Изменить цвет обводки"},
-{"id": "stroke_style", "title": "Изменить стиль обводки"},
-{"id": "stroke_width", "title": "Изменить толщину обводки"},
-{"id": "svginfo_bg_note", "textContent": "(Фон не сохранится вместе с изображением.)"},
-{"id": "svginfo_change_background", "textContent": "Фон"},
-{"id": "svginfo_dim", "textContent": "Размеры холста"},
-{"id": "svginfo_editor_prefs", "textContent": "Параметры"},
-{"id": "svginfo_height", "textContent": "Высота:"},
-{"id": "svginfo_icons", "textContent": "Размер значков"},
-{"id": "svginfo_image_props", "textContent": "Свойства изображения"},
-{"id": "svginfo_lang", "textContent": "Язык"},
-{"id": "svginfo_title", "textContent": "Название"},
-{"id": "svginfo_width", "textContent": "Ширина:"},
-{"id": "text", "title": "Изменить содержание текста"},
-{"id": "toggle_stroke_tools", "title": "Show/hide more stroke tools"},
-{"id": "tool_add_subpath", "title": "Add sub-path"},
-{"id": "tool_alignbottom", "title": "Выровнять по нижнему краю"},
-{"id": "tool_aligncenter", "title": "Центрировать по вертикальной оси"},
-{"id": "tool_alignleft", "title": "По левому краю"},
-{"id": "tool_alignmiddle", "title": "Центрировать по горизонтальной оси"},
-{"id": "tool_alignright", "title": "По правому краю"},
-{"id": "tool_aligntop", "title": "Выровнять по верхнему краю"},
-{"id": "tool_angle", "title": "Изменить угол поворота"},
-{"id": "tool_blur", "title": "Change gaussian blur value"},
-{"id": "tool_bold", "title": "Жирный"},
-{"id": "tool_circle", "title": "Окружность"},
-{"id": "tool_clear", "textContent": "Создать изображение"},
-{"id": "tool_clone", "title": "Создать копию элемента"},
-{"id": "tool_clone_multi", "title": "Создать копию элементов"},
-{"id": "tool_delete", "title": "Удалить элемент"},
-{"id": "tool_delete_multi", "title": "Удалить выбранные элементы"},
-{"id": "tool_docprops", "textContent": "Свойства документа"},
-{"id": "tool_docprops_cancel", "textContent": "Отменить"},
-{"id": "tool_docprops_save", "textContent": "Сохранить"},
-{"id": "tool_ellipse", "title": "Эллипс"},
-{"id": "tool_export", "textContent": "Export as PNG"},
-{"id": "tool_eyedropper", "title": "Eye Dropper Tool"},
-{"id": "tool_fhellipse", "title": "Эллипс от руки"},
-{"id": "tool_fhpath", "title": "Карандаш"},
-{"id": "tool_fhrect", "title": "Прямоугольник от руки"},
-{"id": "tool_font_size", "title": "Изменить размер шрифта"},
-{"id": "tool_group", "title": "Создать группу элементов"},
-{"id": "tool_image", "title": "Изображение"},
-{"id": "tool_import", "textContent": "Import SVG"},
-{"id": "tool_italic", "title": "Курсив"},
-{"id": "tool_line", "title": "Линия"},
-{"id": "tool_move_bottom", "title": "Опустить"},
-{"id": "tool_move_top", "title": "Поднять"},
-{"id": "tool_node_clone", "title": "Создать копию узла"},
-{"id": "tool_node_delete", "title": "Удалить узел"},
-{"id": "tool_node_link", "title": "Связать узлы"},
-{"id": "tool_opacity", "title": "Изменить непрозрачность элемента"},
-{"id": "tool_open", "textContent": "Открыть изображение"},
-{"id": "tool_path", "title": "Контуры"},
-{"id": "tool_rect", "title": "Прямоугольник"},
-{"id": "tool_redo", "title": "Вернуть"},
-{"id": "tool_reorient", "title": "Изменить ориентацию контура"},
-{"id": "tool_save", "textContent": "Сохранить изображение"},
-{"id": "tool_select", "title": "Выделить"},
-{"id": "tool_source", "title": "Редактировать исходный код"},
-{"id": "tool_source_cancel", "textContent": "Отменить"},
-{"id": "tool_source_save", "textContent": "Сохранить"},
-{"id": "tool_square", "title": "Квадрат"},
-{"id": "tool_text", "title": "Текст"},
-{"id": "tool_topath", "title": "В контур"},
-{"id": "tool_undo", "title": "Отменить"},
-{"id": "tool_ungroup", "title": "Разгруппировать элементы"},
-{"id": "tool_wireframe", "title": "Каркас"},
-{"id": "tool_zoom", "title": "Лупа"},
-{"id": "tools_ellipse_show", "title": "Эллипс / окружность"},
-{"id": "tools_rect_show", "title": "Прямоугольник / квадрат"},
-{"id": "url_notice", "title": "NOTE: This image cannot be embedded. It will depend on this path to be displayed"},
-{"id": "zoom_panel", "title": "Изменить масштаб"},
-{"id": "sidepanel_handle", "textContent": "С л о и", "title": "Перетащить налево или направо"},
-{
- "js_strings": {
- "QerrorsRevertToSource": "Была проблема при парсинге вашего SVG исходного кода.\nЗаменить его предыдущим SVG кодом?",
- "QignoreSourceChanges": "Забыть без сохранения?",
- "QmoveElemsToLayer": "Переместить выделенные элементы на слой '%s'?",
- "QwantToClear": "Вы хотите очистить?\nИстория действий будет забыта!",
- "cancel": "Отменить",
- "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.",
- "dupeLayerName": "Слой с этим именем уже существует.",
- "enterNewImgURL": "Введите новый URL изображения",
- "enterNewLayerName": "Пожалуйста, введите новое имя.",
- "enterUniqueLayerName": "Пожалуйста, введите имя для слоя.",
- "exportNoBlur": "Blurred elements will appear as un-blurred",
- "exportNoDashArray": "Strokes will appear filled",
- "exportNoImage": "Image elements will not appear",
- "exportNoText": "Text may not appear as expected",
- "exportNoforeignObject": "foreignObject elements will not appear",
- "featNotSupported": "Возможность не реализована",
- "invalidAttrValGiven": "Некорректное значение аргумента",
- "key_backspace": "Backspace",
- "key_del": "Delete",
- "key_down": "Вниз",
- "key_up": "Вверх",
- "layer": "Слой",
- "layerHasThatName": "Слой уже называется этим именем.",
- "loadingImage": "Loading image, please wait...",
- "noContentToFitTo": "Нет содержания, по которому выровнять.",
- "noteTheseIssues": "Also note the following issues: ",
- "ok": "OK",
- "pathCtrlPtTooltip": "Перетащите для изменения свойвст кривой",
- "pathNodeTooltip": "Потащите узел. Чтобы изменить вид отрезка, сделайте двойной щелчок.",
- "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file."
- }
-}
-] \ No newline at end of file
diff --git a/files_svgedit/js/locale/lang.sk.js b/files_svgedit/js/locale/lang.sk.js
deleted file mode 100644
index e15b65c2e..000000000
--- a/files_svgedit/js/locale/lang.sk.js
+++ /dev/null
@@ -1,176 +0,0 @@
-[
-{"id": "align_relative_to", "title": "Zarovnať relatívne k ..."},
-{"id": "bkgnd_color", "title": "Zmeniť farbu a priehľadnosť pozadia"},
-{"id": "circle_cx", "title": "Zmeniť súradnicu X stredu kružnice"},
-{"id": "circle_cy", "title": "Zmeniť súradnicu Y stredu kružnice"},
-{"id": "circle_r", "title": "Zmeniť polomer kružnice"},
-{"id": "connector_no_arrow", "textContent": "Bez šípok"},
-{"id": "copyrightLabel", "textContent": "Beží na"},
-{"id": "cornerRadiusLabel", "title": "Zmeniť zaoblenie rohov obdĺžnika"},
-{"id": "curve_segments", "textContent": "Krivka"},
-{"id": "ellipse_cx", "title": "Zmeniť súradnicu X stredu elipsy"},
-{"id": "ellipse_cy", "title": "Zmeniť súradnicu Y stredu elipsy"},
-{"id": "ellipse_rx", "title": "Zmeniť polomer X elipsy"},
-{"id": "ellipse_ry", "title": "Zmeniť polomer Y elipsy"},
-{"id": "fill_color", "title": "Zmeniť farbu výplne"},
-{"id": "fitToContent", "textContent": "Prispôsobiť obsahu"},
-{"id": "fit_to_all", "textContent": "Prisposobiť celému obsahu"},
-{"id": "fit_to_canvas", "textContent": "Prispôsobiť stránke"},
-{"id": "fit_to_layer_content", "textContent": "Prispôsobiť obsahu vrstvy"},
-{"id": "fit_to_sel", "textContent": "Prispôsobiť výberu"},
-{"id": "font_family", "title": "Zmeniť font"},
-{"id": "icon_large", "textContent": "Veľká"},
-{"id": "icon_medium", "textContent": "Stredná"},
-{"id": "icon_small", "textContent": "Malá"},
-{"id": "icon_xlarge", "textContent": "Extra veľká"},
-{"id": "idLabel", "title": "Zmeniť ID elementu"},
-{"id": "image_height", "title": "Zmeniť výšku obrázka"},
-{"id": "image_opt_embed", "textContent": "Vložiť data (lokálne súbory)"},
-{"id": "image_opt_ref", "textContent": "Použiť referenciu na súbor"},
-{"id": "image_url", "title": "Zmeniť URL"},
-{"id": "image_width", "title": "Zmeniť šírku obrázka"},
-{"id": "includedImages", "textContent": "Vložené obrázky"},
-{"id": "largest_object", "textContent": "najväčšiemu objektu"},
-{"id": "layer_delete", "title": "Odstrániť vrstvu"},
-{"id": "layer_down", "title": "Presunúť vrstvu dole"},
-{"id": "layer_new", "title": "Nová vrstva"},
-{"id": "layer_rename", "title": "Premenovať vrstvu"},
-{"id": "layer_up", "title": "Presunúť vrstvu hore"},
-{"id": "layersLabel", "textContent": "Vrstvy:"},
-{"id": "line_x1", "title": "Zmeniť počiatočnú súradnicu X čiary"},
-{"id": "line_x2", "title": "Zmeniť koncovú súradnicu X čiary"},
-{"id": "line_y1", "title": "Zmeniť počiatočnú súradnicu Y čiary"},
-{"id": "line_y2", "title": "Zmeniť koncovú súradnicu Y čiary"},
-{"id": "linecap_butt", "title": "Koniec čiary: presný"},
-{"id": "linecap_round", "title": "Koniec čiary: zaoblený"},
-{"id": "linecap_square", "title": "Koniec čiary: so štvorcovým presahom"},
-{"id": "linejoin_bevel", "title": "Napojenie čiar: skosené"},
-{"id": "linejoin_miter", "title": "Napojenie čiar: ostré"},
-{"id": "linejoin_round", "title": "Napojenie čiar: oblé"},
-{"id": "main_icon", "title": "Hlavné menu"},
-{"id": "mode_connect", "title": "Spojiť dva objekty"},
-{"id": "page", "textContent": "stránke"},
-{"id": "palette", "title": "Kliknutím zmeníte farbu výplne, so Shiftom zmeníte farbu obrysu"},
-{"id": "path_node_x", "title": "Zmeniť uzlu súradnicu X"},
-{"id": "path_node_y", "title": "Zmeniť uzlu súradnicu Y"},
-{"id": "rect_height_tool", "title": "Zmena výšku obdĺžnika"},
-{"id": "rect_width_tool", "title": "Zmeniť šírku obdĺžnika"},
-{"id": "relativeToLabel", "textContent": "vzhľadom k:"},
-{"id": "seg_type", "title": "Zmeniť typ segmentu"},
-{"id": "selLayerLabel", "textContent": "Presunút elementy do:"},
-{"id": "selLayerNames", "title": "Presunúť vybrané elementy do inej vrstvy"},
-{"id": "selectedPredefined", "textContent": "Vybrať preddefinovaný:"},
-{"id": "selected_objects", "textContent": "zvoleným objektom"},
-{"id": "selected_x", "title": "Zmeniť súradnicu X"},
-{"id": "selected_y", "title": "Zmeniť súradnicu Y"},
-{"id": "smallest_object", "textContent": "najmenšiemu objektu"},
-{"id": "straight_segments", "textContent": "Rovný"},
-{"id": "stroke_color", "title": "Zmena farby obrysu"},
-{"id": "stroke_style", "title": "Zmeniť štýl obrysu"},
-{"id": "stroke_width", "title": "Zmeniť šírku obrysu"},
-{"id": "svginfo_bg_note", "textContent": "Poznámka: Pozadie nebude uložené spolu s obrázkom."},
-{"id": "svginfo_change_background", "textContent": "Zmeniť pozadie"},
-{"id": "svginfo_dim", "textContent": "Rozmery plátna"},
-{"id": "svginfo_editor_prefs", "textContent": "Vlastnosti editora"},
-{"id": "svginfo_height", "textContent": "Výška:"},
-{"id": "svginfo_icons", "textContent": "Veľkosť ikon"},
-{"id": "svginfo_image_props", "textContent": "Vlastnosti obrázka"},
-{"id": "svginfo_lang", "textContent": "Jazyk"},
-{"id": "svginfo_title", "textContent": "Titulok"},
-{"id": "svginfo_width", "textContent": "Šírka:"},
-{"id": "text", "title": "Změnit text"},
-{"id": "toggle_stroke_tools", "title": "Skryť/ukázať viac nástrojov pre krivku"},
-{"id": "tool_add_subpath", "title": "Pridať daľšiu súčasť krivky"},
-{"id": "tool_alignbottom", "title": "Zarovnať dole"},
-{"id": "tool_aligncenter", "title": "Zarovnať na stred"},
-{"id": "tool_alignleft", "title": "Zarovnať doľava"},
-{"id": "tool_alignmiddle", "title": "Zarovnať na stred"},
-{"id": "tool_alignright", "title": "Zarovnať doprava"},
-{"id": "tool_aligntop", "title": "Zarovnať hore"},
-{"id": "tool_angle", "title": "Zmeniť uhol natočenia"},
-{"id": "tool_blur", "title": "Zmeniť intenzitu rozmazania"},
-{"id": "tool_bold", "title": "Tučne"},
-{"id": "tool_circle", "title": "Kružnica"},
-{"id": "tool_clear", "textContent": "Nový obrázok"},
-{"id": "tool_clone", "title": "Klonovať element"},
-{"id": "tool_clone_multi", "title": "Klonovať elementy"},
-{"id": "tool_delete", "title": "Zmazať element"},
-{"id": "tool_delete_multi", "title": "Vymazať vybrané prvky [Delete/Backspace]"},
-{"id": "tool_docprops", "textContent": "Vlastnosti dokumentu"},
-{"id": "tool_docprops_cancel", "textContent": "Zrušiť"},
-{"id": "tool_docprops_save", "textContent": "Uložiť"},
-{"id": "tool_ellipse", "title": "Elipsa"},
-{"id": "tool_export", "textContent": "Exportovať ako PNG"},
-{"id": "tool_eyedropper", "title": "Pipeta"},
-{"id": "tool_fhellipse", "title": "Elipsa voľnou rukou"},
-{"id": "tool_fhpath", "title": "Ceruzka"},
-{"id": "tool_fhrect", "title": "Obdĺžnik voľnou rukou"},
-{"id": "tool_font_size", "title": "Zmeniť veľkosť písma"},
-{"id": "tool_group", "title": "Zoskupiť elementy"},
-{"id": "tool_image", "title": "Obrázok"},
-{"id": "tool_import", "textContent": "Import SVG"},
-{"id": "tool_italic", "title": "Kurzíva"},
-{"id": "tool_line", "title": "Čiara"},
-{"id": "tool_move_bottom", "title": "Presunúť spodok"},
-{"id": "tool_move_top", "title": "Presunúť na vrch"},
-{"id": "tool_node_clone", "title": "Klonovať uzol"},
-{"id": "tool_node_delete", "title": "Zmazať uzol"},
-{"id": "tool_node_link", "title": "Prepojiť kontrolné body"},
-{"id": "tool_opacity", "title": "Zmeniť prehľadnosť vybraných položiek"},
-{"id": "tool_open", "textContent": "Otvoriť obrázok"},
-{"id": "tool_openclose_path", "title": "Otvoriť/uzatvoriť súčasť krivky"},
-{"id": "tool_path", "title": "Krivka"},
-{"id": "tool_position", "title": "Zarovnať element na stránku"},
-{"id": "tool_rect", "title": "Obdĺžnik"},
-{"id": "tool_redo", "title": "Opakovať"},
-{"id": "tool_reorient", "title": "Zmeniť orientáciu krivky"},
-{"id": "tool_save", "textContent": "Uložiť obrázok"},
-{"id": "tool_select", "title": "Výber"},
-{"id": "tool_source", "title": "Upraviť SVG kód"},
-{"id": "tool_source_cancel", "textContent": "Zrušiť"},
-{"id": "tool_source_save", "textContent": "Uložiť"},
-{"id": "tool_square", "title": "Štvorec"},
-{"id": "tool_text", "title": "Text"},
-{"id": "tool_topath", "title": "Previesť na krivku"},
-{"id": "tool_undo", "title": "Späť"},
-{"id": "tool_ungroup", "title": "Zrušiť skupinu"},
-{"id": "tool_wireframe", "title": "Drôtový model"},
-{"id": "tool_zoom", "title": "Priblíženie"},
-{"id": "url_notice", "title": "POZNÁMKA: Tento obrázok nemôže byť vložený. Jeho zobrazenie bude závisieť na jeho ceste"},
-{"id": "zoom_panel", "title": "Zmena priblíženia"},
-{"id": "sidepanel_handle", "textContent": "V r s t v y", "title": "Ťahajte vľavo/vpravo na zmenu veľkosti"},
-{
- "js_strings": {
- "QerrorsRevertToSource": "Chyba pri načítaní SVG dokumentu.\nVrátiť povodný SVG dokument?",
- "QignoreSourceChanges": "Ignorovať zmeny v SVG dokumente?",
- "QmoveElemsToLayer": "Presunúť elementy do vrstvy '%s'?",
- "QwantToClear": "Naozaj chcete vymazať kresbu?\n(História bude taktiež vymazaná!)!",
- "cancel": "Zrušiť",
- "defsFailOnSave": "POZNÁMKA: Kvôli chybe v prehliadači sa tento obrázok môže zobraziť nesprávne (napr. chýbajúce prechody či elementy). Po uložení sa zobrazí správne.",
- "dupeLayerName": "Vrstva s daným názvom už existuje!",
- "enterNewImgURL": "Zadajte nové URL obrázka",
- "enterNewLayerName": "Zadajte názov vrstvy",
- "enterUniqueLayerName": "Zadajte jedinečný názov vrstvy",
- "exportNoBlur": "bez rozostrenia elementov",
- "exportNoDashArray": "plné krivky",
- "exportNoImage": "bez vložených obrázkov",
- "exportNoText": "vložený text môže vyzerať inak",
- "exportNoforeignObject": "bez foreignObject objektov",
- "featNotSupported": "Vlastnosť nie je podporovaná",
- "invalidAttrValGiven": "Neplatná hodnota",
- "key_backspace": "Backspace",
- "key_del": "Delete",
- "key_down": "šípka dole",
- "key_up": "šípka hore",
- "layer": "Vrstva",
- "layerHasThatName": "Vrstva už má zadaný názov",
- "loadingImage": "Nahrávam obrázok, prosím čakajte ...",
- "noContentToFitTo": "Vyberte oblasť na prispôsobenie",
- "noteTheseIssues": "Môžu sa vyskytnúť nasledujúce problémy: ",
- "ok": "OK",
- "pathCtrlPtTooltip": "Ťahajte kontrolné body pre upravnie vlastnosti krivky",
- "pathNodeTooltip": "Ťahajte bod na presunutie. Dvojklik na zmenu typu segmentu",
- "saveFromBrowser": "Vyberte \"Uložiť ako ...\" vo vašom prehliadači na uloženie tohoto obrázka do súboru %s."
- }
-}
-]
diff --git a/files_svgedit/js/locale/lang.sl.js b/files_svgedit/js/locale/lang.sl.js
deleted file mode 100644
index 8711df285..000000000
--- a/files_svgedit/js/locale/lang.sl.js
+++ /dev/null
@@ -1,173 +0,0 @@
-[
-{"id": "align_relative_to", "title": "Poravnaj glede na ..."},
-{"id": "bkgnd_color", "title": "Spreminjanje barve ozadja / motnosti"},
-{"id": "circle_cx", "title": "Spremeni krog&#39;s CX usklajujejo"},
-{"id": "circle_cy", "title": "Spremeni krog&#39;s cy usklajujejo"},
-{"id": "circle_r", "title": "Spremeni krogu polmera"},
-{"id": "connector_no_arrow", "textContent": "No arrow"},
-{"id": "copyrightLabel", "textContent": "Powered by"},
-{"id": "cornerRadiusLabel", "title": "Spremeni Pravokotnik Corner Radius"},
-{"id": "curve_segments", "textContent": "Curve"},
-{"id": "ellipse_cx", "title": "Spremeni elipse&#39;s CX usklajujejo"},
-{"id": "ellipse_cy", "title": "Spremeni elipse&#39;s cy usklajujejo"},
-{"id": "ellipse_rx", "title": "Spremeni elipse&#39;s x polmer"},
-{"id": "ellipse_ry", "title": "Spremeni elipse&#39;s y polmer"},
-{"id": "fill_color", "title": "Spremeni barvo polnila"},
-{"id": "fitToContent", "textContent": "Fit to Content"},
-{"id": "fit_to_all", "textContent": "Fit na vse vsebine"},
-{"id": "fit_to_canvas", "textContent": "Fit na platno"},
-{"id": "fit_to_layer_content", "textContent": "Fit na plast vsebine"},
-{"id": "fit_to_sel", "textContent": "Fit za izbor"},
-{"id": "font_family", "title": "Change Font Family"},
-{"id": "icon_large", "textContent": "Large"},
-{"id": "icon_medium", "textContent": "Medium"},
-{"id": "icon_small", "textContent": "Small"},
-{"id": "icon_xlarge", "textContent": "Extra Large"},
-{"id": "image_height", "title": "Spremeni Višina slike"},
-{"id": "image_opt_embed", "textContent": "Embed data (local files)"},
-{"id": "image_opt_ref", "textContent": "Use file reference"},
-{"id": "image_url", "title": "Spremeni URL"},
-{"id": "image_width", "title": "Spremeni Širina slike"},
-{"id": "includedImages", "textContent": "Included Images"},
-{"id": "largest_object", "textContent": "Največji objekt"},
-{"id": "layer_delete", "title": "Delete Layer"},
-{"id": "layer_down", "title": "Move Down Layer"},
-{"id": "layer_new", "title": "New Layer"},
-{"id": "layer_rename", "title": "Rename Layer"},
-{"id": "layer_up", "title": "Move Up Layer"},
-{"id": "layersLabel", "textContent": "Plasti:"},
-{"id": "line_x1", "title": "Spremeni skladu z začetkom x usklajujejo"},
-{"id": "line_x2", "title": "Change line je končalo x usklajujejo"},
-{"id": "line_y1", "title": "Change line&#39;s začetkom y usklajujejo"},
-{"id": "line_y2", "title": "Change line je končalo y usklajujejo"},
-{"id": "linecap_butt", "title": "Linecap: Butt"},
-{"id": "linecap_round", "title": "Linecap: Round"},
-{"id": "linecap_square", "title": "Linecap: Square"},
-{"id": "linejoin_bevel", "title": "Linejoin: Bevel"},
-{"id": "linejoin_miter", "title": "Linejoin: Miter"},
-{"id": "linejoin_round", "title": "Linejoin: Round"},
-{"id": "main_icon", "title": "Main Menu"},
-{"id": "mode_connect", "title": "Connect two objects"},
-{"id": "page", "textContent": "page"},
-{"id": "palette", "title": "Kliknite, če želite spremeniti barvo polnila, premik miške kliknite spremeniti barvo kap"},
-{"id": "path_node_x", "title": "Change node's x coordinate"},
-{"id": "path_node_y", "title": "Change node's y coordinate"},
-{"id": "rect_height_tool", "title": "Spremeni pravokotniku višine"},
-{"id": "rect_width_tool", "title": "Spremeni pravokotnik širine"},
-{"id": "relativeToLabel", "textContent": "glede na:"},
-{"id": "seg_type", "title": "Change Segment type"},
-{"id": "selLayerLabel", "textContent": "Move elements to:"},
-{"id": "selLayerNames", "title": "Move selected elements to a different layer"},
-{"id": "selectedPredefined", "textContent": "Select vnaprej:"},
-{"id": "selected_objects", "textContent": "izvoljeni predmeti"},
-{"id": "selected_x", "title": "Change X coordinate"},
-{"id": "selected_y", "title": "Change Y coordinate"},
-{"id": "smallest_object", "textContent": "najmanjša objekt"},
-{"id": "straight_segments", "textContent": "Straight"},
-{"id": "stroke_color", "title": "Spremeni barvo kap"},
-{"id": "stroke_style", "title": "Spremeni kap dash slog"},
-{"id": "stroke_width", "title": "Spreminjanje širine kap"},
-{"id": "svginfo_bg_note", "textContent": "Note: Background will not be saved with image."},
-{"id": "svginfo_change_background", "textContent": "Editor Background"},
-{"id": "svginfo_dim", "textContent": "Canvas Dimensions"},
-{"id": "svginfo_editor_prefs", "textContent": "Editor Preferences"},
-{"id": "svginfo_height", "textContent": "Višina:"},
-{"id": "svginfo_icons", "textContent": "Icon size"},
-{"id": "svginfo_image_props", "textContent": "Image Properties"},
-{"id": "svginfo_lang", "textContent": "Language"},
-{"id": "svginfo_title", "textContent": "Title"},
-{"id": "svginfo_width", "textContent": "Širina:"},
-{"id": "text", "title": "Spremeni besedilo vsebino"},
-{"id": "toggle_stroke_tools", "title": "Show/hide more stroke tools"},
-{"id": "tool_add_subpath", "title": "Add sub-path"},
-{"id": "tool_alignbottom", "title": "Align Bottom"},
-{"id": "tool_aligncenter", "title": "Sredino"},
-{"id": "tool_alignleft", "title": "Poravnaj levo"},
-{"id": "tool_alignmiddle", "title": "Poravnava Middle"},
-{"id": "tool_alignright", "title": "Poravnaj desno"},
-{"id": "tool_aligntop", "title": "Poravnava Top"},
-{"id": "tool_angle", "title": "Sprememba kota rotacije"},
-{"id": "tool_blur", "title": "Change gaussian blur value"},
-{"id": "tool_bold", "title": "Bold Text"},
-{"id": "tool_circle", "title": "Circle"},
-{"id": "tool_clear", "textContent": "New Image"},
-{"id": "tool_clone", "title": "Clone Element"},
-{"id": "tool_clone_multi", "title": "Clone Elements"},
-{"id": "tool_delete", "title": "Izbriši element"},
-{"id": "tool_delete_multi", "title": "Brisanje izbranih elementov"},
-{"id": "tool_docprops", "textContent": "Document Properties"},
-{"id": "tool_docprops_cancel", "textContent": "Prekliči"},
-{"id": "tool_docprops_save", "textContent": "Shraniti"},
-{"id": "tool_ellipse", "title": "Elipsa"},
-{"id": "tool_export", "textContent": "Export as PNG"},
-{"id": "tool_eyedropper", "title": "Eye Dropper Tool"},
-{"id": "tool_fhellipse", "title": "Free-Hand Elipsa"},
-{"id": "tool_fhpath", "title": "Pencil Tool"},
-{"id": "tool_fhrect", "title": "Free-Hand pravokotnik"},
-{"id": "tool_font_size", "title": "Spremeni velikost pisave"},
-{"id": "tool_group", "title": "Skupina Elements"},
-{"id": "tool_image", "title": "Image Tool"},
-{"id": "tool_import", "textContent": "Import SVG"},
-{"id": "tool_italic", "title": "Italic Text"},
-{"id": "tool_line", "title": "Line Tool"},
-{"id": "tool_move_bottom", "title": "Premakni v Bottom"},
-{"id": "tool_move_top", "title": "Premakni na vrh"},
-{"id": "tool_node_clone", "title": "Clone Node"},
-{"id": "tool_node_delete", "title": "Delete Node"},
-{"id": "tool_node_link", "title": "Link Control Points"},
-{"id": "tool_opacity", "title": "Spremeni izbran predmet motnosti"},
-{"id": "tool_open", "textContent": "Open Image"},
-{"id": "tool_path", "title": "Path Tool"},
-{"id": "tool_rect", "title": "Pravokotnik"},
-{"id": "tool_redo", "title": "Redo"},
-{"id": "tool_reorient", "title": "Reorient path"},
-{"id": "tool_save", "textContent": "Shrani slike"},
-{"id": "tool_select", "title": "Select Tool"},
-{"id": "tool_source", "title": "Edit Vir"},
-{"id": "tool_source_cancel", "textContent": "Prekliči"},
-{"id": "tool_source_save", "textContent": "Shraniti"},
-{"id": "tool_square", "title": "Kvadrat"},
-{"id": "tool_text", "title": "Text Tool"},
-{"id": "tool_topath", "title": "Convert to Path"},
-{"id": "tool_undo", "title": "Undo"},
-{"id": "tool_ungroup", "title": "Razdruži Elements"},
-{"id": "tool_wireframe", "title": "Wireframe Mode"},
-{"id": "tool_zoom", "title": "Zoom Tool"},
-{"id": "url_notice", "title": "NOTE: This image cannot be embedded. It will depend on this path to be displayed"},
-{"id": "zoom_panel", "title": "Spreminjanje povečave"},
-{"id": "sidepanel_handle", "textContent": "L a y e r s", "title": "Drag left/right to resize side panel"},
-{
- "js_strings": {
- "QerrorsRevertToSource": "There were parsing errors in your SVG source.\nRevert back to original SVG source?",
- "QignoreSourceChanges": "Ignore changes made to SVG source?",
- "QmoveElemsToLayer": "Move selected elements to layer '%s'?",
- "QwantToClear": "Do you want to clear the drawing?\nThis will also erase your undo history!",
- "cancel": "Cancel",
- "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.",
- "dupeLayerName": "There is already a layer named that!",
- "enterNewImgURL": "Enter the new image URL",
- "enterNewLayerName": "Please enter the new layer name",
- "enterUniqueLayerName": "Please enter a unique layer name",
- "exportNoBlur": "Blurred elements will appear as un-blurred",
- "exportNoDashArray": "Strokes will appear filled",
- "exportNoImage": "Image elements will not appear",
- "exportNoText": "Text may not appear as expected",
- "exportNoforeignObject": "foreignObject elements will not appear",
- "featNotSupported": "Feature not supported",
- "invalidAttrValGiven": "Invalid value given",
- "key_backspace": "backspace",
- "key_del": "delete",
- "key_down": "down",
- "key_up": "up",
- "layer": "Layer",
- "layerHasThatName": "Layer already has that name",
- "loadingImage": "Loading image, please wait...",
- "noContentToFitTo": "No content to fit to",
- "noteTheseIssues": "Also note the following issues: ",
- "ok": "OK",
- "pathCtrlPtTooltip": "Drag control point to adjust curve properties",
- "pathNodeTooltip": "Drag node to move it. Double-click node to change segment type",
- "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file."
- }
-}
-] \ No newline at end of file
diff --git a/files_svgedit/js/locale/lang.sq.js b/files_svgedit/js/locale/lang.sq.js
deleted file mode 100644
index 0e1ba6594..000000000
--- a/files_svgedit/js/locale/lang.sq.js
+++ /dev/null
@@ -1,173 +0,0 @@
-[
-{"id": "align_relative_to", "title": "Vendose në lidhje me ..."},
-{"id": "bkgnd_color", "title": "Change color background / patejdukshmëri"},
-{"id": "circle_cx", "title": "Cx rrethi Ndryshimi i bashkërenduar"},
-{"id": "circle_cy", "title": "Ndryshimi i rrethit cy koordinuar"},
-{"id": "circle_r", "title": "Rreze rreth Ndryshimi i"},
-{"id": "connector_no_arrow", "textContent": "No arrow"},
-{"id": "copyrightLabel", "textContent": "Powered by"},
-{"id": "cornerRadiusLabel", "title": "Ndryshimi Rectangle Corner Radius"},
-{"id": "curve_segments", "textContent": "Curve"},
-{"id": "ellipse_cx", "title": "Ndryshimi elips e cx koordinuar"},
-{"id": "ellipse_cy", "title": "Elips cy Ndryshimi i bashkërenduar"},
-{"id": "ellipse_rx", "title": "Rreze x elips Ndryshimi i"},
-{"id": "ellipse_ry", "title": "Radiusi y elips ndërroj"},
-{"id": "fill_color", "title": "Ndryshimi mbush color"},
-{"id": "fitToContent", "textContent": "Fit to Content"},
-{"id": "fit_to_all", "textContent": "Fit për të gjithë përmbajtjen"},
-{"id": "fit_to_canvas", "textContent": "Fit në kanavacë"},
-{"id": "fit_to_layer_content", "textContent": "Shtresë Fit to content"},
-{"id": "fit_to_sel", "textContent": "Fit to Selection"},
-{"id": "font_family", "title": "Ndryshimi Font Family"},
-{"id": "icon_large", "textContent": "Large"},
-{"id": "icon_medium", "textContent": "Medium"},
-{"id": "icon_small", "textContent": "Small"},
-{"id": "icon_xlarge", "textContent": "Extra Large"},
-{"id": "image_height", "title": "Height të ndryshuar imazhin"},
-{"id": "image_opt_embed", "textContent": "Embed data (local files)"},
-{"id": "image_opt_ref", "textContent": "Use file reference"},
-{"id": "image_url", "title": "Ndrysho URL"},
-{"id": "image_width", "title": "Ndryshimi image width"},
-{"id": "includedImages", "textContent": "Included Images"},
-{"id": "largest_object", "textContent": "madh objekt"},
-{"id": "layer_delete", "title": "Delete Layer"},
-{"id": "layer_down", "title": "Move Down Layer"},
-{"id": "layer_new", "title": "Re Shtresa"},
-{"id": "layer_rename", "title": "Rename Layer"},
-{"id": "layer_up", "title": "Move Up Layer"},
-{"id": "layersLabel", "textContent": "Shtresa:"},
-{"id": "line_x1", "title": "Shkarko Ndryshimi që fillon x koordinuar"},
-{"id": "line_x2", "title": "Linjë Ndryshimi i fund x koordinuar"},
-{"id": "line_y1", "title": "Shkarko Ndryshimi që fillon y koordinuar"},
-{"id": "line_y2", "title": "Shkarko Ndryshimi i dhënë fund y koordinuar"},
-{"id": "linecap_butt", "title": "Linecap: Butt"},
-{"id": "linecap_round", "title": "Linecap: Round"},
-{"id": "linecap_square", "title": "Linecap: Square"},
-{"id": "linejoin_bevel", "title": "Linejoin: Bevel"},
-{"id": "linejoin_miter", "title": "Linejoin: Miter"},
-{"id": "linejoin_round", "title": "Linejoin: Round"},
-{"id": "main_icon", "title": "Main Menu"},
-{"id": "mode_connect", "title": "Connect two objects"},
-{"id": "page", "textContent": "faqe"},
-{"id": "palette", "title": "Klikoni për të ndryshuar mbushur me ngjyra, shift-klikoni për të ndryshuar ngjyrën pash"},
-{"id": "path_node_x", "title": "Change node's x coordinate"},
-{"id": "path_node_y", "title": "Change node's y coordinate"},
-{"id": "rect_height_tool", "title": "Height Ndryshimi drejtkëndësh"},
-{"id": "rect_width_tool", "title": "Width Ndryshimi drejtkëndësh"},
-{"id": "relativeToLabel", "textContent": "lidhje me:"},
-{"id": "seg_type", "title": "Change Segment type"},
-{"id": "selLayerLabel", "textContent": "Move elements to:"},
-{"id": "selLayerNames", "title": "Move selected elements to a different layer"},
-{"id": "selectedPredefined", "textContent": "Zgjidhni paracaktuara:"},
-{"id": "selected_objects", "textContent": "objektet e zgjedhur"},
-{"id": "selected_x", "title": "Change X coordinate"},
-{"id": "selected_y", "title": "Change Y coordinate"},
-{"id": "smallest_object", "textContent": "objektit më të vogël"},
-{"id": "straight_segments", "textContent": "Straight"},
-{"id": "stroke_color", "title": "Change color pash"},
-{"id": "stroke_style", "title": "Ndryshimi dash goditje stil"},
-{"id": "stroke_width", "title": "Ndryshimi goditje width"},
-{"id": "svginfo_bg_note", "textContent": "Note: Background will not be saved with image."},
-{"id": "svginfo_change_background", "textContent": "Editor Background"},
-{"id": "svginfo_dim", "textContent": "Canvas Dimensions"},
-{"id": "svginfo_editor_prefs", "textContent": "Editor Preferences"},
-{"id": "svginfo_height", "textContent": "Lartësia:"},
-{"id": "svginfo_icons", "textContent": "Icon size"},
-{"id": "svginfo_image_props", "textContent": "Image Properties"},
-{"id": "svginfo_lang", "textContent": "Language"},
-{"id": "svginfo_title", "textContent": "Title"},
-{"id": "svginfo_width", "textContent": "Gjerësia:"},
-{"id": "text", "title": "Text contents Ndryshimi"},
-{"id": "toggle_stroke_tools", "title": "Show/hide more stroke tools"},
-{"id": "tool_add_subpath", "title": "Add sub-path"},
-{"id": "tool_alignbottom", "title": "Align Bottom"},
-{"id": "tool_aligncenter", "title": "Align Center"},
-{"id": "tool_alignleft", "title": "Align Left"},
-{"id": "tool_alignmiddle", "title": "Align Mesme"},
-{"id": "tool_alignright", "title": "Align Right"},
-{"id": "tool_aligntop", "title": "Align Top"},
-{"id": "tool_angle", "title": "Kënd Ndryshimi rrotullim"},
-{"id": "tool_blur", "title": "Change gaussian blur value"},
-{"id": "tool_bold", "title": "Bold Text"},
-{"id": "tool_circle", "title": "Rrethi"},
-{"id": "tool_clear", "textContent": "New Image"},
-{"id": "tool_clone", "title": "Klon Element"},
-{"id": "tool_clone_multi", "title": "Elemente Clone"},
-{"id": "tool_delete", "title": "Fshije Element"},
-{"id": "tool_delete_multi", "title": "Elementet e zgjedhur është dhënë Delete [Delete/Backspace]"},
-{"id": "tool_docprops", "textContent": "Dokumenti Prona"},
-{"id": "tool_docprops_cancel", "textContent": "Anulo"},
-{"id": "tool_docprops_save", "textContent": "Ruaj"},
-{"id": "tool_ellipse", "title": "Elips"},
-{"id": "tool_export", "textContent": "Export as PNG"},
-{"id": "tool_eyedropper", "title": "Eye Dropper Tool"},
-{"id": "tool_fhellipse", "title": "Free-Hand Ellipse"},
-{"id": "tool_fhpath", "title": "Pencil Tool"},
-{"id": "tool_fhrect", "title": "Lëndë Hand Rectangle"},
-{"id": "tool_font_size", "title": "Ndryshimi Font Size"},
-{"id": "tool_group", "title": "Elementet e Grupit"},
-{"id": "tool_image", "title": "Image Tool"},
-{"id": "tool_import", "textContent": "Import SVG"},
-{"id": "tool_italic", "title": "Italic Text"},
-{"id": "tool_line", "title": "Line Tool"},
-{"id": "tool_move_bottom", "title": "Move to Bottom"},
-{"id": "tool_move_top", "title": "Move to Top"},
-{"id": "tool_node_clone", "title": "Clone Node"},
-{"id": "tool_node_delete", "title": "Delete Node"},
-{"id": "tool_node_link", "title": "Link Control Points"},
-{"id": "tool_opacity", "title": "Ndryshimi zgjedhur errësirë item"},
-{"id": "tool_open", "textContent": "Image Hapur"},
-{"id": "tool_path", "title": "Path Tool"},
-{"id": "tool_rect", "title": "Drejtkëndësh"},
-{"id": "tool_redo", "title": "Redo"},
-{"id": "tool_reorient", "title": "Reorient path"},
-{"id": "tool_save", "textContent": "Image Ruaj"},
-{"id": "tool_select", "title": "Zgjidhni Tool"},
-{"id": "tool_source", "title": "Burimi Edit"},
-{"id": "tool_source_cancel", "textContent": "Anulo"},
-{"id": "tool_source_save", "textContent": "Ruaj"},
-{"id": "tool_square", "title": "Sheshi"},
-{"id": "tool_text", "title": "Text Tool"},
-{"id": "tool_topath", "title": "Convert to Path"},
-{"id": "tool_undo", "title": "Undo"},
-{"id": "tool_ungroup", "title": "Elemente Ungroup"},
-{"id": "tool_wireframe", "title": "Wireframe Mode"},
-{"id": "tool_zoom", "title": "Zoom Tool"},
-{"id": "url_notice", "title": "NOTE: This image cannot be embedded. It will depend on this path to be displayed"},
-{"id": "zoom_panel", "title": "Ndryshimi zoom nivel"},
-{"id": "sidepanel_handle", "textContent": "L a y e r s", "title": "Drag left/right to resize side panel"},
-{
- "js_strings": {
- "QerrorsRevertToSource": "There were parsing errors in your SVG source.\nRevert back to original SVG source?",
- "QignoreSourceChanges": "Ignore changes made to SVG source?",
- "QmoveElemsToLayer": "Move selected elements to layer '%s'?",
- "QwantToClear": "Do you want to clear the drawing?\nThis will also erase your undo history!",
- "cancel": "Cancel",
- "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.",
- "dupeLayerName": "There is already a layer named that!",
- "enterNewImgURL": "Enter the new image URL",
- "enterNewLayerName": "Please enter the new layer name",
- "enterUniqueLayerName": "Please enter a unique layer name",
- "exportNoBlur": "Blurred elements will appear as un-blurred",
- "exportNoDashArray": "Strokes will appear filled",
- "exportNoImage": "Image elements will not appear",
- "exportNoText": "Text may not appear as expected",
- "exportNoforeignObject": "foreignObject elements will not appear",
- "featNotSupported": "Feature not supported",
- "invalidAttrValGiven": "Invalid value given",
- "key_backspace": "backspace",
- "key_del": "delete",
- "key_down": "down",
- "key_up": "up",
- "layer": "Layer",
- "layerHasThatName": "Layer already has that name",
- "loadingImage": "Loading image, please wait...",
- "noContentToFitTo": "No content to fit to",
- "noteTheseIssues": "Also note the following issues: ",
- "ok": "OK",
- "pathCtrlPtTooltip": "Drag control point to adjust curve properties",
- "pathNodeTooltip": "Drag node to move it. Double-click node to change segment type",
- "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file."
- }
-}
-] \ No newline at end of file
diff --git a/files_svgedit/js/locale/lang.sr.js b/files_svgedit/js/locale/lang.sr.js
deleted file mode 100644
index ebfc6b135..000000000
--- a/files_svgedit/js/locale/lang.sr.js
+++ /dev/null
@@ -1,173 +0,0 @@
-[
-{"id": "align_relative_to", "title": "Алигн у односу на ..."},
-{"id": "bkgnd_color", "title": "Промена боје позадине / непрозирност"},
-{"id": "circle_cx", "title": "Промена круг&#39;с ЦКС координатни"},
-{"id": "circle_cy", "title": "Промена круг&#39;с ср координатни"},
-{"id": "circle_r", "title": "Промена круга је полупречник"},
-{"id": "connector_no_arrow", "textContent": "No arrow"},
-{"id": "copyrightLabel", "textContent": "Powered by"},
-{"id": "cornerRadiusLabel", "title": "Промена правоугаоник Кутак радијуса"},
-{"id": "curve_segments", "textContent": "Curve"},
-{"id": "ellipse_cx", "title": "Промена елипса ЦКС&#39;с координатни"},
-{"id": "ellipse_cy", "title": "Промена елипса&#39;с ср координатни"},
-{"id": "ellipse_rx", "title": "Промена елипса&#39;с Кс радијуса"},
-{"id": "ellipse_ry", "title": "Промена елипса је радијус Ы"},
-{"id": "fill_color", "title": "Промена боје попуне"},
-{"id": "fitToContent", "textContent": "Стане на садржај"},
-{"id": "fit_to_all", "textContent": "Уклопи у сав садржај"},
-{"id": "fit_to_canvas", "textContent": "Стане на платну"},
-{"id": "fit_to_layer_content", "textContent": "Уклопи у слоју садржај"},
-{"id": "fit_to_sel", "textContent": "Уклопи у избор"},
-{"id": "font_family", "title": "Цханге фонт породицу"},
-{"id": "icon_large", "textContent": "Large"},
-{"id": "icon_medium", "textContent": "Medium"},
-{"id": "icon_small", "textContent": "Small"},
-{"id": "icon_xlarge", "textContent": "Extra Large"},
-{"id": "image_height", "title": "Промени слику висине"},
-{"id": "image_opt_embed", "textContent": "Embed data (local files)"},
-{"id": "image_opt_ref", "textContent": "Use file reference"},
-{"id": "image_url", "title": "Промените УРЛ адресу"},
-{"id": "image_width", "title": "Промени слику ширине"},
-{"id": "includedImages", "textContent": "Included Images"},
-{"id": "largest_object", "textContent": "Највећи објекат"},
-{"id": "layer_delete", "title": "Избриши слој"},
-{"id": "layer_down", "title": "Помери слој доле"},
-{"id": "layer_new", "title": "Нови слој"},
-{"id": "layer_rename", "title": "Преименуј слој"},
-{"id": "layer_up", "title": "Помери слој Горе"},
-{"id": "layersLabel", "textContent": "Слојева:"},
-{"id": "line_x1", "title": "Промена линија Стартни кс координата"},
-{"id": "line_x2", "title": "Промена линија је завршетак кс координата"},
-{"id": "line_y1", "title": "Промена линија у координатни почетак Ы"},
-{"id": "line_y2", "title": "Промена линија је Ы координата се завршава"},
-{"id": "linecap_butt", "title": "Linecap: Butt"},
-{"id": "linecap_round", "title": "Linecap: Round"},
-{"id": "linecap_square", "title": "Linecap: Square"},
-{"id": "linejoin_bevel", "title": "Linejoin: Bevel"},
-{"id": "linejoin_miter", "title": "Linejoin: Miter"},
-{"id": "linejoin_round", "title": "Linejoin: Round"},
-{"id": "main_icon", "title": "Main Menu"},
-{"id": "mode_connect", "title": "Connect two objects"},
-{"id": "page", "textContent": "страна"},
-{"id": "palette", "title": "Кликните да бисте променили боју попуне, Схифт-кликните да промените боју удар"},
-{"id": "path_node_x", "title": "Change node's x coordinate"},
-{"id": "path_node_y", "title": "Change node's y coordinate"},
-{"id": "rect_height_tool", "title": "Промени правоугаоник висина"},
-{"id": "rect_width_tool", "title": "Промени правоугаоник ширине"},
-{"id": "relativeToLabel", "textContent": "у односу на:"},
-{"id": "seg_type", "title": "Change Segment type"},
-{"id": "selLayerLabel", "textContent": "Move elements to:"},
-{"id": "selLayerNames", "title": "Move selected elements to a different layer"},
-{"id": "selectedPredefined", "textContent": "Изаберите унапред дефинисани:"},
-{"id": "selected_objects", "textContent": "изабраних објеката"},
-{"id": "selected_x", "title": "Change X coordinate"},
-{"id": "selected_y", "title": "Change Y coordinate"},
-{"id": "smallest_object", "textContent": "Најмањи објекат"},
-{"id": "straight_segments", "textContent": "Straight"},
-{"id": "stroke_color", "title": "Промена боје удар"},
-{"id": "stroke_style", "title": "Промена ход Дасх стил"},
-{"id": "stroke_width", "title": "Промена удара ширина"},
-{"id": "svginfo_bg_note", "textContent": "Note: Background will not be saved with image."},
-{"id": "svginfo_change_background", "textContent": "Editor Background"},
-{"id": "svginfo_dim", "textContent": "Canvas Dimensions"},
-{"id": "svginfo_editor_prefs", "textContent": "Editor Preferences"},
-{"id": "svginfo_height", "textContent": "Висина:"},
-{"id": "svginfo_icons", "textContent": "Icon size"},
-{"id": "svginfo_image_props", "textContent": "Image Properties"},
-{"id": "svginfo_lang", "textContent": "Language"},
-{"id": "svginfo_title", "textContent": "Title"},
-{"id": "svginfo_width", "textContent": "Ширина:"},
-{"id": "text", "title": "Промена садржаја текстуалне"},
-{"id": "toggle_stroke_tools", "title": "Show/hide more stroke tools"},
-{"id": "tool_add_subpath", "title": "Add sub-path"},
-{"id": "tool_alignbottom", "title": "Поравнај доле"},
-{"id": "tool_aligncenter", "title": "Поравнај по центру"},
-{"id": "tool_alignleft", "title": "Поравнај лево"},
-{"id": "tool_alignmiddle", "title": "Алигн Средњи"},
-{"id": "tool_alignright", "title": "Поравнај десно"},
-{"id": "tool_aligntop", "title": "Поравнајте врх"},
-{"id": "tool_angle", "title": "Промени ротације Угао"},
-{"id": "tool_blur", "title": "Change gaussian blur value"},
-{"id": "tool_bold", "title": "Подебљан текст"},
-{"id": "tool_circle", "title": "Круг"},
-{"id": "tool_clear", "textContent": "Нова слика"},
-{"id": "tool_clone", "title": "Клон Елеменат"},
-{"id": "tool_clone_multi", "title": "Елементи клон"},
-{"id": "tool_delete", "title": "Избриши елемент"},
-{"id": "tool_delete_multi", "title": "Избриши изабране Елементи [Delete/Backspace]"},
-{"id": "tool_docprops", "textContent": "Особине документа"},
-{"id": "tool_docprops_cancel", "textContent": "Откажи"},
-{"id": "tool_docprops_save", "textContent": "Сачувати"},
-{"id": "tool_ellipse", "title": "Елипса"},
-{"id": "tool_export", "textContent": "Export as PNG"},
-{"id": "tool_eyedropper", "title": "Eye Dropper Tool"},
-{"id": "tool_fhellipse", "title": "Фрее-Ручни Елипса"},
-{"id": "tool_fhpath", "title": "Алатка оловка"},
-{"id": "tool_fhrect", "title": "Фрее-Ручни правоугаоник"},
-{"id": "tool_font_size", "title": "Цханге фонт сизе"},
-{"id": "tool_group", "title": "Група Елементи"},
-{"id": "tool_image", "title": "Алатка за слике"},
-{"id": "tool_import", "textContent": "Import SVG"},
-{"id": "tool_italic", "title": "Италиц текст"},
-{"id": "tool_line", "title": "Линија Алат"},
-{"id": "tool_move_bottom", "title": "Премести на доле"},
-{"id": "tool_move_top", "title": "Премести на врх"},
-{"id": "tool_node_clone", "title": "Clone Node"},
-{"id": "tool_node_delete", "title": "Delete Node"},
-{"id": "tool_node_link", "title": "Link Control Points"},
-{"id": "tool_opacity", "title": "Промена изабране ставке непрозирност"},
-{"id": "tool_open", "textContent": "Отвори слике"},
-{"id": "tool_path", "title": "Path Tool"},
-{"id": "tool_rect", "title": "Правоугаоник"},
-{"id": "tool_redo", "title": "Редо"},
-{"id": "tool_reorient", "title": "Reorient path"},
-{"id": "tool_save", "textContent": "Сачувај слика"},
-{"id": "tool_select", "title": "Изаберите алатку"},
-{"id": "tool_source", "title": "Уреди Извор"},
-{"id": "tool_source_cancel", "textContent": "Откажи"},
-{"id": "tool_source_save", "textContent": "Сачувати"},
-{"id": "tool_square", "title": "Трг"},
-{"id": "tool_text", "title": "Текст Алат"},
-{"id": "tool_topath", "title": "Convert to Path"},
-{"id": "tool_undo", "title": "Поништи"},
-{"id": "tool_ungroup", "title": "Разгрупирање Елементи"},
-{"id": "tool_wireframe", "title": "Wireframe Mode"},
-{"id": "tool_zoom", "title": "Алатка за зумирање"},
-{"id": "url_notice", "title": "NOTE: This image cannot be embedded. It will depend on this path to be displayed"},
-{"id": "zoom_panel", "title": "Промените ниво зумирања"},
-{"id": "sidepanel_handle", "textContent": "L a y e r s", "title": "Drag left/right to resize side panel"},
-{
- "js_strings": {
- "QerrorsRevertToSource": "There were parsing errors in your SVG source.\nRevert back to original SVG source?",
- "QignoreSourceChanges": "Ignore changes made to SVG source?",
- "QmoveElemsToLayer": "Move selected elements to layer '%s'?",
- "QwantToClear": "Do you want to clear the drawing?\nThis will also erase your undo history!",
- "cancel": "Cancel",
- "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.",
- "dupeLayerName": "There is already a layer named that!",
- "enterNewImgURL": "Enter the new image URL",
- "enterNewLayerName": "Please enter the new layer name",
- "enterUniqueLayerName": "Please enter a unique layer name",
- "exportNoBlur": "Blurred elements will appear as un-blurred",
- "exportNoDashArray": "Strokes will appear filled",
- "exportNoImage": "Image elements will not appear",
- "exportNoText": "Text may not appear as expected",
- "exportNoforeignObject": "foreignObject elements will not appear",
- "featNotSupported": "Feature not supported",
- "invalidAttrValGiven": "Invalid value given",
- "key_backspace": "backspace",
- "key_del": "delete",
- "key_down": "down",
- "key_up": "up",
- "layer": "Layer",
- "layerHasThatName": "Layer already has that name",
- "loadingImage": "Loading image, please wait...",
- "noContentToFitTo": "No content to fit to",
- "noteTheseIssues": "Also note the following issues: ",
- "ok": "OK",
- "pathCtrlPtTooltip": "Drag control point to adjust curve properties",
- "pathNodeTooltip": "Drag node to move it. Double-click node to change segment type",
- "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file."
- }
-}
-] \ No newline at end of file
diff --git a/files_svgedit/js/locale/lang.sv.js b/files_svgedit/js/locale/lang.sv.js
deleted file mode 100644
index 6c08c1743..000000000
--- a/files_svgedit/js/locale/lang.sv.js
+++ /dev/null
@@ -1,173 +0,0 @@
-[
-{"id": "align_relative_to", "title": "Justera förhållande till ..."},
-{"id": "bkgnd_color", "title": "Ändra bakgrundsfärg / opacitet"},
-{"id": "circle_cx", "title": "Ändra cirkeln cx samordna"},
-{"id": "circle_cy", "title": "Ändra cirkeln samordna cy"},
-{"id": "circle_r", "title": "Ändra cirkelns radie"},
-{"id": "connector_no_arrow", "textContent": "No arrow"},
-{"id": "copyrightLabel", "textContent": "Powered by"},
-{"id": "cornerRadiusLabel", "title": "Ändra rektangel hörnradie"},
-{"id": "curve_segments", "textContent": "Curve"},
-{"id": "ellipse_cx", "title": "Ändra ellips&#39;s cx samordna"},
-{"id": "ellipse_cy", "title": "Ändra ellips&#39;s samordna cy"},
-{"id": "ellipse_rx", "title": "Ändra ellips&#39;s x radie"},
-{"id": "ellipse_ry", "title": "Ändra ellips&#39;s y radie"},
-{"id": "fill_color", "title": "Ändra fyllningsfärg"},
-{"id": "fitToContent", "textContent": "Fit to Content"},
-{"id": "fit_to_all", "textContent": "Passar till allt innehåll"},
-{"id": "fit_to_canvas", "textContent": "Anpassa till duk"},
-{"id": "fit_to_layer_content", "textContent": "Anpassa till lager innehåll"},
-{"id": "fit_to_sel", "textContent": "Anpassa till val"},
-{"id": "font_family", "title": "Ändra Typsnitt"},
-{"id": "icon_large", "textContent": "Large"},
-{"id": "icon_medium", "textContent": "Medium"},
-{"id": "icon_small", "textContent": "Small"},
-{"id": "icon_xlarge", "textContent": "Extra Large"},
-{"id": "image_height", "title": "Ändra bildhöjd"},
-{"id": "image_opt_embed", "textContent": "Embed data (local files)"},
-{"id": "image_opt_ref", "textContent": "Use file reference"},
-{"id": "image_url", "title": "Ändra URL"},
-{"id": "image_width", "title": "Ändra bild bredd"},
-{"id": "includedImages", "textContent": "Included Images"},
-{"id": "largest_object", "textContent": "största objekt"},
-{"id": "layer_delete", "title": "Radera Layer"},
-{"id": "layer_down", "title": "Flytta Layer Down"},
-{"id": "layer_new", "title": "New Layer"},
-{"id": "layer_rename", "title": "Byt namn på Layer"},
-{"id": "layer_up", "title": "Flytta Layer Up"},
-{"id": "layersLabel", "textContent": "Layers:"},
-{"id": "line_x1", "title": "Ändra Lines startar x samordna"},
-{"id": "line_x2", "title": "Ändra Lines slutar x samordna"},
-{"id": "line_y1", "title": "Ändra Lines startar Y-koordinat"},
-{"id": "line_y2", "title": "Ändra Lines slutar Y-koordinat"},
-{"id": "linecap_butt", "title": "Linecap: Butt"},
-{"id": "linecap_round", "title": "Linecap: Round"},
-{"id": "linecap_square", "title": "Linecap: Square"},
-{"id": "linejoin_bevel", "title": "Linejoin: Bevel"},
-{"id": "linejoin_miter", "title": "Linejoin: Miter"},
-{"id": "linejoin_round", "title": "Linejoin: Round"},
-{"id": "main_icon", "title": "Main Menu"},
-{"id": "mode_connect", "title": "Connect two objects"},
-{"id": "page", "textContent": "sida"},
-{"id": "palette", "title": "Klicka för att ändra fyllningsfärg, shift-klicka för att ändra färgar"},
-{"id": "path_node_x", "title": "Change node's x coordinate"},
-{"id": "path_node_y", "title": "Change node's y coordinate"},
-{"id": "rect_height_tool", "title": "Ändra rektangel höjd"},
-{"id": "rect_width_tool", "title": "Ändra rektangel bredd"},
-{"id": "relativeToLabel", "textContent": "jämfört:"},
-{"id": "seg_type", "title": "Change Segment type"},
-{"id": "selLayerLabel", "textContent": "Move elements to:"},
-{"id": "selLayerNames", "title": "Move selected elements to a different layer"},
-{"id": "selectedPredefined", "textContent": "Välj fördefinierad:"},
-{"id": "selected_objects", "textContent": "valda objekt"},
-{"id": "selected_x", "title": "Change X coordinate"},
-{"id": "selected_y", "title": "Change Y coordinate"},
-{"id": "smallest_object", "textContent": "minsta objektet"},
-{"id": "straight_segments", "textContent": "Straight"},
-{"id": "stroke_color", "title": "Ändra färgar"},
-{"id": "stroke_style", "title": "Ändra stroke Dash stil"},
-{"id": "stroke_width", "title": "Ändra stroke bredd"},
-{"id": "svginfo_bg_note", "textContent": "Note: Background will not be saved with image."},
-{"id": "svginfo_change_background", "textContent": "Editor Background"},
-{"id": "svginfo_dim", "textContent": "Canvas Dimensions"},
-{"id": "svginfo_editor_prefs", "textContent": "Editor Preferences"},
-{"id": "svginfo_height", "textContent": "Höjd:"},
-{"id": "svginfo_icons", "textContent": "Icon size"},
-{"id": "svginfo_image_props", "textContent": "Image Properties"},
-{"id": "svginfo_lang", "textContent": "Language"},
-{"id": "svginfo_title", "textContent": "Title"},
-{"id": "svginfo_width", "textContent": "Bredd:"},
-{"id": "text", "title": "Ändra textinnehållet"},
-{"id": "toggle_stroke_tools", "title": "Show/hide more stroke tools"},
-{"id": "tool_add_subpath", "title": "Add sub-path"},
-{"id": "tool_alignbottom", "title": "Align Bottom"},
-{"id": "tool_aligncenter", "title": "Centrera"},
-{"id": "tool_alignleft", "title": "Vänsterjustera"},
-{"id": "tool_alignmiddle", "title": "Justera Middle"},
-{"id": "tool_alignright", "title": "Högerjustera"},
-{"id": "tool_aligntop", "title": "Justera Top"},
-{"id": "tool_angle", "title": "Ändra rotationsvinkel"},
-{"id": "tool_blur", "title": "Change gaussian blur value"},
-{"id": "tool_bold", "title": "Fet text"},
-{"id": "tool_circle", "title": "Circle"},
-{"id": "tool_clear", "textContent": "New Image"},
-{"id": "tool_clone", "title": "Clone Element"},
-{"id": "tool_clone_multi", "title": "Clone Elements"},
-{"id": "tool_delete", "title": "Radera Element"},
-{"id": "tool_delete_multi", "title": "Radera markerade element [Delete/Backspace]"},
-{"id": "tool_docprops", "textContent": "Dokumentegenskaper"},
-{"id": "tool_docprops_cancel", "textContent": "Avbryt"},
-{"id": "tool_docprops_save", "textContent": "Spara"},
-{"id": "tool_ellipse", "title": "Ellips"},
-{"id": "tool_export", "textContent": "Export as PNG"},
-{"id": "tool_eyedropper", "title": "Eye Dropper Tool"},
-{"id": "tool_fhellipse", "title": "Fri hand Ellipse"},
-{"id": "tool_fhpath", "title": "Pennverktyget"},
-{"id": "tool_fhrect", "title": "Fri hand rektangel"},
-{"id": "tool_font_size", "title": "Ändra textstorlek"},
-{"id": "tool_group", "title": "Group Elements"},
-{"id": "tool_image", "title": "Bildverktyg"},
-{"id": "tool_import", "textContent": "Import SVG"},
-{"id": "tool_italic", "title": "Kursiv text"},
-{"id": "tool_line", "title": "Linjeverktyg"},
-{"id": "tool_move_bottom", "title": "Move to Bottom"},
-{"id": "tool_move_top", "title": "Flytta till början"},
-{"id": "tool_node_clone", "title": "Clone Node"},
-{"id": "tool_node_delete", "title": "Delete Node"},
-{"id": "tool_node_link", "title": "Link Control Points"},
-{"id": "tool_opacity", "title": "Ändra markerat objekt opacitet"},
-{"id": "tool_open", "textContent": "Öppna bild"},
-{"id": "tool_path", "title": "Path Tool"},
-{"id": "tool_rect", "title": "Rektangel"},
-{"id": "tool_redo", "title": "Redo"},
-{"id": "tool_reorient", "title": "Reorient path"},
-{"id": "tool_save", "textContent": "Save Image"},
-{"id": "tool_select", "title": "Markeringsverktyget"},
-{"id": "tool_source", "title": "Redigera källa"},
-{"id": "tool_source_cancel", "textContent": "Avbryt"},
-{"id": "tool_source_save", "textContent": "Spara"},
-{"id": "tool_square", "title": "Fyrkant"},
-{"id": "tool_text", "title": "Textverktyg"},
-{"id": "tool_topath", "title": "Convert to Path"},
-{"id": "tool_undo", "title": "Ångra"},
-{"id": "tool_ungroup", "title": "Dela Elements"},
-{"id": "tool_wireframe", "title": "Wireframe Mode"},
-{"id": "tool_zoom", "title": "Zoomverktyget"},
-{"id": "url_notice", "title": "NOTE: This image cannot be embedded. It will depend on this path to be displayed"},
-{"id": "zoom_panel", "title": "Ändra zoomnivå"},
-{"id": "sidepanel_handle", "textContent": "L a y e r s", "title": "Drag left/right to resize side panel"},
-{
- "js_strings": {
- "QerrorsRevertToSource": "There were parsing errors in your SVG source.\nRevert back to original SVG source?",
- "QignoreSourceChanges": "Ignore changes made to SVG source?",
- "QmoveElemsToLayer": "Move selected elements to layer '%s'?",
- "QwantToClear": "Do you want to clear the drawing?\nThis will also erase your undo history!",
- "cancel": "Cancel",
- "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.",
- "dupeLayerName": "There is already a layer named that!",
- "enterNewImgURL": "Enter the new image URL",
- "enterNewLayerName": "Please enter the new layer name",
- "enterUniqueLayerName": "Please enter a unique layer name",
- "exportNoBlur": "Blurred elements will appear as un-blurred",
- "exportNoDashArray": "Strokes will appear filled",
- "exportNoImage": "Image elements will not appear",
- "exportNoText": "Text may not appear as expected",
- "exportNoforeignObject": "foreignObject elements will not appear",
- "featNotSupported": "Feature not supported",
- "invalidAttrValGiven": "Invalid value given",
- "key_backspace": "backspace",
- "key_del": "delete",
- "key_down": "down",
- "key_up": "up",
- "layer": "Layer",
- "layerHasThatName": "Layer already has that name",
- "loadingImage": "Loading image, please wait...",
- "noContentToFitTo": "No content to fit to",
- "noteTheseIssues": "Also note the following issues: ",
- "ok": "OK",
- "pathCtrlPtTooltip": "Drag control point to adjust curve properties",
- "pathNodeTooltip": "Drag node to move it. Double-click node to change segment type",
- "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file."
- }
-}
-] \ No newline at end of file
diff --git a/files_svgedit/js/locale/lang.sw.js b/files_svgedit/js/locale/lang.sw.js
deleted file mode 100644
index d2f65a98d..000000000
--- a/files_svgedit/js/locale/lang.sw.js
+++ /dev/null
@@ -1,173 +0,0 @@
-[
-{"id": "align_relative_to", "title": "Align jamaa na ..."},
-{"id": "bkgnd_color", "title": "Change background color / opacity"},
-{"id": "circle_cx", "title": "Change mduara&#39;s CX kuratibu"},
-{"id": "circle_cy", "title": "Change mduara&#39;s cy kuratibu"},
-{"id": "circle_r", "title": "Change mduara&#39;s Radius"},
-{"id": "connector_no_arrow", "textContent": "No arrow"},
-{"id": "copyrightLabel", "textContent": "Powered by"},
-{"id": "cornerRadiusLabel", "title": "Change Mstatili Corner Radius"},
-{"id": "curve_segments", "textContent": "Curve"},
-{"id": "ellipse_cx", "title": "Change ellipse s CX kuratibu"},
-{"id": "ellipse_cy", "title": "Change ellipse s cy kuratibu"},
-{"id": "ellipse_rx", "title": "Change ellipse s x Radius"},
-{"id": "ellipse_ry", "title": "Change ellipse&#39;s y Radius"},
-{"id": "fill_color", "title": "Change kujaza Michezo"},
-{"id": "fitToContent", "textContent": "Waliopo Content"},
-{"id": "fit_to_all", "textContent": "Waliopo all content"},
-{"id": "fit_to_canvas", "textContent": "Wanaofaa Canvas"},
-{"id": "fit_to_layer_content", "textContent": "Waliopo safu content"},
-{"id": "fit_to_sel", "textContent": "Waliopo uteuzi"},
-{"id": "font_family", "title": "Change font Family"},
-{"id": "icon_large", "textContent": "Large"},
-{"id": "icon_medium", "textContent": "Medium"},
-{"id": "icon_small", "textContent": "Small"},
-{"id": "icon_xlarge", "textContent": "Extra Large"},
-{"id": "image_height", "title": "Change image urefu"},
-{"id": "image_opt_embed", "textContent": "Embed data (local files)"},
-{"id": "image_opt_ref", "textContent": "Use file reference"},
-{"id": "image_url", "title": "Change URL"},
-{"id": "image_width", "title": "Change image width"},
-{"id": "includedImages", "textContent": "Included Images"},
-{"id": "largest_object", "textContent": "ukubwa object"},
-{"id": "layer_delete", "title": "Delete Layer"},
-{"id": "layer_down", "title": "Move Layer Down"},
-{"id": "layer_new", "title": "Mpya Layer"},
-{"id": "layer_rename", "title": "Rename Layer"},
-{"id": "layer_up", "title": "Move Layer Up"},
-{"id": "layersLabel", "textContent": "Tabaka:"},
-{"id": "line_x1", "title": "Change Mpya&#39;s mapya x kuratibu"},
-{"id": "line_x2", "title": "Change Mpya&#39;s kuishia x kuratibu"},
-{"id": "line_y1", "title": "Change Mpya&#39;s mapya y kuratibu"},
-{"id": "line_y2", "title": "Change Mpya&#39;s kuishia y kuratibu"},
-{"id": "linecap_butt", "title": "Linecap: Butt"},
-{"id": "linecap_round", "title": "Linecap: Round"},
-{"id": "linecap_square", "title": "Linecap: Square"},
-{"id": "linejoin_bevel", "title": "Linejoin: Bevel"},
-{"id": "linejoin_miter", "title": "Linejoin: Miter"},
-{"id": "linejoin_round", "title": "Linejoin: Round"},
-{"id": "main_icon", "title": "Main Menu"},
-{"id": "mode_connect", "title": "Connect two objects"},
-{"id": "page", "textContent": "umebadilisha"},
-{"id": "palette", "title": "Click kubadili kujaza color, skiftarbete-click kubadili kiharusi color"},
-{"id": "path_node_x", "title": "Change node's x coordinate"},
-{"id": "path_node_y", "title": "Change node's y coordinate"},
-{"id": "rect_height_tool", "title": "Change Mstatili height"},
-{"id": "rect_width_tool", "title": "Change Mstatili width"},
-{"id": "relativeToLabel", "textContent": "relativa att:"},
-{"id": "seg_type", "title": "Change Segment type"},
-{"id": "selLayerLabel", "textContent": "Move elements to:"},
-{"id": "selLayerNames", "title": "Move selected elements to a different layer"},
-{"id": "selectedPredefined", "textContent": "Select predefined:"},
-{"id": "selected_objects", "textContent": "waliochaguliwa vitu"},
-{"id": "selected_x", "title": "Change X coordinate"},
-{"id": "selected_y", "title": "Change Y coordinate"},
-{"id": "smallest_object", "textContent": "minsta object"},
-{"id": "straight_segments", "textContent": "Straight"},
-{"id": "stroke_color", "title": "Change kiharusi Michezo"},
-{"id": "stroke_style", "title": "Change kiharusi dash style"},
-{"id": "stroke_width", "title": "Change kiharusi width"},
-{"id": "svginfo_bg_note", "textContent": "Note: Background will not be saved with image."},
-{"id": "svginfo_change_background", "textContent": "Editor Background"},
-{"id": "svginfo_dim", "textContent": "Canvas Dimensions"},
-{"id": "svginfo_editor_prefs", "textContent": "Editor Preferences"},
-{"id": "svginfo_height", "textContent": "Urefu:"},
-{"id": "svginfo_icons", "textContent": "Icon size"},
-{"id": "svginfo_image_props", "textContent": "Image Properties"},
-{"id": "svginfo_lang", "textContent": "Language"},
-{"id": "svginfo_title", "textContent": "Title"},
-{"id": "svginfo_width", "textContent": "Upana:"},
-{"id": "text", "title": "Change Nakala contents"},
-{"id": "toggle_stroke_tools", "title": "Show/hide more stroke tools"},
-{"id": "tool_add_subpath", "title": "Add sub-path"},
-{"id": "tool_alignbottom", "title": "Align Bottom"},
-{"id": "tool_aligncenter", "title": "Align Center"},
-{"id": "tool_alignleft", "title": "Align Left"},
-{"id": "tool_alignmiddle", "title": "Kati align"},
-{"id": "tool_alignright", "title": "Align Right"},
-{"id": "tool_aligntop", "title": "Align Juu"},
-{"id": "tool_angle", "title": "Change mzunguko vinkel"},
-{"id": "tool_blur", "title": "Change gaussian blur value"},
-{"id": "tool_bold", "title": "Bold Nakala"},
-{"id": "tool_circle", "title": "Circle"},
-{"id": "tool_clear", "textContent": "New Image"},
-{"id": "tool_clone", "title": "Clone Element"},
-{"id": "tool_clone_multi", "title": "Clone Elements"},
-{"id": "tool_delete", "title": "Delete Element"},
-{"id": "tool_delete_multi", "title": "Delete Selected Elements [Delete/Backspace]"},
-{"id": "tool_docprops", "textContent": "Document Properties"},
-{"id": "tool_docprops_cancel", "textContent": "Cancel"},
-{"id": "tool_docprops_save", "textContent": "Okoa"},
-{"id": "tool_ellipse", "title": "Ellipse"},
-{"id": "tool_export", "textContent": "Export as PNG"},
-{"id": "tool_eyedropper", "title": "Eye Dropper Tool"},
-{"id": "tool_fhellipse", "title": "Free-Hand Ellipse"},
-{"id": "tool_fhpath", "title": "Penseli Tool"},
-{"id": "tool_fhrect", "title": "Free-Hand Rectangle"},
-{"id": "tool_font_size", "title": "Change font Size"},
-{"id": "tool_group", "title": "Kikundi Elements"},
-{"id": "tool_image", "title": "Image Tool"},
-{"id": "tool_import", "textContent": "Import SVG"},
-{"id": "tool_italic", "title": "Italiki Nakala"},
-{"id": "tool_line", "title": "Mpya Tool"},
-{"id": "tool_move_bottom", "title": "Kuhama Bottom"},
-{"id": "tool_move_top", "title": "Move to Top"},
-{"id": "tool_node_clone", "title": "Clone Node"},
-{"id": "tool_node_delete", "title": "Delete Node"},
-{"id": "tool_node_link", "title": "Link Control Points"},
-{"id": "tool_opacity", "title": "Change selected opacity punkt"},
-{"id": "tool_open", "textContent": "Open Image"},
-{"id": "tool_path", "title": "Path Tool"},
-{"id": "tool_rect", "title": "Mstatili"},
-{"id": "tool_redo", "title": "Redo"},
-{"id": "tool_reorient", "title": "Reorient path"},
-{"id": "tool_save", "textContent": "Save Image"},
-{"id": "tool_select", "title": "Select Tool"},
-{"id": "tool_source", "title": "Edit Lugha"},
-{"id": "tool_source_cancel", "textContent": "Cancel"},
-{"id": "tool_source_save", "textContent": "Save"},
-{"id": "tool_square", "title": "Mraba"},
-{"id": "tool_text", "title": "Nakala Tool"},
-{"id": "tool_topath", "title": "Convert to Path"},
-{"id": "tool_undo", "title": "Tengua"},
-{"id": "tool_ungroup", "title": "Ungroup Elements"},
-{"id": "tool_wireframe", "title": "Wireframe Mode"},
-{"id": "tool_zoom", "title": "Zoom Tool"},
-{"id": "url_notice", "title": "NOTE: This image cannot be embedded. It will depend on this path to be displayed"},
-{"id": "zoom_panel", "title": "Change zoom ngazi"},
-{"id": "sidepanel_handle", "textContent": "L a y e r s", "title": "Drag left/right to resize side panel"},
-{
- "js_strings": {
- "QerrorsRevertToSource": "There were parsing errors in your SVG source.\nRevert back to original SVG source?",
- "QignoreSourceChanges": "Ignore changes made to SVG source?",
- "QmoveElemsToLayer": "Move selected elements to layer '%s'?",
- "QwantToClear": "Do you want to clear the drawing?\nThis will also erase your undo history!",
- "cancel": "Cancel",
- "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.",
- "dupeLayerName": "There is already a layer named that!",
- "enterNewImgURL": "Enter the new image URL",
- "enterNewLayerName": "Please enter the new layer name",
- "enterUniqueLayerName": "Please enter a unique layer name",
- "exportNoBlur": "Blurred elements will appear as un-blurred",
- "exportNoDashArray": "Strokes will appear filled",
- "exportNoImage": "Image elements will not appear",
- "exportNoText": "Text may not appear as expected",
- "exportNoforeignObject": "foreignObject elements will not appear",
- "featNotSupported": "Feature not supported",
- "invalidAttrValGiven": "Invalid value given",
- "key_backspace": "backspace",
- "key_del": "delete",
- "key_down": "down",
- "key_up": "up",
- "layer": "Layer",
- "layerHasThatName": "Layer already has that name",
- "loadingImage": "Loading image, please wait...",
- "noContentToFitTo": "No content to fit to",
- "noteTheseIssues": "Also note the following issues: ",
- "ok": "OK",
- "pathCtrlPtTooltip": "Drag control point to adjust curve properties",
- "pathNodeTooltip": "Drag node to move it. Double-click node to change segment type",
- "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file."
- }
-}
-] \ No newline at end of file
diff --git a/files_svgedit/js/locale/lang.th.js b/files_svgedit/js/locale/lang.th.js
deleted file mode 100644
index 2a01c1885..000000000
--- a/files_svgedit/js/locale/lang.th.js
+++ /dev/null
@@ -1,173 +0,0 @@
-[
-{"id": "align_relative_to", "title": "จัดชิดเทียบกับ ..."},
-{"id": "bkgnd_color", "title": "สีพื้นหลังเปลี่ยน / ความทึบ"},
-{"id": "circle_cx", "title": "Cx วงกลมเปลี่ยนของพิกัด"},
-{"id": "circle_cy", "title": "วงกลมเปลี่ยนเป็น cy ประสานงาน"},
-{"id": "circle_r", "title": "รัศมีวงกลมเปลี่ยนเป็น"},
-{"id": "connector_no_arrow", "textContent": "No arrow"},
-{"id": "copyrightLabel", "textContent": "Powered by"},
-{"id": "cornerRadiusLabel", "title": "รัศมีเปลี่ยนสี่เหลี่ยมผืนผ้า Corner"},
-{"id": "curve_segments", "textContent": "Curve"},
-{"id": "ellipse_cx", "title": "เปลี่ยน ellipse ของ cx ประสานงาน"},
-{"id": "ellipse_cy", "title": "Ellipse เปลี่ยนของ cy ประสานงาน"},
-{"id": "ellipse_rx", "title": "Ellipse เปลี่ยนของรัศมี x"},
-{"id": "ellipse_ry", "title": "Ellipse เปลี่ยนของรัศมี y"},
-{"id": "fill_color", "title": "เปลี่ยนใส่สี"},
-{"id": "fitToContent", "textContent": "Fit to Content"},
-{"id": "fit_to_all", "textContent": "พอดีกับเนื้อหาทั้งหมด"},
-{"id": "fit_to_canvas", "textContent": "เหมาะสมในการผ้าใบ"},
-{"id": "fit_to_layer_content", "textContent": "พอดีเนื้อหาชั้นที่"},
-{"id": "fit_to_sel", "textContent": "เหมาะสมในการเลือก"},
-{"id": "font_family", "title": "ครอบครัว Change Font"},
-{"id": "icon_large", "textContent": "Large"},
-{"id": "icon_medium", "textContent": "Medium"},
-{"id": "icon_small", "textContent": "Small"},
-{"id": "icon_xlarge", "textContent": "Extra Large"},
-{"id": "image_height", "title": "ความสูงเปลี่ยนรูปภาพ"},
-{"id": "image_opt_embed", "textContent": "Embed data (local files)"},
-{"id": "image_opt_ref", "textContent": "Use file reference"},
-{"id": "image_url", "title": "URL เปลี่ยน"},
-{"id": "image_width", "title": "ความกว้างเปลี่ยนรูปภาพ"},
-{"id": "includedImages", "textContent": "Included Images"},
-{"id": "largest_object", "textContent": "ที่ใหญ่ที่สุดในวัตถุ"},
-{"id": "layer_delete", "title": "Delete Layer"},
-{"id": "layer_down", "title": "ย้าย Layer ลง"},
-{"id": "layer_new", "title": "Layer ใหม่"},
-{"id": "layer_rename", "title": "Layer เปลี่ยนชื่อ"},
-{"id": "layer_up", "title": "ย้าย Layer Up"},
-{"id": "layersLabel", "textContent": "ชั้น:"},
-{"id": "line_x1", "title": "สายเปลี่ยนเป็นเริ่มต้น x พิกัด"},
-{"id": "line_x2", "title": "สายเปลี่ยนเป็นสิ้นสุด x พิกัด"},
-{"id": "line_y1", "title": "สายเปลี่ยนเป็นเริ่มต้น y พิกัด"},
-{"id": "line_y2", "title": "สายเปลี่ยนเป็นสิ้นสุด y พิกัด"},
-{"id": "linecap_butt", "title": "Linecap: Butt"},
-{"id": "linecap_round", "title": "Linecap: Round"},
-{"id": "linecap_square", "title": "Linecap: Square"},
-{"id": "linejoin_bevel", "title": "Linejoin: Bevel"},
-{"id": "linejoin_miter", "title": "Linejoin: Miter"},
-{"id": "linejoin_round", "title": "Linejoin: Round"},
-{"id": "main_icon", "title": "Main Menu"},
-{"id": "mode_connect", "title": "Connect two objects"},
-{"id": "page", "textContent": "หน้า"},
-{"id": "palette", "title": "คลิกเพื่อเปลี่ยนใส่สีกะคลิกเปลี่ยนสีจังหวะ"},
-{"id": "path_node_x", "title": "Change node's x coordinate"},
-{"id": "path_node_y", "title": "Change node's y coordinate"},
-{"id": "rect_height_tool", "title": "ความสูงสี่เหลี่ยมผืนผ้าเปลี่ยน"},
-{"id": "rect_width_tool", "title": "ความกว้างสี่เหลี่ยมผืนผ้าเปลี่ยน"},
-{"id": "relativeToLabel", "textContent": "เทียบกับ:"},
-{"id": "seg_type", "title": "Change Segment type"},
-{"id": "selLayerLabel", "textContent": "Move elements to:"},
-{"id": "selLayerNames", "title": "Move selected elements to a different layer"},
-{"id": "selectedPredefined", "textContent": "เลือกที่กำหนดไว้ล่วงหน้า:"},
-{"id": "selected_objects", "textContent": "วัตถุเลือกตั้ง"},
-{"id": "selected_x", "title": "Change X coordinate"},
-{"id": "selected_y", "title": "Change Y coordinate"},
-{"id": "smallest_object", "textContent": "วัตถุที่เล็กที่สุด"},
-{"id": "straight_segments", "textContent": "Straight"},
-{"id": "stroke_color", "title": "สีจังหวะเปลี่ยน"},
-{"id": "stroke_style", "title": "รีบเปลี่ยนสไตล์จังหวะ"},
-{"id": "stroke_width", "title": "ความกว้างจังหวะเปลี่ยน"},
-{"id": "svginfo_bg_note", "textContent": "Note: Background will not be saved with image."},
-{"id": "svginfo_change_background", "textContent": "Editor Background"},
-{"id": "svginfo_dim", "textContent": "Canvas Dimensions"},
-{"id": "svginfo_editor_prefs", "textContent": "Editor Preferences"},
-{"id": "svginfo_height", "textContent": "ความสูง:"},
-{"id": "svginfo_icons", "textContent": "Icon size"},
-{"id": "svginfo_image_props", "textContent": "Image Properties"},
-{"id": "svginfo_lang", "textContent": "Language"},
-{"id": "svginfo_title", "textContent": "Title"},
-{"id": "svginfo_width", "textContent": "ความกว้าง:"},
-{"id": "text", "title": "เปลี่ยนเนื้อหาข้อความ"},
-{"id": "toggle_stroke_tools", "title": "Show/hide more stroke tools"},
-{"id": "tool_add_subpath", "title": "Add sub-path"},
-{"id": "tool_alignbottom", "title": "ด้านล่างชิด"},
-{"id": "tool_aligncenter", "title": "จัดแนวกึ่งกลาง"},
-{"id": "tool_alignleft", "title": "จัดชิดซ้าย"},
-{"id": "tool_alignmiddle", "title": "กลางชิด"},
-{"id": "tool_alignright", "title": "จัดชิดขวา"},
-{"id": "tool_aligntop", "title": "ด้านบนชิด"},
-{"id": "tool_angle", "title": "มุมหมุนเปลี่ยน"},
-{"id": "tool_blur", "title": "Change gaussian blur value"},
-{"id": "tool_bold", "title": "ข้อความตัวหนา"},
-{"id": "tool_circle", "title": "Circle"},
-{"id": "tool_clear", "textContent": "รูปภาพใหม่"},
-{"id": "tool_clone", "title": "องค์ประกอบโคลน"},
-{"id": "tool_clone_multi", "title": "องค์ประกอบโคลน"},
-{"id": "tool_delete", "title": "องค์ประกอบลบ"},
-{"id": "tool_delete_multi", "title": "องค์ประกอบที่เลือกลบ"},
-{"id": "tool_docprops", "textContent": "คุณสมบัติของเอกสาร"},
-{"id": "tool_docprops_cancel", "textContent": "ยกเลิก"},
-{"id": "tool_docprops_save", "textContent": "บันทึก"},
-{"id": "tool_ellipse", "title": "Ellipse"},
-{"id": "tool_export", "textContent": "Export as PNG"},
-{"id": "tool_eyedropper", "title": "Eye Dropper Tool"},
-{"id": "tool_fhellipse", "title": "Ellipse Free-Hand"},
-{"id": "tool_fhpath", "title": "เครื่องมือดินสอ"},
-{"id": "tool_fhrect", "title": "สี่เหลี่ยมผืนผ้า Free-Hand"},
-{"id": "tool_font_size", "title": "เปลี่ยนขนาดตัวอักษร"},
-{"id": "tool_group", "title": "องค์ประกอบของกลุ่ม"},
-{"id": "tool_image", "title": "เครื่องมือ Image"},
-{"id": "tool_import", "textContent": "Import SVG"},
-{"id": "tool_italic", "title": "ข้อความตัวเอียง"},
-{"id": "tool_line", "title": "เครื่องมือ Line"},
-{"id": "tool_move_bottom", "title": "ย้ายไปด้านล่าง"},
-{"id": "tool_move_top", "title": "ย้ายไปด้านบน"},
-{"id": "tool_node_clone", "title": "Clone Node"},
-{"id": "tool_node_delete", "title": "Delete Node"},
-{"id": "tool_node_link", "title": "Link Control Points"},
-{"id": "tool_opacity", "title": "เปลี่ยนความทึบเลือกรายการ"},
-{"id": "tool_open", "textContent": "ภาพเปิด"},
-{"id": "tool_path", "title": "Path Tool"},
-{"id": "tool_rect", "title": "สี่เหลี่ยมผืนผ้า"},
-{"id": "tool_redo", "title": "ทำซ้ำ"},
-{"id": "tool_reorient", "title": "Reorient path"},
-{"id": "tool_save", "textContent": "บันทึกรูปภาพ"},
-{"id": "tool_select", "title": "เครื่องมือเลือก"},
-{"id": "tool_source", "title": "แหล่งที่มาแก้ไข"},
-{"id": "tool_source_cancel", "textContent": "ยกเลิก"},
-{"id": "tool_source_save", "textContent": "บันทึก"},
-{"id": "tool_square", "title": "สี่เหลี่ยม"},
-{"id": "tool_text", "title": "เครื่องมือ Text"},
-{"id": "tool_topath", "title": "Convert to Path"},
-{"id": "tool_undo", "title": "เลิก"},
-{"id": "tool_ungroup", "title": "องค์ประกอบ Ungroup"},
-{"id": "tool_wireframe", "title": "Wireframe Mode"},
-{"id": "tool_zoom", "title": "เครื่องมือซูม"},
-{"id": "url_notice", "title": "NOTE: This image cannot be embedded. It will depend on this path to be displayed"},
-{"id": "zoom_panel", "title": "เปลี่ยนระดับการซูม"},
-{"id": "sidepanel_handle", "textContent": "L a y e r s", "title": "Drag left/right to resize side panel"},
-{
- "js_strings": {
- "QerrorsRevertToSource": "There were parsing errors in your SVG source.\nRevert back to original SVG source?",
- "QignoreSourceChanges": "Ignore changes made to SVG source?",
- "QmoveElemsToLayer": "Move selected elements to layer '%s'?",
- "QwantToClear": "Do you want to clear the drawing?\nThis will also erase your undo history!",
- "cancel": "Cancel",
- "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.",
- "dupeLayerName": "There is already a layer named that!",
- "enterNewImgURL": "Enter the new image URL",
- "enterNewLayerName": "Please enter the new layer name",
- "enterUniqueLayerName": "Please enter a unique layer name",
- "exportNoBlur": "Blurred elements will appear as un-blurred",
- "exportNoDashArray": "Strokes will appear filled",
- "exportNoImage": "Image elements will not appear",
- "exportNoText": "Text may not appear as expected",
- "exportNoforeignObject": "foreignObject elements will not appear",
- "featNotSupported": "Feature not supported",
- "invalidAttrValGiven": "Invalid value given",
- "key_backspace": "backspace",
- "key_del": "delete",
- "key_down": "down",
- "key_up": "up",
- "layer": "Layer",
- "layerHasThatName": "Layer already has that name",
- "loadingImage": "Loading image, please wait...",
- "noContentToFitTo": "No content to fit to",
- "noteTheseIssues": "Also note the following issues: ",
- "ok": "OK",
- "pathCtrlPtTooltip": "Drag control point to adjust curve properties",
- "pathNodeTooltip": "Drag node to move it. Double-click node to change segment type",
- "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file."
- }
-}
-] \ No newline at end of file
diff --git a/files_svgedit/js/locale/lang.tl.js b/files_svgedit/js/locale/lang.tl.js
deleted file mode 100644
index d81762d0b..000000000
--- a/files_svgedit/js/locale/lang.tl.js
+++ /dev/null
@@ -1,173 +0,0 @@
-[
-{"id": "align_relative_to", "title": "Pantayin sa kamag-anak sa ..."},
-{"id": "bkgnd_color", "title": "Baguhin ang kulay ng background / kalabuan"},
-{"id": "circle_cx", "title": "Cx Baguhin ang bilog&#39;s coordinate"},
-{"id": "circle_cy", "title": "Baguhin ang bilog&#39;s cy coordinate"},
-{"id": "circle_r", "title": "Baguhin ang radius ng bilog"},
-{"id": "connector_no_arrow", "textContent": "No arrow"},
-{"id": "copyrightLabel", "textContent": "Powered by"},
-{"id": "cornerRadiusLabel", "title": "Baguhin ang Parihaba Corner Radius"},
-{"id": "curve_segments", "textContent": "Curve"},
-{"id": "ellipse_cx", "title": "Baguhin ang tambilugan&#39;s cx-ugma"},
-{"id": "ellipse_cy", "title": "Baguhin ang tambilugan&#39;s cy coordinate"},
-{"id": "ellipse_rx", "title": "X radius Baguhin ang tambilugan&#39;s"},
-{"id": "ellipse_ry", "title": "Y radius Baguhin ang tambilugan&#39;s"},
-{"id": "fill_color", "title": "Baguhin ang punuin ng kulay"},
-{"id": "fitToContent", "textContent": "Pagkasyahin sa Nilalaman"},
-{"id": "fit_to_all", "textContent": "Pagkasyahin sa lahat ng mga nilalaman"},
-{"id": "fit_to_canvas", "textContent": "Pagkasyahin sa tolda"},
-{"id": "fit_to_layer_content", "textContent": "Pagkasyahin sa layer nilalaman"},
-{"id": "fit_to_sel", "textContent": "Pagkasyahin sa pagpili"},
-{"id": "font_family", "title": "Baguhin ang Pamilya ng Font"},
-{"id": "icon_large", "textContent": "Large"},
-{"id": "icon_medium", "textContent": "Medium"},
-{"id": "icon_small", "textContent": "Small"},
-{"id": "icon_xlarge", "textContent": "Extra Large"},
-{"id": "image_height", "title": "Baguhin ang taas ng imahe"},
-{"id": "image_opt_embed", "textContent": "Embed data (local files)"},
-{"id": "image_opt_ref", "textContent": "Use file reference"},
-{"id": "image_url", "title": "Baguhin ang URL"},
-{"id": "image_width", "title": "Baguhin ang lapad ng imahe"},
-{"id": "includedImages", "textContent": "Included Images"},
-{"id": "largest_object", "textContent": "pinakamalaking bagay"},
-{"id": "layer_delete", "title": "Tanggalin Layer"},
-{"id": "layer_down", "title": "Ilipat Layer Down"},
-{"id": "layer_new", "title": "Bagong Layer"},
-{"id": "layer_rename", "title": "Palitan ang pangalan ng Layer"},
-{"id": "layer_up", "title": "Ilipat Layer Up"},
-{"id": "layersLabel", "textContent": "Layers:"},
-{"id": "line_x1", "title": "Baguhin ang linya ng simula x coordinate"},
-{"id": "line_x2", "title": "Baguhin ang linya ay nagtatapos x coordinate"},
-{"id": "line_y1", "title": "Baguhin ang linya ng simula y coordinate"},
-{"id": "line_y2", "title": "Baguhin ang linya ay nagtatapos y coordinate"},
-{"id": "linecap_butt", "title": "Linecap: Butt"},
-{"id": "linecap_round", "title": "Linecap: Round"},
-{"id": "linecap_square", "title": "Linecap: Square"},
-{"id": "linejoin_bevel", "title": "Linejoin: Bevel"},
-{"id": "linejoin_miter", "title": "Linejoin: Miter"},
-{"id": "linejoin_round", "title": "Linejoin: Round"},
-{"id": "main_icon", "title": "Main Menu"},
-{"id": "mode_connect", "title": "Connect two objects"},
-{"id": "page", "textContent": "pahina"},
-{"id": "palette", "title": "I-click upang baguhin ang punan ang kulay, paglilipat-click upang baguhin ang paghampas ng kulay"},
-{"id": "path_node_x", "title": "Change node's x coordinate"},
-{"id": "path_node_y", "title": "Change node's y coordinate"},
-{"id": "rect_height_tool", "title": "Baguhin ang rektanggulo taas"},
-{"id": "rect_width_tool", "title": "Baguhin ang rektanggulo lapad"},
-{"id": "relativeToLabel", "textContent": "kamag-anak sa:"},
-{"id": "seg_type", "title": "Change Segment type"},
-{"id": "selLayerLabel", "textContent": "Move elements to:"},
-{"id": "selLayerNames", "title": "Move selected elements to a different layer"},
-{"id": "selectedPredefined", "textContent": "Piliin ang paunang-natukoy na:"},
-{"id": "selected_objects", "textContent": "inihalal na mga bagay"},
-{"id": "selected_x", "title": "Change X coordinate"},
-{"id": "selected_y", "title": "Change Y coordinate"},
-{"id": "smallest_object", "textContent": "pinakamaliit na bagay"},
-{"id": "straight_segments", "textContent": "Straight"},
-{"id": "stroke_color", "title": "Baguhin ang kulay ng paghampas"},
-{"id": "stroke_style", "title": "Baguhin ang stroke pagsugod estilo"},
-{"id": "stroke_width", "title": "Baguhin ang stroke lapad"},
-{"id": "svginfo_bg_note", "textContent": "Note: Background will not be saved with image."},
-{"id": "svginfo_change_background", "textContent": "Editor Background"},
-{"id": "svginfo_dim", "textContent": "Canvas Dimensions"},
-{"id": "svginfo_editor_prefs", "textContent": "Editor Preferences"},
-{"id": "svginfo_height", "textContent": "Tangkad:"},
-{"id": "svginfo_icons", "textContent": "Icon size"},
-{"id": "svginfo_image_props", "textContent": "Image Properties"},
-{"id": "svginfo_lang", "textContent": "Language"},
-{"id": "svginfo_title", "textContent": "Title"},
-{"id": "svginfo_width", "textContent": "Lapad:"},
-{"id": "text", "title": "Baguhin ang mga nilalaman ng teksto"},
-{"id": "toggle_stroke_tools", "title": "Show/hide more stroke tools"},
-{"id": "tool_add_subpath", "title": "Add sub-path"},
-{"id": "tool_alignbottom", "title": "Pantayin sa Ibaba"},
-{"id": "tool_aligncenter", "title": "Pantayin sa Gitna"},
-{"id": "tool_alignleft", "title": "Pantayin ang Kaliwa"},
-{"id": "tool_alignmiddle", "title": "Pantayin sa Gitnang"},
-{"id": "tool_alignright", "title": "Pantayin sa Kanan"},
-{"id": "tool_aligntop", "title": "Pantayin Top"},
-{"id": "tool_angle", "title": "Baguhin ang pag-ikot anggulo"},
-{"id": "tool_blur", "title": "Change gaussian blur value"},
-{"id": "tool_bold", "title": "Bold Text"},
-{"id": "tool_circle", "title": "Circle"},
-{"id": "tool_clear", "textContent": "Bagong Imahe"},
-{"id": "tool_clone", "title": "I-clone ang Sangkap"},
-{"id": "tool_clone_multi", "title": "I-clone ang mga Sangkap"},
-{"id": "tool_delete", "title": "Burahin ang Sangkap"},
-{"id": "tool_delete_multi", "title": "Tanggalin Napiling Mga Sangkap [Delete/Backspace]"},
-{"id": "tool_docprops", "textContent": "Document Katangian"},
-{"id": "tool_docprops_cancel", "textContent": "I-cancel"},
-{"id": "tool_docprops_save", "textContent": "I-save"},
-{"id": "tool_ellipse", "title": "Tambilugan"},
-{"id": "tool_export", "textContent": "Export as PNG"},
-{"id": "tool_eyedropper", "title": "Eye Dropper Tool"},
-{"id": "tool_fhellipse", "title": "Libreng-kamay tambilugan"},
-{"id": "tool_fhpath", "title": "Kasangkapan ng lapis"},
-{"id": "tool_fhrect", "title": "Libreng-kamay Parihaba"},
-{"id": "tool_font_size", "title": "Baguhin ang Laki ng Font"},
-{"id": "tool_group", "title": "Group Sangkap"},
-{"id": "tool_image", "title": "Image Kasangkapan"},
-{"id": "tool_import", "textContent": "Import SVG"},
-{"id": "tool_italic", "title": "Italic Text"},
-{"id": "tool_line", "title": "Line Kasangkapan"},
-{"id": "tool_move_bottom", "title": "Ilipat sa Ibaba"},
-{"id": "tool_move_top", "title": "Ilipat sa Tuktok"},
-{"id": "tool_node_clone", "title": "Clone Node"},
-{"id": "tool_node_delete", "title": "Delete Node"},
-{"id": "tool_node_link", "title": "Link Control Points"},
-{"id": "tool_opacity", "title": "Palitan ang mga napiling bagay kalabuan"},
-{"id": "tool_open", "textContent": "Buksan ang Image"},
-{"id": "tool_path", "title": "Path Tool"},
-{"id": "tool_rect", "title": "Parihaba"},
-{"id": "tool_redo", "title": "Gawin muli"},
-{"id": "tool_reorient", "title": "Reorient path"},
-{"id": "tool_save", "textContent": "I-save ang Image"},
-{"id": "tool_select", "title": "Piliin ang Tool"},
-{"id": "tool_source", "title": "I-edit ang Source"},
-{"id": "tool_source_cancel", "textContent": "I-cancel"},
-{"id": "tool_source_save", "textContent": "I-save"},
-{"id": "tool_square", "title": "Parisukat"},
-{"id": "tool_text", "title": "Text Kasangkapan"},
-{"id": "tool_topath", "title": "Convert to Path"},
-{"id": "tool_undo", "title": "Bawiin"},
-{"id": "tool_ungroup", "title": "Ungroup Sangkap"},
-{"id": "tool_wireframe", "title": "Wireframe Mode"},
-{"id": "tool_zoom", "title": "Mag-zoom Kasangkapan"},
-{"id": "url_notice", "title": "NOTE: This image cannot be embedded. It will depend on this path to be displayed"},
-{"id": "zoom_panel", "title": "Baguhin ang antas ng zoom"},
-{"id": "sidepanel_handle", "textContent": "L a y e r s", "title": "Drag left/right to resize side panel"},
-{
- "js_strings": {
- "QerrorsRevertToSource": "There were parsing errors in your SVG source.\nRevert back to original SVG source?",
- "QignoreSourceChanges": "Ignore changes made to SVG source?",
- "QmoveElemsToLayer": "Move selected elements to layer '%s'?",
- "QwantToClear": "Do you want to clear the drawing?\nThis will also erase your undo history!",
- "cancel": "Cancel",
- "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.",
- "dupeLayerName": "There is already a layer named that!",
- "enterNewImgURL": "Enter the new image URL",
- "enterNewLayerName": "Please enter the new layer name",
- "enterUniqueLayerName": "Please enter a unique layer name",
- "exportNoBlur": "Blurred elements will appear as un-blurred",
- "exportNoDashArray": "Strokes will appear filled",
- "exportNoImage": "Image elements will not appear",
- "exportNoText": "Text may not appear as expected",
- "exportNoforeignObject": "foreignObject elements will not appear",
- "featNotSupported": "Feature not supported",
- "invalidAttrValGiven": "Invalid value given",
- "key_backspace": "backspace",
- "key_del": "delete",
- "key_down": "down",
- "key_up": "up",
- "layer": "Layer",
- "layerHasThatName": "Layer already has that name",
- "loadingImage": "Loading image, please wait...",
- "noContentToFitTo": "No content to fit to",
- "noteTheseIssues": "Also note the following issues: ",
- "ok": "OK",
- "pathCtrlPtTooltip": "Drag control point to adjust curve properties",
- "pathNodeTooltip": "Drag node to move it. Double-click node to change segment type",
- "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file."
- }
-}
-] \ No newline at end of file
diff --git a/files_svgedit/js/locale/lang.tr.js b/files_svgedit/js/locale/lang.tr.js
deleted file mode 100644
index ce6ab6bc0..000000000
--- a/files_svgedit/js/locale/lang.tr.js
+++ /dev/null
@@ -1,173 +0,0 @@
-[
-{"id": "align_relative_to", "title": "Align göre ..."},
-{"id": "bkgnd_color", "title": "Arka plan rengini değiştirmek / opacity"},
-{"id": "circle_cx", "title": "Değiştirmek daire&#39;s cx koordine"},
-{"id": "circle_cy", "title": "Değiştirmek daire cy koordine&#39;s"},
-{"id": "circle_r", "title": "Değiştirmek daire yarıçapı"},
-{"id": "connector_no_arrow", "textContent": "No arrow"},
-{"id": "copyrightLabel", "textContent": "Powered by"},
-{"id": "cornerRadiusLabel", "title": "Değiştirmek Dikdörtgen Köşe Yarıçap"},
-{"id": "curve_segments", "textContent": "Curve"},
-{"id": "ellipse_cx", "title": "&#39;s Koordine cx elips Girişi"},
-{"id": "ellipse_cy", "title": "Değiştirmek elips cy koordine&#39;s"},
-{"id": "ellipse_rx", "title": "Değiştirmek elips&#39;s x yarıçapı"},
-{"id": "ellipse_ry", "title": "Değiştirmek elips Y yarıçapı"},
-{"id": "fill_color", "title": "Renk değiştirmek doldurmak"},
-{"id": "fitToContent", "textContent": "Fit to Content"},
-{"id": "fit_to_all", "textContent": "Fit tüm içerik için"},
-{"id": "fit_to_canvas", "textContent": "Fit tuvaline"},
-{"id": "fit_to_layer_content", "textContent": "Sığacak şekilde katman içerik"},
-{"id": "fit_to_sel", "textContent": "Fit seçimine"},
-{"id": "font_family", "title": "Font değiştir Aile"},
-{"id": "icon_large", "textContent": "Large"},
-{"id": "icon_medium", "textContent": "Medium"},
-{"id": "icon_small", "textContent": "Small"},
-{"id": "icon_xlarge", "textContent": "Extra Large"},
-{"id": "image_height", "title": "Değiştirmek görüntü yüksekliği"},
-{"id": "image_opt_embed", "textContent": "Embed data (local files)"},
-{"id": "image_opt_ref", "textContent": "Use file reference"},
-{"id": "image_url", "title": "Değiştirmek URL"},
-{"id": "image_width", "title": "Değiştirmek görüntü genişliği"},
-{"id": "includedImages", "textContent": "Included Images"},
-{"id": "largest_object", "textContent": "en büyük nesne"},
-{"id": "layer_delete", "title": "Delete Layer"},
-{"id": "layer_down", "title": "Katman Aşağı Taşı"},
-{"id": "layer_new", "title": "Yeni Katman"},
-{"id": "layer_rename", "title": "Rename Katman"},
-{"id": "layer_up", "title": "Up Katman Taşı"},
-{"id": "layersLabel", "textContent": "Katmanlar:"},
-{"id": "line_x1", "title": "Değiştirmek hattı&#39;s koordine x başlangıç"},
-{"id": "line_x2", "title": "Değiştirmek hattı&#39;s koordine x biten"},
-{"id": "line_y1", "title": "Değiştirmek hattı y başlangıç&#39;s koordine"},
-{"id": "line_y2", "title": "Değiştirmek hattı y biten&#39;s koordine"},
-{"id": "linecap_butt", "title": "Linecap: Butt"},
-{"id": "linecap_round", "title": "Linecap: Round"},
-{"id": "linecap_square", "title": "Linecap: Square"},
-{"id": "linejoin_bevel", "title": "Linejoin: Bevel"},
-{"id": "linejoin_miter", "title": "Linejoin: Miter"},
-{"id": "linejoin_round", "title": "Linejoin: Round"},
-{"id": "main_icon", "title": "Main Menu"},
-{"id": "mode_connect", "title": "Connect two objects"},
-{"id": "page", "textContent": "sayfa"},
-{"id": "palette", "title": "Tıklatın renk, vardiya dolgu zamanlı rengini değiştirmek için tıklayın değiştirmek için"},
-{"id": "path_node_x", "title": "Change node's x coordinate"},
-{"id": "path_node_y", "title": "Change node's y coordinate"},
-{"id": "rect_height_tool", "title": "Değiştirmek dikdörtgen yüksekliği"},
-{"id": "rect_width_tool", "title": "Değiştirmek dikdörtgen genişliği"},
-{"id": "relativeToLabel", "textContent": "göreli:"},
-{"id": "seg_type", "title": "Change Segment type"},
-{"id": "selLayerLabel", "textContent": "Move elements to:"},
-{"id": "selLayerNames", "title": "Move selected elements to a different layer"},
-{"id": "selectedPredefined", "textContent": "Seçin önceden tanımlanmış:"},
-{"id": "selected_objects", "textContent": "seçilen nesneleri"},
-{"id": "selected_x", "title": "Change X coordinate"},
-{"id": "selected_y", "title": "Change Y coordinate"},
-{"id": "smallest_object", "textContent": "küçük nesne"},
-{"id": "straight_segments", "textContent": "Straight"},
-{"id": "stroke_color", "title": "Değiştirmek inme renk"},
-{"id": "stroke_style", "title": "Değiştirmek inme çizgi stili"},
-{"id": "stroke_width", "title": "Değiştirmek vuruş genişliği"},
-{"id": "svginfo_bg_note", "textContent": "Note: Background will not be saved with image."},
-{"id": "svginfo_change_background", "textContent": "Editor Background"},
-{"id": "svginfo_dim", "textContent": "Canvas Dimensions"},
-{"id": "svginfo_editor_prefs", "textContent": "Editor Preferences"},
-{"id": "svginfo_height", "textContent": "Yükseklik:"},
-{"id": "svginfo_icons", "textContent": "Icon size"},
-{"id": "svginfo_image_props", "textContent": "Image Properties"},
-{"id": "svginfo_lang", "textContent": "Language"},
-{"id": "svginfo_title", "textContent": "Title"},
-{"id": "svginfo_width", "textContent": "En:"},
-{"id": "text", "title": "Değiştirmek metin içeriği"},
-{"id": "toggle_stroke_tools", "title": "Show/hide more stroke tools"},
-{"id": "tool_add_subpath", "title": "Add sub-path"},
-{"id": "tool_alignbottom", "title": "Align Bottom"},
-{"id": "tool_aligncenter", "title": "Ortala"},
-{"id": "tool_alignleft", "title": "Sola"},
-{"id": "tool_alignmiddle", "title": "Align Orta"},
-{"id": "tool_alignright", "title": "Sağa Hizala"},
-{"id": "tool_aligntop", "title": "Align Top"},
-{"id": "tool_angle", "title": "Değiştirmek dönme açısı"},
-{"id": "tool_blur", "title": "Change gaussian blur value"},
-{"id": "tool_bold", "title": "Kalın Yazı"},
-{"id": "tool_circle", "title": "Daire"},
-{"id": "tool_clear", "textContent": "Yeni Resim"},
-{"id": "tool_clone", "title": "Clone Element"},
-{"id": "tool_clone_multi", "title": "Clone Elemanları"},
-{"id": "tool_delete", "title": "Sil Element"},
-{"id": "tool_delete_multi", "title": "Seçilen Elemanları"},
-{"id": "tool_docprops", "textContent": "Belge Özellikleri"},
-{"id": "tool_docprops_cancel", "textContent": "Iptal"},
-{"id": "tool_docprops_save", "textContent": "Kaydetmek"},
-{"id": "tool_ellipse", "title": "Elips"},
-{"id": "tool_export", "textContent": "Export as PNG"},
-{"id": "tool_eyedropper", "title": "Eye Dropper Tool"},
-{"id": "tool_fhellipse", "title": "Free-El Elips"},
-{"id": "tool_fhpath", "title": "Kalem Aracı"},
-{"id": "tool_fhrect", "title": "Free-El Dikdörtgen"},
-{"id": "tool_font_size", "title": "Change font size"},
-{"id": "tool_group", "title": "Grup Elemanları"},
-{"id": "tool_image", "title": "Resim Aracı"},
-{"id": "tool_import", "textContent": "Import SVG"},
-{"id": "tool_italic", "title": "Italik yazı"},
-{"id": "tool_line", "title": "Line Aracı"},
-{"id": "tool_move_bottom", "title": "Altına gider"},
-{"id": "tool_move_top", "title": "Üste taşı"},
-{"id": "tool_node_clone", "title": "Clone Node"},
-{"id": "tool_node_delete", "title": "Delete Node"},
-{"id": "tool_node_link", "title": "Link Control Points"},
-{"id": "tool_opacity", "title": "Değiştirmek öğe opacity seçilmiş"},
-{"id": "tool_open", "textContent": "Aç Resim"},
-{"id": "tool_path", "title": "Path Tool"},
-{"id": "tool_rect", "title": "Dikdörtgen"},
-{"id": "tool_redo", "title": "Redo"},
-{"id": "tool_reorient", "title": "Reorient path"},
-{"id": "tool_save", "textContent": "Görüntüyü Kaydet"},
-{"id": "tool_select", "title": "Seçim aracı"},
-{"id": "tool_source", "title": "Değiştir Kaynak"},
-{"id": "tool_source_cancel", "textContent": "Iptal"},
-{"id": "tool_source_save", "textContent": "Kaydetmek"},
-{"id": "tool_square", "title": "Kare"},
-{"id": "tool_text", "title": "Metin Aracı"},
-{"id": "tool_topath", "title": "Convert to Path"},
-{"id": "tool_undo", "title": "Geri"},
-{"id": "tool_ungroup", "title": "Çöz Elemanları"},
-{"id": "tool_wireframe", "title": "Wireframe Mode"},
-{"id": "tool_zoom", "title": "Zoom Tool"},
-{"id": "url_notice", "title": "NOTE: This image cannot be embedded. It will depend on this path to be displayed"},
-{"id": "zoom_panel", "title": "Yakınlaştırma düzeyini değiştirebilirsiniz"},
-{"id": "sidepanel_handle", "textContent": "L a y e r s", "title": "Drag left/right to resize side panel"},
-{
- "js_strings": {
- "QerrorsRevertToSource": "There were parsing errors in your SVG source.\nRevert back to original SVG source?",
- "QignoreSourceChanges": "Ignore changes made to SVG source?",
- "QmoveElemsToLayer": "Move selected elements to layer '%s'?",
- "QwantToClear": "Do you want to clear the drawing?\nThis will also erase your undo history!",
- "cancel": "Cancel",
- "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.",
- "dupeLayerName": "There is already a layer named that!",
- "enterNewImgURL": "Enter the new image URL",
- "enterNewLayerName": "Please enter the new layer name",
- "enterUniqueLayerName": "Please enter a unique layer name",
- "exportNoBlur": "Blurred elements will appear as un-blurred",
- "exportNoDashArray": "Strokes will appear filled",
- "exportNoImage": "Image elements will not appear",
- "exportNoText": "Text may not appear as expected",
- "exportNoforeignObject": "foreignObject elements will not appear",
- "featNotSupported": "Feature not supported",
- "invalidAttrValGiven": "Invalid value given",
- "key_backspace": "backspace",
- "key_del": "delete",
- "key_down": "down",
- "key_up": "up",
- "layer": "Layer",
- "layerHasThatName": "Layer already has that name",
- "loadingImage": "Loading image, please wait...",
- "noContentToFitTo": "No content to fit to",
- "noteTheseIssues": "Also note the following issues: ",
- "ok": "OK",
- "pathCtrlPtTooltip": "Drag control point to adjust curve properties",
- "pathNodeTooltip": "Drag node to move it. Double-click node to change segment type",
- "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file."
- }
-}
-] \ No newline at end of file
diff --git a/files_svgedit/js/locale/lang.uk.js b/files_svgedit/js/locale/lang.uk.js
deleted file mode 100644
index 92fb598cf..000000000
--- a/files_svgedit/js/locale/lang.uk.js
+++ /dev/null
@@ -1,173 +0,0 @@
-[
-{"id": "align_relative_to", "title": "Вирівняти по відношенню до ..."},
-{"id": "bkgnd_color", "title": "Зміна кольору тла / непрозорість"},
-{"id": "circle_cx", "title": "CX зміну кола координата"},
-{"id": "circle_cy", "title": "Зміни гуртка CY координати"},
-{"id": "circle_r", "title": "Зміна кола&#39;s радіус"},
-{"id": "connector_no_arrow", "textContent": "No arrow"},
-{"id": "copyrightLabel", "textContent": "Powered by"},
-{"id": "cornerRadiusLabel", "title": "Зміни прямокутник Corner Radius"},
-{"id": "curve_segments", "textContent": "Curve"},
-{"id": "ellipse_cx", "title": "Зміни еліпса CX координати"},
-{"id": "ellipse_cy", "title": "Зміни еліпса CY координати"},
-{"id": "ellipse_rx", "title": "Х Зміни еліпса радіусом"},
-{"id": "ellipse_ry", "title": "Зміни у еліпса радіусом"},
-{"id": "fill_color", "title": "Зміна кольору заливки"},
-{"id": "fitToContent", "textContent": "За розміром змісту"},
-{"id": "fit_to_all", "textContent": "За розміром весь вміст"},
-{"id": "fit_to_canvas", "textContent": "Розмір полотна"},
-{"id": "fit_to_layer_content", "textContent": "За розміром шар змісту"},
-{"id": "fit_to_sel", "textContent": "Вибір розміру"},
-{"id": "font_family", "title": "Зміни Сімейство шрифтів"},
-{"id": "icon_large", "textContent": "Large"},
-{"id": "icon_medium", "textContent": "Medium"},
-{"id": "icon_small", "textContent": "Small"},
-{"id": "icon_xlarge", "textContent": "Extra Large"},
-{"id": "image_height", "title": "Зміна висоти зображення"},
-{"id": "image_opt_embed", "textContent": "Embed data (local files)"},
-{"id": "image_opt_ref", "textContent": "Use file reference"},
-{"id": "image_url", "title": "Змінити URL"},
-{"id": "image_width", "title": "Зміни ширина зображення"},
-{"id": "includedImages", "textContent": "Included Images"},
-{"id": "largest_object", "textContent": "найбільший об&#39;єкт"},
-{"id": "layer_delete", "title": "Видалити шар"},
-{"id": "layer_down", "title": "Перемістити шар на"},
-{"id": "layer_new", "title": "Новий шар"},
-{"id": "layer_rename", "title": "Перейменувати Шар"},
-{"id": "layer_up", "title": "Переміщення шару до"},
-{"id": "layersLabel", "textContent": "Шари:"},
-{"id": "line_x1", "title": "Зміни починає координати лінія х"},
-{"id": "line_x2", "title": "Зміни за період, що закінчився лінія координати х"},
-{"id": "line_y1", "title": "Зміни лінія починає Y координата"},
-{"id": "line_y2", "title": "Зміна за період, що закінчився лінія Y координата"},
-{"id": "linecap_butt", "title": "Linecap: Butt"},
-{"id": "linecap_round", "title": "Linecap: Round"},
-{"id": "linecap_square", "title": "Linecap: Square"},
-{"id": "linejoin_bevel", "title": "Linejoin: Bevel"},
-{"id": "linejoin_miter", "title": "Linejoin: Miter"},
-{"id": "linejoin_round", "title": "Linejoin: Round"},
-{"id": "main_icon", "title": "Main Menu"},
-{"id": "mode_connect", "title": "Connect two objects"},
-{"id": "page", "textContent": "сторінка"},
-{"id": "palette", "title": "Натисніть для зміни кольору заливки, Shift-Click змінити обвід"},
-{"id": "path_node_x", "title": "Change node's x coordinate"},
-{"id": "path_node_y", "title": "Change node's y coordinate"},
-{"id": "rect_height_tool", "title": "Зміни прямокутник висотою"},
-{"id": "rect_width_tool", "title": "Зміна ширини прямокутника"},
-{"id": "relativeToLabel", "textContent": "в порівнянні з:"},
-{"id": "seg_type", "title": "Change Segment type"},
-{"id": "selLayerLabel", "textContent": "Move elements to:"},
-{"id": "selLayerNames", "title": "Move selected elements to a different layer"},
-{"id": "selectedPredefined", "textContent": "Виберіть зумовлений:"},
-{"id": "selected_objects", "textContent": "обраними об&#39;єктами"},
-{"id": "selected_x", "title": "Change X coordinate"},
-{"id": "selected_y", "title": "Change Y coordinate"},
-{"id": "smallest_object", "textContent": "маленький об&#39;єкт"},
-{"id": "straight_segments", "textContent": "Straight"},
-{"id": "stroke_color", "title": "Зміна кольору інсульт"},
-{"id": "stroke_style", "title": "Зміна стилю інсульт тире"},
-{"id": "stroke_width", "title": "Зміни ширина штриха"},
-{"id": "svginfo_bg_note", "textContent": "Note: Background will not be saved with image."},
-{"id": "svginfo_change_background", "textContent": "Editor Background"},
-{"id": "svginfo_dim", "textContent": "Canvas Dimensions"},
-{"id": "svginfo_editor_prefs", "textContent": "Editor Preferences"},
-{"id": "svginfo_height", "textContent": "Висота:"},
-{"id": "svginfo_icons", "textContent": "Icon size"},
-{"id": "svginfo_image_props", "textContent": "Image Properties"},
-{"id": "svginfo_lang", "textContent": "Language"},
-{"id": "svginfo_title", "textContent": "Title"},
-{"id": "svginfo_width", "textContent": "Ширина:"},
-{"id": "text", "title": "Зміна змісту тексту"},
-{"id": "toggle_stroke_tools", "title": "Show/hide more stroke tools"},
-{"id": "tool_add_subpath", "title": "Add sub-path"},
-{"id": "tool_alignbottom", "title": "Вирівняти по нижньому краю"},
-{"id": "tool_aligncenter", "title": "Вирівняти по центру"},
-{"id": "tool_alignleft", "title": "По лівому краю"},
-{"id": "tool_alignmiddle", "title": "Вирівняти Близького"},
-{"id": "tool_alignright", "title": "По правому краю"},
-{"id": "tool_aligntop", "title": "Вирівняти по верхньому краю"},
-{"id": "tool_angle", "title": "Зміна кута повороту"},
-{"id": "tool_blur", "title": "Change gaussian blur value"},
-{"id": "tool_bold", "title": "Товстий текст"},
-{"id": "tool_circle", "title": "Коло"},
-{"id": "tool_clear", "textContent": "Нове зображення"},
-{"id": "tool_clone", "title": "Клон Елементу"},
-{"id": "tool_clone_multi", "title": "Клон Елементи"},
-{"id": "tool_delete", "title": "Видалити елемент"},
-{"id": "tool_delete_multi", "title": "Видалити вибрані елементи [Delete/Backspace]"},
-{"id": "tool_docprops", "textContent": "Властивості документа"},
-{"id": "tool_docprops_cancel", "textContent": "Скасування"},
-{"id": "tool_docprops_save", "textContent": "Зберегти"},
-{"id": "tool_ellipse", "title": "Еліпс"},
-{"id": "tool_export", "textContent": "Export as PNG"},
-{"id": "tool_eyedropper", "title": "Eye Dropper Tool"},
-{"id": "tool_fhellipse", "title": "Вільної руки Еліпс"},
-{"id": "tool_fhpath", "title": "Pencil Tool"},
-{"id": "tool_fhrect", "title": "Вільної руки Прямокутник"},
-{"id": "tool_font_size", "title": "Змінити розмір шрифту"},
-{"id": "tool_group", "title": "Група елементів"},
-{"id": "tool_image", "title": "Image Tool"},
-{"id": "tool_import", "textContent": "Import SVG"},
-{"id": "tool_italic", "title": "Похилий текст"},
-{"id": "tool_line", "title": "Line Tool"},
-{"id": "tool_move_bottom", "title": "Перемістити вниз"},
-{"id": "tool_move_top", "title": "Перемістити догори"},
-{"id": "tool_node_clone", "title": "Clone Node"},
-{"id": "tool_node_delete", "title": "Delete Node"},
-{"id": "tool_node_link", "title": "Link Control Points"},
-{"id": "tool_opacity", "title": "Зміна вибраного пункту непрозорості"},
-{"id": "tool_open", "textContent": "Відкрити зображення"},
-{"id": "tool_path", "title": "Path Tool"},
-{"id": "tool_rect", "title": "Прямокутник"},
-{"id": "tool_redo", "title": "Повтор"},
-{"id": "tool_reorient", "title": "Reorient path"},
-{"id": "tool_save", "textContent": "Зберегти малюнок"},
-{"id": "tool_select", "title": "Виберіть інструмент"},
-{"id": "tool_source", "title": "Змінити вихідний"},
-{"id": "tool_source_cancel", "textContent": "Скасування"},
-{"id": "tool_source_save", "textContent": "Зберегти"},
-{"id": "tool_square", "title": "Площа"},
-{"id": "tool_text", "title": "Текст Tool"},
-{"id": "tool_topath", "title": "Convert to Path"},
-{"id": "tool_undo", "title": "Скасувати"},
-{"id": "tool_ungroup", "title": "Елементи розгрупувати"},
-{"id": "tool_wireframe", "title": "Wireframe Mode"},
-{"id": "tool_zoom", "title": "Zoom Tool"},
-{"id": "url_notice", "title": "NOTE: This image cannot be embedded. It will depend on this path to be displayed"},
-{"id": "zoom_panel", "title": "Зміна масштабу"},
-{"id": "sidepanel_handle", "textContent": "L a y e r s", "title": "Drag left/right to resize side panel"},
-{
- "js_strings": {
- "QerrorsRevertToSource": "There were parsing errors in your SVG source.\nRevert back to original SVG source?",
- "QignoreSourceChanges": "Ignore changes made to SVG source?",
- "QmoveElemsToLayer": "Move selected elements to layer '%s'?",
- "QwantToClear": "Do you want to clear the drawing?\nThis will also erase your undo history!",
- "cancel": "Cancel",
- "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.",
- "dupeLayerName": "There is already a layer named that!",
- "enterNewImgURL": "Enter the new image URL",
- "enterNewLayerName": "Please enter the new layer name",
- "enterUniqueLayerName": "Please enter a unique layer name",
- "exportNoBlur": "Blurred elements will appear as un-blurred",
- "exportNoDashArray": "Strokes will appear filled",
- "exportNoImage": "Image elements will not appear",
- "exportNoText": "Text may not appear as expected",
- "exportNoforeignObject": "foreignObject elements will not appear",
- "featNotSupported": "Feature not supported",
- "invalidAttrValGiven": "Invalid value given",
- "key_backspace": "backspace",
- "key_del": "delete",
- "key_down": "down",
- "key_up": "up",
- "layer": "Layer",
- "layerHasThatName": "Layer already has that name",
- "loadingImage": "Loading image, please wait...",
- "noContentToFitTo": "No content to fit to",
- "noteTheseIssues": "Also note the following issues: ",
- "ok": "OK",
- "pathCtrlPtTooltip": "Drag control point to adjust curve properties",
- "pathNodeTooltip": "Drag node to move it. Double-click node to change segment type",
- "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file."
- }
-}
-] \ No newline at end of file
diff --git a/files_svgedit/js/locale/lang.vi.js b/files_svgedit/js/locale/lang.vi.js
deleted file mode 100644
index 5db7d0002..000000000
--- a/files_svgedit/js/locale/lang.vi.js
+++ /dev/null
@@ -1,173 +0,0 @@
-[
-{"id": "align_relative_to", "title": "Căn liên quan đến ..."},
-{"id": "bkgnd_color", "title": "Thay đổi màu nền / opacity"},
-{"id": "circle_cx", "title": "Thay đổi hình tròn của cx phối hợp"},
-{"id": "circle_cy", "title": "Thay đổi hình tròn của vi phối hợp"},
-{"id": "circle_r", "title": "Thay đổi bán kính của hình tròn"},
-{"id": "connector_no_arrow", "textContent": "No arrow"},
-{"id": "copyrightLabel", "textContent": "Powered by"},
-{"id": "cornerRadiusLabel", "title": "Thay đổi chữ nhật Corner Radius"},
-{"id": "curve_segments", "textContent": "Curve"},
-{"id": "ellipse_cx", "title": "Thay đổi hình elip của cx phối hợp"},
-{"id": "ellipse_cy", "title": "Thay đổi hình elip của vi phối hợp"},
-{"id": "ellipse_rx", "title": "Thay đổi hình elip của x bán kính"},
-{"id": "ellipse_ry", "title": "Y Thay đổi bán kính của hình ellipse"},
-{"id": "fill_color", "title": "Thay đổi đầy màu sắc"},
-{"id": "fitToContent", "textContent": "Phù hợp với nội dung"},
-{"id": "fit_to_all", "textContent": "Phù hợp với tất cả nội dung"},
-{"id": "fit_to_canvas", "textContent": "Phù hợp với vải"},
-{"id": "fit_to_layer_content", "textContent": "Vào lớp phù hợp với nội dung"},
-{"id": "fit_to_sel", "textContent": "Phù hợp để lựa chọn"},
-{"id": "font_family", "title": "Thay đổi Font Gia đình"},
-{"id": "icon_large", "textContent": "Large"},
-{"id": "icon_medium", "textContent": "Medium"},
-{"id": "icon_small", "textContent": "Small"},
-{"id": "icon_xlarge", "textContent": "Extra Large"},
-{"id": "image_height", "title": "Thay đổi hình ảnh chiều cao"},
-{"id": "image_opt_embed", "textContent": "Embed data (local files)"},
-{"id": "image_opt_ref", "textContent": "Use file reference"},
-{"id": "image_url", "title": "Thay đổi URL"},
-{"id": "image_width", "title": "Thay đổi hình ảnh rộng"},
-{"id": "includedImages", "textContent": "Included Images"},
-{"id": "largest_object", "textContent": "lớn nhất đối tượng"},
-{"id": "layer_delete", "title": "Xoá Layer"},
-{"id": "layer_down", "title": "Move Layer Down"},
-{"id": "layer_new", "title": "New Layer"},
-{"id": "layer_rename", "title": "Đổi tên Layer"},
-{"id": "layer_up", "title": "Di chuyển Layer Up"},
-{"id": "layersLabel", "textContent": "Lớp:"},
-{"id": "line_x1", "title": "Thay đổi dòng của bắt đầu từ x phối hợp"},
-{"id": "line_x2", "title": "Thay đổi dòng của x kết thúc sớm nhất phối hợp"},
-{"id": "line_y1", "title": "Thay đổi dòng của bắt đầu từ y phối hợp"},
-{"id": "line_y2", "title": "Thay đổi dòng của kết thúc y phối hợp"},
-{"id": "linecap_butt", "title": "Linecap: Butt"},
-{"id": "linecap_round", "title": "Linecap: Round"},
-{"id": "linecap_square", "title": "Linecap: Square"},
-{"id": "linejoin_bevel", "title": "Linejoin: Bevel"},
-{"id": "linejoin_miter", "title": "Linejoin: Miter"},
-{"id": "linejoin_round", "title": "Linejoin: Round"},
-{"id": "main_icon", "title": "Main Menu"},
-{"id": "mode_connect", "title": "Connect two objects"},
-{"id": "page", "textContent": "Sửa"},
-{"id": "palette", "title": "Nhấn vào đây để thay đổi đầy màu sắc, thay đổi nhấp chuột để thay đổi màu sắc đột quỵ"},
-{"id": "path_node_x", "title": "Change node's x coordinate"},
-{"id": "path_node_y", "title": "Change node's y coordinate"},
-{"id": "rect_height_tool", "title": "Thay đổi hình chữ nhật chiều cao"},
-{"id": "rect_width_tool", "title": "Thay đổi hình chữ nhật chiều rộng"},
-{"id": "relativeToLabel", "textContent": "liên quan đến:"},
-{"id": "seg_type", "title": "Change Segment type"},
-{"id": "selLayerLabel", "textContent": "Move elements to:"},
-{"id": "selLayerNames", "title": "Move selected elements to a different layer"},
-{"id": "selectedPredefined", "textContent": "Chọn định sẵn:"},
-{"id": "selected_objects", "textContent": "bầu các đối tượng"},
-{"id": "selected_x", "title": "Change X coordinate"},
-{"id": "selected_y", "title": "Change Y coordinate"},
-{"id": "smallest_object", "textContent": "nhỏ đối tượng"},
-{"id": "straight_segments", "textContent": "Straight"},
-{"id": "stroke_color", "title": "Thay đổi màu sắc đột quỵ"},
-{"id": "stroke_style", "title": "Thay đổi phong cách đột quỵ dash"},
-{"id": "stroke_width", "title": "Thay đổi chiều rộng đột quỵ"},
-{"id": "svginfo_bg_note", "textContent": "Note: Background will not be saved with image."},
-{"id": "svginfo_change_background", "textContent": "Editor Background"},
-{"id": "svginfo_dim", "textContent": "Canvas Dimensions"},
-{"id": "svginfo_editor_prefs", "textContent": "Editor Preferences"},
-{"id": "svginfo_height", "textContent": "Chiều cao:"},
-{"id": "svginfo_icons", "textContent": "Icon size"},
-{"id": "svginfo_image_props", "textContent": "Image Properties"},
-{"id": "svginfo_lang", "textContent": "Language"},
-{"id": "svginfo_title", "textContent": "Title"},
-{"id": "svginfo_width", "textContent": "Chiều rộng:"},
-{"id": "text", "title": "Thay đổi nội dung văn bản"},
-{"id": "toggle_stroke_tools", "title": "Show/hide more stroke tools"},
-{"id": "tool_add_subpath", "title": "Add sub-path"},
-{"id": "tool_alignbottom", "title": "Align Bottom"},
-{"id": "tool_aligncenter", "title": "Căn giữa"},
-{"id": "tool_alignleft", "title": "Căn còn lại"},
-{"id": "tool_alignmiddle", "title": "Căn Trung"},
-{"id": "tool_alignright", "title": "Căn phải"},
-{"id": "tool_aligntop", "title": "Căn Top"},
-{"id": "tool_angle", "title": "Thay đổi góc xoay"},
-{"id": "tool_blur", "title": "Change gaussian blur value"},
-{"id": "tool_bold", "title": "Bold Text"},
-{"id": "tool_circle", "title": "Circle"},
-{"id": "tool_clear", "textContent": "Hình mới"},
-{"id": "tool_clone", "title": "Clone Element"},
-{"id": "tool_clone_multi", "title": "Clone Elements"},
-{"id": "tool_delete", "title": "Xóa Element"},
-{"id": "tool_delete_multi", "title": "Delete Selected Elements"},
-{"id": "tool_docprops", "textContent": "Document Properties"},
-{"id": "tool_docprops_cancel", "textContent": "Hủy"},
-{"id": "tool_docprops_save", "textContent": "Lưu"},
-{"id": "tool_ellipse", "title": "Ellipse"},
-{"id": "tool_export", "textContent": "Export as PNG"},
-{"id": "tool_eyedropper", "title": "Eye Dropper Tool"},
-{"id": "tool_fhellipse", "title": "Việt-Hand Ellipse"},
-{"id": "tool_fhpath", "title": "Bút chì Công cụ"},
-{"id": "tool_fhrect", "title": "Việt-Hand Hình chữ nhật"},
-{"id": "tool_font_size", "title": "Thay đổi cỡ chữ"},
-{"id": "tool_group", "title": "Nhóm Elements"},
-{"id": "tool_image", "title": "Hình Công cụ"},
-{"id": "tool_import", "textContent": "Import SVG"},
-{"id": "tool_italic", "title": "Italic Text"},
-{"id": "tool_line", "title": "Line Tool"},
-{"id": "tool_move_bottom", "title": "Chuyển đến đáy"},
-{"id": "tool_move_top", "title": "Move to Top"},
-{"id": "tool_node_clone", "title": "Clone Node"},
-{"id": "tool_node_delete", "title": "Delete Node"},
-{"id": "tool_node_link", "title": "Link Control Points"},
-{"id": "tool_opacity", "title": "Thay đổi lựa chọn opacity mục"},
-{"id": "tool_open", "textContent": "Mở Image"},
-{"id": "tool_path", "title": "Path Tool"},
-{"id": "tool_rect", "title": "Hình chữ nhật"},
-{"id": "tool_redo", "title": "Làm lại"},
-{"id": "tool_reorient", "title": "Reorient path"},
-{"id": "tool_save", "textContent": "Save Image"},
-{"id": "tool_select", "title": "Chọn Công cụ"},
-{"id": "tool_source", "title": "Sửa Nguồn"},
-{"id": "tool_source_cancel", "textContent": "Hủy"},
-{"id": "tool_source_save", "textContent": "Lưu"},
-{"id": "tool_square", "title": "Hình vuông"},
-{"id": "tool_text", "title": "Text Tool"},
-{"id": "tool_topath", "title": "Convert to Path"},
-{"id": "tool_undo", "title": "Hoàn tác"},
-{"id": "tool_ungroup", "title": "Ungroup Elements"},
-{"id": "tool_wireframe", "title": "Wireframe Mode"},
-{"id": "tool_zoom", "title": "Zoom Tool"},
-{"id": "url_notice", "title": "NOTE: This image cannot be embedded. It will depend on this path to be displayed"},
-{"id": "zoom_panel", "title": "Thay đổi mức độ phóng"},
-{"id": "sidepanel_handle", "textContent": "L a y e r s", "title": "Drag left/right to resize side panel"},
-{
- "js_strings": {
- "QerrorsRevertToSource": "There were parsing errors in your SVG source.\nRevert back to original SVG source?",
- "QignoreSourceChanges": "Ignore changes made to SVG source?",
- "QmoveElemsToLayer": "Move selected elements to layer '%s'?",
- "QwantToClear": "Do you want to clear the drawing?\nThis will also erase your undo history!",
- "cancel": "Cancel",
- "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.",
- "dupeLayerName": "There is already a layer named that!",
- "enterNewImgURL": "Enter the new image URL",
- "enterNewLayerName": "Please enter the new layer name",
- "enterUniqueLayerName": "Please enter a unique layer name",
- "exportNoBlur": "Blurred elements will appear as un-blurred",
- "exportNoDashArray": "Strokes will appear filled",
- "exportNoImage": "Image elements will not appear",
- "exportNoText": "Text may not appear as expected",
- "exportNoforeignObject": "foreignObject elements will not appear",
- "featNotSupported": "Feature not supported",
- "invalidAttrValGiven": "Invalid value given",
- "key_backspace": "backspace",
- "key_del": "delete",
- "key_down": "down",
- "key_up": "up",
- "layer": "Layer",
- "layerHasThatName": "Layer already has that name",
- "loadingImage": "Loading image, please wait...",
- "noContentToFitTo": "No content to fit to",
- "noteTheseIssues": "Also note the following issues: ",
- "ok": "OK",
- "pathCtrlPtTooltip": "Drag control point to adjust curve properties",
- "pathNodeTooltip": "Drag node to move it. Double-click node to change segment type",
- "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file."
- }
-}
-] \ No newline at end of file
diff --git a/files_svgedit/js/locale/lang.yi.js b/files_svgedit/js/locale/lang.yi.js
deleted file mode 100644
index 3a7e63e24..000000000
--- a/files_svgedit/js/locale/lang.yi.js
+++ /dev/null
@@ -1,173 +0,0 @@
-[
-{"id": "align_relative_to", "title": "יינרייען קאָרעוו צו ..."},
-{"id": "bkgnd_color", "title": "ענדערן הינטערגרונט פאַרב / אָופּאַסאַטי"},
-{"id": "circle_cx", "title": "ענדערן קרייז ס קקס קאָואָרדאַנאַט"},
-{"id": "circle_cy", "title": "ענדערן קרייז ס סי קאָואָרדאַנאַט"},
-{"id": "circle_r", "title": "ענדערן קרייז ס ראַדיוס"},
-{"id": "connector_no_arrow", "textContent": "No arrow"},
-{"id": "copyrightLabel", "textContent": "Powered by"},
-{"id": "cornerRadiusLabel", "title": "ענדערן רעקטאַנגלע קאָרנער ראַדיוס"},
-{"id": "curve_segments", "textContent": "Curve"},
-{"id": "ellipse_cx", "title": "ענדערן יליפּס ס קקס קאָואָרדאַנאַט"},
-{"id": "ellipse_cy", "title": "ענדערן יליפּס ס סי קאָואָרדאַנאַט"},
-{"id": "ellipse_rx", "title": "ענדערן יליפּס ס &#39;קס ראַדיוס"},
-{"id": "ellipse_ry", "title": "ענדערן יליפּס ס &#39;י ראַדיוס"},
-{"id": "fill_color", "title": "ענדערן אָנעסן קאָליר"},
-{"id": "fitToContent", "textContent": "פּאַסיק צו אינהאַלט"},
-{"id": "fit_to_all", "textContent": "פּאַסיק צו אַלע אינהאַלט"},
-{"id": "fit_to_canvas", "textContent": "פּאַסיק צו לייוונט"},
-{"id": "fit_to_layer_content", "textContent": "פּאַסיק צו שיכטע אינהאַלט"},
-{"id": "fit_to_sel", "textContent": "פּאַסיק צו אָפּקלייב"},
-{"id": "font_family", "title": "ענדערן פאָנט פאַמילי"},
-{"id": "icon_large", "textContent": "Large"},
-{"id": "icon_medium", "textContent": "Medium"},
-{"id": "icon_small", "textContent": "Small"},
-{"id": "icon_xlarge", "textContent": "Extra Large"},
-{"id": "image_height", "title": "טוישן בילד הייך"},
-{"id": "image_opt_embed", "textContent": "Embed data (local files)"},
-{"id": "image_opt_ref", "textContent": "Use file reference"},
-{"id": "image_url", "title": "ענדערן URL"},
-{"id": "image_width", "title": "טוישן בילד ברייט"},
-{"id": "includedImages", "textContent": "Included Images"},
-{"id": "largest_object", "textContent": "לאַרדזשאַסט קעגן"},
-{"id": "layer_delete", "title": "ויסמעקן לייַער"},
-{"id": "layer_down", "title": "קער לייַער דאָוון"},
-{"id": "layer_new", "title": "ניו לייַער"},
-{"id": "layer_rename", "title": "רענאַמע לייַער"},
-{"id": "layer_up", "title": "באַוועגן לייַער אַרויף"},
-{"id": "layersLabel", "textContent": "לייַערס:"},
-{"id": "line_x1", "title": "טוישן ליניע ס &#39;סטאַרטינג קס קאָואָרדאַנאַט"},
-{"id": "line_x2", "title": "טוישן ליניע ס &#39;סאָף קס קאָואָרדאַנאַט"},
-{"id": "line_y1", "title": "טוישן ליניע ס &#39;סטאַרטינג י קאָואָרדאַנאַט"},
-{"id": "line_y2", "title": "טוישן ליניע ס &#39;סאָף י קאָואָרדאַנאַט"},
-{"id": "linecap_butt", "title": "Linecap: Butt"},
-{"id": "linecap_round", "title": "Linecap: Round"},
-{"id": "linecap_square", "title": "Linecap: Square"},
-{"id": "linejoin_bevel", "title": "Linejoin: Bevel"},
-{"id": "linejoin_miter", "title": "Linejoin: Miter"},
-{"id": "linejoin_round", "title": "Linejoin: Round"},
-{"id": "main_icon", "title": "Main Menu"},
-{"id": "mode_connect", "title": "Connect two objects"},
-{"id": "page", "textContent": "בלאַט"},
-{"id": "palette", "title": "גיט צו ענדערן אָנעסן קאָליר, יבעררוק-גיט צו טוישן מאַך קאָליר"},
-{"id": "path_node_x", "title": "Change node's x coordinate"},
-{"id": "path_node_y", "title": "Change node's y coordinate"},
-{"id": "rect_height_tool", "title": "ענדערן גראָדעק הייך"},
-{"id": "rect_width_tool", "title": "ענדערן גראָדעק ברייט"},
-{"id": "relativeToLabel", "textContent": "קאָרעוו צו:"},
-{"id": "seg_type", "title": "Change Segment type"},
-{"id": "selLayerLabel", "textContent": "Move elements to:"},
-{"id": "selLayerNames", "title": "Move selected elements to a different layer"},
-{"id": "selectedPredefined", "textContent": "סעלעקטירן פּרעדעפינעד:"},
-{"id": "selected_objects", "textContent": "עלעקטעד אַבדזשעקץ"},
-{"id": "selected_x", "title": "Change X coordinate"},
-{"id": "selected_y", "title": "Change Y coordinate"},
-{"id": "smallest_object", "textContent": "סמאָלאַסט קעגן"},
-{"id": "straight_segments", "textContent": "Straight"},
-{"id": "stroke_color", "title": "טוישן מאַך קאָליר"},
-{"id": "stroke_style", "title": "טוישן מאַך לאָך מאָדע"},
-{"id": "stroke_width", "title": "טוישן מאַך ברייט"},
-{"id": "svginfo_bg_note", "textContent": "Note: Background will not be saved with image."},
-{"id": "svginfo_change_background", "textContent": "Editor Background"},
-{"id": "svginfo_dim", "textContent": "Canvas Dimensions"},
-{"id": "svginfo_editor_prefs", "textContent": "Editor Preferences"},
-{"id": "svginfo_height", "textContent": "הויך:"},
-{"id": "svginfo_icons", "textContent": "Icon size"},
-{"id": "svginfo_image_props", "textContent": "Image Properties"},
-{"id": "svginfo_lang", "textContent": "Language"},
-{"id": "svginfo_title", "textContent": "Title"},
-{"id": "svginfo_width", "textContent": "ברייט:"},
-{"id": "text", "title": "ענדערן טעקסט אינהאַלט"},
-{"id": "toggle_stroke_tools", "title": "Show/hide more stroke tools"},
-{"id": "tool_add_subpath", "title": "Add sub-path"},
-{"id": "tool_alignbottom", "title": "יינרייען באָטטאָם"},
-{"id": "tool_aligncenter", "title": "יינרייען צענטער"},
-{"id": "tool_alignleft", "title": "יינרייען לעפט"},
-{"id": "tool_alignmiddle", "title": "יינרייען מיטל"},
-{"id": "tool_alignright", "title": "יינרייען רעכט"},
-{"id": "tool_aligntop", "title": "יינרייען Top"},
-{"id": "tool_angle", "title": "ענדערן ראָוטיישאַן ווינקל"},
-{"id": "tool_blur", "title": "Change gaussian blur value"},
-{"id": "tool_bold", "title": "דרייסט טעקסט"},
-{"id": "tool_circle", "title": "קאַראַהאָד"},
-{"id": "tool_clear", "textContent": "ניו בילד"},
-{"id": "tool_clone", "title": "קלאָנע עלעמענט"},
-{"id": "tool_clone_multi", "title": "קלאָנע עלעמענץ"},
-{"id": "tool_delete", "title": "ויסמעקן עלעמענט"},
-{"id": "tool_delete_multi", "title": "ויסמעקן סעלעקטעד עלעמענץ [Delete/Backspace]"},
-{"id": "tool_docprops", "textContent": "דאָקומענט פּראָפּערטיעס"},
-{"id": "tool_docprops_cancel", "textContent": "באָטל מאַכן"},
-{"id": "tool_docprops_save", "textContent": "היט"},
-{"id": "tool_ellipse", "title": "עלליפּסע"},
-{"id": "tool_export", "textContent": "Export as PNG"},
-{"id": "tool_eyedropper", "title": "Eye Dropper Tool"},
-{"id": "tool_fhellipse", "title": "Free-הענט עלליפּסע"},
-{"id": "tool_fhpath", "title": "בלייער טול"},
-{"id": "tool_fhrect", "title": "Free-הענט רעקטאַנגלע"},
-{"id": "tool_font_size", "title": "בייטן פאָנט גרייס"},
-{"id": "tool_group", "title": "גרופּע עלעמענץ"},
-{"id": "tool_image", "title": "בילד טול"},
-{"id": "tool_import", "textContent": "Import SVG"},
-{"id": "tool_italic", "title": "יטאַליק טעקסט"},
-{"id": "tool_line", "title": "שורה טול"},
-{"id": "tool_move_bottom", "title": "מאַך צו באָטטאָם"},
-{"id": "tool_move_top", "title": "באַוועגן צו Top"},
-{"id": "tool_node_clone", "title": "Clone Node"},
-{"id": "tool_node_delete", "title": "Delete Node"},
-{"id": "tool_node_link", "title": "Link Control Points"},
-{"id": "tool_opacity", "title": "ענדערן סעלעקטעד נומער אָופּאַסאַטי"},
-{"id": "tool_open", "textContent": "Open בילד"},
-{"id": "tool_path", "title": "Path Tool"},
-{"id": "tool_rect", "title": "גראָדעק"},
-{"id": "tool_redo", "title": "רעדאָ"},
-{"id": "tool_reorient", "title": "Reorient path"},
-{"id": "tool_save", "textContent": "היט בילד"},
-{"id": "tool_select", "title": "סעלעקטירן טול"},
-{"id": "tool_source", "title": "רעדאַקטירן סאָרס"},
-{"id": "tool_source_cancel", "textContent": "באָטל מאַכן"},
-{"id": "tool_source_save", "textContent": "היט"},
-{"id": "tool_square", "title": "קוואדראט"},
-{"id": "tool_text", "title": "טעקסט טול"},
-{"id": "tool_topath", "title": "Convert to Path"},
-{"id": "tool_undo", "title": "ופמאַכן"},
-{"id": "tool_ungroup", "title": "ונגראָופּ עלעמענץ"},
-{"id": "tool_wireframe", "title": "Wireframe Mode"},
-{"id": "tool_zoom", "title": "פארגרעסער טול"},
-{"id": "url_notice", "title": "NOTE: This image cannot be embedded. It will depend on this path to be displayed"},
-{"id": "zoom_panel", "title": "ענדערן פארגרעסער הייך"},
-{"id": "sidepanel_handle", "textContent": "L a y e r s", "title": "Drag left/right to resize side panel"},
-{
- "js_strings": {
- "QerrorsRevertToSource": "There were parsing errors in your SVG source.\nRevert back to original SVG source?",
- "QignoreSourceChanges": "Ignore changes made to SVG source?",
- "QmoveElemsToLayer": "Move selected elements to layer '%s'?",
- "QwantToClear": "Do you want to clear the drawing?\nThis will also erase your undo history!",
- "cancel": "Cancel",
- "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.",
- "dupeLayerName": "There is already a layer named that!",
- "enterNewImgURL": "Enter the new image URL",
- "enterNewLayerName": "Please enter the new layer name",
- "enterUniqueLayerName": "Please enter a unique layer name",
- "exportNoBlur": "Blurred elements will appear as un-blurred",
- "exportNoDashArray": "Strokes will appear filled",
- "exportNoImage": "Image elements will not appear",
- "exportNoText": "Text may not appear as expected",
- "exportNoforeignObject": "foreignObject elements will not appear",
- "featNotSupported": "Feature not supported",
- "invalidAttrValGiven": "Invalid value given",
- "key_backspace": "backspace",
- "key_del": "delete",
- "key_down": "down",
- "key_up": "up",
- "layer": "Layer",
- "layerHasThatName": "Layer already has that name",
- "loadingImage": "Loading image, please wait...",
- "noContentToFitTo": "No content to fit to",
- "noteTheseIssues": "Also note the following issues: ",
- "ok": "OK",
- "pathCtrlPtTooltip": "Drag control point to adjust curve properties",
- "pathNodeTooltip": "Drag node to move it. Double-click node to change segment type",
- "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file."
- }
-}
-] \ No newline at end of file
diff --git a/files_svgedit/js/locale/lang.zh-CN.js b/files_svgedit/js/locale/lang.zh-CN.js
deleted file mode 100644
index 86ae15fd8..000000000
--- a/files_svgedit/js/locale/lang.zh-CN.js
+++ /dev/null
@@ -1,174 +0,0 @@
-[
-{"id": "align_relative_to", "title": "相对对齐 ..."},
-{"id": "bkgnd_color", "title": "更改背景颜色/不透明"},
-{"id": "circle_cx", "title": "改变循环的CX坐标"},
-{"id": "circle_cy", "title": "改变循环的赛扬坐标"},
-{"id": "circle_r", "title": "改变圆的半径"},
-{"id": "connector_no_arrow", "textContent": "No arrow"},
-{"id": "copyrightLabel", "textContent": "Powered by"},
-{"id": "cornerRadiusLabel", "title": "矩形角半径的变化"},
-{"id": "cornerRadiusLabel", "title": "角半径:"},
-{"id": "curve_segments", "textContent": "Curve"},
-{"id": "ellipse_cx", "title": "改变椭圆的CX坐标"},
-{"id": "ellipse_cy", "title": "改变椭圆的赛扬坐标"},
-{"id": "ellipse_rx", "title": "改变椭圆的x半径"},
-{"id": "ellipse_ry", "title": "改变椭圆的y半径"},
-{"id": "fill_color", "title": "更改填充颜色"},
-{"id": "fitToContent", "textContent": "适合内容"},
-{"id": "fit_to_all", "textContent": "适合于所有的内容"},
-{"id": "fit_to_canvas", "textContent": "适合画布"},
-{"id": "fit_to_layer_content", "textContent": "适合层内容"},
-{"id": "fit_to_sel", "textContent": "适合选择"},
-{"id": "font_family", "title": "更改字体家族"},
-{"id": "icon_large", "textContent": "Large"},
-{"id": "icon_medium", "textContent": "Medium"},
-{"id": "icon_small", "textContent": "Small"},
-{"id": "icon_xlarge", "textContent": "Extra Large"},
-{"id": "image_height", "title": "更改图像高度"},
-{"id": "image_opt_embed", "textContent": "Embed data (local files)"},
-{"id": "image_opt_ref", "textContent": "Use file reference"},
-{"id": "image_url", "title": "更改网址"},
-{"id": "image_width", "title": "更改图像的宽度"},
-{"id": "includedImages", "textContent": "Included Images"},
-{"id": "largest_object", "textContent": "最大对象"},
-{"id": "layer_delete", "title": "删除层"},
-{"id": "layer_down", "title": "层向下移动"},
-{"id": "layer_new", "title": "新层"},
-{"id": "layer_rename", "title": "重命名层"},
-{"id": "layer_up", "title": "移动层最多"},
-{"id": "layersLabel", "textContent": "层:"},
-{"id": "line_x1", "title": "更改行的起点的x坐标"},
-{"id": "line_x2", "title": "更改行的结束x坐标"},
-{"id": "line_y1", "title": "更改行的起点的y坐标"},
-{"id": "line_y2", "title": "更改行的结束y坐标"},
-{"id": "linecap_butt", "title": "Linecap: Butt"},
-{"id": "linecap_round", "title": "Linecap: Round"},
-{"id": "linecap_square", "title": "Linecap: Square"},
-{"id": "linejoin_bevel", "title": "Linejoin: Bevel"},
-{"id": "linejoin_miter", "title": "Linejoin: Miter"},
-{"id": "linejoin_round", "title": "Linejoin: Round"},
-{"id": "main_icon", "title": "Main Menu"},
-{"id": "mode_connect", "title": "Connect two objects"},
-{"id": "page", "textContent": "网页"},
-{"id": "palette", "title": "点击更改填充颜色,按住Shift键单击更改颜色中风"},
-{"id": "path_node_x", "title": "Change node's x coordinate"},
-{"id": "path_node_y", "title": "Change node's y coordinate"},
-{"id": "rect_height_tool", "title": "更改矩形的高度"},
-{"id": "rect_width_tool", "title": "更改矩形的宽度"},
-{"id": "relativeToLabel", "textContent": "相对于:"},
-{"id": "seg_type", "title": "Change Segment type"},
-{"id": "selLayerLabel", "textContent": "Move elements to:"},
-{"id": "selLayerNames", "title": "Move selected elements to a different layer"},
-{"id": "selectedPredefined", "textContent": "选择预定义:"},
-{"id": "selected_objects", "textContent": "选对象"},
-{"id": "selected_x", "title": "Change X coordinate"},
-{"id": "selected_y", "title": "Change Y coordinate"},
-{"id": "smallest_object", "textContent": "最小的对象"},
-{"id": "straight_segments", "textContent": "Straight"},
-{"id": "stroke_color", "title": "中风的颜色变化"},
-{"id": "stroke_style", "title": "更改行程冲刺风格"},
-{"id": "stroke_width", "title": "笔划宽度的变化"},
-{"id": "svginfo_bg_note", "textContent": "Note: Background will not be saved with image."},
-{"id": "svginfo_change_background", "textContent": "Editor Background"},
-{"id": "svginfo_dim", "textContent": "Canvas Dimensions"},
-{"id": "svginfo_editor_prefs", "textContent": "Editor Preferences"},
-{"id": "svginfo_height", "textContent": "高度:"},
-{"id": "svginfo_icons", "textContent": "Icon size"},
-{"id": "svginfo_image_props", "textContent": "Image Properties"},
-{"id": "svginfo_lang", "textContent": "Language"},
-{"id": "svginfo_title", "textContent": "Title"},
-{"id": "svginfo_width", "textContent": "宽度:"},
-{"id": "text", "title": "更改文字内容"},
-{"id": "toggle_stroke_tools", "title": "Show/hide more stroke tools"},
-{"id": "tool_add_subpath", "title": "Add sub-path"},
-{"id": "tool_alignbottom", "title": "底部对齐"},
-{"id": "tool_aligncenter", "title": "居中对齐"},
-{"id": "tool_alignleft", "title": "左对齐"},
-{"id": "tool_alignmiddle", "title": "中间对齐"},
-{"id": "tool_alignright", "title": "右对齐"},
-{"id": "tool_aligntop", "title": "顶端对齐"},
-{"id": "tool_angle", "title": "旋转角度的变化"},
-{"id": "tool_blur", "title": "Change gaussian blur value"},
-{"id": "tool_bold", "title": "粗体"},
-{"id": "tool_circle", "title": "圈"},
-{"id": "tool_clear", "textContent": "新形象"},
-{"id": "tool_clone", "title": "克隆元素"},
-{"id": "tool_clone_multi", "title": "克隆元素"},
-{"id": "tool_delete", "title": "删除元素"},
-{"id": "tool_delete_multi", "title": "删除所选元素"},
-{"id": "tool_docprops", "textContent": "文档属性"},
-{"id": "tool_docprops_cancel", "textContent": "取消"},
-{"id": "tool_docprops_save", "textContent": "保存"},
-{"id": "tool_ellipse", "title": "椭圆"},
-{"id": "tool_export", "textContent": "Export as PNG"},
-{"id": "tool_eyedropper", "title": "Eye Dropper Tool"},
-{"id": "tool_fhellipse", "title": "免费手椭圆"},
-{"id": "tool_fhpath", "title": "铅笔工具"},
-{"id": "tool_fhrect", "title": "免费手矩形"},
-{"id": "tool_font_size", "title": "更改字体大小"},
-{"id": "tool_group", "title": "族元素"},
-{"id": "tool_image", "title": "图像工具"},
-{"id": "tool_import", "textContent": "Import SVG"},
-{"id": "tool_italic", "title": "斜体文本"},
-{"id": "tool_line", "title": "线工具"},
-{"id": "tool_move_bottom", "title": "移至底部"},
-{"id": "tool_move_top", "title": "移动到顶部"},
-{"id": "tool_node_clone", "title": "Clone Node"},
-{"id": "tool_node_delete", "title": "Delete Node"},
-{"id": "tool_node_link", "title": "Link Control Points"},
-{"id": "tool_opacity", "title": "更改所选项目不透明"},
-{"id": "tool_open", "textContent": "打开图像"},
-{"id": "tool_path", "title": "Path Tool"},
-{"id": "tool_rect", "title": "矩形"},
-{"id": "tool_redo", "title": "重做"},
-{"id": "tool_reorient", "title": "Reorient path"},
-{"id": "tool_save", "textContent": "保存图像"},
-{"id": "tool_select", "title": "选择工具"},
-{"id": "tool_source", "title": "编辑源"},
-{"id": "tool_source_cancel", "textContent": "取消"},
-{"id": "tool_source_save", "textContent": "保存"},
-{"id": "tool_square", "title": "广场"},
-{"id": "tool_text", "title": "文字工具"},
-{"id": "tool_topath", "title": "Convert to Path"},
-{"id": "tool_undo", "title": "撤消"},
-{"id": "tool_ungroup", "title": "取消组合元素"},
-{"id": "tool_wireframe", "title": "Wireframe Mode"},
-{"id": "tool_zoom", "title": "缩放工具"},
-{"id": "url_notice", "title": "NOTE: This image cannot be embedded. It will depend on this path to be displayed"},
-{"id": "zoom_panel", "title": "更改缩放级别"},
-{"id": "sidepanel_handle", "textContent": "L a y e r s", "title": "Drag left/right to resize side panel"},
-{
- "js_strings": {
- "QerrorsRevertToSource": "There were parsing errors in your SVG source.\nRevert back to original SVG source?",
- "QignoreSourceChanges": "Ignore changes made to SVG source?",
- "QmoveElemsToLayer": "Move selected elements to layer '%s'?",
- "QwantToClear": "Do you want to clear the drawing?\nThis will also erase your undo history!",
- "cancel": "Cancel",
- "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.",
- "dupeLayerName": "There is already a layer named that!",
- "enterNewImgURL": "Enter the new image URL",
- "enterNewLayerName": "Please enter the new layer name",
- "enterUniqueLayerName": "Please enter a unique layer name",
- "exportNoBlur": "Blurred elements will appear as un-blurred",
- "exportNoDashArray": "Strokes will appear filled",
- "exportNoImage": "Image elements will not appear",
- "exportNoText": "Text may not appear as expected",
- "exportNoforeignObject": "foreignObject elements will not appear",
- "featNotSupported": "Feature not supported",
- "invalidAttrValGiven": "Invalid value given",
- "key_backspace": "backspace",
- "key_del": "delete",
- "key_down": "down",
- "key_up": "up",
- "layer": "Layer",
- "layerHasThatName": "Layer already has that name",
- "loadingImage": "Loading image, please wait...",
- "noContentToFitTo": "No content to fit to",
- "noteTheseIssues": "Also note the following issues: ",
- "ok": "OK",
- "pathCtrlPtTooltip": "Drag control point to adjust curve properties",
- "pathNodeTooltip": "Drag node to move it. Double-click node to change segment type",
- "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file."
- }
-}
-] \ No newline at end of file
diff --git a/files_svgedit/js/locale/lang.zh-HK.js b/files_svgedit/js/locale/lang.zh-HK.js
deleted file mode 100644
index bb595afba..000000000
--- a/files_svgedit/js/locale/lang.zh-HK.js
+++ /dev/null
@@ -1,174 +0,0 @@
-[
-{"id": "align_relative_to", "title": "相对对齐 ..."},
-{"id": "bkgnd_color", "title": "更改背景颜色/不透明"},
-{"id": "circle_cx", "title": "改变循环的CX坐标"},
-{"id": "circle_cy", "title": "改变循环的赛扬坐标"},
-{"id": "circle_r", "title": "改变圆的半径"},
-{"id": "connector_no_arrow", "textContent": "No arrow"},
-{"id": "copyrightLabel", "textContent": "Powered by"},
-{"id": "cornerRadiusLabel", "title": "矩形角半径的变化"},
-{"id": "cornerRadiusLabel", "title": "角半径:"},
-{"id": "curve_segments", "textContent": "Curve"},
-{"id": "ellipse_cx", "title": "改变椭圆的CX坐标"},
-{"id": "ellipse_cy", "title": "改变椭圆的赛扬坐标"},
-{"id": "ellipse_rx", "title": "改变椭圆的x半径"},
-{"id": "ellipse_ry", "title": "改变椭圆的y半径"},
-{"id": "fill_color", "title": "更改填充颜色"},
-{"id": "fitToContent", "textContent": "适合内容"},
-{"id": "fit_to_all", "textContent": "适合于所有的内容"},
-{"id": "fit_to_canvas", "textContent": "适合画布"},
-{"id": "fit_to_layer_content", "textContent": "适合层内容"},
-{"id": "fit_to_sel", "textContent": "适合选择"},
-{"id": "font_family", "title": "更改字体家族"},
-{"id": "icon_large", "textContent": "Large"},
-{"id": "icon_medium", "textContent": "Medium"},
-{"id": "icon_small", "textContent": "Small"},
-{"id": "icon_xlarge", "textContent": "Extra Large"},
-{"id": "image_height", "title": "更改图像高度"},
-{"id": "image_opt_embed", "textContent": "Embed data (local files)"},
-{"id": "image_opt_ref", "textContent": "Use file reference"},
-{"id": "image_url", "title": "更改网址"},
-{"id": "image_width", "title": "更改图像的宽度"},
-{"id": "includedImages", "textContent": "Included Images"},
-{"id": "largest_object", "textContent": "最大对象"},
-{"id": "layer_delete", "title": "删除层"},
-{"id": "layer_down", "title": "层向下移动"},
-{"id": "layer_new", "title": "新层"},
-{"id": "layer_rename", "title": "重命名层"},
-{"id": "layer_up", "title": "移动层最多"},
-{"id": "layersLabel", "textContent": "层:"},
-{"id": "line_x1", "title": "更改行的起点的x坐标"},
-{"id": "line_x2", "title": "更改行的结束x坐标"},
-{"id": "line_y1", "title": "更改行的起点的y坐标"},
-{"id": "line_y2", "title": "更改行的结束y坐标"},
-{"id": "linecap_butt", "title": "Linecap: Butt"},
-{"id": "linecap_round", "title": "Linecap: Round"},
-{"id": "linecap_square", "title": "Linecap: Square"},
-{"id": "linejoin_bevel", "title": "Linejoin: Bevel"},
-{"id": "linejoin_miter", "title": "Linejoin: Miter"},
-{"id": "linejoin_round", "title": "Linejoin: Round"},
-{"id": "main_icon", "title": "Main Menu"},
-{"id": "mode_connect", "title": "Connect two objects"},
-{"id": "page", "textContent": "网页"},
-{"id": "palette", "title": "点击更改填充颜色,按住Shift键单击更改颜色中风"},
-{"id": "path_node_x", "title": "Change node's x coordinate"},
-{"id": "path_node_y", "title": "Change node's y coordinate"},
-{"id": "rect_height_tool", "title": "更改矩形的高度"},
-{"id": "rect_width_tool", "title": "更改矩形的宽度"},
-{"id": "relativeToLabel", "textContent": "相对于:"},
-{"id": "seg_type", "title": "Change Segment type"},
-{"id": "selLayerLabel", "textContent": "Move elements to:"},
-{"id": "selLayerNames", "title": "Move selected elements to a different layer"},
-{"id": "selectedPredefined", "textContent": "选择预定义:"},
-{"id": "selected_objects", "textContent": "选对象"},
-{"id": "selected_x", "title": "Change X coordinate"},
-{"id": "selected_y", "title": "Change Y coordinate"},
-{"id": "smallest_object", "textContent": "最小的对象"},
-{"id": "straight_segments", "textContent": "Straight"},
-{"id": "stroke_color", "title": "中风的颜色变化"},
-{"id": "stroke_style", "title": "更改行程冲刺风格"},
-{"id": "stroke_width", "title": "笔划宽度的变化"},
-{"id": "svginfo_bg_note", "textContent": "Note: Background will not be saved with image."},
-{"id": "svginfo_change_background", "textContent": "Editor Background"},
-{"id": "svginfo_dim", "textContent": "Canvas Dimensions"},
-{"id": "svginfo_editor_prefs", "textContent": "Editor Preferences"},
-{"id": "svginfo_height", "textContent": "高度:"},
-{"id": "svginfo_icons", "textContent": "Icon size"},
-{"id": "svginfo_image_props", "textContent": "Image Properties"},
-{"id": "svginfo_lang", "textContent": "Language"},
-{"id": "svginfo_title", "textContent": "Title"},
-{"id": "svginfo_width", "textContent": "宽度:"},
-{"id": "text", "title": "更改文字内容"},
-{"id": "toggle_stroke_tools", "title": "Show/hide more stroke tools"},
-{"id": "tool_add_subpath", "title": "Add sub-path"},
-{"id": "tool_alignbottom", "title": "底部对齐"},
-{"id": "tool_aligncenter", "title": "居中对齐"},
-{"id": "tool_alignleft", "title": "左对齐"},
-{"id": "tool_alignmiddle", "title": "中间对齐"},
-{"id": "tool_alignright", "title": "右对齐"},
-{"id": "tool_aligntop", "title": "顶端对齐"},
-{"id": "tool_angle", "title": "旋转角度的变化"},
-{"id": "tool_blur", "title": "Change gaussian blur value"},
-{"id": "tool_bold", "title": "粗体"},
-{"id": "tool_circle", "title": "圈"},
-{"id": "tool_clear", "textContent": "新形象"},
-{"id": "tool_clone", "title": "克隆元素"},
-{"id": "tool_clone_multi", "title": "克隆元素"},
-{"id": "tool_delete", "title": "删除元素"},
-{"id": "tool_delete_multi", "title": "删除所选元素"},
-{"id": "tool_docprops", "textContent": "文档属性"},
-{"id": "tool_docprops_cancel", "textContent": "取消"},
-{"id": "tool_docprops_save", "textContent": "保存"},
-{"id": "tool_ellipse", "title": "椭圆"},
-{"id": "tool_export", "textContent": "Export as PNG"},
-{"id": "tool_eyedropper", "title": "Eye Dropper Tool"},
-{"id": "tool_fhellipse", "title": "免费手椭圆"},
-{"id": "tool_fhpath", "title": "铅笔工具"},
-{"id": "tool_fhrect", "title": "免费手矩形"},
-{"id": "tool_font_size", "title": "更改字体大小"},
-{"id": "tool_group", "title": "族元素"},
-{"id": "tool_image", "title": "图像工具"},
-{"id": "tool_import", "textContent": "Import SVG"},
-{"id": "tool_italic", "title": "斜体文本"},
-{"id": "tool_line", "title": "线工具"},
-{"id": "tool_move_bottom", "title": "移至底部"},
-{"id": "tool_move_top", "title": "移动到顶部"},
-{"id": "tool_node_clone", "title": "Clone Node"},
-{"id": "tool_node_delete", "title": "Delete Node"},
-{"id": "tool_node_link", "title": "Link Control Points"},
-{"id": "tool_opacity", "title": "更改所选项目不透明"},
-{"id": "tool_open", "textContent": "打开图像"},
-{"id": "tool_path", "title": "Path Tool"},
-{"id": "tool_rect", "title": "矩形"},
-{"id": "tool_redo", "title": "重做"},
-{"id": "tool_reorient", "title": "Reorient path"},
-{"id": "tool_save", "textContent": "保存图像"},
-{"id": "tool_select", "title": "选择工具"},
-{"id": "tool_source", "title": "编辑源"},
-{"id": "tool_source_cancel", "textContent": "取消"},
-{"id": "tool_source_save", "textContent": "保存"},
-{"id": "tool_square", "title": "广场"},
-{"id": "tool_text", "title": "文字工具"},
-{"id": "tool_topath", "title": "Convert to Path"},
-{"id": "tool_undo", "title": "撤消"},
-{"id": "tool_ungroup", "title": "Ungroup Elements"},
-{"id": "tool_wireframe", "title": "Wireframe Mode"},
-{"id": "tool_zoom", "title": "缩放工具"},
-{"id": "url_notice", "title": "NOTE: This image cannot be embedded. It will depend on this path to be displayed"},
-{"id": "zoom_panel", "title": "更改缩放级别"},
-{"id": "sidepanel_handle", "textContent": "L a y e r s", "title": "Drag left/right to resize side panel"},
-{
- "js_strings": {
- "QerrorsRevertToSource": "There were parsing errors in your SVG source.\nRevert back to original SVG source?",
- "QignoreSourceChanges": "Ignore changes made to SVG source?",
- "QmoveElemsToLayer": "Move selected elements to layer '%s'?",
- "QwantToClear": "Do you want to clear the drawing?\nThis will also erase your undo history!",
- "cancel": "Cancel",
- "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.",
- "dupeLayerName": "There is already a layer named that!",
- "enterNewImgURL": "Enter the new image URL",
- "enterNewLayerName": "Please enter the new layer name",
- "enterUniqueLayerName": "Please enter a unique layer name",
- "exportNoBlur": "Blurred elements will appear as un-blurred",
- "exportNoDashArray": "Strokes will appear filled",
- "exportNoImage": "Image elements will not appear",
- "exportNoText": "Text may not appear as expected",
- "exportNoforeignObject": "foreignObject elements will not appear",
- "featNotSupported": "Feature not supported",
- "invalidAttrValGiven": "Invalid value given",
- "key_backspace": "backspace",
- "key_del": "delete",
- "key_down": "down",
- "key_up": "up",
- "layer": "Layer",
- "layerHasThatName": "Layer already has that name",
- "loadingImage": "Loading image, please wait...",
- "noContentToFitTo": "No content to fit to",
- "noteTheseIssues": "Also note the following issues: ",
- "ok": "OK",
- "pathCtrlPtTooltip": "Drag control point to adjust curve properties",
- "pathNodeTooltip": "Drag node to move it. Double-click node to change segment type",
- "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file."
- }
-}
-] \ No newline at end of file
diff --git a/files_svgedit/js/locale/lang.zh-TW.js b/files_svgedit/js/locale/lang.zh-TW.js
deleted file mode 100644
index 31303f6be..000000000
--- a/files_svgedit/js/locale/lang.zh-TW.js
+++ /dev/null
@@ -1,174 +0,0 @@
-[
-{"id": "align_relative_to", "title": "相對對齊 ..."},
-{"id": "bkgnd_color", "title": "更改背景顏色/不透明"},
-{"id": "circle_cx", "title": "改變圓的CX坐標"},
-{"id": "circle_cy", "title": "改變圓的CY坐標"},
-{"id": "circle_r", "title": "改變圓的半徑"},
-{"id": "connector_no_arrow", "textContent": "No arrow"},
-{"id": "copyrightLabel", "textContent": "Powered by"},
-{"id": "cornerRadiusLabel", "title": "矩形角半徑的變化"},
-{"id": "cornerRadiusLabel", "title": "角半徑:"},
-{"id": "curve_segments", "textContent": "曲線"},
-{"id": "ellipse_cx", "title": "改變橢圓的圓心x軸座標"},
-{"id": "ellipse_cy", "title": "改變橢圓的圓心y軸座標"},
-{"id": "ellipse_rx", "title": "改變橢圓的x軸長"},
-{"id": "ellipse_ry", "title": "改變橢圓的y軸長"},
-{"id": "fill_color", "title": "更改填充顏色"},
-{"id": "fitToContent", "textContent": "適合內容"},
-{"id": "fit_to_all", "textContent": "適合所有的內容"},
-{"id": "fit_to_canvas", "textContent": "適合畫布"},
-{"id": "fit_to_layer_content", "textContent": "適合圖層內容"},
-{"id": "fit_to_sel", "textContent": "適合選取的物件"},
-{"id": "font_family", "title": "更改字體"},
-{"id": "icon_large", "textContent": "大"},
-{"id": "icon_medium", "textContent": "中"},
-{"id": "icon_small", "textContent": "小"},
-{"id": "icon_xlarge", "textContent": "特大"},
-{"id": "image_height", "title": "更改圖像高度"},
-{"id": "image_opt_embed", "textContent": "內嵌資料 (本地端檔案)"},
-{"id": "image_opt_ref", "textContent": "使用檔案參照"},
-{"id": "image_url", "title": "更改網址"},
-{"id": "image_width", "title": "更改圖像的寬度"},
-{"id": "includedImages", "textContent": "包含圖像"},
-{"id": "largest_object", "textContent": "最大的物件"},
-{"id": "layer_delete", "title": "刪除圖層"},
-{"id": "layer_down", "title": "向下移動圖層"},
-{"id": "layer_new", "title": "新增圖層"},
-{"id": "layer_rename", "title": "重新命名圖層"},
-{"id": "layer_up", "title": "向上移動圖層"},
-{"id": "layersLabel", "textContent": "圖層:"},
-{"id": "line_x1", "title": "更改行的起點的x坐標"},
-{"id": "line_x2", "title": "更改行的終點x坐標"},
-{"id": "line_y1", "title": "更改行的起點的y坐標"},
-{"id": "line_y2", "title": "更改行的終點y坐標"},
-{"id": "linecap_butt", "title": "Linecap: Butt"},
-{"id": "linecap_round", "title": "Linecap: Round"},
-{"id": "linecap_square", "title": "Linecap: Square"},
-{"id": "linejoin_bevel", "title": "Linejoin: Bevel"},
-{"id": "linejoin_miter", "title": "Linejoin: Miter"},
-{"id": "linejoin_round", "title": "Linejoin: Round"},
-{"id": "main_icon", "title": "Main Menu"},
-{"id": "mode_connect", "title": "Connect two objects"},
-{"id": "page", "textContent": "網頁"},
-{"id": "palette", "title": "點擊更改填充顏色,按住Shift鍵單擊更改線條顏色"},
-{"id": "path_node_x", "title": "改變節點的x軸座標"},
-{"id": "path_node_y", "title": "改變節點的y軸座標"},
-{"id": "rect_height_tool", "title": "更改矩形的高度"},
-{"id": "rect_width_tool", "title": "更改矩形的寬度"},
-{"id": "relativeToLabel", "textContent": "相對於:"},
-{"id": "seg_type", "title": "Change Segment type"},
-{"id": "selLayerLabel", "textContent": "移動物件到:"},
-{"id": "selLayerNames", "title": "移動被點選的物件其他圖層"},
-{"id": "selectedPredefined", "textContent": "使用預設值:"},
-{"id": "selected_objects", "textContent": "選取物件"},
-{"id": "selected_x", "title": "調整 X 軸"},
-{"id": "selected_y", "title": "調整 Y 軸"},
-{"id": "smallest_object", "textContent": "最小的物件"},
-{"id": "straight_segments", "textContent": "直線"},
-{"id": "stroke_color", "title": "線條顏色"},
-{"id": "stroke_style", "title": "更改線條(虛線)風格"},
-{"id": "stroke_width", "title": "線條寬度"},
-{"id": "svginfo_bg_note", "textContent": "注意: 編輯器背景不會和圖像一起儲存"},
-{"id": "svginfo_change_background", "textContent": "編輯器背景"},
-{"id": "svginfo_dim", "textContent": "畫布大小"},
-{"id": "svginfo_editor_prefs", "textContent": "編輯器屬性"},
-{"id": "svginfo_height", "textContent": "高度:"},
-{"id": "svginfo_icons", "textContent": "圖示大小"},
-{"id": "svginfo_image_props", "textContent": "圖片屬性"},
-{"id": "svginfo_lang", "textContent": "語言"},
-{"id": "svginfo_title", "textContent": "標題"},
-{"id": "svginfo_width", "textContent": "寬度:"},
-{"id": "text", "title": "更改文字內容"},
-{"id": "toggle_stroke_tools", "title": "Show/hide more stroke tools"},
-{"id": "tool_add_subpath", "title": "Add sub-path"},
-{"id": "tool_alignbottom", "title": "底部對齊"},
-{"id": "tool_aligncenter", "title": "居中對齊"},
-{"id": "tool_alignleft", "title": "向左對齊"},
-{"id": "tool_alignmiddle", "title": "中間對齊"},
-{"id": "tool_alignright", "title": "向右對齊"},
-{"id": "tool_aligntop", "title": "頂端對齊"},
-{"id": "tool_angle", "title": "旋轉角度"},
-{"id": "tool_blur", "title": "Change gaussian blur value"},
-{"id": "tool_bold", "title": "粗體"},
-{"id": "tool_circle", "title": "圓"},
-{"id": "tool_clear", "textContent": "清空圖像"},
-{"id": "tool_clone", "title": "複製"},
-{"id": "tool_clone_multi", "title": "複製所選元素"},
-{"id": "tool_delete", "title": "刪除"},
-{"id": "tool_delete_multi", "title": "刪除所選元素"},
-{"id": "tool_docprops", "textContent": "文件屬性"},
-{"id": "tool_docprops_cancel", "textContent": "取消"},
-{"id": "tool_docprops_save", "textContent": "保存"},
-{"id": "tool_ellipse", "title": "橢圓"},
-{"id": "tool_export", "textContent": "Export as PNG"},
-{"id": "tool_eyedropper", "title": "Eye Dropper Tool"},
-{"id": "tool_fhellipse", "title": "徒手畫橢圓"},
-{"id": "tool_fhpath", "title": "鉛筆工具"},
-{"id": "tool_fhrect", "title": "徒手畫矩形"},
-{"id": "tool_font_size", "title": "更改字體大小"},
-{"id": "tool_group", "title": "群組"},
-{"id": "tool_image", "title": "圖像工具"},
-{"id": "tool_import", "textContent": "Import SVG"},
-{"id": "tool_italic", "title": "斜體"},
-{"id": "tool_line", "title": "線工具"},
-{"id": "tool_move_bottom", "title": "移至底部"},
-{"id": "tool_move_top", "title": "移動到頂部"},
-{"id": "tool_node_clone", "title": "增加節點"},
-{"id": "tool_node_delete", "title": "刪除節點"},
-{"id": "tool_node_link", "title": "將控制點連起來"},
-{"id": "tool_opacity", "title": "更改所選項目不透明度"},
-{"id": "tool_open", "textContent": "打開圖像"},
-{"id": "tool_path", "title": "路徑工具"},
-{"id": "tool_rect", "title": "矩形"},
-{"id": "tool_redo", "title": "復原"},
-{"id": "tool_reorient", "title": "調整路徑"},
-{"id": "tool_save", "textContent": "保存圖像"},
-{"id": "tool_select", "title": "選擇工具"},
-{"id": "tool_source", "title": "編輯SVG原始碼"},
-{"id": "tool_source_cancel", "textContent": "取消"},
-{"id": "tool_source_save", "textContent": "保存"},
-{"id": "tool_square", "title": "方形"},
-{"id": "tool_text", "title": "文字工具"},
-{"id": "tool_topath", "title": "轉換成路徑"},
-{"id": "tool_undo", "title": "取消復原"},
-{"id": "tool_ungroup", "title": "取消群組"},
-{"id": "tool_wireframe", "title": "框線模式(只瀏覽線條)"},
-{"id": "tool_zoom", "title": "縮放工具"},
-{"id": "url_notice", "title": "NOTE: This image cannot be embedded. It will depend on this path to be displayed"},
-{"id": "zoom_panel", "title": "更改縮放級別"},
-{"id": "sidepanel_handle", "textContent": "圖層", "title": "拖拉以改變側邊面板的大小"},
-{
- "js_strings": {
- "QerrorsRevertToSource": "SVG原始碼解析錯誤\n要回復到原本的SVG原始碼嗎?",
- "QignoreSourceChanges": "要忽略對SVG原始碼的更動嗎?",
- "QmoveElemsToLayer": "要搬移所選取的物件到'%s'層嗎?",
- "QwantToClear": "要清空圖像嗎?\n這會順便清空你的回復紀錄!",
- "cancel": "取消",
- "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.",
- "dupeLayerName": "喔不!已經有另一個同樣名稱的圖層了!",
- "enterNewImgURL": "輸入新的圖片網址",
- "enterNewLayerName": "請輸入新圖層的名稱",
- "enterUniqueLayerName": "請輸入一個名稱不重複的",
- "exportNoBlur": "Blurred elements will appear as un-blurred",
- "exportNoDashArray": "Strokes will appear filled",
- "exportNoImage": "Image elements will not appear",
- "exportNoText": "Text may not appear as expected",
- "exportNoforeignObject": "foreignObject elements will not appear",
- "featNotSupported": "未提供此功能",
- "invalidAttrValGiven": "數值給定錯誤",
- "key_backspace": "空白",
- "key_del": "刪除",
- "key_down": "下",
- "key_up": "上",
- "layer": "圖層",
- "layerHasThatName": "圖層本來就是這個名稱(抱怨)",
- "loadingImage": "Loading image, please wait...",
- "noContentToFitTo": "找不到符合的內容",
- "noteTheseIssues": "Also note the following issues: ",
- "ok": "確定",
- "pathCtrlPtTooltip": "拖拉控制點以改變曲線性質",
- "pathNodeTooltip": "拖拉節點以移動, 連擊節點以改變線段型態(直線/曲線)",
- "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file."
- }
-}
-] \ No newline at end of file
diff --git a/files_svgedit/js/locale/locale.js b/files_svgedit/js/locale/locale.js
deleted file mode 100644
index ce73288ff..000000000
--- a/files_svgedit/js/locale/locale.js
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Localizing script for SVG-edit UI
- *
- * Licensed under the Apache License, Version 2
- *
- * Copyright(c) 2010 Narendra Sisodya
- * Copyright(c) 2010 Alexis Deveria
- *
- */
-
-var svgEditor = (function($, Editor) {
- Editor.putLocale = function(given_param, good_langs){
- var lang_param;
-
- if(given_param) {
- lang_param = given_param;
- } else {
- lang_param = $.pref('lang');
- if(!lang_param) {
- if (navigator.userLanguage) // Explorer
- lang_param = navigator.userLanguage;
- else if (navigator.language) // FF, Opera, ...
- lang_param = navigator.language;
- if (lang_param == "")
- return;
- }
-
- // Set to English if language is not in list of good langs
- if($.inArray(lang_param, good_langs) == -1) {
- lang_param = "en";
- }
-
- // don't bother on first run if language is English
- if(lang_param.indexOf("en") == 0) return;
- }
-
- var conf = Editor.curConfig;
-
- var url = conf.langPath + "lang." + lang_param + ".js";
-
- var processFile = function(data){
- var LangData = eval(data), js_strings;
- var more = Editor.canvas.runExtensions("addLangData", lang_param, true);
- $.each(more, function(i, m) {
- if(m.data) {
- LangData = $.merge(LangData, m.data);
- }
- });
- $.each(LangData, function(i, data) {
- if(data.id) {
- var elem = $('#svg_editor').parent().find('#'+data.id)[0];
- if(elem) {
- if(data.title)
- elem.title = data.title;
- if(data.textContent) {
- // Only replace non-empty text nodes, not elements
- $.each(elem.childNodes, function(j, node) {
- if(node.nodeType == 3 && $.trim(node.textContent)) {
- node.textContent = data.textContent;
- }
- });
- }
- }
- } else if(data.js_strings) {
- js_strings = data.js_strings;
- }
- });
- Editor.setLang(lang_param, js_strings);
- }
-
- $.ajax({
- 'url': url,
- 'dataType': "text",
- success: processFile,
- error: function(xhr) {
- if(xhr.responseText) {
- processFile(xhr.responseText);
- }
- }
- });
- };
-
- return Editor;
-}(jQuery, svgEditor));
diff --git a/files_svgedit/js/locale/locale.min.js b/files_svgedit/js/locale/locale.min.js
deleted file mode 100644
index 0a4285053..000000000
--- a/files_svgedit/js/locale/locale.min.js
+++ /dev/null
@@ -1 +0,0 @@
-var svgEditor=(function($,Editor){Editor.putLocale=function(given_param,good_langs){var lang_param;if(given_param){lang_param=given_param}else{lang_param=$.pref("lang");if(!lang_param){if(navigator.userLanguage){lang_param=navigator.userLanguage}else{if(navigator.language){lang_param=navigator.language}}if(lang_param==""){return}}if($.inArray(lang_param,good_langs)==-1){lang_param="en"}if(lang_param.indexOf("en")==0){return}}var conf=Editor.curConfig;var url=conf.langPath+"lang."+lang_param+".js";var processFile=function(data){var LangData=eval(data),js_strings;var more=Editor.canvas.runExtensions("addLangData",lang_param,true);$.each(more,function(i,m){if(m.data){LangData=$.merge(LangData,m.data)}});$.each(LangData,function(i,data){if(data.id){var elem=$("#svg_editor").parent().find("#"+data.id)[0];if(elem){if(data.title){elem.title=data.title}if(data.textContent){$.each(elem.childNodes,function(j,node){if(node.nodeType==3&&$.trim(node.textContent)){node.textContent=data.textContent}})}}}else{if(data.js_strings){js_strings=data.js_strings}}});Editor.setLang(lang_param,js_strings)};$.ajax({url:url,dataType:"text",success:processFile,error:function(xhr){if(xhr.responseText){processFile(xhr.responseText)}}})};return Editor}(jQuery,svgEditor)); \ No newline at end of file
diff --git a/files_svgedit/js/spinbtn/JQuerySpinBtn.min.js b/files_svgedit/js/spinbtn/JQuerySpinBtn.min.js
deleted file mode 100644
index 81469ec09..000000000
--- a/files_svgedit/js/spinbtn/JQuerySpinBtn.min.js
+++ /dev/null
@@ -1 +0,0 @@
-;$.fn.SpinButton=function(a){return this.each(function(){this.repeating=false;this.spinCfg={min:a&&!isNaN(parseFloat(a.min))?Number(a.min):null,max:a&&!isNaN(parseFloat(a.max))?Number(a.max):null,step:a&&a.step?Number(a.step):1,stepfunc:a&&a.stepfunc?a.stepfunc:false,page:a&&a.page?Number(a.page):10,upClass:a&&a.upClass?a.upClass:"up",downClass:a&&a.downClass?a.downClass:"down",reset:a&&a.reset?a.reset:this.value,delay:a&&a.delay?Number(a.delay):500,interval:a&&a.interval?Number(a.interval):100,_btn_width:20,_direction:null,_delay:null,_repeat:null,callback:a&&a.callback?a.callback:null};this.spinCfg.smallStep=a&&a.smallStep?a.smallStep:this.spinCfg.step/2;this.adjustValue=function(d){var c;if(isNaN(this.value)){c=this.spinCfg.reset}else{if($.isFunction(this.spinCfg.stepfunc)){c=this.spinCfg.stepfunc(this,d)}else{c=Number((Number(this.value)+Number(d)).toFixed(5))}}if(this.spinCfg.min!==null){c=Math.max(c,this.spinCfg.min)}if(this.spinCfg.max!==null){c=Math.min(c,this.spinCfg.max)}this.value=c;if($.isFunction(this.spinCfg.callback)){this.spinCfg.callback(this)}};$(this).addClass(a&&a.spinClass?a.spinClass:"spin-button").mousemove(function(h){var d=h.pageX||h.x;var i=h.pageY||h.y;var f=h.target||h.srcElement;var c=$(f).outerHeight()/2;var g=(d>b(f,"offsetLeft")+f.offsetWidth-this.spinCfg._btn_width)?((i<b(f,"offsetTop")+c)?1:-1):0;if(g!==this.spinCfg._direction){switch(g){case 1:$(this).removeClass(this.spinCfg.downClass).addClass(this.spinCfg.upClass);break;case -1:$(this).removeClass(this.spinCfg.upClass).addClass(this.spinCfg.downClass);break;default:$(this).removeClass(this.spinCfg.upClass).removeClass(this.spinCfg.downClass)}this.spinCfg._direction=g}}).mouseout(function(){$(this).removeClass(this.spinCfg.upClass).removeClass(this.spinCfg.downClass);this.spinCfg._direction=null;window.clearInterval(this.spinCfg._repeat);window.clearTimeout(this.spinCfg._delay)}).mousedown(function(g){if(g.button===0&&this.spinCfg._direction!=0){var d=this;var c=g.shiftKey?d.spinCfg.smallStep:d.spinCfg.step;var f=function(){d.adjustValue(d.spinCfg._direction*c)};f();d.spinCfg._delay=window.setTimeout(function(){f();d.spinCfg._repeat=window.setInterval(f,d.spinCfg.interval)},d.spinCfg.delay)}}).mouseup(function(c){window.clearInterval(this.spinCfg._repeat);window.clearTimeout(this.spinCfg._delay)}).dblclick(function(c){if($.browser.msie){this.adjustValue(this.spinCfg._direction*this.spinCfg.step)}}).keydown(function(c){switch(c.keyCode){case 38:this.adjustValue(this.spinCfg.step);break;case 40:this.adjustValue(-this.spinCfg.step);break;case 33:this.adjustValue(this.spinCfg.page);break;case 34:this.adjustValue(-this.spinCfg.page);break}}).keypress(function(c){if(this.repeating){switch(c.keyCode){case 38:this.adjustValue(this.spinCfg.step);break;case 40:this.adjustValue(-this.spinCfg.step);break;case 33:this.adjustValue(this.spinCfg.page);break;case 34:this.adjustValue(-this.spinCfg.page);break}}else{this.repeating=true}}).keyup(function(c){this.repeating=false;switch(c.keyCode){case 38:case 40:case 33:case 34:case 13:this.adjustValue(0);break}}).bind("mousewheel",function(c){if(c.wheelDelta>=120){this.adjustValue(this.spinCfg.step)}else{if(c.wheelDelta<=-120){this.adjustValue(-this.spinCfg.step)}}c.preventDefault()}).change(function(c){this.adjustValue(0)});if(this.addEventListener){this.addEventListener("DOMMouseScroll",function(c){if(c.detail>0){this.adjustValue(-this.spinCfg.step)}else{if(c.detail<0){this.adjustValue(this.spinCfg.step)}}c.preventDefault()},false)}});function b(e,g){var f=e[g],d=document.body;while((e=e.offsetParent)&&(e!=d)){if(!$.browser.msie||(e.currentStyle.position!="relative")){f+=e[g]}}return f}}; \ No newline at end of file
diff --git a/files_svgedit/js/svg-editor.js b/files_svgedit/js/svg-editor.js
deleted file mode 100644
index 1e9405fa8..000000000
--- a/files_svgedit/js/svg-editor.js
+++ /dev/null
@@ -1,3734 +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
- *
- */
-
-(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/',
- extensions: ['ext-markers.js','ext-connector.js', 'ext-eyedropper.js'],
- initTool: 'select',
- wireframe: false
- },
- uiStrings = {
- "invalidAttrValGiven":"Invalid value given",
- "noContentToFitTo":"No content to fit to",
- "layer":"Layer",
- "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: ",
- "ok":"OK",
- "cancel":"Cancel",
- "key_up":"Up",
- "key_down":"Down",
- "key_backspace":"Backspace",
- "key_del":"Del"
- };
-
- var curPrefs = {}; //$.extend({}, defaultPrefs);
- var customHandlers = {};
-
- Editor.curConfig = curConfig;
-
- // 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('.') != -1,
- 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) {
- if(opts.open) {
- $('#tool_open > input[type="file"]').remove();
- $('#tool_open').show();
- svgCanvas.open = opts.open;
- }
- if(opts.save) {
- 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() {
- (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) {
- 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() {
- $.getScript(curConfig.extPath + this);
- });
- }
-
- // Load extensions
- // Bit of a hack to run extensions in local Opera
- if(window.opera && document.location.protocol === 'file:') {
- setTimeout(extFunc, 1000);
- } else {
- extFunc();
- }
-
- $.svgIcons(curConfig.imgPath + 'svg_edit_icons.svg', {
- w:24, h:24,
- id_match: false,
- no_img: true,
- 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_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',
- '#layerlist td.layervis':'eye',
-
- '#tool_source_save,#tool_docprops_save':'ok',
- '#tool_source_cancel,#tool_docprops_cancel':'cancel',
-
- '#rwidthLabel, #iwidthLabel':'width',
- '#rheightLabel, #iheightLabel':'height',
- '#cornerRadiusLabel span':'c_radius',
- '#angleLabel':'angle',
- '#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);
- });
-
- // Use small icons by default if not all left tools are visible
- var tleft = $('#tools_left');
- 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();
- shower.append(clone);
- }
- if(window.opera) shower.children().removeAttr('style');
- });
-
- svgEditor.runCallbacks();
- }
- });
-
- Editor.canvas = svgCanvas = new $.SvgCanvas(document.getElementById("svgcanvas"), curConfig);
-
- 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 = false, //(navigator.platform.indexOf("Mac") != -1);
- modKey = "", //(isMac ? "meta+" : "ctrl+");
- path = svgCanvas.pathActions,
- undoMgr = svgCanvas.undoMgr,
- Utils = svgCanvas.Utils,
- default_img_url = curConfig.imgPath + "logo.png",
- workarea = $("#workarea"),
- show_save_warning = false,
- exportWindow = 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 *'});
- 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.ok + '">').appendTo(btn_holder);
-
- if(type != 'alert') {
- $('<input type="button" value="' + uiStrings.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() {
- $('.tool_button_current').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');
- };
-
- 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 fillPaint = new $.jGraduate.Paint({solidColor: curConfig.initFill.color});
- var strokePaint = new $.jGraduate.Paint({solidColor: curConfig.initStroke.color});
-
- var saveHandler = function(window,svg) {
- 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 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.saveFromBrowser.replace('%s', 'SVG');
-
- // Check if FF and has <defs/>
- if(navigator.userAgent.indexOf('Gecko/') !== -1) {
- if(svg.indexOf('<defs') !== -1) {
- note += "\n\n" + uiStrings.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);
- var datauri = c.toDataURL('image/png');
- exportWindow.location.href = datauri;
-
- var done = $.pref('export_notice_done');
- if(done !== "all") {
- var note = uiStrings.saveFromBrowser.replace('%s', 'PNG');
-
- // Check if there's issues
- if(issues.length) {
- var pre = "\n \u2022 ";
- note += ("\n\n" + uiStrings.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();
- 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 (mode != "multiselect" && !is_node) {
- setSelectMode();
- updateToolbar();
- }
-
- } // if (elem != null)
-
- // Deal with pathedit mode
- togglePathEditMode(is_node, elems);
- updateContextPanel();
- svgCanvas.runExtensions("selectedChanged", {
- elems: elems,
- selectedElement: selectedElement,
- multiselected: multiselected
- });
- };
-
- // called when any element has changed
- var elementChanged = function(window,elems) {
- 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;
- }
- }
-
- 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();
-
- svgCanvas.runExtensions("elementChanged", {
- elems: elems
- });
- };
-
- var zoomChanged = function(window, bbox, autoCenter) {
- var scrbar = 15,
- res = svgCanvas.getResolution(),
- w_area = workarea,
- canvas_pos = $('#svgcanvas').position();
- w_area.css('cursor','auto');
- 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;
- $('#zoom').val(Math.round(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();
- }
-
- 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 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() {
- if($(this).hasClass('disabled')) return false;
- if (toolButtonClick(show_sel)) {
- opts.fn();
- }
- if(opts.icon) {
- var icon = $.getSvgIcon(opts.icon).clone();
- } else {
- //
- var icon = $(opts.sel).children().eq(0).clone();
- }
-
- var shower = $(show_sel);
- 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', opts.sel); // This sets the current mode
- }
-
- $(this).mouseup(func);
-
- if(opts.key) {
- $(document).bind('keydown', opts.key+'', func);
- }
- });
-
- if(def) {
- $(show_sel).attr('data-curopt', btn_opts[def].sel);
- } else if(!$(show_sel).attr('data-curopt')) {
- // Set first as default
- $(show_sel).attr('data-curopt', btn_opts[0].sel);
- }
-
- var timer;
-
- // Clicking the "show" icon should set the current mode
- $(show_sel).mousedown(function(evt) {
- if($(show_sel).hasClass('disabled')) return false;
- var holder = $(show_sel.replace('_show',''));
- var l = holder.css('left');
- var w = holder.width()*-1;
- var time = holder.data('shown_popop')?200:0;
- timer = setTimeout(function() {
- // Show corresponding menu
- holder.css('left', w).show().animate({
- left: l
- },150);
- holder.data('shown_popop',true);
- },time);
- evt.preventDefault();
- }).mouseup(function() {
- clearTimeout(timer);
- var opt = $(this).attr('data-curopt');
- if (toolButtonClick(show_sel)) {
- flyout_funcs[opt]();
- }
- });
-
- // $('#tools_rect').mouseleave(function(){$('#tools_rect').fadeOut();});
-
- var pos = $(show_sel).position();
- $(hold_sel).css({'left': pos.left+34, 'top': pos.top+77});
- });
-
- 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, top: pos.top});
- });
- }
-
- var setFlyoutTitles = function() {
- $('.tools_flyout').each(function() {
- var shower = $('#' + this.id + '_show');
- var tooltips = [];
- $(this).children().each(function() {
- tooltips.push(this.title);
- });
- shower[0].title = tooltips.join(' / ');
- });
- }
-
- var extAdded = function(window, ext) {
-
- var cb_called = false;
-
- var runCallback = function() {
- if(ext.callback && !cb_called) {
- 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;
- placement_obj['#' + id] = svgicon;
- }
-
- var cls, parent;
-
- // Set button up according to its type
- switch ( btn.type ) {
- case 'mode':
- cls = 'tool_button';
- parent = "#tools_left";
- break;
- case 'context':
- cls = 'tool_button';
- parent = "#" + btn.panel;
- // create the panel if it doesn't exist
- if(!$(parent).length)
- $('<div>', {id: btn.panel}).appendTo("#tools_top");
- break;
- }
-
- var button = $(btn.list?'<li/>':'<div/>')
- .attr("id", id)
- .attr("title", btn.title)
- .addClass(cls);
- if(!btn.includeWith && !btn.list) {
- button.appendTo(parent);
- } 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 arr_div = $('<div>',{id:'flyout_arrow_horiz'})
-
- 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});
- });
-
-
- $.svgIcons(svgicons, {
- w:24, h:24,
- id_match: false,
- no_img: true,
- 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') {
- setIconSize(curPrefs.iconsize, true);
- }
- runCallback();
- }
-
- });
- }
-
- runCallback();
- };
-
- var getPaint = function(color, opac) {
- // update the editor's fill paint
- var opts = null;
- if (color.substr(0,5) == "url(#") {
- var grad = document.getElementById(color.substr(5,color.length-6));
- opts = { alpha: opac };
- opts[grad.tagName] = grad;
- }
- else if (color.substr(0,1) == "#") {
- 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 && $.inArray(selectedElement.tagName, ['image', 'foreignObject', 'g', 'a']) === -1) {
- // get opacity values
- var fillOpacity = parseFloat(selectedElement.getAttribute("fill-opacity"));
- if (isNaN(fillOpacity)) {
- fillOpacity = 1.0;
- }
-
- var strokeOpacity = parseFloat(selectedElement.getAttribute("stroke-opacity"));
- if (isNaN(strokeOpacity)) {
- strokeOpacity = 1.0;
- }
-
- // update fill color and opacity
- var fillColor = selectedElement.getAttribute("fill")||"black";
- // prevent undo on these canvas changes
- svgCanvas.setColor('fill', fillColor, true);
- svgCanvas.setPaintOpacity('fill', fillOpacity, true);
-
- // update stroke color and opacity
- var strokeColor = selectedElement.getAttribute("stroke")||"none";
- // prevent undo on these canvas changes
- svgCanvas.setColor('stroke', strokeColor, true);
- svgCanvas.setPaintOpacity('stroke', strokeOpacity, true);
-
- // update the rect inside #fill_color
- $("#stroke_color rect").attr({
- fill: strokeColor,
- opacity: strokeOpacity
- });
-
- // update the rect inside #fill_color
- $("#fill_color rect").attr({
- fill: fillColor,
- opacity: fillOpacity
- });
-
- fillOpacity *= 100;
- strokeOpacity *= 100;
-
- fillPaint = getPaint(fillColor, fillOpacity);
- strokePaint = getPaint(strokeColor, strokeOpacity);
-
- fillOpacity = fillOpacity + " %";
- strokeOpacity = strokeOpacity + " %";
-
- // update fill color
- if (fillColor == "none") {
- fillOpacity = "N/A";
- }
- if (strokeColor == null || strokeColor == "" || strokeColor == "none") {
- strokeColor = "none";
- strokeOpacity = "N/A";
- }
-
- $('#stroke_width').val(selectedElement.getAttribute("stroke-width")||1);
- $('#stroke_style').val(selectedElement.getAttribute("stroke-dasharray")||"none");
-
- var attr = selectedElement.getAttribute("stroke-linejoin") || 'miter';
-
- setStrokeOpt($('#linejoin_' + attr)[0]);
-
- attr = selectedElement.getAttribute("stroke-linecap") || 'butt';
-
- 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();
- };
-
- // 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 currentLayer = svgCanvas.getCurrentLayer();
- var currentMode = svgCanvas.getMode();
- // No need to update anything else in rotate mode
- if (currentMode == 'rotate' && elem != null) {
- var ang = svgCanvas.getRotationAngle(elem);
- $('#angle').val(ang);
- $('#tool_reorient').toggleClass('disabled', ang == 0);
- return;
- }
- var is_node = currentMode == 'pathedit'; //elem ? (elem.id && elem.id.indexOf('pathpointgrip') == 0) : false;
- $('#selected_panel, #multiselected_panel, #g_panel, #rect_panel, #circle_panel,\
- #ellipse_panel, #line_panel, #text_panel, #image_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') {
- var xlinkNS = "http://www.w3.org/1999/xlink";
- var href = elem.getAttributeNS(xlinkNS, "href");
- // Prompt for URL if not a data URL
- if(href.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($.inArray(elname, ['line', 'circle', 'ellipse']) != -1) {
- $('#xy_panel').hide();
- } else {
- var x,y;
- // Get BBox vals for g, polyline and path
- if($.inArray(elname, ['g', 'polyline', 'path']) != -1) {
- var bb = svgCanvas.getStrokedBBox([elem]);
- if(bb) {
- x = bb.x;
- y = bb.y;
- }
- } else {
- x = elem.getAttribute('x');
- y = elem.getAttribute('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 = $.inArray(elname, ['image', 'text', 'path', 'g', 'use']) == -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');
- $('#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: [],
- rect: ['rx','width','height'],
- image: ['width','height'],
- circle: ['cx','cy','r'],
- ellipse: ['cx','cy','rx','ry'],
- line: ['x1','y1','x2','y2'],
- text: []
- };
-
- var el_name = elem.tagName;
-
- if(panels[el_name]) {
- var cur_panel = panels[el_name];
-
-
- $('#' + el_name + '_panel').show();
-
- $.each(cur_panel, function(i, item) {
- $('#' + el_name + '_' + item).val(elem.getAttribute(item) || 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) {
- $('#text').focus().select();
- }
- } // text
- else if(el_name == 'image') {
- var xlinkNS="http://www.w3.org/1999/xlink";
- var href = elem.getAttributeNS(xlinkNS, "href");
- setImageURL(href);
- } // image
- }
- } // if (elem != null)
- else if (multiselected) {
- $('#multiselected_panel').show();
- }
-
- // 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(currentLayer);
- }
- 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("changed", elementChanged);
- svgCanvas.bind("saved", saveHandler);
- svgCanvas.bind("exported", exportHandler);
- svgCanvas.bind("zoomed", zoomChanged);
- 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 && $.inArray(selectedElement.nodeName, ['line', 'polyline']) != -1) {
- 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;
- 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.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);
- });
-
- $('.attr_changer').change(function() {
- var attr = this.getAttribute("data-attr");
- var val = this.value;
- var valid = svgCanvas.isValidUnit(attr, val);
-
- if(!valid) {
- $.alert(uiStrings.invalidAttrValGiven);
- this.value = selectedElement.getAttribute(attr);
- return false;
- }
- // 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').click(function(evt){
- var picker = (evt.shiftKey ? "stroke" : "fill");
- var id = (evt.shiftKey ? '#stroke_' : '#fill_');
- var color = $(this).attr('data-rgb');
- var rectbox = document.getElementById("gradbox_"+picker).parentNode.firstChild;
- var paint = null;
-
- // Webkit-based browsers returned 'initial' here for no stroke
- if (color == 'transparent' || color == 'initial') {
- color = 'none';
- $(id + "opacity").html("N/A");
- paint = new $.jGraduate.Paint();
- }
- else {
- paint = new $.jGraduate.Paint({alpha: 100, solidColor: color.substr(1)});
- }
- rectbox.setAttribute("fill", color);
- rectbox.setAttribute("opacity", 1);
-
- if (evt.shiftKey) {
- strokePaint = paint;
- if (svgCanvas.getColor('stroke') != color) {
- svgCanvas.setColor('stroke', color);
- }
- if (color != 'none' && svgCanvas.getStrokeOpacity() != 1) {
- svgCanvas.setPaintOpacity('stroke', 1.0);
- }
- } else {
- fillPaint = paint;
- if (svgCanvas.getColor('fill') != color) {
- svgCanvas.setColor('fill', color);
- }
- if (color != 'none' && svgCanvas.getFillOpacity('fill') != 1) {
- svgCanvas.setPaintOpacity('fill', 1.0);
- }
- }
- updateToolButtonState();
- });
-
- $("#toggle_stroke_tools").toggle(function() {
- $(".stroke_tool").css('display','table-cell');
- $(this).text('<<');
- }, function() {
- $(".stroke_tool").css('display','none');
- $(this).text('>>');
- });
-
- // 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, fadeFlyouts) {
- if ($(button).hasClass('disabled')) return false;
- if($(button).parent().hasClass('tools_flyout')) return true;
- var fadeFlyouts = fadeFlyouts || 'normal';
- $('.tools_flyout').fadeOut(fadeFlyouts);
- $('#styleoverrides').text('');
- $('.tool_button_current').removeClass('tool_button_current').addClass('tool_button');
- $(button).addClass('tool_button_current').removeClass('tool_button');
- // when a tool is selected, we should deselect any currently selected elements
- svgCanvas.clearSelection();
- 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;
- });
- }());
-
-
- 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.toLowerCase() != "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() {
- $('.tools_flyout:visible').fadeOut();
- });
-
- 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;
- });
- }
- });
- }());
-
- var addDropDown = function(elem, callback, dropUp) {
- var button = $(elem).find('button');
- var list = $(elem).find('ul');
- var on_button = false;
- if(dropUp) {
- $(elem).addClass('dropup');
- }
-
- $(elem).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');
- 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;
- });
- }
- }
-
- addDropDown('#font_family_dropdown', function() {
- var fam = $(this).text();
- $('#font_family').val($(this).text()).change();
- });
-
- 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);
- }
- });
-
- addDropDown('#blur_dropdown', function() {
- });
-
- 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);
- }
- });
-
-
- 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();
- }
-
- // Do not include the #text input, as it needs to remain focused
- // when clicking on an SVG text element.
- $('#svg_editor input:text:not(#text)').focus(function() {
- inp = this;
- workarea.mousedown(unfocus);
- }).blur(function() {
- workarea.unbind('mousedown', unfocus);
- });
- }());
-
- 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(){
- svgCanvas.setMode('square');
- };
-
- var clickRect = function(){
- svgCanvas.setMode('rect');
- };
-
- var clickFHRect = function(){
- svgCanvas.setMode('fhrect');
- };
-
- var clickCircle = function(){
- svgCanvas.setMode('circle');
- };
-
- var clickEllipse = function(){
- svgCanvas.setMode('ellipse');
- };
-
- var clickFHEllipse = function(){
- svgCanvas.setMode('fhellipse');
- };
-
- var clickImage = function(){
- if (toolButtonClick('#tool_image')) {
- svgCanvas.setMode('image');
- }
- };
-
- var clickZoom = function(){
- if (toolButtonClick('#tool_zoom')) {
- workarea.css('cursor','crosshair');
- svgCanvas.setMode('zoom');
- }
- };
-
- var dblclickZoom = function(){
- if (toolButtonClick('#tool_zoom')) {
- zoomImage();
- setSelectMode();
- }
- };
-
- var clickText = function(){
- toolButtonClick('#tool_text');
- svgCanvas.setMode('text');
- };
-
- var clickPath = function(){
- 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 moveToTopSelected = function() {
- if (selectedElement != null) {
- svgCanvas.moveToTopSelectedElement();
- }
- };
-
- var moveToBottomSelected = function() {
- if (selectedElement != null) {
- svgCanvas.moveToBottomSelectedElement();
- }
- };
-
- var convertToPath = function() {
- if (selectedElement != null) {
- svgCanvas.convertToPath();
- }
- }
-
- var reorientPath = function() {
- if (selectedElement != null) {
- path.reorient();
- }
- }
-
- var moveSelected = function(dx,dy) {
- if (selectedElement != null || multiselected) {
- 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) {
- if (selectedElement == null || multiselected) return;
- var step = 5;
- 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.QwantToClear, function(ok) {
- if(!ok) return;
- setSelectMode();
- svgCanvas.clear();
- svgCanvas.setResolution(dims[0], dims[1]);
- updateCanvas(true);
- zoomImage();
- populateLayers();
- updateContextPanel();
- });
- };
-
- var clickBold = function(){
- svgCanvas.setBold( !svgCanvas.getBold() );
- updateContextPanel();
- };
-
- var clickItalic = function(){
- svgCanvas.setItalic( !svgCanvas.getItalic() );
- updateContextPanel();
- };
-
- 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.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 && selectedElement.tagName == 'g'){
- svgCanvas.ungroupSelectedElement();
- }
- };
-
- var clickClone = function(){
- svgCanvas.cloneSelectedElements();
- };
-
- 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(){
- if (editingsource) return;
- editingsource = true;
- var str = svgCanvas.getSvgString();
- $('#svg_source_textarea').val(str);
- $('#svg_source_editor').fadeIn();
- properlySourceSizeTextArea();
- $('#svg_source_textarea').focus();
- };
-
- $('#svg_docprops_container').draggable({cancel:'button,fieldset'});
-
- 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();
- $('#canvas_width').val(res.w);
- $('#canvas_height').val(res.h);
- $('#canvas_title').val(svgCanvas.getDocumentTitle());
-
- // 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);
- }
-
- $('#svg_docprops').fadeIn();
- };
-
- 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();
- setTitle(svgCanvas.getDocumentTitle());
- }
-
- if (!svgCanvas.setSvgString($('#svg_source_textarea').val())) {
- $.confirm(uiStrings.QerrorsRevertToSource, function(ok) {
- if(!ok) return false;
- saveChanges();
- });
- } else {
- saveChanges();
- }
- setSelectMode();
- };
-
- var setTitle = function(title) {
- var editor_title = $('title:first').text().split(':')[0];
- var new_title = editor_title + (title?': ' + title:'');
- $('title:first').text(new_title);
- }
-
- var saveDocProperties = function(){
- // set title
- var new_title = $('#canvas_title').val();
- setTitle(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" && !svgCanvas.isValidUnit('width', w)) {
- $.alert(uiStrings.invalidAttrValGiven);
- width.parent().addClass('error');
- return false;
- }
-
- width.parent().removeClass('error');
-
- if(h != "fit" && !svgCanvas.isValidUnit('height', h)) {
- $.alert(uiStrings.invalidAttrValGiven);
- height.parent().addClass('error');
- return false;
- }
-
- height.parent().removeClass('error');
-
- if(!svgCanvas.setResolution(w, h)) {
- $.alert(uiStrings.noContentToFitTo);
- return false;
- }
-
- // set image save option
- curPrefs.img_save = $('#image_save_opts :checked').val();
- $.pref('img_save',curPrefs.img_save);
-
- // 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());
-
- updateCanvas();
- hideDocProperties();
- };
-
- 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).clone() : icon_id.clone();
- $(elem).empty().append(icon);
- if(forcedSize) {
- var obj = {};
- obj[elem + ' .svg_icon'] = forcedSize;
- $.resizeSvgIcons(obj);
- } else {
- var size = curPrefs.iconsize;
- if(size && size !== 'm') {
- var icon_sizes = { s:16, m:24, l:32, xl:48}, obj = {};
- obj[elem + ' .svg_icon'] = icon_sizes[size];
- $.resizeSvgIcons(obj);
- }
- }
- }
-
- var setIconSize = Editor.setIconSize = function(size, force) {
- if(size == curPrefs.size && !force) return;
- $.pref('iconsize', size);
- $('#iconsize').val(size);
- var icon_sizes = { s:16, m:24, l:32, xl:48 };
- var size_num = icon_sizes[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': {s: '36px', l: '60px', xl: '80px'},
- 'height': {s: '50px', l: '88px', xl: '125px'}
- },
- "#tools_left": {
- 'width': {s: '22px', l: '30px', xl: '38px'},
- 'top': {s: '50px', l: '87px', xl: '125px'}
- },
- "div#workarea": {
- 'left': {s: '27px', l: '46px', xl: '65px'},
- 'top': {s: '50px', l: '88px', xl: '125px'},
- 'bottom': {s: '55px', l: '98px', xl: '145px'}
- },
- "#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(values[size] || values.all) {
- style_str += (prop + ':' + (values[size] || values.all) + ';');
- }
- });
- style_str += '}';
- });
- rule_elem.text(style_str);
- }
-
- setFlyoutPositions();
- }
-
- var cancelOverlays = function() {
- $('#dialog_box').hide();
- if (!editingsource && !docprops) return;
-
- if (editingsource) {
- var oldString = svgCanvas.getSvgString();
- if (oldString != $('#svg_source_textarea').val()) {
- $.confirm(uiStrings.QignoreSourceChanges, function(ok) {
- if(ok) hideSourceEditor();
- });
- } else {
- hideSourceEditor();
- }
- }
- else if (docprops) {
- hideDocProperties();
- }
-
- };
-
- 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 win_wh = {width:$(window).width(), height:$(window).height()};
-
- $(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;
- });
- });
-
- $('#url_notice').click(function() {
- $.alert(this.title);
- });
-
- $('#change_image_url').click(promptImgURL);
-
- function promptImgURL() {
- $.prompt(uiStrings.enterNewImgURL, default_img_url, function(url) {
- if(url) setImageURL(url);
- });
- }
-
- function setImageURL(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();
- }
- }
-
- // 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) {
- 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]);
- 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 = (picker == 'stroke' ? strokePaint : fillPaint);
- 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:'.jPicker_table,.jGraduate_lgPick,.jGraduate_rgPick'})
- .css({'left': pos.left, 'bottom': 50 - pos.top})
- .jGraduate(
- {
- paint: paint,
- window: { pickerTitle: title },
- images: { clientPath: "jgraduate/images/" }
- },
- function(p) {
- paint = new $.jGraduate.Paint(p);
-
- var oldgrad = document.getElementById("gradbox_"+picker);
- var svgbox = oldgrad.parentNode;
- var rectbox = svgbox.firstChild;
- if (paint.type == "linearGradient" || paint.type == "radialGradient") {
- svgbox.removeChild(oldgrad);
- var newgrad = svgbox.appendChild(document.importNode(paint[paint.type], true));
- newgrad.id = "gradbox_"+picker;
- rectbox.setAttribute("fill", "url(#gradbox_" + picker + ")");
- rectbox.setAttribute("opacity", paint.alpha/100);
- }
- else {
- rectbox.setAttribute("fill", paint.solidColor != "none" ? "#" + paint.solidColor : "none");
- rectbox.setAttribute("opacity", paint.alpha/100);
- }
-
- if (picker == 'stroke') {
- svgCanvas.setPaint('stroke', paint);
- strokePaint = paint;
- }
- else {
- svgCanvas.setPaint('fill', paint);
- fillPaint = paint;
- }
- updateToolbar();
- $('#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 (index in buttonsNeedingStroke) {
- var button = buttonsNeedingStroke[index];
- if ($(button).hasClass('tool_button_current')) {
- clickSelect();
- }
- $(button).addClass('disabled');
- }
- }
- else {
- for (index in buttonsNeedingStroke) {
- var button = buttonsNeedingStroke[index];
- $(button).removeClass('disabled');
- }
- }
-
- if (bNoStroke && bNoFill) {
- for (index in buttonsNeedingFillAndStroke) {
- var button = buttonsNeedingFillAndStroke[index];
- if ($(button).hasClass('tool_button_current')) {
- clickSelect();
- }
- $(button).addClass('disabled');
- }
- }
- else {
- for (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();
- };
-
- // 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="#' + curConfig.initFill.color + '" opacity="' + curConfig.initFill.opacity + '"/>\
- <linearGradient id="gradbox_">\
- <stop stop-color="#000" offset="0.0"/>\
- <stop stop-color="#FF0000" offset="1.0"/>\
- </linearGradient></svg>', 'text/xml');
-
- var boxgrad = svgdocbox.getElementById('gradbox_');
- boxgrad.id = 'gradbox_fill';
- svgdocbox.documentElement.setAttribute('width',16.5);
- $('#fill_color').append( document.importNode(svgdocbox.documentElement,true) );
-
- boxgrad.id = 'gradbox_stroke';
- svgdocbox.documentElement.setAttribute('width',16.5);
- $('#stroke_color').append( document.importNode(svgdocbox.documentElement,true) );
- $('#stroke_color rect').attr({
- 'fill': '#' + curConfig.initStroke.color,
- 'opacity': curConfig.initStroke.opacity
- });
-
- $('#stroke_width').val(curConfig.initStroke.width);
- $('#group_opacity').val(curConfig.initOpacity * 100);
-
- // Use this SVG elem to test vectorEffect support
- var test_el = svgdocbox.documentElement.firstChild;
- test_el.setAttribute('style','vector-effect:non-scaling-stroke');
- var supportsNonSS = (test_el.style.vectorEffect == 'non-scaling-stroke');
- test_el.removeAttribute('style');
-
- // 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 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.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 curNames = new Array(svgCanvas.getNumLayers());
- for (var i = 0; i < curNames.length; ++i) { curNames[i] = svgCanvas.getLayer(i); }
-
- var j = (curNames.length+1);
- var uniqName = uiStrings.layer + " " + j;
- while ($.inArray(uniqName, curNames) != -1) {
- j++;
- uniqName = uiStrings.layer + " " + j;
- }
- $.prompt(uiStrings.enterUniqueLayerName,uniqName, function(newName) {
- if (!newName) return;
- if ($.inArray(newName, curNames) != -1) {
- $.alert(uiStrings.dupeLayerName);
- return;
- }
- svgCanvas.createLayer(newName);
- updateContextPanel();
- populateLayers();
- $('#layerlist tr.layer').removeClass("layersel");
- $('#layerlist tr.layer:first').addClass("layersel");
- });
- });
-
- $('#layer_delete').click(function() {
- 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");
- }
- });
-
- $('#layer_up').click(function() {
- // find index position of selected option
- var curIndex = $('#layerlist tr.layersel').prevAll().length;
- if (curIndex > 0) {
- var total = $('#layerlist tr.layer').length;
- curIndex--;
- svgCanvas.setCurrentLayerPosition(total-curIndex-1);
- populateLayers();
- $('#layerlist tr.layer').removeClass("layersel");
- $('#layerlist tr.layer:eq('+curIndex+')').addClass("layersel");
- }
- });
-
- $('#layer_down').click(function() {
- // find index position of selected option
- var curIndex = $('#layerlist tr.layersel').prevAll().length;
- var total = $('#layerlist tr.layer').length;
- if (curIndex < total-1) {
- curIndex++;
- svgCanvas.setCurrentLayerPosition(total-curIndex-1);
- populateLayers();
- $('#layerlist tr.layer').removeClass("layersel");
- $('#layerlist tr.layer:eq('+curIndex+')').addClass("layersel");
- }
- });
-
- $('#layer_rename').click(function() {
- var curIndex = $('#layerlist tr.layersel').prevAll().length;
- var oldName = $('#layerlist tr.layersel td.layername').text();
- $.prompt(uiStrings.enterNewLayerName,"", function(newName) {
- if (!newName) return;
- if (oldName == newName) {
- $.alert(uiStrings.layerHasThatName);
- return;
- }
-
- var curNames = new Array(svgCanvas.getNumLayers());
- for (var i = 0; i < curNames.length; ++i) { curNames[i] = svgCanvas.getLayer(i); }
- if ($.inArray(newName, curNames) != -1) {
- $.alert(uiStrings.layerHasThatName);
- return;
- }
-
- svgCanvas.renameCurrentLayer(newName);
- populateLayers();
- $('#layerlist tr.layer').removeClass("layersel");
- $('#layerlist tr.layer:eq('+curIndex+')').addClass("layersel");
- });
- });
-
- 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);
- }
-
- $('#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');
- workarea.css('right', parseInt(workarea.css('right'))+deltax);
- sidepanels.css('width', parseInt(sidepanels.css('width'))+deltax);
- layerpanel.css('width', parseInt(layerpanel.css('width'))+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.getNumLayers());
- for (var i = 0; i < curNames.length; ++i) { curNames[i] = svgCanvas.getLayer(i); }
-
- if (layerNameToHighlight) {
- for (var i = 0; i < curNames.length; ++i) {
- if (curNames[i] != layerNameToHighlight) {
- svgCanvas.setLayerOpacity(curNames[i], 0.5);
- }
- }
- }
- else {
- for (var i = 0; i < curNames.length; ++i) {
- svgCanvas.setLayerOpacity(curNames[i], 1.0);
- }
- }
- };
-
- var populateLayers = function(){
- var layerlist = $('#layerlist tbody');
- var selLayerNames = $('#selLayerNames');
- layerlist.empty();
- selLayerNames.empty();
- var currentlayer = svgCanvas.getCurrentLayer();
- var layer = svgCanvas.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.getLayer(layer);
- // contenteditable=\"true\"
- var appendstr = "<tr class=\"layer";
- if (name == currentlayer) {
- appendstr += " layersel"
- }
- appendstr += "\">";
-
- if (svgCanvas.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')
- .click(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: 1},
- {sel:'#tool_fhpath', fn: clickFHPath, evt: 'click', key: 2},
- {sel:'#tool_line', fn: clickLine, evt: 'click', key: 3},
- {sel:'#tool_rect', fn: clickRect, evt: 'mouseup', key: 4, parent: '#tools_rect', icon: 'rect'},
- {sel:'#tool_square', fn: clickSquare, evt: 'mouseup', key: 'Shift+4', 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: 5, parent: '#tools_ellipse', icon: 'ellipse'},
- {sel:'#tool_circle', fn: clickCircle, evt: 'mouseup', key: 'Shift+5', 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: 6},
- {sel:'#tool_text', fn: clickText, evt: 'click', key: 7},
- {sel:'#tool_image', fn: clickImage, evt: 'mouseup', key: 8},
- {sel:'#tool_zoom', fn: clickZoom, evt: 'mouseup', key: 9},
- {sel:'#tool_clear', fn: clickClear, evt: 'mouseup', key: [modKey+'N', true]},
- {sel:'#tool_save', fn: function() { editingsource?saveSourceEditor():clickSave()}, evt: 'mouseup', key: [modKey+'S', true]},
- {sel:'#tool_export', fn: clickExport, evt: 'mouseup'},
- {sel:'#tool_open', fn: clickOpen, evt: 'mouseup', key: [modKey+'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', 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', key: ['P', true]},
- {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: 'shift+up'},
- {sel:'#tool_move_bottom', fn: moveToBottomSelected, evt: 'click', key: 'shift+down'},
- {sel:'#tool_topath', fn: convertToPath, evt: 'click'},
- {sel:'#tool_undo', fn: clickUndo, evt: 'click', key: [modKey+'Z', true]},
- {sel:'#tool_redo', fn: clickRedo, evt: 'click', key: [modKey+'Y', true]},
- {sel:'#tool_clone,#tool_clone_multi', fn: clickClone, evt: 'click', key: [modKey+'C', true]},
- {sel:'#tool_group', fn: clickGroup, evt: 'click', key: [modKey+'G', true]},
- {sel:'#tool_ungroup', 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: [modKey+'X']},
-
- // Shortcuts not associated with buttons
- {key: 'shift+left', fn: function(){rotateSelected(0)}},
- {key: 'shift+right', fn: function(){rotateSelected(1)}},
- {key: 'shift+O', fn: selectPrev},
- {key: 'shift+P', fn: selectNext},
- {key: ['ctrl+up', true], fn: function(){zoomImage(2);}},
- {key: ['ctrl+down', true], fn: function(){zoomImage(.5);}},
- {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: 'A', fn: function(){svgCanvas.selectAllInCurrentLayer();}}
- ];
-
- // 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(opts.evt) {
- btn[opts.evt](opts.fn);
- }
-
- // Add to parent flyout menu
- if(opts.parent) {
- 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) {
- 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();}
- );
-
- $('#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 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();
- }
- });
-
- $('#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 });
-
- window.onbeforeunload = function() {
- // Suppress warning if page is empty
- if(undoMgr.getUndoStackSize() === 0) {
- show_save_warning = false;
- }
-
- // show_save_warning is set to "false" when the page is saved.
- if(!curConfig.no_save_warning && show_save_warning) {
- // Browser already asks question about closing the page
- return "There are unsaved changes.";
- }
- };
-
- Editor.openPrep = function(func) {
- $('#main_menu').hide();
- if(undoMgr.getUndoStackSize() === 0) {
- func(true);
- } else {
- $.confirm(uiStrings.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) {
- svgCanvas.setSvgString(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);
- 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) {
- 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;
- }
- }
-
-// $(function() {
- updateCanvas(true);
-// });
-
- // var revnums = "svg-editor.js ($Rev: 1738 $) ";
- // revnums += svgCanvas.getVersion();
- // $('#copyright')[0].setAttribute("title", revnums);
-
- 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);
-
- try{
- 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)), e.origin);
- }catch(err){
- e.source.postMessage("SVGe"+cbid+";error:"+err.message, e.origin);
- }
- }, false)
- }catch(err){
- window.embed_error = err;
- }
-
-
-
- // For Compatibility with older extensions
- $(function() {
- window.svgCanvas = svgCanvas;
- svgCanvas.ready = svgEditor.ready;
- });
-
-
- Editor.setLang = function(lang, strings) {
- $.pref('lang', lang);
- $('#lang_select').val(lang);
- if(strings) {
- // $.extend will only replace the given strings
- var oldLayerName = $('#layerlist tr.layersel td.layername').text();
- var rename_layer = (oldLayerName == uiStrings.layer + ' 1');
-
- $.extend(uiStrings,strings);
- svgCanvas.setUiStrings(strings);
- Actions.setTitles();
-
- if(rename_layer) {
- svgCanvas.renameCurrentLayer(uiStrings.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 = [];
-
- 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() {
- svgCanvas.setSvgString(str);
- });
- };
-
- Editor.loadFromURL = function(url) {
- Editor.ready(function() {
- $.ajax({
- 'url': url,
- 'dataType': 'text',
- success: svgCanvas.setSvgString,
- error: function(xhr, stat, err) {
- if(xhr.responseText) {
- svgCanvas.setSvgString(xhr.responseText);
- } else {
- $.alert("Unable to load from URL. Error: \n"+err+'');
- }
- }
- });
- });
- };
-
- Editor.loadFromDataURI = function(str) {
- Editor.ready(function() {
- svgCanvas.setSvgString(str);
- var pre = 'data:image/svg+xml;base64,';
- var src = str.substring(pre.length);
- svgCanvas.setSvgString(Utils.decode64(src));
- });
- };
-
- Editor.addExtension = function() {
- var args = arguments;
- $(function() {
- svgCanvas.addExtension.apply(this, args);
- });
- };
-
- return Editor;
- }(jQuery);
-
- // Run init once DOM is loaded
- $(svgEditor.init);
-
-})();
-
-// ?iconsize=s&bkgd_color=555
-
-// svgEditor.setConfig({
-// // imgPath: 'foo',
-// dimensions: [800, 600],
-// canvas_expansion: 5,
-// initStroke: {
-// color: '0000FF',
-// width: 3.5,
-// opacity: .5
-// },
-// initFill: {
-// color: '550000',
-// opacity: .75
-// },
-// extensions: ['ext-helloworld.js']
-// })
diff --git a/files_svgedit/js/svg-editor.min.js b/files_svgedit/js/svg-editor.min.js
deleted file mode 100644
index 0a477a532..000000000
--- a/files_svgedit/js/svg-editor.min.js
+++ /dev/null
@@ -1 +0,0 @@
-(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={},curConfig={canvas_expansion:3,dimensions:[640,480],initFill:{color:"FF0000",opacity:1},initStroke:{width:5,color:"000000",opacity:1},initOpacity:1,imgPath:"images/",langPath:"locale/",extPath:"extensions/",extensions:["ext-markers.js","ext-connector.js","ext-eyedropper.js"],initTool:"select",wireframe:false},uiStrings={invalidAttrValGiven:"Invalid value given",noContentToFitTo:"No content to fit to",layer:"Layer",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: ",ok:"OK",cancel:"Cancel",key_up:"Up",key_down:"Down",key_backspace:"Backspace",key_del:"Del"};var curPrefs={};var customHandlers={};Editor.curConfig=curConfig;$.pref=function(key,val){if(val){curPrefs[key]=val}key="svg-edit-"+key;var host=location.hostname,onweb=host&&host.indexOf(".")!=-1,store=(val!=undefined),storage=false;try{if(window.localStorage){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)+""}}}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){if(key in defaultPrefs){$.pref(key,val)}});$.extend(true,curConfig,opts);if(opts.extensions){curConfig.extensions=opts.extensions}};Editor.setCustomHandlers=function(opts){if(opts.open){$('#tool_open > input[type="file"]').remove();$("#tool_open").show();svgCanvas.open=opts.open}if(opts.save){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(){(function(){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){if(src.indexOf("data:")===0){src=src.replace(/ /g,"+");Editor.loadFromDataURI(src)}else{Editor.loadFromString(src)}}else{if(qstr.indexOf("paramurl=")!==-1){svgEditor.loadFromURL(qstr.substr(9))}else{if(urldata.url){svgEditor.loadFromURL(urldata.url)}}}}})();var extFunc=function(){$.each(curConfig.extensions,function(){$.getScript(curConfig.extPath+this)})};if(window.opera&&document.location.protocol==="file:"){setTimeout(extFunc,1000)}else{extFunc()}$.svgIcons(curConfig.imgPath+"svg_edit_icons.svg",{w:24,h:24,id_match:false,no_img:true,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_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","#layerlist td.layervis":"eye","#tool_source_save,#tool_docprops_save":"ok","#tool_source_cancel,#tool_docprops_cancel":"cancel","#rwidthLabel, #iwidthLabel":"width","#rheightLabel, #iheightLabel":"height","#cornerRadiusLabel span":"c_radius","#angleLabel":"angle","#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");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){svgEditor.setIconSize("s")}}$(".tools_flyout").each(function(){var shower=$("#"+this.id+"_show");var sel=shower.attr("data-curopt");if(!shower.children("svg, img").length){var clone=$(sel).children().clone();shower.append(clone)}if(window.opera){shower.children().removeAttr("style")}});svgEditor.runCallbacks()}});Editor.canvas=svgCanvas=new $.SvgCanvas(document.getElementById("svgcanvas"),curConfig);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=false,modKey="",path=svgCanvas.pathActions,undoMgr=svgCanvas.undoMgr,Utils=svgCanvas.Utils,default_img_url=curConfig.imgPath+"logo.png",workarea=$("#workarea"),show_save_warning=false,exportWindow=null;(function(){$("#dialog_container").draggable({cancel:"#dialog_content, #dialog_buttons *"});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.ok+'">').appendTo(btn_holder);if(type!="alert"){$('<input type="button" value="'+uiStrings.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(){$(".tool_button_current").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")};var togglePathEditMode=function(editmode,elems){$("#path_node_panel").toggle(editmode);$("#tools_bottom_2,#tools_bottom_3").toggle(!editmode);if(editmode){$(".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")}};var flyoutspeed=1250;var textBeingEntered=false;var selectedElement=null;var multiselected=false;var editingsource=false;var docprops=false;var fillPaint=new $.jGraduate.Paint({solidColor:curConfig.initFill.color});var strokePaint=new $.jGraduate.Paint({solidColor:curConfig.initStroke.color});var saveHandler=function(window,svg){show_save_warning=false;svg='<?xml version="1.0"?>\n'+svg;var win=window.open("data:image/svg+xml;base64,"+Utils.encode64(svg));var done=$.pref("save_notice_done");if(done!=="all"){var note=uiStrings.saveFromBrowser.replace("%s","SVG");if(navigator.userAgent.indexOf("Gecko/")!==-1){if(svg.indexOf("<defs")!==-1){note+="\n\n"+uiStrings.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);var datauri=c.toDataURL("image/png");exportWindow.location.href=datauri;var done=$.pref("export_notice_done");if(done!=="all"){var note=uiStrings.saveFromBrowser.replace("%s","PNG");if(issues.length){var pre="\n \u2022 ";note+=("\n\n"+uiStrings.noteTheseIssues+pre+issues.join(pre))}$.pref("export_notice_done","all");exportWindow.alert(note)}};var selectedChanged=function(window,elems){var mode=svgCanvas.getMode();var is_node=(mode=="pathedit");selectedElement=(elems.length==1||elems[1]==null?elems[0]:null);multiselected=(elems.length>=2&&elems[1]!=null);if(selectedElement!=null){if(mode!="multiselect"&&!is_node){setSelectMode();updateToolbar()}}togglePathEditMode(is_node,elems);updateContextPanel();svgCanvas.runExtensions("selectedChanged",{elems:elems,selectedElement:selectedElement,multiselected:multiselected})};var elementChanged=function(window,elems){for(var i=0;i<elems.length;++i){var elem=elems[i];if(elem&&elem.tagName=="svg"){populateLayers();updateCanvas()}else{if(elem&&selectedElement&&selectedElement.parentNode==null){selectedElement=elem}}}show_save_warning=true;updateContextPanel();svgCanvas.runExtensions("elementChanged",{elems:elems})};var zoomChanged=function(window,bbox,autoCenter){var scrbar=15,res=svgCanvas.getResolution(),w_area=workarea,canvas_pos=$("#svgcanvas").position();w_area.css("cursor","auto");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;$("#zoom").val(Math.round(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){setSelectMode()}zoomDone()};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 def=false;buttons.addClass("tool_button").unbind("click mousedown mouseup").each(function(i){var opts=btn_opts[i];flyout_funcs[opts.sel]=opts.fn;if(opts.isDefault){def=i}var func=function(){if($(this).hasClass("disabled")){return false}if(toolButtonClick(show_sel)){opts.fn()}if(opts.icon){var icon=$.getSvgIcon(opts.icon).clone()}else{var icon=$(opts.sel).children().eq(0).clone()}var shower=$(show_sel);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",opts.sel)};$(this).mouseup(func);if(opts.key){$(document).bind("keydown",opts.key+"",func)}});if(def){$(show_sel).attr("data-curopt",btn_opts[def].sel)}else{if(!$(show_sel).attr("data-curopt")){$(show_sel).attr("data-curopt",btn_opts[0].sel)}}var timer;$(show_sel).mousedown(function(evt){if($(show_sel).hasClass("disabled")){return false}var holder=$(show_sel.replace("_show",""));var l=holder.css("left");var w=holder.width()*-1;var time=holder.data("shown_popop")?200:0;timer=setTimeout(function(){holder.css("left",w).show().animate({left:l},150);holder.data("shown_popop",true)},time);evt.preventDefault()}).mouseup(function(){clearTimeout(timer);var opt=$(this).attr("data-curopt");if(toolButtonClick(show_sel)){flyout_funcs[opt]()}});var pos=$(show_sel).position();$(hold_sel).css({left:pos.left+34,top:pos.top+77})});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,top:pos.top})})};var setFlyoutTitles=function(){$(".tools_flyout").each(function(){var shower=$("#"+this.id+"_show");var tooltips=[];$(this).children().each(function(){tooltips.push(this.title)});shower[0].title=tooltips.join(" / ")})};var extAdded=function(window,ext){var cb_called=false;var runCallback=function(){if(ext.callback&&!cb_called){cb_called=true;ext.callback()}};var btn_selects=[];if(ext.context_tools){$.each(ext.context_tools,function(i,tool){var cont_id=tool.container_id?(' id="'+tool.container_id+'"'):"";var panel=$("#"+tool.panel);if(!panel.length){panel=$("<div>",{id:tool.panel}).appendTo("#tools_top")}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>";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)}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>';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={};$.each(ext.buttons,function(i,btn){var icon;var id=btn.id;var num=i;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;placement_obj["#"+id]=svgicon}var cls,parent;switch(btn.type){case"mode":cls="tool_button";parent="#tools_left";break;case"context":cls="tool_button";parent="#"+btn.panel;if(!$(parent).length){$("<div>",{id:btn.panel}).appendTo("#tools_top")}break}var button=$(btn.list?"<li/>":"<div/>").attr("id",id).attr("title",btn.title).addClass(cls);if(!btn.includeWith&&!btn.list){button.appendTo(parent)}else{if(btn.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){var opts=btn.includeWith;var ref_btn=$(opts.button);var flyout_holder=ref_btn.parent();if(!ref_btn.parent().hasClass("tools_flyout")){var arr_div=$("<div>",{id:"flyout_arrow_horiz"});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);flyout_holder=makeFlyoutHolder(tls_id,ref_btn)}var ref_data=Actions.getButtonData(opts.button);if(opts.isDefault){placement_obj["#"+tls_id+"_show"]=btn.id}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];var pos=("position" in opts)?opts.position:"last";var len=flyout_holder.children().length;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){$.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})});$.svgIcons(svgicons,{w:24,h:24,id_match:false,no_img:true,fallback:fallback_obj,placement:placement_obj,callback:function(icons){if(curPrefs.iconsize&&curPrefs.iconsize!="m"){setIconSize(curPrefs.iconsize,true)}runCallback()}})}runCallback()};var getPaint=function(color,opac){var opts=null;if(color.substr(0,5)=="url(#"){var grad=document.getElementById(color.substr(5,color.length-6));opts={alpha:opac};opts[grad.tagName]=grad}else{if(color.substr(0,1)=="#"){opts={alpha:opac,solidColor:color.substr(1)}}else{opts={alpha:opac,solidColor:"none"}}}return new $.jGraduate.Paint(opts)};var updateToolbar=function(){if(selectedElement!=null&&$.inArray(selectedElement.tagName,["image","foreignObject","g","a"])===-1){var fillOpacity=parseFloat(selectedElement.getAttribute("fill-opacity"));if(isNaN(fillOpacity)){fillOpacity=1}var strokeOpacity=parseFloat(selectedElement.getAttribute("stroke-opacity"));if(isNaN(strokeOpacity)){strokeOpacity=1}var fillColor=selectedElement.getAttribute("fill")||"black";svgCanvas.setColor("fill",fillColor,true);svgCanvas.setPaintOpacity("fill",fillOpacity,true);var strokeColor=selectedElement.getAttribute("stroke")||"none";svgCanvas.setColor("stroke",strokeColor,true);svgCanvas.setPaintOpacity("stroke",strokeOpacity,true);$("#stroke_color rect").attr({fill:strokeColor,opacity:strokeOpacity});$("#fill_color rect").attr({fill:fillColor,opacity:fillOpacity});fillOpacity*=100;strokeOpacity*=100;fillPaint=getPaint(fillColor,fillOpacity);strokePaint=getPaint(strokeColor,strokeOpacity);fillOpacity=fillOpacity+" %";strokeOpacity=strokeOpacity+" %";if(fillColor=="none"){fillOpacity="N/A"}if(strokeColor==null||strokeColor==""||strokeColor=="none"){strokeColor="none";strokeOpacity="N/A"}$("#stroke_width").val(selectedElement.getAttribute("stroke-width")||1);$("#stroke_style").val(selectedElement.getAttribute("stroke-dasharray")||"none");var attr=selectedElement.getAttribute("stroke-linejoin")||"miter";setStrokeOpt($("#linejoin_"+attr)[0]);attr=selectedElement.getAttribute("stroke-linecap")||"butt";setStrokeOpt($("#linecap_"+attr)[0])}if(selectedElement!=null){var opac_perc=((selectedElement.getAttribute("opacity")||1)*100);$("#group_opacity").val(opac_perc);$("#opac_slider").slider("option","value",opac_perc);$("#elem_id").val(selectedElement.id)}updateToolButtonState()};var updateContextPanel=function(){var elem=selectedElement;if(elem!=null&&!elem.parentNode){elem=null}var currentLayer=svgCanvas.getCurrentLayer();var currentMode=svgCanvas.getMode();if(currentMode=="rotate"&&elem!=null){var ang=svgCanvas.getRotationAngle(elem);$("#angle").val(ang);$("#tool_reorient").toggleClass("disabled",ang==0);return}var is_node=currentMode=="pathedit";$("#selected_panel, #multiselected_panel, #g_panel, #rect_panel, #circle_panel, #ellipse_panel, #line_panel, #text_panel, #image_panel").hide();if(elem!=null){var elname=elem.nodeName;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"){var xlinkNS="http://www.w3.org/1999/xlink";var href=elem.getAttributeNS(xlinkNS,"href");if(href.indexOf("data:")!==0){promptImgURL()}}else{if(elname=="text"){}}}if(!is_node&&currentMode!="pathedit"){$("#selected_panel").show();if($.inArray(elname,["line","circle","ellipse"])!=-1){$("#xy_panel").hide()}else{var x,y;if($.inArray(elname,["g","polyline","path"])!=-1){var bb=svgCanvas.getStrokedBBox([elem]);if(bb){x=bb.x;y=bb.y}}else{x=elem.getAttribute("x");y=elem.getAttribute("y")}$("#selected_x").val(x||0);$("#selected_y").val(y||0);$("#xy_panel").show()}var no_path=$.inArray(elname,["image","text","path","g","use"])==-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);setIcon("#tool_openclose_path",path.closed_subpath?"open_path":"close_path");if(point){var seg_type=$("#seg_type");$("#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}var panels={g:[],rect:["rx","width","height"],image:["width","height"],circle:["cx","cy","r"],ellipse:["cx","cy","rx","ry"],line:["x1","y1","x2","y2"],text:[]};var el_name=elem.tagName;if(panels[el_name]){var cur_panel=panels[el_name];$("#"+el_name+"_panel").show();$.each(cur_panel,function(i,item){$("#"+el_name+"_"+item).val(elem.getAttribute(item)||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){$("#text").focus().select()}}else{if(el_name=="image"){var xlinkNS="http://www.w3.org/1999/xlink";var href=elem.getAttributeNS(xlinkNS,"href");setImageURL(href)}}}}else{if(multiselected){$("#multiselected_panel").show()}}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){$("#selLayerNames").removeAttr("disabled").val(currentLayer)}else{$("#selLayerNames").attr("disabled","disabled")}};$("#text").focus(function(){textBeingEntered=true});$("#text").blur(function(){textBeingEntered=false});svgCanvas.bind("selected",selectedChanged);svgCanvas.bind("changed",elementChanged);svgCanvas.bind("saved",saveHandler);svgCanvas.bind("exported",exportHandler);svgCanvas.bind("zoomed",zoomChanged);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);var color_blocks=["#FFF","#888","#000"];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")){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&&$.inArray(selectedElement.nodeName,["line","polyline"])!=-1){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;var zoom=svgCanvas.getZoom();var w_area=workarea;zoomChanged(window,{width:0,height:0,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(){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()});$("select").change(function(){$(this).blur()});var promptMoveLayerOnce=false;$("#selLayerNames").change(function(){var destLayer=this.options[this.selectedIndex].value;var confirm_str=uiStrings.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)});$(".attr_changer").change(function(){var attr=this.getAttribute("data-attr");var val=this.value;var valid=svgCanvas.isValidUnit(attr,val);if(!valid){$.alert(uiStrings.invalidAttrValGiven);this.value=selectedElement.getAttribute(attr);return false}if(attr=="id"){var elem=selectedElement;svgCanvas.clearSelection();elem.id=val;svgCanvas.addToSelection([elem],true)}else{svgCanvas.changeSelectedAttribute(attr,val)}});$("#palette").mouseover(function(){var inp=$('<input type="hidden">');$(this).append(inp);inp.focus().remove()});$(".palette_item").click(function(evt){var picker=(evt.shiftKey?"stroke":"fill");var id=(evt.shiftKey?"#stroke_":"#fill_");var color=$(this).attr("data-rgb");var rectbox=document.getElementById("gradbox_"+picker).parentNode.firstChild;var paint=null;if(color=="transparent"||color=="initial"){color="none";$(id+"opacity").html("N/A");paint=new $.jGraduate.Paint()}else{paint=new $.jGraduate.Paint({alpha:100,solidColor:color.substr(1)})}rectbox.setAttribute("fill",color);rectbox.setAttribute("opacity",1);if(evt.shiftKey){strokePaint=paint;if(svgCanvas.getColor("stroke")!=color){svgCanvas.setColor("stroke",color)}if(color!="none"&&svgCanvas.getStrokeOpacity()!=1){svgCanvas.setPaintOpacity("stroke",1)}}else{fillPaint=paint;if(svgCanvas.getColor("fill")!=color){svgCanvas.setColor("fill",color)}if(color!="none"&&svgCanvas.getFillOpacity("fill")!=1){svgCanvas.setPaintOpacity("fill",1)}}updateToolButtonState()});$("#toggle_stroke_tools").toggle(function(){$(".stroke_tool").css("display","table-cell");$(this).text("<<")},function(){$(".stroke_tool").css("display","none");$(this).text(">>")});var toolButtonClick=function(button,fadeFlyouts){if($(button).hasClass("disabled")){return false}if($(button).parent().hasClass("tools_flyout")){return true}var fadeFlyouts=fadeFlyouts||"normal";$(".tools_flyout").fadeOut(fadeFlyouts);$("#styleoverrides").text("");$(".tool_button_current").removeClass("tool_button_current").addClass("tool_button");$(button).addClass("tool_button_current").removeClass("tool_button");svgCanvas.clearSelection();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})}());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");if(evt.target.tagName.toLowerCase()!="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(){$(".tools_flyout:visible").fadeOut()});overlay.bind("mousedown",function(){if(!button.hasClass("buttondown")){button.addClass("buttondown").removeClass("buttonup");list.css("margin-left",0).show();if(!height){height=list.height()}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");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})}})}());var addDropDown=function(elem,callback,dropUp){var button=$(elem).find("button");var list=$(elem).find("ul");var on_button=false;if(dropUp){$(elem).addClass("dropup")}$(elem).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");list.show();on_button=true}else{button.removeClass("down");list.hide()}}).hover(function(){on_button=true}).mouseout(function(){on_button=false})};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");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})}};addDropDown("#font_family_dropdown",function(){var fam=$(this).text();$("#font_family").val($(this).text()).change()});addDropDown("#opacity_dropdown",function(){if($(this).find("div").length){return}var perc=parseInt($(this).text().split("%")[0]);changeOpacity(false,perc)},true);$("#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)}});addDropDown("#blur_dropdown",function(){});var slideStart=false;$("#blur_slider").slider({max:10,step:0.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)}});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});(function(){var inp;var unfocus=function(){$(inp).blur()};$("#svg_editor input:text:not(#text)").focus(function(){inp=this;workarea.mousedown(unfocus)}).blur(function(){workarea.unbind("mousedown",unfocus)})}());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(){svgCanvas.setMode("square")};var clickRect=function(){svgCanvas.setMode("rect")};var clickFHRect=function(){svgCanvas.setMode("fhrect")};var clickCircle=function(){svgCanvas.setMode("circle")};var clickEllipse=function(){svgCanvas.setMode("ellipse")};var clickFHEllipse=function(){svgCanvas.setMode("fhellipse")};var clickImage=function(){if(toolButtonClick("#tool_image")){svgCanvas.setMode("image")}};var clickZoom=function(){if(toolButtonClick("#tool_zoom")){workarea.css("cursor","crosshair");svgCanvas.setMode("zoom")}};var dblclickZoom=function(){if(toolButtonClick("#tool_zoom")){zoomImage();setSelectMode()}};var clickText=function(){toolButtonClick("#tool_text");svgCanvas.setMode("text")};var clickPath=function(){toolButtonClick("#tool_path");svgCanvas.setMode("path")};var deleteSelected=function(){if(selectedElement!=null||multiselected){svgCanvas.deleteSelectedElements()}};var moveToTopSelected=function(){if(selectedElement!=null){svgCanvas.moveToTopSelectedElement()}};var moveToBottomSelected=function(){if(selectedElement!=null){svgCanvas.moveToBottomSelectedElement()}};var convertToPath=function(){if(selectedElement!=null){svgCanvas.convertToPath()}};var reorientPath=function(){if(selectedElement!=null){path.reorient()}};var moveSelected=function(dx,dy){if(selectedElement!=null||multiselected){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){if(selectedElement==null||multiselected){return}var step=5;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.QwantToClear,function(ok){if(!ok){return}setSelectMode();svgCanvas.clear();svgCanvas.setResolution(dims[0],dims[1]);updateCanvas(true);zoomImage();populateLayers();updateContextPanel()})};var clickBold=function(){svgCanvas.setBold(!svgCanvas.getBold());updateContextPanel()};var clickItalic=function(){svgCanvas.setItalic(!svgCanvas.getItalic());updateContextPanel()};var clickSave=function(){var saveOpts={images:curPrefs.img_save,round_digits:6};svgCanvas.save(saveOpts)};var clickExport=function(){if(!customHandlers.pngsave){var str=uiStrings.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()})})}};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(){if(multiselected){svgCanvas.groupSelectedElements()}else{if(selectedElement&&selectedElement.tagName=="g"){svgCanvas.ungroupSelectedElement()}}};var clickClone=function(){svgCanvas.cloneSelectedElements()};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;$("#zoom").val(multiplier*100);svgCanvas.setZoom(multiplier);zoomDone();updateCanvas(true)};var zoomDone=function(){updateWireFrame()};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(){if(supportsNonSS){return}var rule="#workarea.wireframe #svgcontent * { stroke-width: "+1/svgCanvas.getZoom()+"px; }";$("#wireframe_rules").text(workarea.hasClass("wireframe")?rule:"")};var showSourceEditor=function(){if(editingsource){return}editingsource=true;var str=svgCanvas.getSvgString();$("#svg_source_textarea").val(str);$("#svg_source_editor").fadeIn();properlySourceSizeTextArea();$("#svg_source_textarea").focus()};$("#svg_docprops_container").draggable({cancel:"button,fieldset"});var showDocProperties=function(){if(docprops){return}docprops=true;$("#image_save_opts input").val([curPrefs.img_save]);var res=svgCanvas.getResolution();$("#canvas_width").val(res.w);$("#canvas_height").val(res.h);$("#canvas_title").val(svgCanvas.getDocumentTitle());var blocks=$("#bg_blocks div");var cur_bg="cur_background";var canvas_bg=$.pref("bkgd_color");var url=$.pref("bkgd_url");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)}$("#svg_docprops").fadeIn()};var properlySourceSizeTextArea=function(){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();setTitle(svgCanvas.getDocumentTitle())};if(!svgCanvas.setSvgString($("#svg_source_textarea").val())){$.confirm(uiStrings.QerrorsRevertToSource,function(ok){if(!ok){return false}saveChanges()})}else{saveChanges()}setSelectMode()};var setTitle=function(title){var editor_title=$("title:first").text().split(":")[0];var new_title=editor_title+(title?": "+title:"");$("title:first").text(new_title)};var saveDocProperties=function(){var new_title=$("#canvas_title").val();setTitle(new_title);svgCanvas.setDocumentTitle(new_title);var width=$("#canvas_width"),w=width.val();var height=$("#canvas_height"),h=height.val();if(w!="fit"&&!svgCanvas.isValidUnit("width",w)){$.alert(uiStrings.invalidAttrValGiven);width.parent().addClass("error");return false}width.parent().removeClass("error");if(h!="fit"&&!svgCanvas.isValidUnit("height",h)){$.alert(uiStrings.invalidAttrValGiven);height.parent().addClass("error");return false}height.parent().removeClass("error");if(!svgCanvas.setResolution(w,h)){$.alert(uiStrings.noContentToFitTo);return false}curPrefs.img_save=$("#image_save_opts :checked").val();$.pref("img_save",curPrefs.img_save);var color=$("#bg_blocks div.cur_background").css("background-color")||"#FFF";setBackground(color,$("#canvas_bg_url").val());var lang=$("#lang_select").val();if(lang!=curPrefs.lang){Editor.putLocale(lang)}setIconSize($("#iconsize").val());updateCanvas();hideDocProperties()};function setBackground(color,url){$.pref("bkgd_color",color);$.pref("bkgd_url",url);svgCanvas.setBackground(color,url)}var setIcon=Editor.setIcon=function(elem,icon_id,forcedSize){var icon=(typeof icon_id=="string")?$.getSvgIcon(icon_id).clone():icon_id.clone();$(elem).empty().append(icon);if(forcedSize){var obj={};obj[elem+" .svg_icon"]=forcedSize;$.resizeSvgIcons(obj)}else{var size=curPrefs.iconsize;if(size&&size!=="m"){var icon_sizes={s:16,m:24,l:32,xl:48},obj={};obj[elem+" .svg_icon"]=icon_sizes[size];$.resizeSvgIcons(obj)}}};var setIconSize=Editor.setIconSize=function(size,force){if(size==curPrefs.size&&!force){return}$.pref("iconsize",size);$("#iconsize").val(size);var icon_sizes={s:16,m:24,l:32,xl:48};var size_num=icon_sizes[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*0.75)});if(size!="s"){$.resizeSvgIcons({"#layerbuttons svg, #layerbuttons img":size_num*0.6})}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:{s:"36px",l:"60px",xl:"80px"},height:{s:"50px",l:"88px",xl:"125px"}},"#tools_left":{width:{s:"22px",l:"30px",xl:"38px"},top:{s:"50px",l:"87px",xl:"125px"}},"div#workarea":{left:{s:"27px",l:"46px",xl:"65px"},top:{s:"50px",l:"88px",xl:"125px"},bottom:{s:"55px",l:"98px",xl:"145px"}},"#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(values[size]||values.all){style_str+=(prop+":"+(values[size]||values.all)+";")}});style_str+="}"});rule_elem.text(style_str)}setFlyoutPositions()};var cancelOverlays=function(){$("#dialog_box").hide();if(!editingsource&&!docprops){return}if(editingsource){var oldString=svgCanvas.getSvgString();if(oldString!=$("#svg_source_textarea").val()){$.confirm(uiStrings.QignoreSourceChanges,function(ok){if(ok){hideSourceEditor()}})}else{hideSourceEditor()}}else{if(docprops){hideDocProperties()}}};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 win_wh={width:$(window).width(),height:$(window).height()};$(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})});$("#url_notice").click(function(){$.alert(this.title)});$("#change_image_url").click(promptImgURL);function promptImgURL(){$.prompt(uiStrings.enterNewImgURL,default_img_url,function(url){if(url){setImageURL(url)}})}function setImageURL(url){if(!url){url=default_img_url}svgCanvas.setImageURL(url);$("#image_url").val(url);if(url.indexOf("data:")===0){$("#image_url").hide();$("#change_image_url").show()}else{svgCanvas.embedImage(url,function(datauri){if(!datauri){$("#url_notice").show()}else{$("#url_notice").hide()}default_img_url=url});$("#image_url").show();$("#change_image_url").hide()}}(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)})}());if(isMac){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]);var title=button.title;var index=title.indexOf("Ctrl+");button.title=[title.substr(0,index),"Cmd+",title.substr(index+5)].join("")}}var colorPicker=function(elem){var picker=elem.attr("id")=="stroke_color"?"stroke":"fill";var paint=(picker=="stroke"?strokePaint:fillPaint);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:".jPicker_table,.jGraduate_lgPick,.jGraduate_rgPick"}).css({left:pos.left,bottom:50-pos.top}).jGraduate({paint:paint,window:{pickerTitle:title},images:{clientPath:"jgraduate/images/"}},function(p){paint=new $.jGraduate.Paint(p);var oldgrad=document.getElementById("gradbox_"+picker);var svgbox=oldgrad.parentNode;var rectbox=svgbox.firstChild;if(paint.type=="linearGradient"||paint.type=="radialGradient"){svgbox.removeChild(oldgrad);var newgrad=svgbox.appendChild(document.importNode(paint[paint.type],true));newgrad.id="gradbox_"+picker;rectbox.setAttribute("fill","url(#gradbox_"+picker+")");rectbox.setAttribute("opacity",paint.alpha/100)}else{rectbox.setAttribute("fill",paint.solidColor!="none"?"#"+paint.solidColor:"none");rectbox.setAttribute("opacity",paint.alpha/100)}if(picker=="stroke"){svgCanvas.setPaint("stroke",paint);strokePaint=paint}else{svgCanvas.setPaint("fill",paint);fillPaint=paint}updateToolbar();$("#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(index in buttonsNeedingStroke){var button=buttonsNeedingStroke[index];if($(button).hasClass("tool_button_current")){clickSelect()}$(button).addClass("disabled")}}else{for(index in buttonsNeedingStroke){var button=buttonsNeedingStroke[index];$(button).removeClass("disabled")}}if(bNoStroke&&bNoFill){for(index in buttonsNeedingFillAndStroke){var button=buttonsNeedingFillAndStroke[index];if($(button).hasClass("tool_button_current")){clickSelect()}$(button).addClass("disabled")}}else{for(index in buttonsNeedingFillAndStroke){var button=buttonsNeedingFillAndStroke[index];$(button).removeClass("disabled")}}svgCanvas.runExtensions("toolButtonStateUpdate",{nofill:bNoFill,nostroke:bNoStroke});$(".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 svgdocbox=new DOMParser().parseFromString('<svg xmlns="http://www.w3.org/2000/svg"><rect width="100%" height="100%" fill="#'+curConfig.initFill.color+'" opacity="'+curConfig.initFill.opacity+'"/> <linearGradient id="gradbox_"> <stop stop-color="#000" offset="0.0"/> <stop stop-color="#FF0000" offset="1.0"/> </linearGradient></svg>',"text/xml");var boxgrad=svgdocbox.getElementById("gradbox_");boxgrad.id="gradbox_fill";svgdocbox.documentElement.setAttribute("width",16.5);$("#fill_color").append(document.importNode(svgdocbox.documentElement,true));boxgrad.id="gradbox_stroke";svgdocbox.documentElement.setAttribute("width",16.5);$("#stroke_color").append(document.importNode(svgdocbox.documentElement,true));$("#stroke_color rect").attr({fill:"#"+curConfig.initStroke.color,opacity:curConfig.initStroke.opacity});$("#stroke_width").val(curConfig.initStroke.width);$("#group_opacity").val(curConfig.initOpacity*100);var test_el=svgdocbox.documentElement.firstChild;test_el.setAttribute("style","vector-effect:non-scaling-stroke");var supportsNonSS=(test_el.style.vectorEffect=="non-scaling-stroke");test_el.removeAttribute("style");var blur_test=svgdocbox.createElementNS("http://www.w3.org/2000/svg","feGaussianBlur");if(typeof blur_test.stdDeviationX==="undefined"){$("#tool_blur").hide()}$(blur_test).remove();setTimeout(function(){svgCanvas.embedImage("images/logo.png",function(datauri){if(!datauri){$("#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.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 curNames=new Array(svgCanvas.getNumLayers());for(var i=0;i<curNames.length;++i){curNames[i]=svgCanvas.getLayer(i)}var j=(curNames.length+1);var uniqName=uiStrings.layer+" "+j;while($.inArray(uniqName,curNames)!=-1){j++;uniqName=uiStrings.layer+" "+j}$.prompt(uiStrings.enterUniqueLayerName,uniqName,function(newName){if(!newName){return}if($.inArray(newName,curNames)!=-1){$.alert(uiStrings.dupeLayerName);return}svgCanvas.createLayer(newName);updateContextPanel();populateLayers();$("#layerlist tr.layer").removeClass("layersel");$("#layerlist tr.layer:first").addClass("layersel")})});$("#layer_delete").click(function(){if(svgCanvas.deleteCurrentLayer()){updateContextPanel();populateLayers();$("#layerlist tr.layer").removeClass("layersel");$("#layerlist tr.layer:first").addClass("layersel")}});$("#layer_up").click(function(){var curIndex=$("#layerlist tr.layersel").prevAll().length;if(curIndex>0){var total=$("#layerlist tr.layer").length;curIndex--;svgCanvas.setCurrentLayerPosition(total-curIndex-1);populateLayers();$("#layerlist tr.layer").removeClass("layersel");$("#layerlist tr.layer:eq("+curIndex+")").addClass("layersel")}});$("#layer_down").click(function(){var curIndex=$("#layerlist tr.layersel").prevAll().length;var total=$("#layerlist tr.layer").length;if(curIndex<total-1){curIndex++;svgCanvas.setCurrentLayerPosition(total-curIndex-1);populateLayers();$("#layerlist tr.layer").removeClass("layersel");$("#layerlist tr.layer:eq("+curIndex+")").addClass("layersel")}});$("#layer_rename").click(function(){var curIndex=$("#layerlist tr.layersel").prevAll().length;var oldName=$("#layerlist tr.layersel td.layername").text();$.prompt(uiStrings.enterNewLayerName,"",function(newName){if(!newName){return}if(oldName==newName){$.alert(uiStrings.layerHasThatName);return}var curNames=new Array(svgCanvas.getNumLayers());for(var i=0;i<curNames.length;++i){curNames[i]=svgCanvas.getLayer(i)}if($.inArray(newName,curNames)!=-1){$.alert(uiStrings.layerHasThatName);return}svgCanvas.renameCurrentLayer(newName);populateLayers();$("#layerlist tr.layer").removeClass("layersel");$("#layerlist tr.layer:eq("+curIndex+")").addClass("layersel")})});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)};$("#sidepanel_handle").mousedown(function(evt){sidedrag=evt.pageX;$(window).mousemove(resizePanel);allowmove=false;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)});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");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 toggleHighlightLayer=function(layerNameToHighlight){var curNames=new Array(svgCanvas.getNumLayers());for(var i=0;i<curNames.length;++i){curNames[i]=svgCanvas.getLayer(i)}if(layerNameToHighlight){for(var i=0;i<curNames.length;++i){if(curNames[i]!=layerNameToHighlight){svgCanvas.setLayerOpacity(curNames[i],0.5)}}}else{for(var i=0;i<curNames.length;++i){svgCanvas.setLayerOpacity(curNames[i],1)}}};var populateLayers=function(){var layerlist=$("#layerlist tbody");var selLayerNames=$("#selLayerNames");layerlist.empty();selLayerNames.empty();var currentlayer=svgCanvas.getCurrentLayer();var layer=svgCanvas.getNumLayers();var icon=$.getSvgIcon("eye");while(layer--){var name=svgCanvas.getLayer(layer);var appendstr='<tr class="layer';if(name==currentlayer){appendstr+=" layersel"}appendstr+='">';if(svgCanvas.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})}$("#layerlist td.layername").click(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")}});var num=5-$("#layerlist tr.layer").size();while(num-->0){layerlist.append('<tr><td style="color:white">_</td><td/></tr>')}};populateLayers();var centerCanvas=function(){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}}}$("#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")}}});$("input,select").attr("autocomplete","off");var Actions=function(){var tool_buttons=[{sel:"#tool_select",fn:clickSelect,evt:"click",key:1},{sel:"#tool_fhpath",fn:clickFHPath,evt:"click",key:2},{sel:"#tool_line",fn:clickLine,evt:"click",key:3},{sel:"#tool_rect",fn:clickRect,evt:"mouseup",key:4,parent:"#tools_rect",icon:"rect"},{sel:"#tool_square",fn:clickSquare,evt:"mouseup",key:"Shift+4",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:5,parent:"#tools_ellipse",icon:"ellipse"},{sel:"#tool_circle",fn:clickCircle,evt:"mouseup",key:"Shift+5",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:6},{sel:"#tool_text",fn:clickText,evt:"click",key:7},{sel:"#tool_image",fn:clickImage,evt:"mouseup",key:8},{sel:"#tool_zoom",fn:clickZoom,evt:"mouseup",key:9},{sel:"#tool_clear",fn:clickClear,evt:"mouseup",key:[modKey+"N",true]},{sel:"#tool_save",fn:function(){editingsource?saveSourceEditor():clickSave()},evt:"mouseup",key:[modKey+"S",true]},{sel:"#tool_export",fn:clickExport,evt:"mouseup"},{sel:"#tool_open",fn:clickOpen,evt:"mouseup",key:[modKey+"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",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",key:["P",true]},{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:"shift+up"},{sel:"#tool_move_bottom",fn:moveToBottomSelected,evt:"click",key:"shift+down"},{sel:"#tool_topath",fn:convertToPath,evt:"click"},{sel:"#tool_undo",fn:clickUndo,evt:"click",key:[modKey+"Z",true]},{sel:"#tool_redo",fn:clickRedo,evt:"click",key:[modKey+"Y",true]},{sel:"#tool_clone,#tool_clone_multi",fn:clickClone,evt:"click",key:[modKey+"C",true]},{sel:"#tool_group",fn:clickGroup,evt:"click",key:[modKey+"G",true]},{sel:"#tool_ungroup",fn:clickGroup,evt:"click"},{sel:"[id^=tool_align]",fn:clickAlign,evt:"click"},{sel:"#tool_bold",fn:clickBold,evt:"mousedown"},{sel:"#tool_italic",fn:clickItalic,evt:"mousedown"},{sel:"#sidepanel_handle",fn:toggleSidePanel,key:[modKey+"X"]},{key:"shift+left",fn:function(){rotateSelected(0)}},{key:"shift+right",fn:function(){rotateSelected(1)}},{key:"shift+O",fn:selectPrev},{key:"shift+P",fn:selectNext},{key:["ctrl+up",true],fn:function(){zoomImage(2)}},{key:["ctrl+down",true],fn:function(){zoomImage(0.5)}},{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:"A",fn:function(){svgCanvas.selectAllInCurrentLayer()}}];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){if(opts.sel){var btn=$(opts.sel);if(opts.evt){btn[opts.evt](opts.fn)}if(opts.parent){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)}}if(opts.key){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()}return false})});if(opts.sel&&!opts.hidekey){var new_title=btn.attr("title").split("[")[0]+"["+keyval+"]";key_assocs[keyval]=opts.sel;if(!btn.parents("#main_menu").length){btn.attr("title",new_title)}}}});setupFlyouts(flyouts);$(".attr_changer, #image_url").bind("keydown","return",function(evt){$(this).change();evt.preventDefault()});$("#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="";$.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();Editor.ready(function(){var 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()}});$("#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:0.1,min:0,max:10,callback:changeBlur});$("#zoom").SpinButton({min:0.001,max:10000,step:50,stepfunc:stepZoom,callback:changeZoom});window.onbeforeunload=function(){if(undoMgr.getUndoStackSize()===0){show_save_warning=false}if(!curConfig.no_save_warning&&show_save_warning){return"There are unsaved changes."}};Editor.openPrep=function(func){$("#main_menu").hide();if(undoMgr.getUndoStackSize()===0){func(true)}else{$.confirm(uiStrings.QwantToOpen,func)}};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){svgCanvas.setSvgString(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);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){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}};updateCanvas(true);var good_langs=[];$("#lang_select option").each(function(){good_langs.push(this.value)});Editor.putLocale(null,good_langs);try{json_encode=function(obj){if(window.JSON&&JSON.stringify){return JSON.stringify(obj)}var enc=arguments.callee;if(typeof obj=="boolean"||typeof obj=="number"){return obj+""}else{if(typeof obj=="string"){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)})+'"'}else{if(obj.length){for(var i=0;i<obj.length;i++){obj[i]=enc(obj[i])}return"["+obj.join(",")+"]"}else{var pairs=[];for(var k in obj){pairs.push(enc(k)+":"+enc(obj[k]))}return"{"+pairs.join(",")+"}"}}}};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)),e.origin)}catch(err){e.source.postMessage("SVGe"+cbid+";error:"+err.message,e.origin)}},false)}catch(err){window.embed_error=err}$(function(){window.svgCanvas=svgCanvas;svgCanvas.ready=svgEditor.ready});Editor.setLang=function(lang,strings){$.pref("lang",lang);$("#lang_select").val(lang);if(strings){var oldLayerName=$("#layerlist tr.layersel td.layername").text();var rename_layer=(oldLayerName==uiStrings.layer+" 1");$.extend(uiStrings,strings);svgCanvas.setUiStrings(strings);Actions.setTitles();if(rename_layer){svgCanvas.renameCurrentLayer(uiStrings.layer+" 1");populateLayers()}svgCanvas.runExtensions("langChanged",lang);setFlyoutTitles();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)});$("#multiselected_panel div[id^=tool_align]").each(function(){$("#tool_pos"+this.id.substr(10))[0].title=this.title})}}};var callbacks=[];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(){svgCanvas.setSvgString(str)})};Editor.loadFromURL=function(url){Editor.ready(function(){$.ajax({url:url,dataType:"text",success:svgCanvas.setSvgString,error:function(xhr,stat,err){if(xhr.responseText){svgCanvas.setSvgString(xhr.responseText)}else{$.alert("Unable to load from URL. Error: \n"+err+"")}}})})};Editor.loadFromDataURI=function(str){Editor.ready(function(){svgCanvas.setSvgString(str);var pre="data:image/svg+xml;base64,";var src=str.substring(pre.length);svgCanvas.setSvgString(Utils.decode64(src))})};Editor.addExtension=function(){var args=arguments;$(function(){svgCanvas.addExtension.apply(this,args)})};return Editor}(jQuery)}$(svgEditor.init)})(); \ No newline at end of file
diff --git a/files_svgedit/js/svgcanvas.js b/files_svgedit/js/svgcanvas.js
deleted file mode 100644
index dfd6c10e2..000000000
--- a/files_svgedit/js/svgcanvas.js
+++ /dev/null
@@ -1,10320 +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
- *
- */
-
-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 this;
- 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)
-{
-var isOpera = !!window.opera,
- isWebkit = navigator.userAgent.indexOf("AppleWebKit") != -1,
-
- // Object populated later with booleans indicating support for features
- support = {},
-
- // this defines which elements and attributes that we support
- 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": [],
- "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"],
- "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", "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"],
- "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": []
- },
-
- // Interface strings, usually for title elements
- uiStrings = {
- "pathNodeTooltip": "Drag node to move it. Double-click node to change segment type",
- "pathCtrlPtTooltip": "Drag control point to adjust curve properties",
- "exportNoBlur": "Blurred elements will appear as un-blurred",
- "exportNoImage": "Image elements will not appear",
- "exportNoforeignObject": "foreignObject elements will not appear",
- "exportNoDashArray": "Strokes will appear filled",
- "exportNoText": "Text may not appear as expected"
- },
-
- // Default configuration options
- curConfig = {
- show_outside_canvas: true,
- dimensions: [640, 480]
- };
-
-
-
-
-
-// Update config with new one if given
-if(config) {
- $.extend(curConfig, config);
-}
-
-// Static class for various utility functions
-var Utils = this.Utils = function() {
-
- var _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
-
- return {
-
- // Function: Utils.toXml
- // Converts characters in a string to XML-friendly entities.
- //
- // Example: "&" becomes "&amp;"
- //
- // Parameters:
- // str - The string to be converted
- //
- // Returns:
- // The converted string
- "toXml": function(str) {
- return $('<p/>').text(str).html();
- },
-
- // Function: Utils.fromXml
- // Converts XML entities in a string to single characters.
- // Example: "&amp;" becomes "&"
- //
- // Parameters:
- // str - The string to be converted
- //
- // Returns:
- // The converted string
- "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: Utils.encode64
- // Converts a string to base64
- "encode64" : function(input) {
- // base64 strings are 4/3 larger than the original string
- // input = Utils.encodeUTF8(input); // convert non-ASCII characters
- input = Utils.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: Utils.decode64
- // Converts a string from base64
- "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: Utils.convertToXMLReferences
- // Converts a string to use XML references
- "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: 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
- "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;
- },
-
- // Function: snapToAngle
- // Returns a 45 degree angle coordinate associated with the two given
- // coordinates
- //
- // Parameters:
- // x1 - First coordinate's x value
- // x2 - Second coordinate's x value
- // y1 - First coordinate's y value
- // y2 - Second coordinate's y value
- //
- // Returns:
- // Object with the following values:
- // x - The angle-snapped x value
- // y - The angle-snapped y value
- // snapangle - The angle at which to snap
- "snapToAngle": function(x1,y1,x2,y2) {
- var snap = Math.PI/4; // 45 degrees
- var dx = x2 - x1;
- var dy = y2 - y1;
- var angle = Math.atan2(dy,dx);
- var dist = Math.sqrt(dx * dx + dy * dy);
- var snapangle= Math.round(angle/snap)*snap;
- var x = x1 + dist*Math.cos(snapangle);
- var y = y1 + dist*Math.sin(snapangle);
- //console.log(x1,y1,x2,y2,x,y,angle)
- return {x:x, y:y, a:snapangle};
- },
-
- // Function: text2xml
- // Cross-browser compatible method of converting a string to an XML tree
- // found this function here: http://groups.google.com/group/jquery-dev/browse_thread/thread/c6d11387c580a77f
- "text2xml": function(sXML) {
- var out;
- try{
- var dXML = ($.browser.msie)?new ActiveXObject("Microsoft.XMLDOM"):new DOMParser();
- dXML.async = false;
- } catch(e){
- throw new Error("XML Parser could not be instantiated");
- };
- try{
- if($.browser.msie) out = (dXML.loadXML(sXML))?dXML:false;
- else out = dXML.parseFromString(sXML, "text/xml");
- }
- catch(e){ throw new Error("Error parsing XML string"); };
- return out;
- }
- }
-
-}();
-
-
-// TODO: declare the variables and set them as null, then move this setup stuff to
-// an initialization function - probably just use clear()
-
-var canvas = this,
-
- // Namespace constants
- 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 of units, those set to 0 are updated later based on calculations
- unit_types = {'em':0,'ex':0,'px':1,'cm':35.43307,'mm':3.543307,'in':90,'pt':1.25,'pc':15,'%':0},
-
- //nonce to uniquify id's
- nonce = Math.floor(Math.random()*100001),
-
- // Boolean to indicate whether or not IDs given to elements should be random
- randomize_ids = false,
-
- // "document" element associated with the container (same as window.document using default svg-editor.js)
- svgdoc = container.ownerDocument,
-
- // Array with width/height of canvas
- dimensions = curConfig.dimensions,
-
- // Create Root SVG element. This is a container for the document being edited, not the document itself.
- svgroot = svgdoc.importNode(Utils.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");
-$(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);
-
-// Set nonce if randomize_ids = true
-if (randomize_ids) svgcontent.setAttributeNS(se_ns, 'se:nonce', nonce);
-
-// 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;
-});
-
-// Produce a Namespace-aware version of svgWhitelist
-var svgWhiteListNS = {};
-$.each(svgWhiteList, function(elt,atts){
- var attNS = {};
- $.each(atts, function(i, att){
- if (att.indexOf(':') != -1) {
- var v = att.split(':');
- attNS[v[1]] = nsRevMap[v[0]];
- } else {
- attNS[att] = att == 'xmlns' ? xmlnsns : null;
- }
- });
- svgWhiteListNS[elt] = attNS;
-});
-
-// 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);
-
-// Group: Unit conversion functions
-
-// Set the scope for these functions
-var convertToNum, convertToUnit, setUnitAttr;
-
-(function() {
- var w_attrs = ['x', 'x1', 'cx', 'rx', 'width'];
- var h_attrs = ['y', 'y1', 'cy', 'ry', 'height'];
- var unit_attrs = $.merge(['r','radius'], w_attrs);
- $.merge(unit_attrs, h_attrs);
-
- // Function: 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
- 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 res = getResolution();
-
- if($.inArray(attr, w_attrs) !== -1) {
- return num * res.w;
- } else if($.inArray(attr, h_attrs) !== -1) {
- return num * res.h;
- } else {
- return num * Math.sqrt((res.w*res.w) + (res.h*res.h))/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 * unit_types[unit];
- }
- };
-
-
- // Function: 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
- setUnitAttr = function(elem, attr, val) {
- if(!isNaN(val)) {
- // New value is a number, so check currently used unit
- var old_val = elem.getAttribute(attr);
-
- if(old_val !== null && isNaN(old_val)) {
- // Old value was a number, so get unit, then convert
- var unit;
- if(old_val.substr(-1) === '%') {
- var res = getResolution();
- unit = '%';
- val *= 100;
- if($.inArray(attr, w_attrs) !== -1) {
- val = val / res.w;
- } else if($.inArray(attr, h_attrs) !== -1) {
- val = val / res.h;
- } else {
- return val / Math.sqrt((res.w*res.w) + (res.h*res.h))/Math.sqrt(2);
- }
-
- } else {
- unit = old_val.substr(-2);
- val = val / unit_types[unit];
- }
-
- val += unit;
- }
- }
- elem.setAttribute(attr, val);
- }
-
- // Function: 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
- canvas.isValidUnit = function(attr, val) {
- var valid = false;
- if($.inArray(attr, unit_attrs) != -1) {
- // 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(unit_types, 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 = getElem(val);
- result = (elem == null);
- } catch(e) {}
- return result;
- } else valid = true;
-
- return valid;
- }
-
-})();
-
-
-// Group: Undo/Redo history management
-
-this.undoCmd = {};
-
-// Function: ChangeElementCommand
-// History command to make a change to an element.
-// Usually an attribute change, but can also be textcontent.
-//
-// Parameters:
-// elem - The DOM element that was changed
-// attrs - An object with the attributes to be changed and the values they had *before* the change
-// text - An optional string visible to user related to this change
-var ChangeElementCommand = this.undoCmd.changeElement = function(elem, attrs, text) {
- this.elem = elem;
- this.text = text ? ("Change " + elem.tagName + " " + text) : ("Change " + elem.tagName);
- this.newValues = {};
- this.oldValues = attrs;
- for (var attr in attrs) {
- if (attr == "#text") this.newValues[attr] = elem.textContent;
- else if (attr == "#href") this.newValues[attr] = elem.getAttributeNS(xlinkns, "href");
- else this.newValues[attr] = elem.getAttribute(attr);
- }
-
- // Function: ChangeElementCommand.apply
- // Performs the stored change action
- this.apply = function() {
- var bChangedTransform = false;
- for(var attr in this.newValues ) {
- if (this.newValues[attr]) {
- if (attr == "#text") this.elem.textContent = this.newValues[attr];
- else if (attr == "#href") this.elem.setAttributeNS(xlinkns, "xlink:href", this.newValues[attr])
- else this.elem.setAttribute(attr, this.newValues[attr]);
- }
- else {
- if (attr == "#text") this.elem.textContent = "";
- else {
- this.elem.setAttribute(attr, "");
- this.elem.removeAttribute(attr);
- }
- }
-
- if (attr == "transform") { bChangedTransform = true; }
- else if (attr == "stdDeviation") { canvas.setBlurOffsets(this.elem.parentNode, this.newValues[attr]); }
-
- }
- // relocate rotational transform, if necessary
- if(!bChangedTransform) {
- var angle = getRotationAngle(elem);
- if (angle) {
- var bbox = elem.getBBox();
- var cx = bbox.x + bbox.width/2,
- cy = bbox.y + bbox.height/2;
- var rotate = ["rotate(", angle, " ", cx, ",", cy, ")"].join('');
- if (rotate != elem.getAttribute("transform")) {
- elem.setAttribute("transform", rotate);
- }
- }
- }
- // if we are changing layer names, re-identify all layers
- if (this.elem.tagName == "title" && this.elem.parentNode.parentNode == svgcontent) {
- identifyLayers();
- }
- return true;
- };
-
- // Function: ChangeElementCommand.unapply
- // Reverses the stored change action
- this.unapply = function() {
- var bChangedTransform = false;
- for(var attr in this.oldValues ) {
- if (this.oldValues[attr]) {
- if (attr == "#text") this.elem.textContent = this.oldValues[attr];
- else if (attr == "#href") this.elem.setAttributeNS(xlinkns, "xlink:href", this.oldValues[attr]);
- else this.elem.setAttribute(attr, this.oldValues[attr]);
-
- if (attr == "stdDeviation") canvas.setBlurOffsets(this.elem.parentNode, this.oldValues[attr]);
- }
- else {
- if (attr == "#text") this.elem.textContent = "";
- else this.elem.removeAttribute(attr);
- }
- if (attr == "transform") { bChangedTransform = true; }
- }
- // relocate rotational transform, if necessary
- if(!bChangedTransform) {
- var angle = getRotationAngle(elem);
- if (angle) {
- var bbox = elem.getBBox();
- var cx = bbox.x + bbox.width/2,
- cy = bbox.y + bbox.height/2;
- var rotate = ["rotate(", angle, " ", cx, ",", cy, ")"].join('');
- if (rotate != elem.getAttribute("transform")) {
- elem.setAttribute("transform", rotate);
- }
- }
- }
- // if we are changing layer names, re-identify all layers
- if (this.elem.tagName == "title" && this.elem.parentNode.parentNode == svgcontent) {
- identifyLayers();
- }
-
- // Remove transformlist to prevent confusion that causes bugs like 575.
- if (svgTransformLists[this.elem.id]) {
- delete svgTransformLists[this.elem.id];
- }
-
- return true;
- };
-
- // Function: ChangeElementCommand.elements
- // Returns array with element associated with this command
- this.elements = function() { return [this.elem]; }
-}
-
-// Function: InsertElementCommand
-// History command for an element that was added to the DOM
-//
-// Parameters:
-// elem - The newly added DOM element
-// text - An optional string visible to user related to this change
-var InsertElementCommand = this.undoCmd.insertElement = function(elem, text) {
- this.elem = elem;
- this.text = text || ("Create " + elem.tagName);
- this.parent = elem.parentNode;
-
- // Function: InsertElementCommand.apply
- // Re-Inserts the new element
- this.apply = function() {
- this.elem = this.parent.insertBefore(this.elem, this.elem.nextSibling);
- if (this.parent == svgcontent) {
- identifyLayers();
- }
- };
-
- // Function: InsertElementCommand.unapply
- // Removes the element
- this.unapply = function() {
- this.parent = this.elem.parentNode;
- this.elem = this.elem.parentNode.removeChild(this.elem);
- if (this.parent == svgcontent) {
- identifyLayers();
- }
- };
-
- // Function: InsertElementCommand.elements
- // Returns array with element associated with this command
- this.elements = function() { return [this.elem]; };
-}
-
-// Function: RemoveElementCommand
-// History command for an element removed from the DOM
-//
-// Parameters:
-// elem - The removed DOM element
-// parent - The DOM element's parent
-// text - An optional string visible to user related to this change
-var RemoveElementCommand = this.undoCmd.removeElement = function(elem, parent, text) {
- this.elem = elem;
- this.text = text || ("Delete " + elem.tagName);
- this.parent = parent;
-
- // Function: RemoveElementCommand.apply
- // Re-removes the new element
- this.apply = function() {
- if (svgTransformLists[this.elem.id]) {
- delete svgTransformLists[this.elem.id];
- }
-
- this.parent = this.elem.parentNode;
- this.elem = this.parent.removeChild(this.elem);
- if (this.parent == svgcontent) {
- identifyLayers();
- }
- };
-
- // Function: RemoveElementCommand.unapply
- // Re-adds the new element
- this.unapply = function() {
- if (svgTransformLists[this.elem.id]) {
- delete svgTransformLists[this.elem.id];
- }
-
- this.elem = this.parent.insertBefore(this.elem, this.elem.nextSibling);
- if (this.parent == svgcontent) {
- identifyLayers();
- }
- };
-
- // Function: RemoveElementCommand.elements
- // Returns array with element associated with this command
- this.elements = function() { return [this.elem]; };
-
- // special hack for webkit: remove this element's entry in the svgTransformLists map
- if (svgTransformLists[elem.id]) {
- delete svgTransformLists[elem.id];
- }
-}
-
-// Function: MoveElementCommand
-// History command for an element that had its DOM position changed
-//
-// Parameters:
-// elem - The DOM element that was moved
-// oldNextSibling - The element's next sibling before it was moved
-// oldParent - The element's parent before it was moved
-// text - An optional string visible to user related to this change
-var MoveElementCommand = this.undoCmd.moveElement = function(elem, oldNextSibling, oldParent, text) {
- this.elem = elem;
- this.text = text ? ("Move " + elem.tagName + " to " + text) : ("Move " + elem.tagName);
- this.oldNextSibling = oldNextSibling;
- this.oldParent = oldParent;
- this.newNextSibling = elem.nextSibling;
- this.newParent = elem.parentNode;
-
- // Function: MoveElementCommand.unapply
- // Re-positions the element
- this.apply = function() {
- this.elem = this.newParent.insertBefore(this.elem, this.newNextSibling);
- if (this.newParent == svgcontent) {
- identifyLayers();
- }
- };
-
- // Function: MoveElementCommand.unapply
- // Positions the element back to its original location
- this.unapply = function() {
- this.elem = this.oldParent.insertBefore(this.elem, this.oldNextSibling);
- if (this.oldParent == svgcontent) {
- identifyLayers();
- }
- };
-
- // Function: MoveElementCommand.elements
- // Returns array with element associated with this command
- this.elements = function() { return [this.elem]; };
-}
-
-// TODO: create a 'typing' command object that tracks changes in text
-// if a new Typing command is created and the top command on the stack is also a Typing
-// and they both affect the same element, then collapse the two commands into one
-
-// Function: BatchCommand
-// History command that can contain/execute multiple other commands
-//
-// Parameters:
-// text - An optional string visible to user related to this change
-var BatchCommand = this.undoCmd.batch = function(text) {
- this.text = text || "Batch Command";
- this.stack = [];
-
- // Function: BatchCommand.apply
- // Runs "apply" on all subcommands
- this.apply = function() {
- var len = this.stack.length;
- for (var i = 0; i < len; ++i) {
- this.stack[i].apply();
- }
- };
-
- // Function: BatchCommand.unapply
- // Runs "unapply" on all subcommands
- this.unapply = function() {
- for (var i = this.stack.length-1; i >= 0; i--) {
- this.stack[i].unapply();
- }
- };
-
- // Function: BatchCommand.elements
- // Iterate through all our subcommands and returns all the elements we are changing
- this.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: BatchCommand.addSubCommand
- // Adds a given command to the history stack
- //
- // Parameters:
- // cmd - The undo command object to add
- this.addSubCommand = function(cmd) { this.stack.push(cmd); };
-
- // Function: BatchCommand.isEmpty
- // Returns a boolean indicating whether or not the batch command is empty
- this.isEmpty = function() { return this.stack.length == 0; };
-}
-
-// Set scope for these undo functions
-var resetUndoStack, addCommandToHistory;
-
-// Undo/redo stack related functions
-(function(c) {
- var undoStackPointer = 0,
- undoStack = [];
-
- // Function: resetUndoStack
- // Resets the undo stack, effectively clearing the undo/redo history
- resetUndoStack = function() {
- undoStack = [];
- undoStackPointer = 0;
- };
-
- c.undoMgr = {
- // Function: undoMgr.getUndoStackSize
- // Returns:
- // Integer with the current size of the undo history stack
- getUndoStackSize: function() { return undoStackPointer; },
-
- // Function: undoMgr.getRedoStackSize
- // Returns:
- // Integer with the current size of the redo history stack
- getRedoStackSize: function() { return undoStack.length - undoStackPointer; },
-
- // Function: undoMgr.getNextUndoCommandText
- // Returns:
- // String associated with the next undo command
- getNextUndoCommandText: function() {
- if (undoStackPointer > 0)
- return undoStack[undoStackPointer-1].text;
- return "";
- },
-
- // Function: undoMgr.getNextRedoCommandText
- // Returns:
- // String associated with the next redo command
- getNextRedoCommandText: function() {
- if (undoStackPointer < undoStack.length)
- return undoStack[undoStackPointer].text;
- return "";
- },
-
- // Function: undoMgr.undo
- // Performs an undo step
- undo: function() {
- if (undoStackPointer > 0) {
- c.clearSelection();
- var cmd = undoStack[--undoStackPointer];
- cmd.unapply();
- pathActions.clear();
- call("changed", cmd.elements());
- }
- },
-
- // Function: undoMgr.redo
- // Performs a redo step
- redo: function() {
- if (undoStackPointer < undoStack.length && undoStack.length > 0) {
- c.clearSelection();
- var cmd = undoStack[undoStackPointer++];
- cmd.apply();
- pathActions.clear();
- call("changed", cmd.elements());
- }
- }
- };
-
- // Function: addCommandToHistory
- // Adds a command object to the undo history stack
- //
- // Parameters:
- // cmd - The command object to add
- addCommandToHistory = c.undoCmd.add = 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 (undoStackPointer < undoStack.length && undoStack.length > 0) {
- undoStack = undoStack.splice(0, undoStackPointer);
- }
- undoStack.push(cmd);
- undoStackPointer = undoStack.length;
- };
-
-}(canvas));
-
-(function(c) {
-
- // New functions for refactoring of Undo/Redo
-
- // this is the stack that stores the original values, the elements and
- // the attribute name for begin/finish
- var undoChangeStackPointer = -1;
- var undoableChangeStack = [];
-
- // Function: 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
- c.beginUndoableChange = function(attrName, elems) {
- var p = ++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);
- }
- undoableChangeStack[p] = {'attrName': attrName,
- 'oldValues': oldValues,
- 'elements': elements};
- };
-
- // Function: 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
- c.finishUndoableChange = function() {
- var p = undoChangeStackPointer--;
- var changeset = undoableChangeStack[p];
- var i = changeset['elements'].length;
- var attrName = changeset['attrName'];
- var batchCmd = new 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 ChangeElementCommand(elem, changes, attrName));
- }
- }
- undoableChangeStack[p] = null;
- return batchCmd;
- };
-
-}(canvas));
-
-// Put SelectorManager in this scope
-var SelectorManager;
-
-(function() {
- // Interface: Selector
- // Private class for DOM element selection boxes
- //
- // Parameters:
- // id - integer to internally indentify the selector
- // elem - DOM element associated with this selector
- function Selector(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;
-
- // Function: Selector.reset
- // Used to reset the id and element that the selector is attached to
- //
- // Parameters:
- // e - DOM element associated with this selector
- this.reset = function(e) {
- this.locked = true;
- this.selectedElement = e;
- this.resize();
- this.selectorGroup.setAttribute("display", "inline");
- };
-
- // this holds a reference to the <g> element that holds all visual elements of the selector
- this.selectorGroup = addSvgElementFromJson({ "element": "g",
- "attr": {"id": ("selectorGroup"+this.id)}
- });
-
- // this holds a reference to the path rect
- this.selectorRect = this.selectorGroup.appendChild( addSvgElementFromJson({
- "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 elements for this selector
- this.selectorGrips = { "nw":null,
- "n":null,
- "ne":null,
- "e":null,
- "se":null,
- "s":null,
- "sw":null,
- "w":null
- };
- this.rotateGripConnector = this.selectorGroup.appendChild( addSvgElementFromJson({
- "element": "line",
- "attr": {
- "id": ("selectorGrip_rotateconnector_" + this.id),
- "stroke": "#22C",
- "stroke-width": "1"
- }
- }) );
-
- this.rotateGrip = this.selectorGroup.appendChild( addSvgElementFromJson({
- "element": "circle",
- "attr": {
- "id": ("selectorGrip_rotate_" + this.id),
- "fill": "lime",
- "r": 4,
- "stroke": "#22C",
- "stroke-width": 2,
- "style": "cursor:url(" + curConfig.imgPath + "rotate.png) 12 12, auto;"
- }
- }) );
-
- // add the corner grips
- for (var dir in this.selectorGrips) {
- this.selectorGrips[dir] = this.selectorGroup.appendChild(
- addSvgElementFromJson({
- "element": "circle",
- "attr": {
- "id": ("selectorGrip_resize_" + dir + "_" + this.id),
- "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",
- "display":"none"
- }
- }) );
- }
-
- // Function: Selector.showGrips
- // Show the resize grips of this selector
- //
- // Parameters:
- // show - boolean indicating whether grips should be shown or not
- this.showGrips = function(show) {
- // TODO: use suspendRedraw() here
- var bShow = show ? "inline" : "none";
- this.rotateGrip.setAttribute("display", bShow);
- this.rotateGripConnector.setAttribute("display", bShow);
- var elem = this.selectedElement;
- for (var dir in this.selectorGrips) {
- this.selectorGrips[dir].setAttribute("display", bShow);
- }
- if(elem) this.updateGripCursors(getRotationAngle(elem));
- };
-
- // Function: Selector.updateGripCursors
- // Updates cursors for corner grips on rotation so arrows point the right way
- //
- // Parameters:
- // angle - Float indicating current rotation angle in degrees
- this.updateGripCursors = function(angle) {
- var dir_arr = [];
- var steps = Math.round(angle / 45);
- if(steps < 0) steps += 8;
- for (var dir in this.selectorGrips) {
- dir_arr.push(dir);
- }
- while(steps > 0) {
- dir_arr.push(dir_arr.shift());
- steps--;
- }
- var i = 0;
- for (var dir in this.selectorGrips) {
- this.selectorGrips[dir].setAttribute('style', ("cursor:" + dir_arr[i] + "-resize"));
- i++;
- };
- };
-
- // Function: Selector.resize
- // Updates the selector to match the element's size
- this.resize = function() {
- var selectedBox = this.selectorRect,
- selectedGrips = this.selectorGrips,
- selected = this.selectedElement,
- sw = selected.getAttribute("stroke-width");
- var offset = 1/current_zoom;
- if (selected.getAttribute("stroke") != "none" && !isNaN(sw)) {
- offset += (sw/2);
- }
- if (selected.tagName == "text") {
- offset += 2/current_zoom;
- }
- var bbox = getBBox(selected);
- if(selected.tagName == 'g') {
- // The bbox for a group does not include stroke vals, so we
- // get the bbox based on its children.
- var stroked_bbox = getStrokedBBox(selected.childNodes);
- $.each(bbox, function(key, val) {
- bbox[key] = stroked_bbox[key];
- });
- }
-
- // loop and transform our bounding box until we reach our first rotation
- var m = getMatrix(selected);
-
- // 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;
-
- // apply the transforms
- var l=bbox.x-offset, t=bbox.y-offset, w=bbox.width+(offset*2), h=bbox.height+(offset*2),
- 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
-
- //*
- var nbox = transformBox(l*current_zoom, t*current_zoom, w*current_zoom, h*current_zoom, m),
- nbax = nbox.aabox.x,
- nbay = nbox.aabox.y,
- nbaw = nbox.aabox.width,
- nbah = nbox.aabox.height;
-
- // now if the shape is rotated, un-rotate it
- var cx = nbax + nbaw/2,
- cy = nbay + nbah/2;
- var angle = getRotationAngle(selected);
- if (angle) {
-
- var rot = svgroot.createSVGTransform();
- rot.setRotate(-angle,cx,cy);
- var rotm = rot.matrix;
- nbox.tl = transformPoint(nbox.tl.x,nbox.tl.y,rotm);
- nbox.tr = transformPoint(nbox.tr.x,nbox.tr.y,rotm);
- nbox.bl = transformPoint(nbox.bl.x,nbox.bl.y,rotm);
- nbox.br = transformPoint(nbox.br.x,nbox.br.y,rotm);
-
- // calculate the axis-aligned bbox
- var minx = nbox.tl.x,
- miny = nbox.tl.y,
- maxx = nbox.tl.x,
- maxy = nbox.tl.y;
-
- minx = Math.min(minx, Math.min(nbox.tr.x, Math.min(nbox.bl.x, nbox.br.x) ) );
- miny = Math.min(miny, Math.min(nbox.tr.y, Math.min(nbox.bl.y, nbox.br.y) ) );
- maxx = Math.max(maxx, Math.max(nbox.tr.x, Math.max(nbox.bl.x, nbox.br.x) ) );
- maxy = Math.max(maxy, Math.max(nbox.tr.y, Math.max(nbox.bl.y, nbox.br.y) ) );
-
- nbax = minx;
- nbay = miny;
- nbaw = (maxx-minx);
- nbah = (maxy-miny);
- }
-
- var sr_handle = svgroot.suspendRedraw(100);
-
- var dstr = "M" + nbax + "," + nbay
- + " L" + (nbax+nbaw) + "," + nbay
- + " " + (nbax+nbaw) + "," + (nbay+nbah)
- + " " + nbax + "," + (nbay+nbah) + "z";
- assignAttributes(selectedBox, {'d': dstr});
-
- var 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]
- };
-
- if(selected == selectedElements[0]) {
- for(var dir in gripCoords) {
- var coords = gripCoords[dir];
- assignAttributes(selectedGrips[dir], {
- cx: coords[0], cy: coords[1]
- });
- };
- }
-
- if (angle) {
- this.selectorGroup.setAttribute("transform", "rotate(" + [angle,cx,cy].join(",") + ")");
- }
- else {
- this.selectorGroup.setAttribute("transform", "");
- }
-
- // we want to go 20 pixels in the negative transformed y direction, ignoring scale
- assignAttributes(this.rotateGripConnector, { x1: nbax + (nbaw)/2,
- y1: nbay,
- x2: nbax + (nbaw)/2,
- y2: nbay- 20});
- assignAttributes(this.rotateGrip, { cx: nbax + (nbaw)/2,
- cy: nbay - 20 });
-
- svgroot.unsuspendRedraw(sr_handle);
- };
-
- // now initialize the selector
- this.reset(elem);
- };
-
- // Interface: SelectorManager
- // Public class to manage all selector objects (selection boxes)
- SelectorManager = function() {
-
- // this will hold the <g> element that contains all selector rects/grips
- this.selectorParentGroup = null;
-
- // this is a special rect that is used for multi-select
- this.rubberBandBox = null;
-
- // this will hold objects of type Selector (see above)
- this.selectors = [];
-
- // this holds a map of SVG elements to their Selector object
- this.selectorMap = {};
-
- // local reference to this object
- var mgr = this;
-
- // Function: SelectorManager.initGroup
- // Resets the parent selector group element
- this.initGroup = function() {
- // remove old selector parent group if it existed
- if (mgr.selectorParentGroup && mgr.selectorParentGroup.parentNode) {
- mgr.selectorParentGroup.parentNode.removeChild(mgr.selectorParentGroup);
- }
- // create parent selector group and add it to svgroot
- mgr.selectorParentGroup = svgdoc.createElementNS(svgns, "g");
- mgr.selectorParentGroup.setAttribute("id", "selectorParentGroup");
- svgroot.appendChild(mgr.selectorParentGroup);
- mgr.selectorMap = {};
- mgr.selectors = [];
- mgr.rubberBandBox = null;
-
- if($("#canvasBackground").length) return;
-
- var canvasbg = svgdoc.createElementNS(svgns, "svg");
- var dims = curConfig.dimensions;
- assignAttributes(canvasbg, {
- 'id':'canvasBackground',
- 'width': dims[0],
- 'height': dims[1],
- 'x': 0,
- 'y': 0,
- 'overflow': 'visible',
- 'style': 'pointer-events:none'
- });
-
- var rect = svgdoc.createElementNS(svgns, "rect");
- assignAttributes(rect, {
- '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 (!window.opera) rect.setAttribute('filter', 'url(#canvashadow)');
- canvasbg.appendChild(rect);
- svgroot.insertBefore(canvasbg, svgcontent);
- };
-
- // Function: SelectorManager.requestSelector
- // Returns the selector based on the given element
- //
- // Parameters:
- // elem - DOM element to get the selector for
- this.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 Selector(N, elem);
- this.selectorParentGroup.appendChild(this.selectors[N].selectorGroup);
- this.selectorMap[elem.id] = this.selectors[N];
- return this.selectors[N];
- };
-
- // Function: SelectorManager.releaseSelector
- // Removes the selector of the given element (hides selection box)
- //
- // Parameters:
- // elem - DOM element to remove the selector for
- this.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) {
- 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: SelectorManager.getRubberBandBox
- // Returns the rubberBandBox DOM element. This is the rectangle drawn by the user for selecting/zooming
- this.getRubberBandBox = function() {
- if (this.rubberBandBox == null) {
- this.rubberBandBox = this.selectorParentGroup.appendChild(
- addSvgElementFromJson({ "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;
- };
-
- this.initGroup();
- };
-}());
-
-
-// **************************************************************************************
-// SVGTransformList implementation for Webkit
-// These methods do not currently raise any exceptions.
-// These methods also do not check that transforms are being inserted or handle if
-// a transform is already in the list, etc. 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 )
-// SVGTransform insertItemBefore ( in SVGTransform newItem, in unsigned long index )
-// SVGTransform replaceItem ( in SVGTransform newItem, in unsigned long index )
-// SVGTransform removeItem ( in unsigned long index )
-// SVGTransform appendItem ( in SVGTransform newItem )
-// NOT IMPLEMENTED: SVGTransform createSVGTransformFromMatrix ( in SVGMatrix matrix );
-// NOT IMPLEMENTED: SVGTransform consolidate ( );
-// }
-// **************************************************************************************
-var svgTransformLists = {};
-var SVGEditTransformList = function(elem) {
-
- 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;
- };
-
- 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*\)/);
- 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);
- }
- xform[fname].apply(xform, values);
- this._list.appendItem(xform);
- }
- }
- }
-
- this.numberOfItems = 0;
- this.clear = function() {
- this.numberOfItems = 0;
- this._xforms = [];
- };
-
- this.initialize = function(newItem) {
- this.numberOfItems = 1;
- this._xforms = [newItem];
- };
-
- this.getItem = function(index) {
- if (index < this.numberOfItems && index >= 0) {
- return this._xforms[index];
- }
- return null;
- };
-
- this.insertItemBefore = function(newItem, index) {
- var retValue = null;
- if (index >= 0) {
- if (index < this.numberOfItems) {
- 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._xforms[index] = newItem;
- retValue = newItem;
- this._list._update();
- }
- return retValue;
- };
-
- this.removeItem = function(index) {
- var retValue = null;
- 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;
- };
-
- this.appendItem = function(newItem) {
- this._xforms.push(newItem);
- this.numberOfItems++;
- this._list._update();
- return newItem;
- };
-};
-// **************************************************************************************
-
-// Group: Helper functions
-
-// Function: 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
-function walkTree(elem, cbFn){
- if (elem && elem.nodeType == 1) {
- cbFn(elem);
- var i = elem.childNodes.length;
- while (i--) {
- walkTree(elem.childNodes.item(i), cbFn);
- }
- }
-};
-
-// Function: walkTreePost
-// Walks the tree and executes the callback on each element in a depth-first fashion
-//
-// Parameters:
-// elem - DOM element to traverse
-// cbFn - Callback function to run on each element
-function walkTreePost(elem, cbFn) {
- if (elem && elem.nodeType == 1) {
- var i = elem.childNodes.length;
- while (i--) {
- walkTree(elem.childNodes.item(i), cbFn);
- }
- cbFn(elem);
- }
-};
-
-// 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 setUnitAttr
-var assignAttributes = this.assignAttributes = function(node, attrs, suspendLength, unitCheck) {
- if(!suspendLength) suspendLength = 0;
- // Opera has a problem with suspendRedraw() apparently
- var handle = null;
- if (!window.opera) 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 || !unitCheck) {
- node.setAttributeNS(ns, i, attrs[i]);
- } else {
- setUnitAttr(node, i, attrs[i]);
- }
-
- }
-
- if (!window.opera) svgroot.unsuspendRedraw(handle);
-};
-
-// Function: cleanupElement
-// Remove unneeded (default) attributes, makes resulting SVG smaller
-//
-// Parameters:
-// element - DOM element to clean up
-var cleanupElement = this.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);
-};
-
-// 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 - 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
-var addSvgElementFromJson = this.addSvgElementFromJson = function(data) {
- var shape = getElem(data.attr.id);
- // if shape is a path but we need to create a rect/ellipse, then remove the path
- if (shape && data.element != shape.tagName) {
- current_layer.removeChild(shape);
- shape = null;
- }
- if (!shape) {
- shape = svgdoc.createElementNS(svgns, data.element);
- if (current_layer) {
- current_layer.appendChild(shape);
- }
- }
- if(data.curStyles) {
- 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);
- }
- assignAttributes(shape, data.attr, 100);
- cleanupElement(shape);
- return shape;
-};
-
-(function() {
- // 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);
-
- // 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');
- // svgthumb.setAttributeNS(xlinkns, 'href', '#svgcontent');
- // svgroot.appendChild(svgthumb);
-
-})();
-
-// z-ordered array of tuples containing layer names and <g> elements
-// the first layer is the one at the bottom of the rendering
-var all_layers = [],
-
- // Object to contain image data for raster images that were found encodable
- encodableImages = {},
-
- // String with image URL of last loadable image
- last_good_img_url = curConfig.imgPath + 'logo.png',
-
- // pointer to the current layer <g>
- current_layer = null,
-
- // Object with save options
- save_options = {round_digits: 5},
-
- // Boolean indicating whether or not a draw action has been started
- started = false,
-
- // Integer with internal ID number for the latest element
- obj_num = 1,
-
- // 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 containing data for the currently selected styles
- 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,
-
- // Current text style properties
- cur_text = all_properties.text,
-
- // Current general properties
- cur_properties = cur_shape,
-
- // Float displaying the current zoom level (1 = 100%, .5 = 50%, etc)
- current_zoom = 1,
-
- // Array with all the currently selected elements
- // default size of 1 until it needs to grow bigger
- selectedElements = new Array(1),
-
- // Array with selected elements' Bounding box object
- selectedBBoxes = new Array(1),
-
- // The DOM element that was just selected
- justSelected = null,
-
- // this object manages selectors for us
- selectorManager = new SelectorManager(),
-
- // 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 = {};
-
-// 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: nonce,
- 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"');
- }
-};
-
-// Function: 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
-var shortFloat = function(val) {
- var digits = save_options.round_digits;
- if(!isNaN(val)) {
- return Number(Number(val).toFixed(digits));
- } else if($.isArray(val)) {
- return shortFloat(val[0]) + ',' + shortFloat(val[1]);
- }
-}
-
-// 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; }
-
- if(!curBBoxes.length) {
- // Cache all bboxes
- curBBoxes = getVisibleElements(current_layer, true);
- }
-
- var resultList = null;
- try {
- resultList = current_layer.getIntersectionList(rect, null);
- } catch(e) { }
-
- if (resultList == null || typeof(resultList.item) != "function") {
- resultList = [];
-
- var rubberBBox = rubberBox.getBBox();
- $.each(rubberBBox, function(key, val) {
- rubberBBox[key] = val / current_zoom;
- });
- var i = curBBoxes.length;
- while (i--) {
- if(!rubberBBox.width || !rubberBBox.width) continue;
- if (Utils.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;
-};
-
-// 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
-var 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 = getBBox(elem);
-
- var angle = getRotationAngle(elem);
- if ((angle && angle % 90) || hasMatrixTransform(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($.inArray(elem.tagName, elemNames) != -1) {
- 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) {
- var g = document.createElementNS(svgns, "g");
- var parent = elem.parentNode;
- parent.replaceChild(g, elem);
- g.appendChild(elem);
- bb = g.getBBox();
- parent.insertBefore(elem,g);
- 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
-// includeBBox - Boolean 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
-var getVisibleElements = this.getVisibleElements = function(parent, includeBBox) {
- if(!parent) parent = $(svgcontent).children(); // Prevent layers from being included
-
- var contentElems = [];
- $(parent).children().each(function(i, elem) {
- try {
- var box = elem.getBBox();
- if (box) {
- var item = includeBBox?{'elem':elem, 'bbox':getStrokedBBox([elem])}:elem;
- contentElems.push(item);
- }
- } catch(e) {}
- });
- return contentElems.reverse();
-}
-
-// 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();
- // manually increment obj_num because our cloned elements are not in the DOM yet
- obj_num++;
-
- // 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((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(new_el.tagName == 'image') {
- preventClickDefault(new_el);
- }
- return new_el;
-};
-
-// Function: getElem
-// Get a DOM element by ID within the SVG root element.
-//
-// Parameters:
-// id - String with the element's new ID
-function getElem(id) {
-// if(svgroot.getElementById) {
-// // getElementById lookup
-// return svgroot.getElementById(id);
-// } else
-
- if(svgroot.querySelector) {
- // querySelector lookup
- return svgroot.querySelector('#'+id);
- } else if(svgdoc.evaluate) {
- // xpath lookup
- return svgdoc.evaluate('svg:svg[@id="svgroot"]//svg:*[@id="'+id+'"]', container, function() { return "http://www.w3.org/2000/svg"; }, 9, null).singleNodeValue;
- } else {
- // jQuery lookup: twice as slow as xpath in FF
- return $(svgroot).find('[id=' + id + ']')[0];
- }
-
- // getElementById lookup: includes icons, not good
- // return svgdoc.getElementById(id);
-}
-
-// Set scope for these functions
-var getId, getNextId;
-
-(function(c) {
-
- // Object to contain editor event names and callback functions
- var events = {};
-
- // Prefix string for element IDs
- var idprefix = "svg_";
-
- // Function: getId
- // Returns the last created DOM element ID string
- getId = c.getId = function() {
- if (events["getid"]) return call("getid", obj_num);
- if (randomize_ids) {
- return idprefix + nonce +'_' + obj_num;
- } else {
- return idprefix + obj_num;
- }
- };
-
- // Function: getNextId
- // Creates and returns a unique ID string for a DOM element
- getNextId = c.getNextId = function() {
- // ensure the ID does not exist
- var id = getId();
-
- while (getElem(id)) {
- obj_num++;
- id = getId();
- }
- return id;
- };
-
- // 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;
- };
-
- // Function: setIdPrefix
- // Changes the ID prefix to the given value
- //
- // Parameters:
- // p - String with the new prefix
- c.setIdPrefix = function(p) {
- idprefix = p;
- };
-}(canvas));
-
-
-// Function: 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
-var sanitizeSvg = this.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]) )
- {
- // 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);
- }
- // special handling for path d attribute
- if (node.nodeName == 'path' && attrName == 'd') {
- // Convert to absolute
- node.setAttribute('d',pathActions.convertPath(node));
- pathActions.fixEnd(node);
- }
- // 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]) != -1) {
- 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 = node.getAttributeNS(xlinkns,"href");
- if(href &&
- $.inArray(node.nodeName, ["filter", "linearGradient", "pattern",
- "radialGradient", "textPath", "use"]) != -1)
- {
- // TODO: we simply check if the first character is a #, is this bullet-proof?
- if (href[0] != "#") {
- // remove the attribute (but keep the element)
- node.setAttributeNS(xlinkns, "xlink:href", "");
- node.removeAttributeNS(xlinkns, "href");
- }
- }
-
- // Safari crashes on a <use> without a xlink:href, so we just remove the node here
- if (node.nodeName == "use" && !node.getAttributeNS(xlinkns,"href")) {
- 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 = 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--) { 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--) { sanitizeSvg(children[i]); }
-
- }
-};
-
-// Function: 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
-var getUrlFromAttr = this.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: 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
-var getBBox = this.getBBox = function(elem) {
- var selected = elem || selectedElements[0];
- if (elem.nodeType != 1) return null;
- var ret = null;
- if(elem.nodeName == 'text' && selected.textContent == '') {
- selected.textContent = 'a'; // Some character needed for the selector to use.
- ret = selected.getBBox();
- selected.textContent = '';
- } else if(elem.nodeName == 'path' && isWebkit) {
- ret = getPathBBox(selected);
- } else if(elem.nodeName == 'use' && !isWebkit) {
- ret = selected.getBBox();
- ret.x += parseFloat(selected.getAttribute('x')||0);
- ret.y += parseFloat(selected.getAttribute('y')||0);
- } else if(elem.nodeName == 'foreignObject') {
- ret = selected.getBBox();
- ret.x += parseFloat(selected.getAttribute('x')||0);
- ret.y += parseFloat(selected.getAttribute('y')||0);
- } else {
- 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;
- }
- }
- }
-
- // get the bounding box from the DOM (which is in that element's coordinate system)
- return ret;
-};
-
-
-// Function: ffClone
-// 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:
-// elem - The (text) DOM element to clone
-var ffClone = function(elem) {
- if(navigator.userAgent.indexOf('Gecko/') == -1) 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;
-}
-
-// Function: 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
-var getPathBBox = function(path) {
- var seglist = path.pathSegList;
- var tot = seglist.numberOfItems;
-
- var bounds = [[], []];
- var start = seglist.getItem(0);
- var P0 = [start.x, start.y];
-
- for(var i=0; i < tot; i++) {
- var seg = seglist.getItem(i);
- if(!seg.x) continue;
-
- // Add actual points to limits
- bounds[0].push(P0[0]);
- bounds[1].push(P0[1]);
-
- if(seg.x1) {
- var P1 = [seg.x1, seg.y1],
- P2 = [seg.x2, seg.y2],
- P3 = [seg.x, seg.y];
-
- for(var j=0; j < 2; j++) {
-
- var calc = function(t) {
- return Math.pow(1-t,3) * P0[j]
- + 3 * Math.pow(1-t,2) * t * P1[j]
- + 3 * (1-t) * Math.pow(t,2) * P2[j]
- + Math.pow(t,3) * P3[j];
- };
-
- var b = 6 * P0[j] - 12 * P1[j] + 6 * P2[j];
- var a = -3 * P0[j] + 9 * P1[j] - 9 * P2[j] + 3 * P3[j];
- var c = 3 * P1[j] - 3 * P0[j];
-
- if(a == 0) {
- if(b == 0) {
- continue;
- }
- var t = -c / b;
- if(0 < t && t < 1) {
- bounds[j].push(calc(t));
- }
- continue;
- }
-
- var b2ac = Math.pow(b,2) - 4 * c * a;
- if(b2ac < 0) continue;
- var t1 = (-b + Math.sqrt(b2ac))/(2 * a);
- if(0 < t1 && t1 < 1) bounds[j].push(calc(t1));
- var t2 = (-b - Math.sqrt(b2ac))/(2 * a);
- if(0 < t2 && t2 < 1) bounds[j].push(calc(t2));
- }
- P0 = P3;
- } else {
- bounds[0].push(seg.x);
- bounds[1].push(seg.y);
- }
- }
-
- var x = Math.min.apply(null, bounds[0]);
- var w = Math.max.apply(null, bounds[0]) - x;
- var y = Math.min.apply(null, bounds[1]);
- var h = Math.max.apply(null, bounds[1]) - y;
- return {
- 'x': x,
- 'y': y,
- 'width': w,
- 'height': h
- };
-}
-
-// 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);
-// };
-
-
-// Group: Element Transforms
-
-// Function: 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
-var getRotationAngle = this.getRotationAngle = function(elem, to_rad) {
- var selected = elem || selectedElements[0];
- // find the rotation transform (if any) and set it
- var tlist = 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: 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 = 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);
- tlist.insertItemBefore(R_nc,0);
- }
- 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);
- }
- 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: getTransformList
-// Returns an object that behaves like a SVGTransformList for the given DOM element
-//
-// Parameters:
-// elem - DOM element to get a transformlist from
-var getTransformList = this.getTransformList = function(elem) {
- if (isWebkit) {
- var id = elem.id;
- if(!id) {
- // Get unique ID for temporary element
- id = 'temp';
- }
- var t = svgTransformLists[id];
- if (!t || id == 'temp') {
- svgTransformLists[id] = new SVGEditTransformList(elem);
- svgTransformLists[id]._init();
- t = svgTransformLists[id];
- }
- return t;
- }
- else if (elem.transform) {
- return elem.transform.baseVal;
- }
- else if (elem.gradientTransform) {
- return elem.gradientTransform.baseVal;
- }
- return null;
-};
-
-// 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; },
- box = getBBox(selected);
-
- switch (selected.tagName)
- {
- 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;
- 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 = 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);
- 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"]);
- break;
- case "foreignObject":
- case "rect":
- case "image":
- var pt1 = remap(changes["x"],changes["y"]);
- changes["x"] = pt1.x;
- changes["y"] = pt1.y;
- changes["width"] = scalew(changes["width"]);
- changes["height"] = scaleh(changes["height"]);
- break;
- case "use":
- var pt1 = remap(changes["x"],changes["y"]);
- changes["x"] = pt1.x;
- changes["y"] = pt1.y;
- break;
- case "text":
- // 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);
- }
- break;
- case "polygon":
- case "polyline":
- 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;
- }
- 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);
- }
- // tracks the current position (for H,V commands)
- if (seg.x) currentpt.x = seg.x;
- if (seg.y) currentpt.y = seg.y;
- } // for each segment
- break;
- } // switch on element type to get initial values
-
- // now we have a set of changes and an applied reduced transform list
- // we apply the changes directly to the DOM
- // TODO: merge this switch with the above one and optimize
- switch (selected.tagName)
- {
- case "foreignObject":
- case "rect":
- case "image":
- changes.x = changes.x-0 + Math.min(0,changes.width);
- changes.y = changes.y-0 + Math.min(0,changes.height);
- changes.width = Math.abs(changes.width);
- changes.height = Math.abs(changes.height);
- assignAttributes(selected, changes, 1000, true);
- break;
- case "use":
- assignAttributes(selected, changes, 1000, true);
- break;
- case "ellipse":
- changes.rx = Math.abs(changes.rx);
- changes.ry = Math.abs(changes.ry);
- case "circle":
- if(changes.r) changes.r = Math.abs(changes.r);
- case "line":
- case "text":
- assignAttributes(selected, changes, 1000, true);
- break;
- case "polyline":
- case "polygon":
- 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 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 + " " + Number(seg.largeArcFlag) +
- " " + Number(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: 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 (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;
- }
-
- // 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":
- attrs = ["x", "y"];
- break;
- 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);
- });
- }
-
- // 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 group, we have special processing to flatten transforms
- if (selected.tagName == "g" || selected.tagName == "a") {
- var box = 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;
-
- 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 == useElem.getAttributeNS(xlinkns, "href")) {
-// 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;
- 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);
- // some children might not have a transform (<metadata>, <defs>, etc)
- if (childTlist) {
- var newxlate = svgroot.createSVGTransform();
- newxlate.setTranslate(tx,ty);
- childTlist.insertItemBefore(newxlate, 0);
- 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 == useElem.getAttributeNS(xlinkns, "href")) {
- var usexlate = svgroot.createSVGTransform();
- usexlate.setTranslate(-tx,-ty);
- getTransformList(useElem).insertItemBefore(usexlate,0);
- batchCmd.addSubCommand( recalculateDimensions(useElem) );
- }
- }
- start_transform = old_start_transform;
- }
- }
- }
- 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);
-
- 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;
- }
- }
- tlist.clear();
- }
- // else it was just a rotate
- else {
- if (gangle) {
- var newRot = svgroot.createSVGTransform();
- newRot.setRotate(gangle,newcenter.x,newcenter.y);
- tlist.insertItemBefore(newRot, 0);
- }
- 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);
- tlist.insertItemBefore(newRot, 0);
- }
- }
- // 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);
- childTlist.insertItemBefore(newxlate, 0);
- batchCmd.addSubCommand( recalculateDimensions(child) );
- start_transform = old_start_transform;
- }
- }
- }
-
- if (gangle) {
- tlist.insertItemBefore(rnew, 0);
- }
- }
- }
- // else, it's a non-group
- else {
- // FIXME: box might be null for some elements (<metadata> etc), need to handle this
- var box = getBBox(selected);
- if(!box) return null;
-
- 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),
- m = svgroot.createSVGMatrix(),
- // temporarily strip off the rotate and save the old center
- angle = getRotationAngle(selected);
- if (angle) {
- 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 SVGEditTransformList
- if(!isWebkit) {
- var fill = selected.getAttribute('fill');
- if(fill && fill.indexOf('url(') === 0) {
- var grad = getElem(getUrlFromAttr(fill).substr(1));
- if(grad.getAttribute('gradientUnits') === 'userSpaceOnUse') {
- //Update the userSpaceOnUse element
- var grad = $(grad);
- m = transformListToTransform(tlist).matrix;
- var gtlist = getTransformList(grad[0]);
- 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(",") + ")";
- grad.attr('gradientTransform', 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 &&
- 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);
- tlist.insertItemBefore(newRot, 0);
- }
- 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) {
- newcenter = {
- x: oldcenter.x + m.e,
- y: oldcenter.y + m.f
- };
- var newRot = svgroot.createSVGTransform();
- newRot.setRotate(angle, newcenter.x, newcenter.y);
- tlist.insertItemBefore(newRot, 0);
- }
- }
- // [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) {
- 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) {
- tlist.insertItemBefore(rnew,0);
- }
- }
- } // 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;
-
-// Function: 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
-var 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: 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
-var isIdentity = function(m) {
- return (m.a == 1 && m.b == 0 && m.c == 0 && m.d == 1 && m.e == 0 && m.f == 0);
-}
-
-// matrixMultiply() is provided because WebKit didn't implement multiply() correctly
-// on the SVGMatrix interface. See https://bugs.webkit.org/show_bug.cgi?id=16062
-
-// Function: 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
-var matrixMultiply = this.matrixMultiply = function() {
- var NEAR_ZERO = 1e-14,
- multi2 = function(m1, m2) {
- var m = svgroot.createSVGMatrix();
- m.a = m1.a*m2.a + m1.c*m2.b;
- m.b = m1.b*m2.a + m1.d*m2.b,
- m.c = m1.a*m2.c + m1.c*m2.d,
- m.d = m1.b*m2.c + m1.d*m2.d,
- m.e = m1.a*m2.e + m1.c*m2.f + m1.e,
- m.f = m1.b*m2.e + m1.d*m2.f + m1.f;
- return m;
- },
- args = arguments, i = args.length, m = args[i-1];
-
- while(i-- > 1) {
- var m1 = args[i-1];
- m = multi2(m1, 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: 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
-var transformListToTransform = this.transformListToTransform = function(tlist, min, max) {
- 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 = svgroot.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 :
- svgroot.createSVGMatrix());
- m = matrixMultiply(m, mtom);
- }
- return svgroot.createSVGTransformFromMatrix(m);
-};
-
-// Function: 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
-var hasMatrixTransform = this.hasMatrixTransform = function(tlist) {
- if(!tlist) return false;
- var num = tlist.numberOfItems;
- while (num--) {
- var xform = tlist.getItem(num);
- if (xform.type == 1 && !isIdentity(xform.matrix)) return true;
- }
- return false;
-}
-
-// Function: 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
-var getMatrix = function(elem) {
- var tlist = getTransformList(elem);
- return transformListToTransform(tlist).matrix;
-}
-
-// Function: 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
-var transformBox = this.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)};
- 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)} };
-};
-
-
-// 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 || !getBBox(elem)) continue;
- // 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[j] = getBBox(elem);
- j++;
- var sel = selectorManager.requestSelector(elem);
-
- if (selectedElements.length > 1) {
- sel.showGrips(false);
- }
- }
- }
- if(selectedElements[0] && selectedElements.length === 1 && selectedElements[0].tagName == 'a') {
- // Make "a" element's child be the selected element
- selectedElements[0] = selectedElements[0].firstChild;
- }
-
- 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);
-};
-
-// 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),
- newSelectedBBoxes = new Array(selectedBBoxes.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;
- if (j==0) newSelectedBBoxes[j] = selectedBBoxes[i];
- j++;
- }
- else { // remove the item and its selector
- selectorManager.releaseSelector(elem);
- }
- }
- }
- // the copy becomes the master now
- selectedElements = newSelectedItems;
- selectedBBoxes = newSelectedBBoxes;
-};
-
-// Function: selectAllInCurrentLayer
-// Clears the selection, then adds all elements in the current layer to the selection.
-// This function then fires the selected event.
-this.selectAllInCurrentLayer = function() {
- if (current_layer) {
- clearSelection();
- addToSelection($(current_layer).children());
- current_mode = "select";
- call("selected", selectedElements);
- }
-};
-
-// Function: smoothControlPoints
-// Takes three points and creates a smoother line based on them
-//
-// Parameters:
-// ct1 - Object with x and y values (first control point)
-// ct2 - Object with x and y values (second control point)
-// pt - Object with x and y values (third point)
-//
-// Returns:
-// Array of two "smoothed" point objects
-var smoothControlPoints = this.smoothControlPoints = function(ct1, ct2, pt) {
- // each point must not be the origin
- var x1 = ct1.x - pt.x,
- y1 = ct1.y - pt.y,
- x2 = ct2.x - pt.x,
- y2 = ct2.y - pt.y;
-
- if ( (x1 != 0 || y1 != 0) && (x2 != 0 || y2 != 0) ) {
- var anglea = Math.atan2(y1,x1),
- angleb = Math.atan2(y2,x2),
- r1 = Math.sqrt(x1*x1+y1*y1),
- r2 = Math.sqrt(x2*x2+y2*y2),
- nct1 = svgroot.createSVGPoint(),
- nct2 = svgroot.createSVGPoint();
- if (anglea < 0) { anglea += 2*Math.PI; }
- if (angleb < 0) { angleb += 2*Math.PI; }
-
- var angleBetween = Math.abs(anglea - angleb),
- angleDiff = Math.abs(Math.PI - angleBetween)/2;
-
- var new_anglea, new_angleb;
- if (anglea - angleb > 0) {
- new_anglea = angleBetween < Math.PI ? (anglea + angleDiff) : (anglea - angleDiff);
- new_angleb = angleBetween < Math.PI ? (angleb - angleDiff) : (angleb + angleDiff);
- }
- else {
- new_anglea = angleBetween < Math.PI ? (anglea - angleDiff) : (anglea + angleDiff);
- new_angleb = angleBetween < Math.PI ? (angleb + angleDiff) : (angleb - angleDiff);
- }
-
- // rotate the points
- nct1.x = r1 * Math.cos(new_anglea) + pt.x;
- nct1.y = r1 * Math.sin(new_anglea) + pt.y;
- nct2.x = r2 * Math.cos(new_angleb) + pt.x;
- nct2.y = r2 * Math.sin(new_angleb) + pt.y;
-
- return [nct1, nct2];
- }
- return undefined;
-};
-
-
-// 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 ($.inArray(mouse_target.namespaceURI, [mathns, htmlns]) != -1 &&
- mouse_target.id != "svgcanvas")
- {
- while (mouse_target.nodeName != "foreignObject") {
- 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,
- 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(evt.button === 1 || canvas.spaceKey) return;
- 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();
-
- // This would seem to be unnecessary...
-// if($.inArray(current_mode, ['select', 'resize']) == -1) {
-// setGradient();
-// }
-
- var x = mouse_x / current_zoom,
- y = mouse_y / current_zoom,
- mouse_target = getMouseTarget(evt);
-
- start_x = x;
- start_y = 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.parentNode == selectorManager.selectorParentGroup && selectedElements[0] != null) {
- var gripid = evt.target.id,
- griptype = gripid.substr(0,20);
- // rotating
- if (griptype == "selectorGrip_rotate_") {
- current_mode = "rotate";
- }
- // resizing
- else if(griptype == "selectorGrip_resize_") {
- current_mode = "resize";
- current_resize_mode = gripid.substr(20,gripid.indexOf("_",20)-20);
- }
- 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 (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
-
- // 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]);
- slist.insertItemBefore(svgroot.createSVGTransform(), 0);
- }
- }
- else {
- clearSelection();
- current_mode = "multiselect";
- if (rubberBox == null) {
- rubberBox = selectorManager.getRubberBandBox();
- }
- start_x *= current_zoom;
- start_y *= current_zoom;
- assignAttributes(rubberBox, {
- 'x': start_x,
- 'y': start_y,
- 'width': 0,
- 'height': 0,
- 'display': 'inline'
- }, 100);
- }
- break;
- case "zoom":
- started = true;
- start_x = x;
- start_y = y;
- 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);
- 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 = getBBox($('#selectedBox0')[0]);
- $.each(init_bbox, function(key, val) {
- init_bbox[key] = val/current_zoom;
- });
-
- // 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());
- }
- break;
- case "fhellipse":
- case "fhrect":
- case "fhpath":
- started = true;
- start_x = x;
- start_y = y;
- d_attr = x + "," + 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 = x;
- freehand.maxx = x;
- freehand.miny = y;
- freehand.maxy = y;
- break;
- case "image":
- started = true;
- start_x = x;
- start_y = y;
- 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"
- }
- });
- newImage.setAttributeNS(xlinkns, "xlink:href", 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"
- }
- });
-// 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.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)
- // TODO: svgcanvas should just retain a reference to the image being dragged instead
- // of the getId() and getElementById() funkiness - this will help us customize the ids
- // a little bit for squares and paths
- 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());
-
- x = mouse_x / current_zoom;
- y = mouse_y / current_zoom;
-
- 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(evt.shiftKey) { var xya = Utils.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 = 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);
- xform.setTranslate(dx,dy);
- if(tlist.numberOfItems) {
- tlist.replaceItem(xform, 0);
- // TODO: Webkit returns null here, find out why
-// console.log(selected.getAttribute("transform"))
-
- } else {
- tlist.appendItem(xform);
- }
-
- // update our internal bbox that we're tracking while dragging
- selectorManager.requestSelector(selected).resize();
- }
- }
- }
- break;
- case "multiselect":
- x *= current_zoom;
- y *= current_zoom;
- 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);
-
- // 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:getBBox(selected),
- left=box.x, top=box.y, width=box.width,
- height=box.height, dx=(x-start_x), dy=(y-start_y);
-
- // 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") != -1) {
- 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") != -1) {
- 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();
- 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);
- }
- var selectedBBox = selectedBBoxes[0];
-
- // reset selected bbox top-left position
- selectedBBox.x = left;
- selectedBBox.y = top;
-
- // if this is a translate, adjust the box position
- if (tx) {
- selectedBBox.x += dx;
- }
- if (ty) {
- selectedBBox.y += dy;
- }
-
- selectorManager.requestSelector(selected).resize();
- break;
- case "zoom":
- x *= current_zoom;
- y *= current_zoom;
- assignAttributes(rubberBox, {
- 'x': Math.min(start_x*current_zoom,x),
- 'y': Math.min(start_y*current_zoom,y),
- 'width': Math.abs(x-start_x*current_zoom),
- 'height': Math.abs(y-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);
-
- var x2 = x;
- var y2 = y;
-
- if(evt.shiftKey) { var xya=Utils.snapToAngle(start_x,start_y,x2,y2); x2=xya.x; y2=xya.y; }
-
- 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);
- }
-
- 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) );
- 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);
- 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(x, freehand.minx);
- freehand.maxx = Math.max(x, freehand.maxx);
- freehand.miny = Math.min(y, freehand.miny);
- freehand.maxy = Math.max(y, freehand.maxy);
- // break; missing on purpose
- case "fhpath":
- start_x = x;
- start_y = y;
- d_attr += + x + "," + 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(evt.shiftKey) {
- var x1 = path.dragging?path.dragging[0]:start_x;
- var y1 = path.dragging?path.dragging[1]:start_y;
- var xya=Utils.snapToAngle(x1,y1,x,y);
- x=xya.x; y=xya.y;
- }
-
- 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);
- }
-
- 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 = 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(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("changed", 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 === 1) 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;
-
- 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];
- if (selected.tagName != "g" && selected.tagName != "image" && selected.tagName != "foreignObject") {
- 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 (x != start_x || y != start_y) {
- var len = selectedElements.length;
- for (var i = 0; i < len; ++i) {
- if (selectedElements[i] == null) break;
- if(selectedElements[i].tagName != 'g') {
- // 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(t);
- } // if it was a path
- else if (selectedElements[0].nodeName == "text" && selectedElements[1] == null) {
- textActions.select(t, x, y);
- } // 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
- }
- // we return immediately from select so that the obj_num is not incremented
- return;
- break;
- case "zoom":
- if (rubberBox != null) {
- rubberBox.setAttribute("display", "none");
- }
- var factor = evt.shiftKey?.5:2;
- call("zoomed", {
- 'x': Math.min(start_x,x),
- 'y': Math.min(start_y,y),
- 'width': Math.abs(x-start_x),
- 'height': Math.abs(y-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;
- addToSelection([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.finishUndoableChange();
- if (!batchCmd.isEmpty()) {
- addCommandToHistory(batchCmd);
- }
- // perform recalculation to weed out any stray identity transforms that might get stuck
- recalculateAllSelectedDimensions();
- 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) {
- 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" || current_path_pts.length == 0) &&
- t.parentNode.id != "selectorParentGroup" &&
- t.id != "svgcanvas" && t.id != "svgroot")
- {
- // switch into "select" mode if we've clicked on an element
- addToSelection([t], true);
- canvas.setMode("select");
- }
-
- } else if (element != null) {
- canvas.addedNew = true;
- 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);
- c_ani[0].beginElement();
- } 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 (current_mode == "text" || current_mode == "image" || current_mode == "foreignObject") {
- // keep us in the tool we were in unless it was a text or image element
- addToSelection([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;
- };
-
- // prevent links from being followed in the canvas
- var handleLinkInCanvas = function(e) {
- e.preventDefault();
- return false;
- };
-
- $(container).mousedown(mouseDown).mousemove(mouseMove).click(handleLinkInCanvas);
- $(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, current_text;
- 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 === "");
-
- 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) 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) {
- if (current_text == target) {
- curtext = target;
- textActions.toEditMode(x, y);
- } // going into pathedit mode
- else {
- current_text = target;
- }
- },
- 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
-// && !Utils.rectsIntersect(transbb, {x: pt.x, y: pt.y, width:0, height:0})) {
-// textActions.toSelectMode(true);
-// }
- if(last_x === mouse_x && last_y === mouse_y && evt.target !== curtext) {
- textActions.toSelectMode(true);
- }
-
- },
- setCursor: setCursor,
- toEditMode: function(x, y) {
- allow_dbl = false;
- current_mode = "textedit";
- selectorManager.requestSelector(curtext).showGrips(false);
-
- textActions.init();
- $(curtext).css('cursor', 'text');
-
-// if(support.editableText) {
-// 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(support.editableText) {
-// curtext.removeAttribute('editable');
-// }
- },
- setInputElem: function(elem) {
- textinput = elem;
- $(textinput).blur(hideCursor);
- },
- clear: function() {
- current_text = null;
- if(current_mode == "textedit") {
- textActions.toSelectMode();
- }
- },
- init: function(inputElem) {
- if(!curtext) return;
-
-// if(support.editableText) {
-// 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 = 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);
-
- // 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);
- }
- }
-}();
-
-// Group: Path edit functions
-// Functions relating to editing path elements
-var pathActions = this.pathActions = function() {
-
- var subpath = false;
- var pathData = {};
- var current_path;
- var path;
- 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']
- };
-
- function retPath() {
- return path;
- }
-
- function resetD(p) {
- p.setAttribute("d", pathActions.convertPath(p));
- }
-
- function insertItemBefore(elem, newseg, index) {
- // Support insertItemBefore on paths for FF2
- var list = elem.pathSegList;
-
- if(support.pathInsertItemBefore) {
- list.insertItemBefore(newseg, index);
- return;
- }
- var len = list.numberOfItems;
- var arr = [];
- for(var i=0; i<len; i++) {
- var cur_seg = list.getItem(i);
- arr.push(cur_seg)
- }
- list.clear();
- for(var i=0; i<len; i++) {
- if(i == index) { //index+1
- list.appendItem(newseg);
- }
- list.appendItem(arr[i]);
- }
- }
-
- // TODO: See if this should just live in replacePathSeg
- function ptObjToArr(type, seg_item) {
- var arr = segData[type], len = arr.length;
- var out = Array(len);
- for(var i=0; i<len; i++) {
- out[i] = seg_item[arr[i]];
- }
- return out;
- }
-
- function getGripContainer() {
- var c = getElem("pathpointgrip_container");
- if (!c) {
- var parent = getElem("selectorParentGroup");
- c = parent.appendChild(document.createElementNS(svgns, "g"));
- c.id = "pathpointgrip_container";
- }
- return c;
- }
-
- var addPointGrip = function(index, x, y) {
- // create the container of all the point grips
- var pointGripContainer = getGripContainer();
-
- var pointGrip = getElem("pathpointgrip_"+index);
- // create it
- if (!pointGrip) {
- pointGrip = document.createElementNS(svgns, "circle");
- assignAttributes(pointGrip, {
- 'id': "pathpointgrip_" + index,
- 'display': "none",
- 'r': 4,
- 'fill': "#0FF",
- 'stroke': "#00F",
- 'stroke-width': 2,
- 'cursor': 'move',
- 'style': 'pointer-events:all',
- 'xlink:title': uiStrings.pathNodeTooltip
- });
- pointGrip = pointGripContainer.appendChild(pointGrip);
-
- var grip = $('#pathpointgrip_'+index);
- grip.dblclick(function() {
- if(path) path.setSegType();
- });
- }
- if(x && y) {
- // set up the point grip element and display it
- assignAttributes(pointGrip, {
- 'cx': x,
- 'cy': y,
- 'display': "inline"
- });
- }
- return pointGrip;
- };
-
- var getPointGrip = function(seg, update) {
- var index = seg.index;
- var pointGrip = addPointGrip(index);
-
- if(update) {
- var pt = getGripPt(seg);
- assignAttributes(pointGrip, {
- 'cx': pt.x,
- 'cy': pt.y,
- 'display': "inline"
- });
- }
-
- return pointGrip;
- }
-
- var getSegSelector = function(seg, update) {
- var index = seg.index;
- var segLine = getElem("segline_" + index);
- if(!segLine) {
- var pointGripContainer = getGripContainer();
- // create segline
- segLine = document.createElementNS(svgns, "path");
- assignAttributes(segLine, {
- 'id': "segline_" + index,
- 'display': 'none',
- 'fill': "none",
- 'stroke': "#0FF",
- 'stroke-width': 2,
- 'style':'pointer-events:none',
- 'd': 'M0,0 0,0'
- });
- pointGripContainer.appendChild(segLine);
- }
-
- if(update) {
- var prev = seg.prev;
- if(!prev) {
- segLine.setAttribute("display", "none");
- return segLine;
- }
-
- var pt = getGripPt(prev);
- // Set start point
- replacePathSeg(2, 0, [pt.x, pt.y], segLine);
-
- var pts = ptObjToArr(seg.type, seg.item, true);
- for(var i=0; i < pts.length; i+=2) {
- var pt = getGripPt(seg, {x:pts[i], y:pts[i+1]});
- pts[i] = pt.x;
- pts[i+1] = pt.y;
- }
-
- replacePathSeg(seg.type, 1, pts, segLine);
- }
- return segLine;
- }
-
- var getControlPoints = function(seg) {
- var item = seg.item;
- var index = seg.index;
- if(!("x1" in item) || !("x2" in item)) return null;
- var cpt = {};
- var pointGripContainer = getGripContainer();
-
- // Note that this is intentionally not seg.prev.item
- var prev = path.segs[index-1].item;
-
- var seg_items = [prev, item];
-
- for(var i=1; i<3; i++) {
- var id = index + 'c' + i;
- var ctrlLine = cpt['c' + i + '_line'] = getElem("ctrlLine_"+id);
-
- if(!ctrlLine) {
- ctrlLine = document.createElementNS(svgns, "line");
- assignAttributes(ctrlLine, {
- 'id': "ctrlLine_"+id,
- 'stroke': "#555",
- 'stroke-width': 1,
- "style": "pointer-events:none"
- });
- pointGripContainer.appendChild(ctrlLine);
- }
-
- var pt = getGripPt(seg, {x:item['x' + i], y:item['y' + i]});
- var gpt = getGripPt(seg, {x:seg_items[i-1].x, y:seg_items[i-1].y});
-
- assignAttributes(ctrlLine, {
- 'x1': pt.x,
- 'y1': pt.y,
- 'x2': gpt.x,
- 'y2': gpt.y,
- 'display': "inline"
- });
-
- cpt['c' + i + '_line'] = ctrlLine;
-
- var pointGrip = cpt['c' + i] = getElem("ctrlpointgrip_"+id);
- // create it
- if (!pointGrip) {
- pointGrip = document.createElementNS(svgns, "circle");
- assignAttributes(pointGrip, {
- 'id': "ctrlpointgrip_" + id,
- 'display': "none",
- 'r': 4,
- 'fill': "#0FF",
- 'stroke': "#55F",
- 'stroke-width': 1,
- 'cursor': 'move',
- 'style': 'pointer-events:all',
- 'xlink:title': uiStrings.pathCtrlPtTooltip
- });
- pointGripContainer.appendChild(pointGrip);
- }
-
- assignAttributes(pointGrip, {
- 'cx': pt.x,
- 'cy': pt.y,
- 'display': "inline"
- });
- cpt['c' + i] = pointGrip;
- }
- return cpt;
- }
-
- function getGripPt(seg, alt_pt) {
- var out = {
- x: alt_pt? alt_pt.x : seg.item.x,
- y: alt_pt? alt_pt.y : seg.item.y
- }, path = seg.path;
-
-
- if(path.matrix) {
- var pt = transformPoint(out.x, out.y, path.matrix);
- out = pt;
- }
-
- out.x *= current_zoom;
- out.y *= current_zoom;
-
- return out;
- }
-
- function getPointFromGrip(pt, path) {
- var out = {
- x: pt.x,
- y: pt.y
- }
-
- if(path.matrix) {
- var pt = transformPoint(out.x, out.y, path.imatrix);
- out.x = pt.x;
- out.y = pt.y;
- }
-
- out.x /= current_zoom;
- out.y /= current_zoom;
-
- return out;
- }
-
- function Segment(index, item) {
- var s = this;
-
- s.index = index;
- s.selected = false;
- s.type = item.pathSegType;
- var grip;
-
- s.addGrip = function() {
- grip = s.ptgrip = getPointGrip(s, true);
- s.ctrlpts = getControlPoints(s, true);
- s.segsel = getSegSelector(s, true);
- }
-
- s.item = item;
- s.show = function(y) {
- if(grip) {
- grip.setAttribute("display", y?"inline":"none");
- s.segsel.setAttribute("display", y?"inline":"none");
-
- // Show/hide all control points if available
- s.showCtrlPts(y);
- }
- }
- s.select = function(y) {
- if(grip) {
- grip.setAttribute("stroke", y?"#0FF":"#00F");
- s.segsel.setAttribute("display", y?"inline":"none");
- if(s.ctrlpts) {
- s.selectCtrls(y);
- }
- s.selected = y;
- }
- }
- s.selectCtrls = function(y) {
- $('#ctrlpointgrip_' + s.index + 'c1, #ctrlpointgrip_' + s.index + 'c2').attr('fill',y?'#0FF':'#EEE');
- }
- s.update = function(full) {
- item = s.item;
- if(grip) {
- var pt = getGripPt(s);
- assignAttributes(grip, {
- 'cx': pt.x,
- 'cy': pt.y
- });
-
- getSegSelector(s, true);
-
- if(s.ctrlpts) {
- if(full) {
- s.item = path.elem.pathSegList.getItem(s.index);
- s.type = s.item.pathSegType;
- }
- getControlPoints(s);
- }
- // this.segsel.setAttribute("display", y?"inline":"none");
- }
- }
- s.move = function(dx, dy) {
- var item = s.item;
-
- var cur = s;
-
- if(cur.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];
- }
- replacePathSeg(cur.type, cur.index, cur_pts);
-
- if(s.next && s.next.ctrlpts) {
- var next = s.next.item;
- var next_pts = [next.x, next.y,
- next.x1 += dx, next.y1 += dy, next.x2, next.y2];
- replacePathSeg(s.next.type, s.next.index, next_pts);
- }
-
- if(s.mate) {
- // The last point of a closed subpath has a "mate",
- // which is the "M" segment of the subpath
- var item = s.mate.item;
- var pts = [item.x += dx, item.y += dy];
- replacePathSeg(s.mate.type, s.mate.index, pts);
- // Has no grip, so does not need "updating"?
- }
-
- s.update(true);
- if(s.next) s.next.update(true);
- }
- s.setLinked = function(num) {
- var seg, anum, pt;
- if(num == 2) {
- anum = 1;
- seg = s.next;
- if(!seg) return;
- pt = s.item;
- } else {
- anum = 2;
- seg = s.prev;
- if(!seg) return;
- pt = seg.item;
- }
- var item = seg.item;
-
- item['x' + anum] = pt.x + (pt.x - s.item['x' + num]);
- item['y' + anum] = pt.y + (pt.y - s.item['y' + num]);
-
- var pts = [item.x,item.y,
- item.x1,item.y1, item.x2,item.y2];
-
- replacePathSeg(seg.type, seg.index, pts);
- seg.update(true);
-
- }
- s.moveCtrl = function(num, dx, dy) {
- var item = s.item;
-
- item['x' + num] += dx;
- item['y' + num] += dy;
-
- var pts = [item.x,item.y,
- item.x1,item.y1, item.x2,item.y2];
-
- replacePathSeg(s.type, s.index, pts);
- s.update(true);
- }
- s.setType = function(new_type, pts) {
- replacePathSeg(new_type, index, pts);
- s.type = new_type;
- s.item = path.elem.pathSegList.getItem(index);
- s.showCtrlPts(new_type === 6);
- s.ctrlpts = getControlPoints(s);
- s.update(true);
- }
- s.showCtrlPts = function(y) {
- if(s.ctrlpts) {
- for (var o in s.ctrlpts) {
- s.ctrlpts[o].setAttribute("display", y?"inline":"none");
- }
- }
- }
- }
-
- function Path(elem) {
- if(!elem || elem.tagName !== "path") return false;
-
- var p = path = this;
- this.elem = elem;
- this.segs = [];
- this.selected_pts = [];
-
- // Reset path data
- this.init = function() {
- // Hide all grips, etc
- $(getGripContainer()).find("*").attr("display", "none");
- var segList = elem.pathSegList;
- var len = segList.numberOfItems;
- p.segs = [];
- p.selected_pts = [];
- p.first_seg = null;
-
- // Set up segs array
- for(var i=0; i < len; i++) {
- var item = segList.getItem(i);
- var segment = new Segment(i, item);
- segment.path = p;
- p.segs.push(segment);
- }
-
- var segs = p.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(p.first_seg == null) {
- p.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(!p.first_seg) {
- // Open path, so set first as real first and add grip
- p.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 p;
- }
-
- this.init();
-
- // Update position of all points
- this.update = function() {
- if(getRotationAngle(p.elem)) {
- p.matrix = getMatrix(path.elem);
- p.imatrix = p.matrix.inverse();
- }
-
- p.eachSeg(function(i) {
- this.item = elem.pathSegList.getItem(i);
- this.update();
- });
-
- return p;
- }
-
- this.eachSeg = function(fn) {
- var len = p.segs.length
- for(var i=0; i < len; i++) {
- var ret = fn.call(p.segs[i], i);
- if(ret === false) break;
- }
- }
-
- this.addSeg = function(index) {
- // Adds a new segment
- var seg = p.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 = 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 = 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];
- replacePathSeg(seg.type,index,pts);
- break;
- }
-
- insertItemBefore(elem, newseg, index);
- }
-
- this.deleteSeg = function(index) {
- var seg = p.segs[index];
- var list = 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];
- replacePathSeg(2, next.index, pt);
-
- // Reposition last node
- 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];
- replacePathSeg(2, seg.next.index, pt);
- list.removeItem(index);
-
- } else {
- list.removeItem(index);
- }
- }
-
- this.endChanges = function(text) {
- if(isWebkit) resetD(p.elem);
- var cmd = new ChangeElementCommand(elem, {d: p.last_d}, text);
- addCommandToHistory(cmd);
- call("changed", [elem]);
- }
-
- this.subpathIsClosed = function(index) {
- var closed = false;
- // Check if subpath is already open
- 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;
- }
-
- this.addPtsToSelection = function(indexes) {
- if(!$.isArray(indexes)) indexes = [indexes];
- for(var i=0; i< indexes.length; i++) {
- var index = indexes[i];
- var seg = p.segs[index];
- if(seg.ptgrip) {
- if($.inArray(index, p.selected_pts) == -1 && index >= 0) {
- p.selected_pts.push(index);
- }
- }
- };
- p.selected_pts.sort();
- var i = p.selected_pts.length,
- grips = new Array(i);
- // Loop through points to be selected and highlight each
- while(i--) {
- var pt = p.selected_pts[i];
- var seg = p.segs[pt];
- seg.select(true);
- grips[i] = seg.ptgrip;
- }
- // TODO: Correct this:
- pathActions.canDeleteNodes = true;
-
- pathActions.closed_subpath = p.subpathIsClosed(p.selected_pts[0]);
-
- call("selected", grips);
- }
-
- this.removePtFromSelection = function(index) {
- var pos = $.inArray(index, p.selected_pts);
- if(pos == -1) {
- return;
- }
- p.segs[index].select(false);
- p.selected_pts.splice(pos, 1);
- }
-
-
- this.clearSelection = function() {
- p.eachSeg(function(i) {
- this.select(false);
- });
- p.selected_pts = [];
- }
-
- this.selectPt = function(pt, ctrl_num) {
- p.clearSelection();
- if(pt == null) {
- p.eachSeg(function(i) {
- if(this.prev) {
- pt = i;
- }
- });
- }
- p.addPtsToSelection(pt);
- if(ctrl_num) {
- p.dragctrl = ctrl_num;
-
- if(link_control_pts) {
- p.segs[pt].setLinked(ctrl_num);
- }
- }
- }
-
- this.storeD = function() {
- this.last_d = elem.getAttribute('d');
- }
-
- this.show = function(y) {
- // Shows this path's segment grips
- p.eachSeg(function() {
- this.show(y);
- });
- if(y) {
- p.selectPt(p.first_seg.index);
- }
- return p;
- }
-
- // Move selected points
- this.movePts = function(d_x, d_y) {
- var i = p.selected_pts.length;
- while(i--) {
- var seg = p.segs[p.selected_pts[i]];
- seg.move(d_x, d_y);
- }
- }
-
- this.moveCtrl = function(d_x, d_y) {
- var seg = p.segs[p.selected_pts[0]];
- seg.moveCtrl(p.dragctrl, d_x, d_y);
- if(link_control_pts) {
- seg.setLinked(p.dragctrl);
- }
- }
-
- this.setSegType = function(new_type) {
- p.storeD();
- var i = p.selected_pts.length;
- var text;
- while(i--) {
- var sel_pt = p.selected_pts[i];
-
- // Selected seg
- var cur = p.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);
- }
- path.endChanges(text);
- return;
- }
-
- }
-
- function getPath(elem) {
- var p = pathData[elem.id];
- if(!p) p = pathData[elem.id] = new Path(elem);
- return p;
- }
-
-
- var pathFuncs = [],
- current_path = null,
- current_path_pts = [],
- link_control_pts = false,
- 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 = 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"
- }
- });
- call("changed",[element]);
- }
- return element;
- };
-
- // This replaces the segment at the given index. Type is given as number.
- var replacePathSeg = function(type, index, pts, elem) {
- var path = elem || retPath().elem;
- var func = 'createSVGPathSeg' + pathFuncs[type];
- var seg = path[func].apply(path, pts);
-
- if(support.pathReplaceItem) {
- path.pathSegList.replaceItem(seg, index);
- } else {
- var segList = path.pathSegList;
- var len = segList.numberOfItems;
- var arr = [];
- for(var i=0; i<len; i++) {
- var cur_seg = segList.getItem(i);
- arr.push(cur_seg)
- }
- segList.clear();
- for(var i=0; i<len; i++) {
- if(i == index) {
- segList.appendItem(seg);
- } else {
- segList.appendItem(arr[i]);
- }
- }
- }
- }
-
- // 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
- var recalcRotatedPath = function() {
- var current_path = path.elem;
- var angle = getRotationAngle(current_path, true);
- if(!angle) return;
- selectedBBoxes[0] = path.oldbbox;
- var box = getBBox(current_path),
- oldbox = 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 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};
- }
-
- 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);
- }
- replacePathSeg(type, i, points);
- } // loop for each point
-
- box = 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 = getTransformList(current_path);
- R_nc.setRotate((angle * 180.0 / Math.PI), newcx, newcy);
- tlist.replaceItem(R_nc,0);
- }
-
- return {
- init: function() {
- 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');});
- },
- getPath: function() {
- return path;
- },
- mouseDown: function(evt, mouse_target, start_x, start_y) {
- if(current_mode == "path") return;
-
- // TODO: Make sure current_path isn't null at this point
- if(!path) return;
-
- path.storeD();
-
- var id = evt.target.id;
- if (id.substr(0,14) == "pathpointgrip_") {
- // Select this point
- var cur_pt = path.cur_pt = parseInt(id.substr(14));
- path.dragging = [start_x, start_y];
- var seg = path.segs[cur_pt];
-
- // only clear selection if shift is not pressed (otherwise, add
- // node to selection)
- if (!evt.shiftKey) {
- if(path.selected_pts.length <= 1 || !seg.selected) {
- path.clearSelection();
- }
- path.addPtsToSelection(cur_pt);
- } else if(seg.selected) {
- path.removePtFromSelection(cur_pt);
- } else {
- path.addPtsToSelection(cur_pt);
- }
- } else if(id.indexOf("ctrlpointgrip_") == 0) {
- 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;
- path.selectPt(cur_pt, ctrl_num);
- }
-
- // Start selection box
- if(!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") {
- var line = getElem("path_stretch_line");
- if (line) {
- line.setAttribute("x2", mouse_x);
- line.setAttribute("y2", mouse_y);
- }
- return;
- }
- // if we are dragging a point, let's move it
- if (path.dragging) {
- var pt = getPointFromGrip({
- x: path.dragging[0],
- y: path.dragging[1]
- }, path);
- var mpt = getPointFromGrip({
- x: mouse_x,
- y: mouse_y
- }, path);
- var diff_x = mpt.x - pt.x;
- var diff_y = mpt.y - pt.y;
- path.dragging = [mouse_x, mouse_y];
-
- if(path.dragctrl) {
- path.moveCtrl(diff_x, diff_y);
- } else {
- path.movePts(diff_x, diff_y);
- }
- } else {
- path.selected_pts = [];
- path.eachSeg(function(i) {
- var seg = this;
- if(!seg.next && !seg.prev) return;
-
- var item = seg.item;
- var rbb = rubberBox.getBBox();
-
- var pt = getGripPt(seg);
- var pt_bb = {
- x: pt.x,
- y: pt.y,
- width: 0,
- height: 0
- };
-
- var sel = Utils.rectsIntersect(rbb, pt_bb);
-
- this.select(sel);
- //Note that addPtsToSelection is not being run
- if(sel) path.selected_pts.push(seg.index);
- });
-
- }
- },
- mouseUp: function(evt, element, mouse_x, mouse_y) {
-
- // Create mode
- if(current_mode == "path") {
- var x = mouse_x/current_zoom,
- y = mouse_y/current_zoom,
- stretchy = getElem("path_stretch_line");
- if (!stretchy) {
- stretchy = document.createElementNS(svgns, "line");
- assignAttributes(stretchy, {
- 'id': "path_stretch_line",
- 'stroke': "#22C",
- 'stroke-width': "0.5"
- });
- 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 (current_path_pts.length == 0) {
- current_path_pts.push(x);
- current_path_pts.push(y);
- d_attr = "M" + x + "," + y + " ";
- addSvgElementFromJson({
- "element": "path",
- "curStyles": true,
- "attr": {
- "d": d_attr,
- "id": getNextId(),
- "opacity": cur_shape.opacity / 2,
-
- }
- });
- // set stretchy line to first point
- assignAttributes(stretchy, {
- 'x1': mouse_x,
- 'y1': mouse_y,
- 'x2': mouse_x,
- 'y2': mouse_y
- });
- var index = subpath ? path.segs.length : 0;
- addPointGrip(index, mouse_x, mouse_y);
- }
- else {
- // determine if we clicked on an existing point
- var i = current_path_pts.length;
- var FUZZ = 6/current_zoom;
- var clickOnPoint = false;
- while(i) {
- i -= 2;
- var px = current_path_pts[i], py = current_path_pts[i+1];
- // 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
- if(id in pathData) delete pathData[id];
-
- var newpath = getElem(id);
-
- var len = current_path_pts.length;
- // 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 == 0 && len >= 6) {
- // Create end segment
- var abs_x = current_path_pts[0];
- var abs_y = current_path_pts[1];
- d_attr += ['L',abs_x,',',abs_y,'z'].join('');
- newpath.setAttribute("d", d_attr);
- } else if(len < 3) {
- keep = false;
- return keep;
- }
- $(stretchy).remove();
-
- // this will signal to commit the path
- element = newpath;
- current_path_pts = [];
- started = false;
-
- if(subpath) {
- if(path.matrix) {
- remapElement(newpath, {}, path.matrix.inverse());
- }
-
- var new_d = newpath.getAttribute("d");
- var orig_d = $(path.elem).attr("d");
- $(path.elem).attr("d", orig_d + new_d);
- $(newpath).remove();
- if(path.matrix) {
- recalcRotatedPath();
- }
- path.init();
- pathActions.toEditMode(path.elem);
- path.selectPt();
- return false;
- }
- }
- // else, create a new point, append to pts array, 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 lastx = current_path_pts[len-2], lasty = current_path_pts[len-1];
-
- if(evt.shiftKey) { var xya=Utils.snapToAngle(lastx,lasty,x,y); x=xya.x; y=xya.y; }
-
- // we store absolute values in our path points array for easy checking above
- current_path_pts.push(x);
- current_path_pts.push(y);
- d_attr += "L" + round(x) + "," + round(y) + " ";
-
- newpath.setAttribute("d", d_attr);
-
- x *= current_zoom;
- y *= current_zoom;
-
- // set stretchy line to latest point
- assignAttributes(stretchy, {
- 'x1': x,
- 'y1': y,
- 'x2': x,
- 'y2': y
- });
- var index = (current_path_pts.length/2 - 1);
- if(subpath) index += path.segs.length;
- addPointGrip(index, x, y);
- }
- keep = true;
- }
- return {
- keep: keep,
- element: element
- }
- }
-
- // Edit mode
-
- if (path.dragging) {
- var last_pt = path.cur_pt;
-
- path.dragging = false;
- path.dragctrl = false;
- path.update();
-
-
- if(hasMoved) {
- path.endChanges("Move path point(s)");
- }
-
- if(!evt.shiftKey && !hasMoved) {
- 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;
- },
- clearData: function() {
- pathData = {};
- },
- toEditMode: function(element) {
- path = getPath(element);
- current_mode = "pathedit";
- clearSelection();
- path.show(true).update();
- path.oldbbox = getBBox(path.elem);
- subpath = false;
- },
- toSelectMode: function(elem) {
- var selPath = (elem == path.elem);
- current_mode = "select";
- path.show(false);
- current_path = false;
- clearSelection();
-
- if(path.matrix) {
- // Rotated, so may need to re-calculate the center
- 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(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
- getPath(elem).show(false).matrix = null;
-
- this.clear();
-
- addToSelection([elem], true);
- call("changed", selectedElements);
- },
-
- clear: function(remove) {
- current_path = null;
- if (current_mode == "path" && current_path_pts.length > 0) {
- var elem = getElem(getId());
- $(getElem("path_stretch_line")).remove();
- $(elem).remove();
- $(getElem("pathpointgrip_container")).find('*').attr('display', 'none');
- current_path_pts = [];
- started = false;
- } else if (current_mode == "pathedit") {
- this.toSelectMode();
- }
- if(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;
-// }
- 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 && y) {
- var pt = transformPoint(x, y, m);
- pts.splice(pts.length, 0, pt.x, pt.y);
- }
- });
- replacePathSeg(type, i, pts, path);
- }
- },
- zoomChange: function() {
- if(current_mode == "pathedit") {
- path.update();
- }
- },
- getNodePoint: function() {
- var sel_pt = path.selected_pts.length ? path.selected_pts[0] : 1;
-
- var seg = path.segs[sel_pt];
- return {
- x: seg.item.x,
- y: seg.item.y,
- type: seg.type
- };
- },
- linkControlPoints: function(linkPoints) {
- link_control_pts = linkPoints;
- },
- clonePathNode: function() {
- path.storeD();
-
- var sel_pts = path.selected_pts;
- var segs = path.segs;
-
- var i = sel_pts.length;
- var nums = [];
-
- while(i--) {
- var pt = sel_pts[i];
- path.addSeg(pt);
-
- nums.push(pt + i);
- nums.push(pt + i + 1);
- }
- path.init().addPtsToSelection(nums);
-
- path.endChanges("Clone path node(s)");
- },
- opencloseSubPath: function() {
- var sel_pts = path.selected_pts;
- // Only allow one selected node for now
- if(sel_pts.length !== 1) return;
-
- var elem = 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
- 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 = 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 == path.segs.length - 1) {
- list.appendItem(newseg);
- list.appendItem(closer);
- } else {
- insertItemBefore(elem, closer, open_pt);
- insertItemBefore(elem, newseg, open_pt);
- }
-
- 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 = path.segs[index];
-
- if(seg.mate) {
- list.removeItem(index); // Removes last "L"
- list.removeItem(index); // Removes the "Z"
- 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--) {
- insertItemBefore(elem, list.getItem(last_m), z_seg);
- }
-
- var pt = list.getItem(last_m);
-
- // Make this point the new "M"
- replacePathSeg(2, last_m, [pt.x, pt.y]);
-
- var i = index
-
- path.init().selectPt(0);
- },
- deletePathNode: function() {
- if(!pathActions.canDeleteNodes) return;
- path.storeD();
-
- var sel_pts = path.selected_pts;
- var i = sel_pts.length;
-
- while(i--) {
- var pt = sel_pts[i];
- path.deleteSeg(pt);
- }
-
- // Cleanup
- var cleanup = function() {
- var segList = 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(path.elem.pathSegList.numberOfItems <= 1) {
- pathActions.toSelectMode(path.elem);
- canvas.deleteSelectedElements();
- return;
- }
-
- path.init();
-
- path.clearSelection();
-
- // TODO: Find right way to select point now
- // path.selectPt(sel_pt);
- if(window.opera) { // Opera repaints incorrectly
- var cp = $(path.elem); cp.attr('d',cp.attr('d'));
- }
- path.endChanges("Delete path node(s)");
- },
- smoothPolylineIntoPath: smoothPolylineIntoPath,
- setSegType: function(v) {
- path.setSegType(v);
- },
- moveNode: function(attr, newValue) {
- var sel_pts = path.selected_pts;
- if(!sel_pts.length) return;
-
- path.storeD();
-
- // Get first selected point
- var seg = path.segs[sel_pts[0]];
- var diff = {x:0, y:0};
- diff[attr] = newValue - seg.item[attr];
-
- seg.move(diff.x, diff.y);
- 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);
- insertItemBefore(elem, newseg, i);
- // Can this be done better?
- pathActions.fixEnd(elem);
- break;
- }
-
- }
- }
- if(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?shortFloat(last):'';
- $.each(pnts, function(i, pnt) {
- pnts[i] = 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;
- } else {
- x += curx;
- curx = x;
- }
- addToD([[x]]);
- break;
- case 14: // absolute vertical line (V)
- y -= cury;
- case 15: // relative vertical line (v)
- if(toRel) {
- cury += y;
- } else {
- y += cury;
- cury = y;
- }
- addToD([[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;
- }
- }
-}();
-
-pathActions.init();
-
-// 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;
-
- 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 = el.getAttributeNS(xlinkns, "href");
- if (href && href.indexOf('#') == 0) {
- defelem_uses.push(href.substr(1));
- }
- };
-
- var defelems = $(svgcontent).find("linearGradient, radialGradient, filter, marker");
- defelem_ids = [],
- i = defelems.length;
- while (i--) {
- var defelem = defelems[i];
- var id = defelem.id;
- if($.inArray(id, defelem_uses) == -1) {
- // Not found, so remove
- defelem.parentNode.removeChild(defelem);
- numRemoved++;
- }
- }
-
- // Remove defs if empty
- var i = defs.length;
- while (i--) {
- var def = defs[i];
- if(!def.getElementsByTagNameNS(svgns,'*').length) {
- def.parentNode.removeChild(def);
- }
- }
-
- return numRemoved;
-}
-
-// Function: svgCanvasToString
-// Main function to set up the SVG content for output
-//
-// Returns:
-// String containing the SVG image for output
-var svgCanvasToString = 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') != -1) {
- svgcontent.insertBefore(node, svgcontent.firstChild);
- }
- });
-
- var output = svgToString(svgcontent, 0);
- 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
-var svgToString = this.svgToString = function(elem, indent) {
- var out = new Array(), toXml = Utils.toXml;
-
- 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();
- out.push(' width="' + res.w + '" height="' + res.h + '" 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;
- 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 != "" &&
- $.inArray(attr.localName, ['width','height','xmlns','x','y','viewBox','id','overflow']) == -1)
- {
-
- if(!attr.namespaceURI || nsMap[attr.namespaceURI]) {
- out.push(' ');
- out.push(attr.nodeName); out.push("=\"");
- out.push(attrVal); out.push("\"");
- }
- }
- }
- } else {
- 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 ($.inArray(attr.localName, ['-moz-math-font-style', '_moz-math-font-style']) !== -1) 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 = shortFloat(attrVal);
- }
-
- // 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(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 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 = 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,
- 'image': uiStrings.exportNoImage,
- '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 = 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 svgCanvasToString();
-};
-
-//function randomizeIds
-// This function determines whether to add a nonce to the prefix, when
-// generating IDs 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) {
- randomize_ids = false;
- if (extensions["Arrows"]) call("unsetarrownonce") ;
- } else {
- randomize_ids = true;
- if (!svgcontent.getAttributeNS(se_ns, 'nonce')) {
- svgcontent.setAttributeNS(se_ns, 'se:nonce', nonce);
- if (extensions["Arrows"]) call("setarrownonce", nonce) ;
- }
- }
-}
-
-//
-// 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 = Utils.text2xml(xmlString);
- // run it through our sanitizer to remove anything we do not support
- sanitizeSvg(newDoc.documentElement);
-
- var batchCmd = new BatchCommand("Change Source");
-
- // remove old svg document
- var oldzoom = svgroot.removeChild(svgcontent);
- batchCmd.addSubCommand(new RemoveElementCommand(oldzoom, svgroot));
-
- // set new svg document
- svgcontent = svgroot.appendChild(svgdoc.importNode(newDoc.documentElement, true));
- // retrieve or set the nonce
- n = svgcontent.getAttributeNS(se_ns, 'nonce');
- if (n) {
- randomize_ids = true;
- nonce = n;
- if (extensions["Arrows"]) call("setarrownonce", n) ;
- } else if (randomize_ids) {
- svgcontent.setAttributeNS(xmlnsns, 'xmlns:se', se_ns);
- svgcontent.setAttributeNS(se_ns, 'se:nonce', nonce);
- if (extensions["Arrows"]) call("setarrownonce", nonce) ;
- }
- // change image href vals if possible
- $(svgcontent).find('image').each(function() {
- var image = this;
- preventClickDefault(image);
- var val = this.getAttributeNS(xlinkns, "href");
- 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);
- });
-
- // convert gradients with userSpaceOnUse to objectBoundingBox
- $(svgcontent).find('linearGradient, radialGradient').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 = elems[0].getBBox();
-
- if(grad.tagName === 'linearGradient') {
- var g_coords = $(grad).attr(['x1', 'y1', 'x2', 'y2']);
-
- $(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.y1 - 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');
- }
-
-
- }
- });
-
- // recalculate dimensions on the top-level children so that unnecessary transforms
- // are removed
- walkTreePost(svgcontent, function(n){try{recalculateDimensions(n)}catch(e){console.log(e)}});
-
- var content = $(svgcontent);
-
- var attrs = {
- id: 'svgcontent',
- overflow: curConfig.show_outside_canvas?'visible':'hidden'
- };
-
- // 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) || 100;
-
- if((val+'').substr(-1) === "%") {
- // Use user units if percentage given
- attrs[dim] = parseInt(val);
- } else {
- attrs[dim] = convertToNum(dim, val);
- }
- });
- }
-
- 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;
-
- // identify layers
- identifyLayers();
-
- // reset transform lists
- svgTransformLists = {};
- clearSelection();
- pathActions.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 into the current layer in the drawing
-//
-// 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
-// * create a new layer for the imported SVG
-this.importSvgString = function(xmlString) {
- try {
- // convert string into XML document
- var newDoc = Utils.text2xml(xmlString);
- // run it through our sanitizer to remove anything we do not support
- sanitizeSvg(newDoc.documentElement);
-
- var batchCmd = new BatchCommand("Change Source");
-
- // import new svg document into our document
- var importedNode = svgdoc.importNode(newDoc.documentElement, true);
-
- if (current_layer) {
- // TODO: properly handle if width/height are not specified or if in percentages
- // TODO: properly handle if width/height are in units (px, etc)
- var innerw = importedNode.getAttribute("width"),
- innerh = importedNode.getAttribute("height"),
- innervb = importedNode.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] = Number(vb[j]);
-
- // TODO: properly handle preserveAspectRatio
- var canvasw = Number(svgcontent.getAttribute("width")),
- canvash = Number(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)";
-
- // 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;
-
- // add all children of the imported <svg> to the <g> we create
- var g = svgdoc.createElementNS(svgns, "g");
- while (importedNode.hasChildNodes())
- g.appendChild(importedNode.firstChild);
- if (ts)
- g.setAttribute("transform", ts);
-
- // now ensure each element has a unique ID
- var ids = {};
- 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(["clip-path", "fill", "filter", "marker-end", "marker-mid", "marker-start", "mask", "stroke"],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 = 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 = n.getAttributeNS(xlinkns,"href");
- // TODO: what if an <image> or <a> element refers to an element internally?
- if(href &&
- $.inArray(n.nodeName, ["filter", "linearGradient", "pattern",
- "radialGradient", "textPath", "use"]) != -1)
- {
- var refid = href.substr(1);
- 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) {
- var elem = ids[oldid]["elem"];
- if (elem) {
- var newid = getNextId();
- // manually increment obj_num because our cloned elements are not in the DOM yet
- obj_num++;
-
- // 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];
- hreffer.setAttributeNS(xlinkns, "xlink:href", "#"+newid);
- }
- }
- }
-
- // now give the g itself a new id
-
- g.id = getNextId();
- // manually increment obj_num because our cloned elements are not in the DOM yet
- obj_num++;
-
- current_layer.appendChild(g);
- }
-
- // change image href vals if possible
-// $(svgcontent).find('image').each(function() {
-// var image = this;
-// preventClickDefault(image);
-// var val = this.getAttributeNS(xlinkns, "href");
-// 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);
-// });
-
-
- // recalculate dimensions on the top-level children so that unnecessary transforms
- // are removed
- walkTreePost(svgcontent, function(n){try{recalculateDimensions(n)}catch(e){console.log(e)}});
-
-
- batchCmd.addSubCommand(new InsertElementCommand(svgcontent));
-
- // reset zoom - TODO: why?
-// current_zoom = 1;
-
- // identify layers
-// identifyLayers();
-
- // reset transform lists
- svgTransformLists = {};
- clearSelection();
-
- addCommandToHistory(batchCmd);
- call("changed", [svgcontent]);
- } catch(e) {
- console.log(e);
- return false;
- }
-
- return true;
-};
-
-// Layer API Functions
-
-// Group: Layers
-
-// Function: identifyLayers
-// Updates layer system
-var identifyLayers = function() {
- all_layers = [];
- var numchildren = svgcontent.childNodes.length;
- // loop through all children of svgcontent
- var orphans = [], layernames = [];
- for (var i = 0; i < numchildren; ++i) {
- var child = svgcontent.childNodes.item(i);
- // for each g, find its layer name
- if (child && child.nodeType == 1) {
- if (child.tagName == "g") {
- var name = $("title",child).text();
-
- // Hack for Opera 10.60
- if(!name && isOpera && child.querySelectorAll) {
- name = $(child.querySelectorAll('title')).text();
- }
-
- // store layer and name in global variable
- if (name) {
- layernames.push(name);
- all_layers.push( [name,child] );
- current_layer = child;
- walkTree(child, function(e){e.setAttribute("style", "pointer-events:inherit");});
- current_layer.setAttribute("style", "pointer-events:none");
- }
- // if group did not have a name, it is an orphan
- else {
- orphans.push(child);
- }
- }
- // if child has a bbox (i.e. not a <title> or <defs> element), then it is an orphan
- else if(getBBox(child) && child.nodeName != 'defs') { // Opera returns a BBox for defs
- var bb = getBBox(child);
- orphans.push(child);
- }
- }
- }
- // create a new layer and add all the orphans to it
- if (orphans.length > 0) {
- var i = 1;
- while ($.inArray(("Layer " + i), layernames) != -1) { i++; }
- var newname = "Layer " + i;
- current_layer = svgdoc.createElementNS(svgns, "g");
- var layer_title = svgdoc.createElementNS(svgns, "title");
- layer_title.textContent = newname;
- current_layer.appendChild(layer_title);
- for (var j = 0; j < orphans.length; ++j) {
- current_layer.appendChild(orphans[j]);
- }
- current_layer = svgcontent.appendChild(current_layer);
- all_layers.push( [newname, current_layer] );
- }
- walkTree(current_layer, function(e){e.setAttribute("style","pointer-events:inherit");});
- current_layer.setAttribute("style","pointer-events:all");
-};
-
-// 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 = svgdoc.createElementNS(svgns, "g");
- var layer_title = svgdoc.createElementNS(svgns, "title");
- layer_title.textContent = name;
- new_layer.appendChild(layer_title);
- new_layer = svgcontent.appendChild(new_layer);
- batchCmd.addSubCommand(new InsertElementCommand(new_layer));
- addCommandToHistory(batchCmd);
- clearSelection();
- identifyLayers();
- 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() {
- if (current_layer && all_layers.length > 1) {
- var batchCmd = new BatchCommand("Delete Layer");
- // actually delete from the DOM and store in our Undo History
- var parent = current_layer.parentNode;
- batchCmd.addSubCommand(new RemoveElementCommand(current_layer, parent));
- parent.removeChild(current_layer);
- addCommandToHistory(batchCmd);
- clearSelection();
- identifyLayers();
- canvas.setCurrentLayer(all_layers[all_layers.length-1][0]);
- call("changed", [svgcontent]);
- return true;
- }
- return false;
-};
-
-// Function: getNumLayers
-// Returns the number of layers in the current drawing.
-//
-// Returns:
-// The number of layers in the current drawing.
-this.getNumLayers = function() {
- return all_layers.length;
-};
-
-// Function: getLayer
-// 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
-this.getLayer = function(i) {
- if (i >= 0 && i < canvas.getNumLayers()) {
- return all_layers[i][0];
- }
- return "";
-};
-
-// Function: getCurrentLayer
-// 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.
-this.getCurrentLayer = function() {
- for (var i = 0; i < all_layers.length; ++i) {
- if (all_layers[i][1] == current_layer) {
- return all_layers[i][0];
- }
- }
- 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
-this.setCurrentLayer = function(name) {
- name = Utils.toXml(name);
- for (var i = 0; i < all_layers.length; ++i) {
- if (name == all_layers[i][0]) {
- if (current_layer != all_layers[i][1]) {
- clearSelection();
- current_layer.setAttribute("style", "pointer-events:none");
- current_layer = all_layers[i][1];
- current_layer.setAttribute("style", "pointer-events:all");
- }
- return true;
- }
- }
- return false;
-};
-
-// 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) {
- if (current_layer) {
- var oldLayer = current_layer;
- // setCurrentLayer will return false if the name doesn't already exists
- if (!canvas.setCurrentLayer(newname)) {
- var batchCmd = new BatchCommand("Rename Layer");
- // find the index of the layer
- for (var i = 0; i < all_layers.length; ++i) {
- if (all_layers[i][1] == oldLayer) break;
- }
- var oldname = all_layers[i][0];
- all_layers[i][0] = Utils.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;
- }
- }
- }
- 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) {
- if (current_layer && newpos >= 0 && newpos < all_layers.length) {
- for (var oldpos = 0; oldpos < all_layers.length; ++oldpos) {
- if (all_layers[oldpos][1] == current_layer) break;
- }
- // some unknown error condition (current_layer not in all_layers)
- if (oldpos == all_layers.length) { 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 = current_layer.nextSibling;
- if (newpos > oldpos ) {
- if (newpos < all_layers.length-1) {
- refLayer = all_layers[newpos+1][1];
- }
- }
- // if our new position is above us, we need to insert before the node at newpos
- else {
- refLayer = all_layers[newpos][1];
- }
- svgcontent.insertBefore(current_layer, refLayer);
- addCommandToHistory(new MoveElementCommand(current_layer, oldNextSibling, svgcontent));
-
- identifyLayers();
- canvas.setCurrentLayer(all_layers[newpos][0]);
-
- return true;
- }
- }
-
- return false;
-};
-
-// Function: 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.
-this.getLayerVisibility = function(layername) {
- // find the layer
- var layer = null;
- for (var i = 0; i < all_layers.length; ++i) {
- if (all_layers[i][0] == layername) {
- layer = all_layers[i][1];
- break;
- }
- }
- if (!layer) return false;
- return (layer.getAttribute("display") != "none");
-};
-
-// 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) {
- // find the layer
- var layer = null;
- for (var i = 0; i < all_layers.length; ++i) {
- if (all_layers[i][0] == layername) {
- layer = all_layers[i][1];
- break;
- }
- }
- if (!layer) return false;
-
- var oldDisplay = layer.getAttribute("display");
- if (!oldDisplay) oldDisplay = "inline";
- layer.setAttribute("display", bVisible ? "inline" : "none");
- addCommandToHistory(new ChangeElementCommand(layer, {"display":oldDisplay}, "Layer Visibility"));
-
- if (layer == current_layer) {
- 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;
- for (var i = 0; i < all_layers.length; ++i) {
- if (all_layers[i][0] == layername) {
- layer = 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;
-};
-
-// Function: 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
-this.getLayerOpacity = function(layername) {
- for (var i = 0; i < all_layers.length; ++i) {
- if (all_layers[i][0] == layername) {
- var g = all_layers[i][1];
- var opacity = g.getAttribute("opacity");
- if (!opacity) {
- opacity = "1.0";
- }
- return parseFloat(opacity);
- }
- }
-
- return null;
-};
-
-// Function: setLayerOpacity
-// 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:
-// layername - name of the layer on which to set the opacity
-// opacity - a float value in the range 0.0-1.0
-this.setLayerOpacity = function(layername, opacity) {
- if (opacity < 0.0 || opacity > 1.0) return;
- for (var i = 0; i < all_layers.length; ++i) {
- if (all_layers[i][0] == layername) {
- var g = all_layers[i][1];
- g.setAttribute("opacity", opacity);
- break;
- }
- }
-};
-
-// Group: Document functions
-
-// Function: clear
-// Clears the current document. This is not an undoable action.
-this.clear = function() {
- pathActions.clear();
-
- // clear the svgcontent node
- var nodes = svgcontent.childNodes;
- var len = svgcontent.childNodes.length;
- var i = 0;
- clearSelection();
- for(var rep = 0; rep < len; rep++){
- if (nodes[i].nodeType == 1) { // element node
- svgcontent.removeChild(nodes[i]);
- } else {
- i++;
- }
- }
- // create empty first layer
- all_layers = [];
- canvas.createLayer("Layer 1");
-
- // clear the undo stack
- 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};
-
- return {
- 'w':svgcontent.getAttribute("width")/current_zoom,
- 'h':svgcontent.getAttribute("height")/current_zoom,
- '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: 1738 $)";
-};
-
-// Function: setUiStrings
-// Update interface strings with given values
-//
-// Parameters:
-// strs - Object with strings (see uiStrings for examples)
-this.setUiStrings = function(strs) {
- $.extend(uiStrings, strs);
-}
-
-// 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: getDocumentTitle
-// Returns the current document title or an empty string if not found
-this.getDocumentTitle = function() {
- var childs = svgcontent.childNodes;
- for (var i=0; i<childs.length; i++) {
- if(childs[i].nodeName == 'title') {
- return childs[i].textContent;
- }
- }
- return '';
-}
-
-// 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(current_layer));
- 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")
- 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 {
- // first child is a comment, so call nextSibling
- defs = svgcontent.insertBefore( svgdoc.createElementNS(svgns, "defs" ), svgcontent.firstChild.nextSibling);
- }
- 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: 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 && $.inArray(current_mode, ['line', 'path']) != -1) {
- 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")
- 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")
- 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: 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 {
- if(filterHidden) {
- changeSelectedAttributeNoUndo("filter", 'url(#' + selectedElements[0].id + '_blur)');
- }
- changeSelectedAttributeNoUndo("stdDeviation", val, [filter.firstChild]);
- canvas.setBlurOffsets(filter, val);
- }
- }
-
- function finishChange() {
- var bCmd = canvas.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 {
- 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.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");
- }
-};
-
-// 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");
- }
-};
-
-// 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);
-};
-
-// 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;
- textActions.toSelectMode();
- changeSelectedAttribute("font-size", val);
-};
-
-// 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 = elem.getAttributeNS(xlinkns, "href");
-
- // 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");
-
- elem.setAttributeNS(xlinkns, "xlink:href", 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: 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]);
- }
- }
-};
-
-// 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);
-}
-
-// 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);
- }
- }
-
- batchCmd.addSubCommand(new RemoveElementCommand(elem, 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;
- while (i--) {
- var elem = elems[i];
- if (elem == null) continue;
-
- // Go into "select" mode for text changes
- if(current_mode === "textedit" && attr !== "#text") {
- textActions.toSelectMode(elem);
- }
-
- // Set x,y vals on elements that don't have them
- if((attr == 'x' || attr == 'y') && $.inArray(elem.tagName, ['g', 'polyline', 'path']) != -1) {
- 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 attribute to change on <g> elements, slightly hacky
- if (elem.tagName == "g" && $.inArray(attr, ['transform', 'opacity', 'filter']) !== -1);
- var oldval = attr == "#text" ? elem.textContent : elem.getAttribute(attr);
- if (oldval == null) oldval = "";
- if (oldval != String(newValue)) {
- if (attr == "#text") {
- var old_w = getBBox(elem).width;
- elem.textContent = newValue;
- 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") {
- elem.setAttributeNS(xlinkns, "xlink:href", newValue);
- }
- else elem.setAttribute(attr, newValue);
- if (i==0)
- selectedBBoxes[i] = getBBox(elem);
- // Use the Firefox ffClone hack for text elements with gradients or
- // where other text attributes are changed.
- if(elem.nodeName == 'text') {
- if((newValue+'').indexOf('url') == 0 || $.inArray(attr, ['font-size','font-family','x','y']) != -1) {
- 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 ($.inArray(elem, selectedElements) != -1) {
- 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 = 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.beginUndoableChange(attr, elems);
- var i = elems.length;
-
- changeSelectedAttributeNoUndo(attr, val, elems);
-
- var batchCmd = canvas.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);
- var elem = parent.removeChild(t);
- selectedCopy.push(selected) //for the copy
- selectedElements[i] = null;
- batchCmd.addSubCommand(new RemoveElementCommand(elem, parent));
- }
- if (!batchCmd.isEmpty()) addCommandToHistory(batchCmd);
- call("changed", selectedCopy);
- clearSelection();
-};
-
-// Function: groupSelectedElements
-// Wraps all the selected elements in a group (g) element
-this.groupSelectedElements = function() {
- var batchCmd = new BatchCommand("Group Elements");
-
- // create and insert the group element
- var g = addSvgElementFromJson({
- "element": "g",
- "attr": {
- "id": getNextId()
- }
- });
- 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;
- 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
- clearSelection();
- addToSelection([g], true);
-};
-
-// 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.tagName == "g") {
- var batchCmd = new BatchCommand("Ungroup Elements");
- var parent = g.parentNode;
- var anchor = g.previousSibling;
- var children = new Array(g.childNodes.length);
- var xform = g.getAttribute("transform");
- // get consolidated matrix
- var glist = getTransformList(g);
- var m = transformListToTransform(glist).matrix;
-
- // 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;
-
- while (g.firstChild) {
- var elem = g.firstChild;
- var oldNextSibling = elem.nextSibling;
- var oldParent = elem.parentNode;
- children[i++] = elem = parent.insertBefore(elem, anchor);
- batchCmd.addSubCommand(new MoveElementCommand(elem, oldNextSibling, oldParent));
-
- 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 = getElem(getUrlFromAttr(gattrs.filter).substr(1));
- } else {
- // Clone the group's filter
- gfilter = copyElem(gfilter);
- findDefs().appendChild(gfilter);
- }
- } else {
- gfilter = getElem(getUrlFromAttr(elem.getAttribute('filter')).substr(1));
- }
-
- // 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);
-
- 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 = 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) {
- chtlist.insertItemBefore(r2, 0);
- }
-
- if (trm.e || trm.f) {
- var tr = svgroot.createSVGTransform();
- tr.setTranslate(trm.e, trm.f);
- chtlist.insertItemBefore(tr, 0);
- }
- }
- 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);
- }
- batchCmd.addSubCommand(recalculateDimensions(elem));
- }
- }
-
-
- // 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));
- }
-
- // remove the group from the selection
- clearSelection();
-
- // delete the group element (but make undo-able)
- g = parent.removeChild(g);
- batchCmd.addSubCommand(new RemoveElementCommand(g, 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);
- addCommandToHistory(new MoveElementCommand(t, oldNextSibling, oldParent, "top"));
- }
-};
-
-// 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);
- addCommandToHistory(new MoveElementCommand(t, oldNextSibling, oldParent, "bottom"));
- }
-};
-
-// 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[i] = getBBox(selected);
-
- var xform = svgroot.createSVGTransform();
- var tlist = getTransformList(selected);
-
- // dx and dy could be arrays
- if (dx.constructor == Array) {
- if (i==0) {
- selectedBBoxes[i].x += dx[i];
- selectedBBoxes[i].y += dy[i];
- }
- xform.setTranslate(dx[i],dy[i]);
- } else {
- if (i==0) {
- selectedBBoxes[i].x += dx;
- selectedBBoxes[i].y += dy;
- }
- xform.setTranslate(dx,dy);
- }
-
- tlist.insertItemBefore(xform, 0);
-
- 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() {
- 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();
- // 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_layer.appendChild(elem);
- batchCmd.addSubCommand(new InsertElementCommand(elem));
- }
-
- if (!batchCmd.isEmpty()) {
- addToSelection(copiedElements.reverse()); // Need to reverse for correct selection-adding
- this.moveSelectedElements(20,20,false);
- addCommandToHistory(batchCmd);
- call("selected", selectedElements);
- }
-};
-
-// 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
- });
-
- 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'
- });
- }
- bg_img.setAttributeNS(xlinkns, "xlink:href", 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_layer);
- 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;
- }
- }
- }
- clearSelection();
- addToSelection([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,
- cleanupElement: cleanupElement,
- 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: 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,
- SelectorManager: SelectorManager,
- shortFloat: shortFloat,
- svgCanvasToString: svgCanvasToString,
- SVGEditTransformList: SVGEditTransformList,
- svgToString: svgToString,
- toString: toString,
- transformBox: transformBox,
- transformListToTransform: transformListToTransform,
- transformPoint: transformPoint,
- walkTree: walkTree
- }
- return obj;
-};
-
-// console.log('canvas.getPrivateMethods',canvas.getPrivateMethods);
-
-// Test support for features/bugs
-(function() {
- // segList functions (for FF1.5 and 2.0)
- 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);
- support.pathReplaceItem = true;
- } catch(err) {
- support.pathReplaceItem = false;
- }
-
- try {
- seglist.insertItemBefore(seg, 0);
- support.pathInsertItemBefore = true;
- } catch(err) {
- support.pathInsertItemBefore = false;
- }
-
- // TODO: Find better way to check support for this
- support.editableText = isOpera;
-
- // 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);
- support.goodDecimals = (crect.getAttribute('x').indexOf(',') == -1);
- if(!support.goodDecimals) {
- $.alert("NOTE: This version of Opera is known to contain bugs in SVG-edit.\n\
- Please upgrade to the <a href='http://opera.com'>latest version</a> in which the problems have been fixed.");
- }
-
- // Get correct em/ex values
- var rect = document.createElementNS(svgns,'rect');
- rect.setAttribute('width',"1em");
- rect.setAttribute('height',"1ex");
- svgcontent.appendChild(rect);
- var bb = rect.getBBox();
- unit_types.em = bb.width;
- unit_types.ex = bb.height;
- svgcontent.removeChild(rect);
-}());
-
-}
diff --git a/files_svgedit/js/svgcanvas.min.js b/files_svgedit/js/svgcanvas.min.js
deleted file mode 100644
index 0258a44e5..000000000
--- a/files_svgedit/js/svgcanvas.min.js
+++ /dev/null
@@ -1 +0,0 @@
-;if(!window.console){window.console={};window.console.log=function(a){};window.console.dir=function(a){}}if(window.opera){window.console.log=function(a){opera.postError(a)};window.console.dir=function(a){}}(function(){var a=jQuery.fn.attr,b="http://www.w3.org/2000/svg";jQuery.fn.attr=function(o,l){var g=this.length;if(!g){return this}for(var f=0;f<g;f++){var c=this[f];if(c.namespaceURI===b){if(l!==undefined){c.setAttribute(o,l)}else{if($.isArray(o)){var d=o.length,e={};while(d--){var k=o[d];var h=c.getAttribute(k);if(h||h==="0"){h=isNaN(h)?h:h-0}e[k]=h}return e}else{if(typeof o==="object"){for(var m in o){c.setAttribute(m,o[m])}}else{var h=c.getAttribute(o);if(h||h==="0"){h=isNaN(h)?h:h-0}return h}}}}else{return a.apply(this,arguments)}}return this}}());$.SvgCanvas=function(aL,ay){var k=!!window.opera,aC=navigator.userAgent.indexOf("AppleWebKit")!=-1,a0={},aF={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:[],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"],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","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"],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"],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:[]},aB={pathNodeTooltip:"Drag node to move it. Double-click node to change segment type",pathCtrlPtTooltip:"Drag control point to adjust curve properties",exportNoBlur:"Blurred elements will appear as un-blurred",exportNoImage:"Image elements will not appear",exportNoforeignObject:"foreignObject elements will not appear",exportNoDashArray:"Strokes will appear filled",exportNoText:"Text may not appear as expected"},J={show_outside_canvas:true,dimensions:[640,480]};if(ay){$.extend(J,ay)}var aw=this.Utils=function(){var bg="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";return{toXml:function(bh){return $("<p/>").text(bh).html()},fromXml:function(bh){return $("<p/>").html(bh).text()},encode64:function(bk){bk=aw.convertToXMLReferences(bk);if(window.btoa){return window.btoa(bk)}var bi=new Array(Math.floor((bk.length+2)/3)*4);var br,bp,bn;var bq,bo,bm,bl;var bj=0,bh=0;do{br=bk.charCodeAt(bj++);bp=bk.charCodeAt(bj++);bn=bk.charCodeAt(bj++);bq=br>>2;bo=((br&3)<<4)|(bp>>4);bm=((bp&15)<<2)|(bn>>6);bl=bn&63;if(isNaN(bp)){bm=bl=64}else{if(isNaN(bn)){bl=64}}bi[bh++]=bg.charAt(bq);bi[bh++]=bg.charAt(bo);bi[bh++]=bg.charAt(bm);bi[bh++]=bg.charAt(bl)}while(bj<bk.length);return bi.join("")},decode64:function(bj){if(window.atob){return window.atob(bj)}var bh="";var bq,bo,bm="";var bp,bn,bl,bk="";var bi=0;bj=bj.replace(/[^A-Za-z0-9\+\/\=]/g,"");do{bp=bg.indexOf(bj.charAt(bi++));bn=bg.indexOf(bj.charAt(bi++));bl=bg.indexOf(bj.charAt(bi++));bk=bg.indexOf(bj.charAt(bi++));bq=(bp<<2)|(bn>>4);bo=((bn&15)<<4)|(bl>>2);bm=((bl&3)<<6)|bk;bh=bh+String.fromCharCode(bq);if(bl!=64){bh=bh+String.fromCharCode(bo)}if(bk!=64){bh=bh+String.fromCharCode(bm)}bq=bo=bm="";bp=bn=bl=bk=""}while(bi<bj.length);return unescape(bh)},convertToXMLReferences:function(bi){var bh="";for(var bk=0;bk<bi.length;bk++){var bj=bi.charCodeAt(bk);if(bj<128){bh+=bi[bk]}else{if(bj>127){bh+=("&#"+bj+";")}}}return bh},rectsIntersect:function(bi,bh){return bh.x<(bi.x+bi.width)&&(bh.x+bh.width)>bi.x&&bh.y<(bi.y+bi.height)&&(bh.y+bh.height)>bi.y},snapToAngle:function(bi,bq,bh,bo){var bk=Math.PI/4;var bs=bh-bi;var br=bo-bq;var bj=Math.atan2(br,bs);var bm=Math.sqrt(bs*bs+br*br);var bl=Math.round(bj/bk)*bk;var bp=bi+bm*Math.cos(bl);var bn=bq+bm*Math.sin(bl);return{x:bp,y:bn,a:bl}},text2xml:function(bi){var bh;try{var bk=($.browser.msie)?new ActiveXObject("Microsoft.XMLDOM"):new DOMParser();bk.async=false}catch(bj){throw new Error("XML Parser could not be instantiated")}try{if($.browser.msie){bh=(bk.loadXML(bi))?bk:false}else{bh=bk.parseFromString(bi,"text/xml")}}catch(bj){throw new Error("Error parsing XML string")}return bh}}}();var bc=this,aK="http://www.w3.org/2000/svg",aE="http://www.w3.org/1999/xlink",W="http://www.w3.org/XML/1998/namespace",bf="http://www.w3.org/2000/xmlns/",al="http://svg-edit.googlecode.com",O="http://www.w3.org/1999/xhtml",f="http://www.w3.org/1998/Math/MathML",I={em:0,ex:0,px:1,cm:35.43307,mm:3.543307,"in":90,pt:1.25,pc:15,"%":0},m=Math.floor(Math.random()*100001),q=false,aM=aL.ownerDocument,w=J.dimensions,G=aM.importNode(aw.text2xml('<svg id="svgroot" xmlns="'+aK+'" xlinkns="'+aE+'" width="'+w[0]+'" height="'+w[1]+'" x="'+w[0]+'" y="'+w[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);aL.appendChild(G);var ai=aM.createElementNS(aK,"svg");$(ai).attr({id:"svgcontent",width:w[0],height:w[1],x:w[0],y:w[1],overflow:J.show_outside_canvas?"visible":"hidden",xmlns:aK,"xmlns:se":al,"xmlns:xlink":aE}).appendTo(G);if(q){ai.setAttributeNS(al,"se:nonce",m)}var am={};am[aE]="xlink";am[W]="xml";am[bf]="xmlns";am[al]="se";am[O]="xhtml";am[f]="mathml";var ba={};$.each(am,function(bg,bh){ba[bh]=bg});var h={};$.each(aF,function(bg,bi){var bh={};$.each(bi,function(bl,bk){if(bk.indexOf(":")!=-1){var bj=bk.split(":");bh[bj[1]]=ba[bj[0]]}else{bh[bk]=bk=="xmlns"?bf:null}});h[bg]=bh});var N=document.createElementNS(aK,"animate");$(N).attr({attributeName:"opacity",begin:"indefinite",dur:1,fill:"freeze"}).appendTo(G);var a2,an,ab;(function(){var bg=["x","x1","cx","rx","width"];var bh=["y","y1","cy","ry","height"];var bi=$.merge(["r","radius"],bg);$.merge(bi,bh);a2=function(bj,bn){if(!isNaN(bn)){return bn-0}if(bn.substr(-1)==="%"){var bk=bn.substr(0,bn.length-1)/100;var bl=d();if($.inArray(bj,bg)!==-1){return bk*bl.w}else{if($.inArray(bj,bh)!==-1){return bk*bl.h}else{return bk*Math.sqrt((bl.w*bl.w)+(bl.h*bl.h))/Math.sqrt(2)}}}else{var bm=bn.substr(-2);var bk=bn.substr(0,bn.length-2);return bk*I[bm]}};ab=function(bn,bj,bo){if(!isNaN(bo)){var bl=bn.getAttribute(bj);if(bl!==null&&isNaN(bl)){var bm;if(bl.substr(-1)==="%"){var bk=d();bm="%";bo*=100;if($.inArray(bj,bg)!==-1){bo=bo/bk.w}else{if($.inArray(bj,bh)!==-1){bo=bo/bk.h}else{return bo/Math.sqrt((bk.w*bk.w)+(bk.h*bk.h))/Math.sqrt(2)}}}else{bm=bl.substr(-2);bo=bo/I[bm]}bo+=bm}}bn.setAttribute(bj,bo)};bc.isValidUnit=function(bk,bo){var bm=false;if($.inArray(bk,bi)!=-1){if(!isNaN(bo)){bm=true}else{bo=bo.toLowerCase();$.each(I,function(bq){if(bm){return}var bp=new RegExp("^-?[\\d\\.]+"+bq+"$");if(bp.test(bo)){bm=true}})}}else{if(bk=="id"){var bj=false;try{var bl=b(bo);bj=(bl==null)}catch(bn){}return bj}else{bm=true}}return bm}})();this.undoCmd={};var av=this.undoCmd.changeElement=function(bi,bh,bj){this.elem=bi;this.text=bj?("Change "+bi.tagName+" "+bj):("Change "+bi.tagName);this.newValues={};this.oldValues=bh;for(var bg in bh){if(bg=="#text"){this.newValues[bg]=bi.textContent}else{if(bg=="#href"){this.newValues[bg]=bi.getAttributeNS(aE,"href")}else{this.newValues[bg]=bi.getAttribute(bg)}}}this.apply=function(){var bn=false;for(var bl in this.newValues){if(this.newValues[bl]){if(bl=="#text"){this.elem.textContent=this.newValues[bl]}else{if(bl=="#href"){this.elem.setAttributeNS(aE,"xlink:href",this.newValues[bl])}else{this.elem.setAttribute(bl,this.newValues[bl])}}}else{if(bl=="#text"){this.elem.textContent=""}else{this.elem.setAttribute(bl,"");this.elem.removeAttribute(bl)}}if(bl=="transform"){bn=true}else{if(bl=="stdDeviation"){bc.setBlurOffsets(this.elem.parentNode,this.newValues[bl])}}}if(!bn){var bp=aq(bi);if(bp){var bo=bi.getBBox();var bk=bo.x+bo.width/2,bq=bo.y+bo.height/2;var bm=["rotate(",bp," ",bk,",",bq,")"].join("");if(bm!=bi.getAttribute("transform")){bi.setAttribute("transform",bm)}}}if(this.elem.tagName=="title"&&this.elem.parentNode.parentNode==ai){Y()}return true};this.unapply=function(){var bn=false;for(var bl in this.oldValues){if(this.oldValues[bl]){if(bl=="#text"){this.elem.textContent=this.oldValues[bl]}else{if(bl=="#href"){this.elem.setAttributeNS(aE,"xlink:href",this.oldValues[bl])}else{this.elem.setAttribute(bl,this.oldValues[bl])}}if(bl=="stdDeviation"){bc.setBlurOffsets(this.elem.parentNode,this.oldValues[bl])}}else{if(bl=="#text"){this.elem.textContent=""}else{this.elem.removeAttribute(bl)}}if(bl=="transform"){bn=true}}if(!bn){var bp=aq(bi);if(bp){var bo=bi.getBBox();var bk=bo.x+bo.width/2,bq=bo.y+bo.height/2;var bm=["rotate(",bp," ",bk,",",bq,")"].join("");if(bm!=bi.getAttribute("transform")){bi.setAttribute("transform",bm)}}}if(this.elem.tagName=="title"&&this.elem.parentNode.parentNode==ai){Y()}if(T[this.elem.id]){delete T[this.elem.id]}return true};this.elements=function(){return[this.elem]}};var a=this.undoCmd.insertElement=function(bg,bh){this.elem=bg;this.text=bh||("Create "+bg.tagName);this.parent=bg.parentNode;this.apply=function(){this.elem=this.parent.insertBefore(this.elem,this.elem.nextSibling);if(this.parent==ai){Y()}};this.unapply=function(){this.parent=this.elem.parentNode;this.elem=this.elem.parentNode.removeChild(this.elem);if(this.parent==ai){Y()}};this.elements=function(){return[this.elem]}};var R=this.undoCmd.removeElement=function(bh,bg,bi){this.elem=bh;this.text=bi||("Delete "+bh.tagName);this.parent=bg;this.apply=function(){if(T[this.elem.id]){delete T[this.elem.id]}this.parent=this.elem.parentNode;this.elem=this.parent.removeChild(this.elem);if(this.parent==ai){Y()}};this.unapply=function(){if(T[this.elem.id]){delete T[this.elem.id]}this.elem=this.parent.insertBefore(this.elem,this.elem.nextSibling);if(this.parent==ai){Y()}};this.elements=function(){return[this.elem]};if(T[bh.id]){delete T[bh.id]}};var S=this.undoCmd.moveElement=function(bh,bi,bg,bj){this.elem=bh;this.text=bj?("Move "+bh.tagName+" to "+bj):("Move "+bh.tagName);this.oldNextSibling=bi;this.oldParent=bg;this.newNextSibling=bh.nextSibling;this.newParent=bh.parentNode;this.apply=function(){this.elem=this.newParent.insertBefore(this.elem,this.newNextSibling);if(this.newParent==ai){Y()}};this.unapply=function(){this.elem=this.oldParent.insertBefore(this.elem,this.oldNextSibling);if(this.oldParent==ai){Y()}};this.elements=function(){return[this.elem]}};var aA=this.undoCmd.batch=function(bg){this.text=bg||"Batch Command";this.stack=[];this.apply=function(){var bh=this.stack.length;for(var bi=0;bi<bh;++bi){this.stack[bi].apply()}};this.unapply=function(){for(var bh=this.stack.length-1;bh>=0;bh--){this.stack[bh].unapply()}};this.elements=function(){var bh=[];var bk=this.stack.length;while(bk--){var bj=this.stack[bk].elements();var bi=bj.length;while(bi--){if(bh.indexOf(bj[bi])==-1){bh.push(bj[bi])}}}return bh};this.addSubCommand=function(bh){this.stack.push(bh)};this.isEmpty=function(){return this.stack.length==0}};var aJ,aT;(function(bi){var bg=0,bh=[];aJ=function(){bh=[];bg=0};bi.undoMgr={getUndoStackSize:function(){return bg},getRedoStackSize:function(){return bh.length-bg},getNextUndoCommandText:function(){if(bg>0){return bh[bg-1].text}return""},getNextRedoCommandText:function(){if(bg<bh.length){return bh[bg].text}return""},undo:function(){if(bg>0){bi.clearSelection();var bj=bh[--bg];bj.unapply();z.clear();call("changed",bj.elements())}},redo:function(){if(bg<bh.length&&bh.length>0){bi.clearSelection();var bj=bh[bg++];bj.apply();z.clear();call("changed",bj.elements())}}};aT=bi.undoCmd.add=function(bj){if(bg<bh.length&&bh.length>0){bh=bh.splice(0,bg)}bh.push(bj);bg=bh.length}}(bc));(function(bi){var bh=-1;var bg=[];bi.beginUndoableChange=function(bm,bk){var bp=++bh;var bl=bk.length;var bj=new Array(bl),bo=new Array(bl);while(bl--){var bn=bk[bl];if(bn==null){continue}bo[bl]=bn;bj[bl]=bn.getAttribute(bm)}bg[bp]={attrName:bm,oldValues:bj,elements:bo}};bi.finishUndoableChange=function(){var bo=bh--;var bp=bg[bo];var bl=bp.elements.length;var bk=bp.attrName;var bj=new aA("Change "+bk);while(bl--){var bn=bp.elements[bl];if(bn==null){continue}var bm={};bm[bk]=bp.oldValues[bl];if(bm[bk]!=bn.getAttribute(bk)){bj.addSubCommand(new av(bn,bm,bk))}}bg[bo]=null;return bj}}(bc));var bd;(function(){function bg(bj,bi){this.id=bj;this.selectedElement=bi;this.locked=true;this.reset=function(bk){this.locked=true;this.selectedElement=bk;this.resize();this.selectorGroup.setAttribute("display","inline")};this.selectorGroup=c({element:"g",attr:{id:("selectorGroup"+this.id)}});this.selectorRect=this.selectorGroup.appendChild(c({element:"path",attr:{id:("selectedBox"+this.id),fill:"none",stroke:"#22C","stroke-width":"1","stroke-dasharray":"5,5",style:"pointer-events:none"}}));this.selectorGrips={nw:null,n:null,ne:null,e:null,se:null,s:null,sw:null,w:null};this.rotateGripConnector=this.selectorGroup.appendChild(c({element:"line",attr:{id:("selectorGrip_rotateconnector_"+this.id),stroke:"#22C","stroke-width":"1"}}));this.rotateGrip=this.selectorGroup.appendChild(c({element:"circle",attr:{id:("selectorGrip_rotate_"+this.id),fill:"lime",r:4,stroke:"#22C","stroke-width":2,style:"cursor:url("+J.imgPath+"rotate.png) 12 12, auto;"}}));for(var bh in this.selectorGrips){this.selectorGrips[bh]=this.selectorGroup.appendChild(c({element:"circle",attr:{id:("selectorGrip_resize_"+bh+"_"+this.id),fill:"#22C",r:4,style:("cursor:"+bh+"-resize"),"stroke-width":2,"pointer-events":"all",display:"none"}}))}this.showGrips=function(bk){var bm=bk?"inline":"none";this.rotateGrip.setAttribute("display",bm);this.rotateGripConnector.setAttribute("display",bm);var bn=this.selectedElement;for(var bl in this.selectorGrips){this.selectorGrips[bl].setAttribute("display",bm)}if(bn){this.updateGripCursors(aq(bn))}};this.updateGripCursors=function(bo){var bn=[];var bk=Math.round(bo/45);if(bk<0){bk+=8}for(var bl in this.selectorGrips){bn.push(bl)}while(bk>0){bn.push(bn.shift());bk--}var bm=0;for(var bl in this.selectorGrips){this.selectorGrips[bl].setAttribute("style",("cursor:"+bn[bm]+"-resize"));bm++}};this.resize=function(){var bk=this.selectorRect,br=this.selectorGrips,bH=this.selectedElement,bF=bH.getAttribute("stroke-width");var bx=1/ac;if(bH.getAttribute("stroke")!="none"&&!isNaN(bF)){bx+=(bF/2)}if(bH.tagName=="text"){bx+=2/ac}var bl=au(bH);if(bH.tagName=="g"){var bw=ag(bH.childNodes);$.each(bl,function(bP,bQ){bl[bP]=bw[bP]})}var bI=B(bH);bI.e*=ac;bI.f*=ac;var bJ=bl.x-bx,bC=bl.y-bx,bB=bl.width+(bx*2),bL=bl.height+(bx*2),bl={x:bJ,y:bC,width:bB,height:bL};var bN=be(bJ*ac,bC*ac,bB*ac,bL*ac,bI),bn=bN.aabox.x,bm=bN.aabox.y,bo=bN.aabox.width,bA=bN.aabox.height;var bq=bn+bo/2,bp=bm+bA/2;var bM=aq(bH);if(bM){var bz=G.createSVGTransform();bz.setRotate(-bM,bq,bp);var bD=bz.matrix;bN.tl=P(bN.tl.x,bN.tl.y,bD);bN.tr=P(bN.tr.x,bN.tr.y,bD);bN.bl=P(bN.bl.x,bN.bl.y,bD);bN.br=P(bN.br.x,bN.br.y,bD);var bv=bN.tl.x,bu=bN.tl.y,bt=bN.tl.x,bs=bN.tl.y;bv=Math.min(bv,Math.min(bN.tr.x,Math.min(bN.bl.x,bN.br.x)));bu=Math.min(bu,Math.min(bN.tr.y,Math.min(bN.bl.y,bN.br.y)));bt=Math.max(bt,Math.max(bN.tr.x,Math.max(bN.bl.x,bN.br.x)));bs=Math.max(bs,Math.max(bN.tr.y,Math.max(bN.bl.y,bN.br.y)));bn=bv;bm=bu;bo=(bt-bv);bA=(bs-bu)}var bO=G.suspendRedraw(100);var bE="M"+bn+","+bm+" L"+(bn+bo)+","+bm+" "+(bn+bo)+","+(bm+bA)+" "+bn+","+(bm+bA)+"z";az(bk,{d:bE});var by={nw:[bn,bm],ne:[bn+bo,bm],sw:[bn,bm+bA],se:[bn+bo,bm+bA],n:[bn+(bo)/2,bm],w:[bn,bm+(bA)/2],e:[bn+bo,bm+(bA)/2],s:[bn+(bo)/2,bm+bA]};if(bH==aR[0]){for(var bG in by){var bK=by[bG];az(br[bG],{cx:bK[0],cy:bK[1]})}}if(bM){this.selectorGroup.setAttribute("transform","rotate("+[bM,bq,bp].join(",")+")")}else{this.selectorGroup.setAttribute("transform","")}az(this.rotateGripConnector,{x1:bn+(bo)/2,y1:bm,x2:bn+(bo)/2,y2:bm-20});az(this.rotateGrip,{cx:bn+(bo)/2,cy:bm-20});G.unsuspendRedraw(bO)};this.reset(bi)}bd=function(){this.selectorParentGroup=null;this.rubberBandBox=null;this.selectors=[];this.selectorMap={};var bh=this;this.initGroup=function(){if(bh.selectorParentGroup&&bh.selectorParentGroup.parentNode){bh.selectorParentGroup.parentNode.removeChild(bh.selectorParentGroup)}bh.selectorParentGroup=aM.createElementNS(aK,"g");bh.selectorParentGroup.setAttribute("id","selectorParentGroup");G.appendChild(bh.selectorParentGroup);bh.selectorMap={};bh.selectors=[];bh.rubberBandBox=null;if($("#canvasBackground").length){return}var bi=aM.createElementNS(aK,"svg");var bk=J.dimensions;az(bi,{id:"canvasBackground",width:bk[0],height:bk[1],x:0,y:0,overflow:"visible",style:"pointer-events:none"});var bj=aM.createElementNS(aK,"rect");az(bj,{width:"100%",height:"100%",x:0,y:0,"stroke-width":1,stroke:"#000",fill:"#FFF",style:"pointer-events:none"});bi.appendChild(bj);G.insertBefore(bi,ai)};this.requestSelector=function(bj){if(bj==null){return null}var bk=this.selectors.length;if(typeof(this.selectorMap[bj.id])=="object"){this.selectorMap[bj.id].locked=true;return this.selectorMap[bj.id]}for(var bi=0;bi<bk;++bi){if(this.selectors[bi]&&!this.selectors[bi].locked){this.selectors[bi].locked=true;this.selectors[bi].reset(bj);this.selectorMap[bj.id]=this.selectors[bi];return this.selectors[bi]}}this.selectors[bk]=new bg(bk,bj);this.selectorParentGroup.appendChild(this.selectors[bk].selectorGroup);this.selectorMap[bj.id]=this.selectors[bk];return this.selectors[bk]};this.releaseSelector=function(bj){if(bj==null){return}var bm=this.selectors.length,bk=this.selectorMap[bj.id];for(var bi=0;bi<bm;++bi){if(this.selectors[bi]&&this.selectors[bi]==bk){if(bk.locked==false){console.log("WARNING! selector was released but was already unlocked")}delete this.selectorMap[bj.id];bk.locked=false;bk.selectedElement=null;bk.showGrips(false);try{bk.selectorGroup.setAttribute("display","none")}catch(bl){}break}}};this.getRubberBandBox=function(){if(this.rubberBandBox==null){this.rubberBandBox=this.selectorParentGroup.appendChild(c({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};this.initGroup()}}());var T={};var H=function(bh){function bg(bk){var bj=bk.matrix,bm="";switch(bk.type){case 1:bm="matrix("+[bj.a,bj.b,bj.c,bj.d,bj.e,bj.f].join(",")+")";break;case 2:bm="translate("+bj.e+","+bj.f+")";break;case 3:if(bj.a==bj.d){bm="scale("+bj.a+")"}else{bm="scale("+bj.a+","+bj.d+")"}break;case 4:var bi=0,bn=0;if(bk.angle!=0){var bl=1-bj.a;bn=(bl*bj.f+bj.b*bj.e)/(bl*bl+bj.b*bj.b);bi=(bj.e-bj.b*bn)/bl}bm="rotate("+bk.angle+" "+bi+","+bn+")";break}return bm}this._elem=bh||null;this._xforms=[];this._update=function(){var bk="";var bj=G.createSVGMatrix();for(var bl=0;bl<this.numberOfItems;++bl){var bi=this._list.getItem(bl);bk+=bg(bi)+" "}this._elem.setAttribute("transform",bk)};this._list=this;this._init=function(){var br=this._elem.getAttribute("transform");if(!br){return}var bv=/\s*((scale|matrix|rotate|translate)\s*\(.*?\))\s*,?\s*/;var bo=[];var bn=true;while(bn){bn=br.match(bv);br=br.replace(bv,"");if(bn&&bn[1]){var bs=bn[1];var bu=bs.split(/\s*\(/);var bi=bu[0];var bm=bu[1].match(/\s*(.*?)\s*\)/);var bk=bm[1].split(/[, ]+/);var bp="abcdef".split("");var bj=G.createSVGMatrix();$.each(bk,function(bw,bx){bk[bw]=parseFloat(bx);if(bi=="matrix"){bj[bp[bw]]=bk[bw]}});var bq=G.createSVGTransform();var bl="set"+bi.charAt(0).toUpperCase()+bi.slice(1);var bt=bi=="matrix"?[bj]:bk;if(bi=="scale"&&bt.length==1){bt.push(bt[0])}else{if(bi=="translate"&&bt.length==1){bt.push(0)}}bq[bl].apply(bq,bt);this._list.appendItem(bq)}}};this.numberOfItems=0;this.clear=function(){this.numberOfItems=0;this._xforms=[]};this.initialize=function(bi){this.numberOfItems=1;this._xforms=[bi]};this.getItem=function(bi){if(bi<this.numberOfItems&&bi>=0){return this._xforms[bi]}return null};this.insertItemBefore=function(bl,bj){var bn=null;if(bj>=0){if(bj<this.numberOfItems){var bm=new Array(this.numberOfItems+1);for(var bk=0;bk<bj;++bk){bm[bk]=this._xforms[bk]}bm[bk]=bl;for(var bi=bk+1;bk<this.numberOfItems;++bi,++bk){bm[bi]=this._xforms[bk]}this.numberOfItems++;this._xforms=bm;bn=bl;this._list._update()}else{bn=this._list.appendItem(bl)}}return bn};this.replaceItem=function(bj,bi){var bk=null;if(bi<this.numberOfItems&&bi>=0){this._xforms[bi]=bj;bk=bj;this._list._update()}return bk};this.removeItem=function(bj){var bm=null;if(bj<this.numberOfItems&&bj>=0){var bm=this._xforms[bj];var bl=new Array(this.numberOfItems-1);for(var bk=0;bk<bj;++bk){bl[bk]=this._xforms[bk]}for(var bi=bk;bi<this.numberOfItems-1;++bi,++bk){bl[bi]=this._xforms[bk+1]}this.numberOfItems--;this._xforms=bl;this._list._update()}return bm};this.appendItem=function(bi){this._xforms.push(bi);this.numberOfItems++;this._list._update();return bi}};function at(bi,bg){if(bi&&bi.nodeType==1){bg(bi);var bh=bi.childNodes.length;while(bh--){at(bi.childNodes.item(bh),bg)}}}function a9(bi,bg){if(bi&&bi.nodeType==1){var bh=bi.childNodes.length;while(bh--){at(bi.childNodes.item(bh),bg)}bg(bi)}}var az=this.assignAttributes=function(bl,bi,bh,bg){if(!bh){bh=0}var bm=null;if(!window.opera){G.suspendRedraw(bh)}for(var bj in bi){var bk=(bj.substr(0,4)=="xml:"?W:bj.substr(0,6)=="xlink:"?aE:null);if(bk||!bg){bl.setAttributeNS(bk,bj,bi[bj])}else{ab(bl,bj,bi[bj])}}if(!window.opera){G.unsuspendRedraw(bm)}};var ar=this.cleanupElement=function(bh){var bi=G.suspendRedraw(60);var bj={"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 bg in bj){var bk=bj[bg];if(bh.getAttribute(bg)==bk){bh.removeAttribute(bg)}}G.unsuspendRedraw(bi)};var c=this.addSvgElementFromJson=function(bh){var bg=b(bh.attr.id);if(bg&&bh.element!=bg.tagName){V.removeChild(bg);bg=null}if(!bg){bg=aM.createElementNS(aK,bh.element);if(V){V.appendChild(bg)}}if(bh.curStyles){az(bg,{fill:aN.fill,stroke:aN.stroke,"stroke-width":aN.stroke_width,"stroke-dasharray":aN.stroke_dasharray,"stroke-linejoin":aN.stroke_linejoin,"stroke-linecap":aN.stroke_linecap,"stroke-opacity":aN.stroke_opacity,"fill-opacity":aN.fill_opacity,opacity:aN.opacity/2,style:"pointer-events:inherit"},100)}az(bg,bh.attr,100);ar(bg);return bg};(function(){var bg=aM.createComment(" Created with SVG-edit - http://svg-edit.googlecode.com/ ");ai.appendChild(bg)})();var aS=[],aX={},ad=J.imgPath+"logo.png",V=null,ah={round_digits:5},aG=false,a4=1,aj=null,a1="select",aa="none",U={shape:{fill:"#"+J.initFill.color,fill_paint:null,fill_opacity:J.initFill.opacity,stroke:"#"+J.initStroke.color,stroke_paint:null,stroke_opacity:J.initStroke.opacity,stroke_width:J.initStroke.width,stroke_dasharray:"none",stroke_linejoin:"miter",stroke_linecap:"butt",opacity:J.initOpacity}};U.text=$.extend(true,{},U.shape);$.extend(U.text,{fill:"#000000",stroke_width:0,font_size:24,font_family:"serif"});var aN=U.shape,a6=U.text,r=aN,ac=1,aR=new Array(1),u=new Array(1),K=null,F=new bd(),j=null,aH=[],e={};var aI=this.runExtensions=function(bh,bj,bi){var bg=false;if(bi){bg=[]}$.each(e,function(bk,bl){if(bh in bl){if(bi){bg.push(bl[bh](bj))}else{bg=bl[bh](bj)}}});return bg};this.addExtension=function(bg,bi){if(!(bg in e)){if($.isFunction(bi)){var bh=bi($.extend(bc.getPrivateMethods(),{svgroot:G,svgcontent:ai,nonce:m,selectorManager:F}))}else{var bh=bi}e[bg]=bh;call("extension_added",bh)}else{console.log('Cannot add extension "'+bg+'", an extension by that name already exists"')}};var a3=function(bh){var bg=ah.round_digits;if(!isNaN(bh)){return Number(Number(bh).toFixed(bg))}else{if($.isArray(bh)){return a3(bh[0])+","+a3(bh[1])}}};var Q=this.round=function(bg){return parseInt(bg*ac)/ac};var aW=this.getIntersectionList=function(bj){if(j==null){return null}if(!aH.length){aH=aO(V,true)}var bg=null;try{bg=V.getIntersectionList(bj,null)}catch(bk){}if(bg==null||typeof(bg.item)!="function"){bg=[];var bi=j.getBBox();$.each(bi,function(bl,bm){bi[bl]=bm/ac});var bh=aH.length;while(bh--){if(!bi.width||!bi.width){continue}if(aw.rectsIntersect(bi,aH[bh].bbox)){bg.push(aH[bh].elem)}}}return bg};var ag=this.getStrokedBBox=function(bh){if(!bh){bh=aO()}if(!bh.length){return false}var bi=function(br){try{var bw=au(br);var bs=aq(br);if((bs&&bs%90)||aP(aQ(br))){var bv=false;var by=["ellipse","path","line","polyline","polygon"];if($.inArray(br.tagName,by)!=-1){bw=bv=bc.convertToPath(br,true)}else{if(br.tagName=="rect"){var bq=br.getAttribute("rx");var bp=br.getAttribute("ry");if(bq||bp){bw=bv=bc.convertToPath(br,true)}}}if(!bv){var bt=document.createElementNS(aK,"g");var bx=br.parentNode;bx.replaceChild(bt,br);bt.appendChild(br);bw=bt.getBBox();bx.insertBefore(br,bt);bx.removeChild(bt)}}return bw}catch(bu){console.log(br,bu);return null}};var bm;$.each(bh,function(){if(bm){return}if(!this.parentNode){return}bm=bi(this)});if(bm==null){return null}var bg=bm.x+bm.width;var bo=bm.y+bm.height;var bl=bm.x;var bk=bm.y;var bn=function(bq){var bp=bq.getAttribute("stroke-width");var br=0;if(bq.getAttribute("stroke")!="none"&&!isNaN(bp)){br+=bp/2}return br};var bj=[];$.each(bh,function(bq,br){var bp=bi(br);if(bp){var bs=bn(br);bl=Math.min(bl,bp.x-bs);bk=Math.min(bk,bp.y-bs);bj.push(bp)}});bm.x=bl;bm.y=bk;$.each(bh,function(bq,br){var bp=bj[bq];if(bp&&br.nodeType==1){var bs=bn(br);bg=Math.max(bg,bp.x+bp.width+bs);bo=Math.max(bo,bp.y+bp.height+bs)}});bm.width=bg-bl;bm.height=bo-bk;return bm};var aO=this.getVisibleElements=function(bg,bh){if(!bg){bg=$(ai).children()}var bi=[];$(bg).children().each(function(bj,bm){try{var bl=bm.getBBox();if(bl){var bk=bh?{elem:bm,bbox:ag([bm])}:bm;bi.push(bk)}}catch(bn){}});return bi.reverse()};var ap=function(bh){var bi=document.createElementNS(bh.namespaceURI,bh.nodeName);$.each(bh.attributes,function(bk,bj){if(bj.localName!="-moz-math-font-style"){bi.setAttributeNS(bj.namespaceURI,bj.nodeName,bj.nodeValue)}});bi.removeAttribute("id");bi.id=a7();a4++;if((aC)&&bh.nodeName=="path"){var bg=z.convertPath(bh);bi.setAttribute("d",bg)}$.each(bh.childNodes,function(bj,bk){switch(bk.nodeType){case 1:bi.appendChild(ap(bk));break;case 3:bi.textContent=bk.nodeValue;break;default:break}});if(bi.tagName=="image"){aV(bi)}return bi};function b(bg){if(G.querySelector){return G.querySelector("#"+bg)}else{if(aM.evaluate){return aM.evaluate('svg:svg[@id="svgroot"]//svg:*[@id="'+bg+'"]',aL,function(){return"http://www.w3.org/2000/svg"},9,null).singleNodeValue}else{return $(G).find("[id="+bg+"]")[0]}}}var C,a7;(function(bi){var bg={};var bh="svg_";C=bi.getId=function(){if(bg.getid){return call("getid",a4)}if(q){return bh+m+"_"+a4}else{return bh+a4}};a7=bi.getNextId=function(){var bj=C();while(b(bj)){a4++;bj=C()}return bj};call=bi.call=function(bk,bj){if(bg[bk]){return bg[bk](this,bj)}};bi.bind=function(bk,bl){var bj=bg[bk];bg[bk]=bl;return bj};bi.setIdPrefix=function(bj){bh=bj}}(bc));var M=this.sanitizeSvg=function(bl){if(bl.nodeType==3){bl.nodeValue=bl.nodeValue.replace(/^\s+|\s+$/g,"");if(!bl.nodeValue.length){bl.parentNode.removeChild(bl)}}if(bl.nodeType!=1){return}var bt=bl.ownerDocument;var bu=bl.parentNode;if(!bt||!bu){return}var bq=aF[bl.nodeName];var bk=h[bl.nodeName];if(bq!=undefined){var bj=[];var bm=bl.attributes.length;while(bm--){var bp=bl.attributes.item(bm);var bs=bp.nodeName;var bn=bp.localName;var bv=bp.namespaceURI;if(!(bk.hasOwnProperty(bn)&&bv==bk[bn]&&bv!=bf)&&!(bv==bf&&am[bp.nodeValue])){if(bs.indexOf("se:")==0){bj.push([bs,bp.nodeValue])}bl.removeAttributeNS(bv,bn)}if(bl.nodeName=="path"&&bs=="d"){bl.setAttribute("d",z.convertPath(bl));z.fixEnd(bl)}if(bs=="style"){var br=bp.nodeValue.split(";"),bh=br.length;while(bh--){var bo=br[bh].split(":");if(bq.indexOf(bo[0])!=-1){bl.setAttribute(bo[0],bo[1])}}bl.removeAttribute("style")}}$.each(bj,function(bx,bw){bl.setAttributeNS(al,bw[0],bw[1])});var bg=bl.getAttributeNS(aE,"href");if(bg&&$.inArray(bl.nodeName,["filter","linearGradient","pattern","radialGradient","textPath","use"])!=-1){if(bg[0]!="#"){bl.setAttributeNS(aE,"xlink:href","");bl.removeAttributeNS(aE,"href")}}if(bl.nodeName=="use"&&!bl.getAttributeNS(aE,"href")){bu.removeChild(bl);return}$.each(["clip-path","fill","filter","marker-end","marker-mid","marker-start","mask","stroke"],function(bx,bw){var by=bl.getAttribute(bw);if(by){by=ak(by);if(by&&by[0]!="#"){bl.setAttribute(bw,"");bl.removeAttribute(bw)}}});bm=bl.childNodes.length;while(bm--){M(bl.childNodes.item(bm))}}else{var bi=[];while(bl.hasChildNodes()){bi.push(bu.insertBefore(bl.firstChild,bl))}bu.removeChild(bl);var bm=bi.length;while(bm--){M(bi[bm])}}};var ak=this.getUrlFromAttr=function(bg){if(bg){if(bg.indexOf('url("')==0){return bg.substring(5,bg.indexOf('"',6))}else{if(bg.indexOf("url('")==0){return bg.substring(5,bg.indexOf("'",6))}else{if(bg.indexOf("url(")==0){return bg.substring(4,bg.indexOf(")"))}}}}return null};var au=this.getBBox=function(bj){var bi=bj||aR[0];if(bj.nodeType!=1){return null}var bg=null;if(bj.nodeName=="text"&&bi.textContent==""){bi.textContent="a";bg=bi.getBBox();bi.textContent=""}else{if(bj.nodeName=="path"&&aC){bg=bb(bi)}else{if(bj.nodeName=="use"&&!aC){bg=bi.getBBox();bg.x+=parseFloat(bi.getAttribute("x")||0);bg.y+=parseFloat(bi.getAttribute("y")||0)}else{if(bj.nodeName=="foreignObject"){bg=bi.getBBox();bg.x+=parseFloat(bi.getAttribute("x")||0);bg.y+=parseFloat(bi.getAttribute("y")||0)}else{try{bg=bi.getBBox()}catch(bk){var bh=$(bi).closest("foreignObject");if(bh.length){try{bg=bh[0].getBBox()}catch(bk){bg=null}}else{bg=null}}}}}}return bg};var g=function(bg){if(navigator.userAgent.indexOf("Gecko/")==-1){return bg}var bh=bg.cloneNode(true);bg.parentNode.insertBefore(bh,bg);bg.parentNode.removeChild(bg);F.releaseSelector(bg);aR[0]=bh;F.requestSelector(bh).showGrips(true);return bh};var bb=function(bv){var bA=bv.pathSegList;var bt=bA.numberOfItems;var bn=[[],[]];var bm=bA.getItem(0);var bl=[bm.x,bm.y];for(var bx=0;bx<bt;bx++){var bz=bA.getItem(bx);if(!bz.x){continue}bn[0].push(bl[0]);bn[1].push(bl[1]);if(bz.x1){var bk=[bz.x1,bz.y1],bj=[bz.x2,bz.y2],bh=[bz.x,bz.y];for(var bw=0;bw<2;bw++){var bg=function(bE){return Math.pow(1-bE,3)*bl[bw]+3*Math.pow(1-bE,2)*bE*bk[bw]+3*(1-bE)*Math.pow(bE,2)*bj[bw]+Math.pow(bE,3)*bh[bw]};var bC=6*bl[bw]-12*bk[bw]+6*bj[bw];var bD=-3*bl[bw]+9*bk[bw]-9*bj[bw]+3*bh[bw];var bB=3*bk[bw]-3*bl[bw];if(bD==0){if(bC==0){continue}var bu=-bB/bC;if(0<bu&&bu<1){bn[bw].push(bg(bu))}continue}var bi=Math.pow(bC,2)-4*bB*bD;if(bi<0){continue}var br=(-bC+Math.sqrt(bi))/(2*bD);if(0<br&&br<1){bn[bw].push(bg(br))}var bp=(-bC-Math.sqrt(bi))/(2*bD);if(0<bp&&bp<1){bn[bw].push(bg(bp))}}bl=bh}else{bn[0].push(bz.x);bn[1].push(bz.y)}}var bq=Math.min.apply(null,bn[0]);var bs=Math.max.apply(null,bn[0])-bq;var bo=Math.min.apply(null,bn[1]);var by=Math.max.apply(null,bn[1])-bo;return{x:bq,y:bo,width:bs,height:by}};var aq=this.getRotationAngle=function(bk,bh){var bj=bk||aR[0];var bm=aQ(bj);if(!bm){return 0}var bl=bm.numberOfItems;for(var bi=0;bi<bl;++bi){var bg=bm.getItem(bi);if(bg.type==4){return bh?bg.angle*Math.PI/180:bg.angle}}return 0};this.setRotationAngle=function(bi,bq){bi=parseFloat(bi);var bj=aR[0];var bn=bj.getAttribute("transform");var bt=au(bj);var bm=bt.x+bt.width/2,bl=bt.y+bt.height/2;var bp=aQ(bj);if(bp.numberOfItems>0){var bs=bp.getItem(0);if(bs.type==4){bp.removeItem(0)}}if(bi!=0){var bg=P(bm,bl,s(bp).matrix);var br=G.createSVGTransform();br.setRotate(bi,bg.x,bg.y);bp.insertItemBefore(br,0)}else{if(bp.numberOfItems==0){bj.removeAttribute("transform")}}if(!bq){var bh=bj.getAttribute("transform");bj.setAttribute("transform",bn);A("transform",bh,aR)}var bo=b("pathpointgrip_container");var bk=F.requestSelector(aR[0]);bk.resize();bk.updateGripCursors(bi)};var aQ=this.getTransformList=function(bh){if(aC){var bi=bh.id;if(!bi){bi="temp"}var bg=T[bi];if(!bg||bi=="temp"){T[bi]=new H(bh);T[bi]._init();bg=T[bi]}return bg}else{if(bh.transform){return bh.transform.baseVal}else{if(bh.gradientTransform){return bh.gradientTransform.baseVal}}}return null};var aY=this.recalculateAllSelectedDimensions=function(){var bk=(aa=="none"?"position":"size");var bg=new aA(bk);var bh=aR.length;while(bh--){var bi=aR[bh];var bj=l(bi);if(bj){bg.addSubCommand(bj)}}if(!bg.isEmpty()){aT(bg);call("changed",aR)}};var E=[0,"z","M","m","L","l","C","c","Q","q","A","a","H","h","V","v","S","s","T","t"];var ax=function(bg){console.log([bg.a,bg.b,bg.c,bg.d,bg.e,bg.f])};var D=this.remapElement=function(bv,bI,by){var bl=function(bJ,bK){return P(bJ,bK,by)},bk=function(bJ){return by.a*bJ},bt=function(bJ){return by.d*bJ},bq=au(bv);switch(bv.tagName){case"line":var bo=bl(bI.x1,bI.y1),bn=bl(bI.x2,bI.y2);bI.x1=bo.x;bI.y1=bo.y;bI.x2=bn.x;bI.y2=bn.y;break;case"circle":var bH=bl(bI.cx,bI.cy);bI.cx=bH.x;bI.cy=bH.y;var bB=be(bq.x,bq.y,bq.width,bq.height,by);var br=bB.tr.x-bB.tl.x,bF=bB.bl.y-bB.tl.y;bI.r=Math.min(br/2,bF/2);break;case"ellipse":var bH=bl(bI.cx,bI.cy);bI.cx=bH.x;bI.cy=bH.y;bI.rx=bk(bI.rx);bI.ry=bt(bI.ry);break;case"foreignObject":case"rect":case"image":var bo=bl(bI.x,bI.y);bI.x=bo.x;bI.y=bo.y;bI.width=bk(bI.width);bI.height=bt(bI.height);break;case"use":var bo=bl(bI.x,bI.y);bI.x=bo.x;bI.y=bo.y;break;case"text":if(by.a==1&&by.b==0&&by.c==0&&by.d==1&&(by.e!=0||by.f!=0)){var bu=s(bv).matrix,bp=af(bu.inverse(),by,bu);bI.x=parseFloat(bI.x)+bp.e;bI.y=parseFloat(bI.y)+bp.f}else{var bh=aQ(bv);var bw=G.createSVGTransform();bw.setMatrix(af(s(bh).matrix,by));bh.clear();bh.appendItem(bw)}break;case"polygon":case"polyline":var bE=bI.points.length;for(var bD=0;bD<bE;++bD){var bx=bI.points[bD];bx=bl(bx.x,bx.y);bI.points[bD].x=bx.x;bI.points[bD].y=bx.y}break;case"path":var bg=bv.pathSegList;var bE=bg.numberOfItems;bI.d=new Array(bE);for(var bD=0;bD<bE;++bD){var bG=bg.getItem(bD);bI.d[bD]={type:bG.pathSegType,x:bG.x,y:bG.y,x1:bG.x1,y1:bG.y1,x2:bG.x2,y2:bG.y2,r1:bG.r1,r2:bG.r2,angle:bG.angle,largeArcFlag:bG.largeArcFlag,sweepFlag:bG.sweepFlag}}var bE=bI.d.length,bj=bI.d[0],bz=bl(bj.x,bj.y);bI.d[0].x=bz.x;bI.d[0].y=bz.y;for(var bD=1;bD<bE;++bD){var bG=bI.d[bD];var bi=bG.type;if(bi%2==0){var bC=(bG.x!=undefined)?bG.x:bz.x,bA=(bG.y!=undefined)?bG.y:bz.y,bx=bl(bC,bA),bo=bl(bG.x1,bG.y1),bn=bl(bG.x2,bG.y2);bG.x=bx.x;bG.y=bx.y;bG.x1=bo.x;bG.y1=bo.y;bG.x2=bn.x;bG.y2=bn.y;bG.r1=bk(bG.r1),bG.r2=bt(bG.r2)}else{bG.x=bk(bG.x);bG.y=bt(bG.y);bG.x1=bk(bG.x1);bG.y1=bt(bG.y1);bG.x2=bk(bG.x2);bG.y2=bt(bG.y2);bG.r1=bk(bG.r1),bG.r2=bt(bG.r2)}if(bG.x){bz.x=bG.x}if(bG.y){bz.y=bG.y}}break}switch(bv.tagName){case"foreignObject":case"rect":case"image":bI.x=bI.x-0+Math.min(0,bI.width);bI.y=bI.y-0+Math.min(0,bI.height);bI.width=Math.abs(bI.width);bI.height=Math.abs(bI.height);az(bv,bI,1000,true);break;case"use":az(bv,bI,1000,true);break;case"ellipse":bI.rx=Math.abs(bI.rx);bI.ry=Math.abs(bI.ry);case"circle":if(bI.r){bI.r=Math.abs(bI.r)}case"line":case"text":az(bv,bI,1000,true);break;case"polyline":case"polygon":var bE=bI.points.length;var bm="";for(var bD=0;bD<bE;++bD){var bx=bI.points[bD];bm+=bx.x+","+bx.y+" "}bv.setAttribute("points",bm);break;case"path":var bs="";var bE=bI.d.length;for(var bD=0;bD<bE;++bD){var bG=bI.d[bD];var bi=bG.type;bs+=E[bi];switch(bi){case 13:case 12:bs+=bG.x+" ";break;case 15:case 14:bs+=bG.y+" ";break;case 3:case 5:case 19:case 2:case 4:case 18:bs+=bG.x+","+bG.y+" ";break;case 7:case 6:bs+=bG.x1+","+bG.y1+" "+bG.x2+","+bG.y2+" "+bG.x+","+bG.y+" ";break;case 9:case 8:bs+=bG.x1+","+bG.y1+" "+bG.x+","+bG.y+" ";break;case 11:case 10:bs+=bG.r1+","+bG.r2+" "+bG.angle+" "+Number(bG.largeArcFlag)+" "+Number(bG.sweepFlag)+" "+bG.x+","+bG.y+" ";break;case 17:case 16:bs+=bG.x2+","+bG.y2+" "+bG.x+","+bG.y+" ";break}}bv.setAttribute("d",bs);break}};var l=this.recalculateDimensions=function(bI){if(bI==null){return null}var bQ=aQ(bI);if(bQ&&bQ.numberOfItems>0){var b9=bQ.numberOfItems;while(b9--){var bY=bQ.getItem(b9);if(bY.type==0){bQ.removeItem(b9)}else{if(bY.type==1){if(a8(bY.matrix)){bQ.removeItem(b9)}}else{if(bY.type==4){if(bY.angle==0){bQ.removeItem(b9)}}}}}if(bQ.numberOfItems==1&&aq(bI)){return null}}if(!bQ||bQ.numberOfItems==0){bI.removeAttribute("transform");return null}var bh=new aA("Transform");var bC={},ch=null,bq=[];switch(bI.tagName){case"line":bq=["x1","y1","x2","y2"];break;case"circle":bq=["cx","cy","r"];break;case"ellipse":bq=["cx","cy","rx","ry"];break;case"foreignObject":case"rect":case"image":bq=["width","height","x","y"];break;case"use":bq=["x","y"];break;case"text":bq=["x","y"];break;case"polygon":case"polyline":ch={};ch.points=bI.getAttribute("points");var bB=bI.points;var bz=bB.numberOfItems;bC.points=new Array(bz);for(var cc=0;cc<bz;++cc){var br=bB.getItem(cc);bC.points[cc]={x:br.x,y:br.y}}break;case"path":ch={};ch.d=bI.getAttribute("d");bC.d=bI.getAttribute("d");break}if(bq.length){bC=$(bI).attr(bq);$.each(bC,function(cm,cn){bC[cm]=a2(cm,cn)})}if(ch==null){ch=$.extend(true,{},bC);$.each(ch,function(cm,cn){ch[cm]=a2(cm,cn)})}ch.transform=aj?aj:"";if(bI.tagName=="g"||bI.tagName=="a"){var bm=au(bI),ck={x:bm.x+bm.width/2,y:bm.y+bm.height/2},bj=P(bm.x+bm.width/2,bm.y+bm.height/2,s(bQ).matrix),b3=G.createSVGMatrix();var bG=aq(bI);if(bG){var ci=bG*Math.PI/180;if(Math.abs(ci)>(1e-10)){var bV=Math.sin(ci)/(1-Math.cos(ci))}else{var bV=2/ci}for(var cc=0;cc<bQ.numberOfItems;++cc){var bY=bQ.getItem(cc);if(bY.type==4){var bO=bY.matrix;ck.y=(bV*bO.e+bO.f)/2;ck.x=(bO.e-bV*bO.f)/2;bQ.removeItem(cc);break}}}var ca=0,b8=0,bP=0,bo=bQ.numberOfItems;if(bo){var b7=bQ.getItem(0).matrix}if(bo>=3&&bQ.getItem(bo-2).type==3&&bQ.getItem(bo-3).type==2&&bQ.getItem(bo-1).type==2){bP=3;var cl=bQ.getItem(bo-3).matrix,bt=bQ.getItem(bo-2).matrix,b1=bQ.getItem(bo-1).matrix;var bw=bI.childNodes;var cg=bw.length;while(cg--){var bl=bw.item(cg);ca=0;b8=0;if(bl.nodeType==1){var bA=aQ(bl);if(!bA){continue}var b3=s(bA).matrix;var by=aq(bl);var bU=aj;var b4=[];aj=bl.getAttribute("transform");if(by||aP(bA)){var bT=G.createSVGTransform();bT.setMatrix(af(cl,bt,b1,b3));bA.clear();bA.appendItem(bT);b4.push(bT)}else{var bk=af(b3.inverse(),b1,b3);var bK=G.createSVGMatrix();bK.e=-bk.e;bK.f=-bk.f;var cf=af(bK.inverse(),b3.inverse(),cl,bt,b1,b3,bk.inverse());var cj=G.createSVGTransform(),bM=G.createSVGTransform(),bs=G.createSVGTransform();cj.setTranslate(bk.e,bk.f);bM.setScale(cf.a,cf.d);bs.setTranslate(bK.e,bK.f);bA.appendItem(bs);bA.appendItem(bM);bA.appendItem(cj);b4.push(bs);b4.push(bM);b4.push(cj);ax(bs.matrix);ax(bM.matrix)}bh.addSubCommand(l(bl));aj=bU}}bQ.removeItem(bo-1);bQ.removeItem(bo-2);bQ.removeItem(bo-3)}else{if(bo>=3&&bQ.getItem(bo-1).type==1){bP=3;b3=s(bQ).matrix;var bT=G.createSVGTransform();bT.setMatrix(b3);bQ.clear();bQ.appendItem(bT)}else{if((bo==1||(bo>1&&bQ.getItem(1).type!=3))&&bQ.getItem(0).type==2){bP=2;var bF=s(bQ).matrix;bQ.removeItem(0);var bL=s(bQ).matrix.inverse();var bv=af(bL,bF);ca=bv.e;b8=bv.f;if(ca!=0||b8!=0){var bw=bI.childNodes;var cg=bw.length;while(cg--){var bl=bw.item(cg);if(bl.nodeType==1){var bU=aj;aj=bl.getAttribute("transform");var bA=aQ(bl);if(bA){var bJ=G.createSVGTransform();bJ.setTranslate(ca,b8);bA.insertItemBefore(bJ,0);bh.addSubCommand(l(bl));var bH=bI.getElementsByTagNameNS(aK,"use");var bE="#"+bl.id;var bS=bH.length;while(bS--){var bR=bH.item(bS);if(bE==bR.getAttributeNS(aE,"href")){var cd=G.createSVGTransform();cd.setTranslate(-ca,-b8);aQ(bR).insertItemBefore(cd,0);bh.addSubCommand(l(bR))}}aj=bU}}}aj=bU}}else{if(bo==1&&bQ.getItem(0).type==1&&!bG){bP=1;var b3=bQ.getItem(0).matrix,bw=bI.childNodes,cg=bw.length;while(cg--){var bl=bw.item(cg);if(bl.nodeType==1){var bU=aj;aj=bl.getAttribute("transform");var bA=aQ(bl);var cb=af(b3,s(bA).matrix);var b0=G.createSVGTransform();b0.setMatrix(cb);bA.clear();bA.appendItem(b0,0);bh.addSubCommand(l(bl));aj=bU}}bQ.clear()}else{if(bG){var bi=G.createSVGTransform();bi.setRotate(bG,bj.x,bj.y);bQ.insertItemBefore(bi,0)}if(bQ.numberOfItems==0){bI.removeAttribute("transform")}return null}}}}if(bP==2){if(bG){bj={x:ck.x+b7.e,y:ck.y+b7.f};var bi=G.createSVGTransform();bi.setRotate(bG,bj.x,bj.y);bQ.insertItemBefore(bi,0)}}else{if(bP==3){var b3=s(bQ).matrix;var bg=G.createSVGTransform();bg.setRotate(bG,ck.x,ck.y);var bN=bg.matrix;var b2=G.createSVGTransform();b2.setRotate(bG,bj.x,bj.y);var bD=b2.matrix.inverse(),b6=b3.inverse(),bX=af(b6,bD,bN,b3);ca=bX.e;b8=bX.f;if(ca!=0||b8!=0){var bw=bI.childNodes;var cg=bw.length;while(cg--){var bl=bw.item(cg);if(bl.nodeType==1){var bU=aj;aj=bl.getAttribute("transform");var bA=aQ(bl);var bJ=G.createSVGTransform();bJ.setTranslate(ca,b8);bA.insertItemBefore(bJ,0);bh.addSubCommand(l(bl));aj=bU}}}if(bG){bQ.insertItemBefore(b2,0)}}}}else{var bm=au(bI);if(!bm){return null}var ck={x:bm.x+bm.width/2,y:bm.y+bm.height/2},bj=P(bm.x+bm.width/2,bm.y+bm.height/2,s(bQ).matrix),b3=G.createSVGMatrix(),by=aq(bI);if(by){var ci=by*Math.PI/180;if(Math.abs(ci)>(1e-10)){var bV=Math.sin(ci)/(1-Math.cos(ci))}else{var bV=2/ci}for(var cc=0;cc<bQ.numberOfItems;++cc){var bY=bQ.getItem(cc);if(bY.type==4){var bO=bY.matrix;ck.y=(bV*bO.e+bO.f)/2;ck.x=(bO.e-bV*bO.f)/2;bQ.removeItem(cc);break}}}var bP=0;var bo=bQ.numberOfItems;if(!aC){var bu=bI.getAttribute("fill");if(bu&&bu.indexOf("url(")===0){var bx=b(ak(bu).substr(1));if(bx.getAttribute("gradientUnits")==="userSpaceOnUse"){var bx=$(bx);b3=s(bQ).matrix;var bZ=aQ(bx[0]);var b5=s(bZ).matrix;b3=af(b3,b5);var bW="matrix("+[b3.a,b3.b,b3.c,b3.d,b3.e,b3.f].join(",")+")";bx.attr("gradientTransform",bW)}}}if(bo>=3&&bQ.getItem(bo-2).type==3&&bQ.getItem(bo-3).type==2&&bQ.getItem(bo-1).type==2&&bI.nodeName!="use"){bP=3;b3=s(bQ,bo-3,bo-1).matrix;bQ.removeItem(bo-1);bQ.removeItem(bo-2);bQ.removeItem(bo-3)}else{if(bo==4&&bQ.getItem(bo-1).type==1){bP=3;b3=s(bQ).matrix;var bT=G.createSVGTransform();bT.setMatrix(b3);bQ.clear();bQ.appendItem(bT);b3=G.createSVGMatrix()}else{if((bo==1||(bo>1&&bQ.getItem(1).type!=3))&&bQ.getItem(0).type==2){bP=2;var ce=bQ.getItem(0).matrix,bp=s(bQ,1).matrix,bn=bp.inverse();b3=af(bn,ce,bp);bQ.removeItem(0)}else{if(bo==1&&bQ.getItem(0).type==1&&!by){b3=s(bQ).matrix;switch(bI.tagName){case"line":bC=$(bI).attr(["x1","y1","x2","y2"]);case"polyline":case"polygon":bC.points=bI.getAttribute("points");if(bC.points){var bB=bI.points;var bz=bB.numberOfItems;bC.points=new Array(bz);for(var cc=0;cc<bz;++cc){var br=bB.getItem(cc);bC.points[cc]={x:br.x,y:br.y}}}case"path":bC.d=bI.getAttribute("d");bP=1;bQ.clear();break;default:break}}else{bP=4;if(by){var bi=G.createSVGTransform();bi.setRotate(by,bj.x,bj.y);bQ.insertItemBefore(bi,0)}if(bQ.numberOfItems==0){bI.removeAttribute("transform")}return null}}}}if(bP==1||bP==2||bP==3){D(bI,bC,b3)}if(bP==2){if(by){bj={x:ck.x+b3.e,y:ck.y+b3.f};var bi=G.createSVGTransform();bi.setRotate(by,bj.x,bj.y);bQ.insertItemBefore(bi,0)}}else{if(bP==3){var b3=s(bQ).matrix;var bg=G.createSVGTransform();bg.setRotate(by,ck.x,ck.y);var bN=bg.matrix;var b2=G.createSVGTransform();b2.setRotate(by,bj.x,bj.y);var bD=b2.matrix.inverse();var b6=b3.inverse();var bX=af(b6,bD,bN,b3);D(bI,bC,bX);if(by){bQ.insertItemBefore(b2,0)}}}}if(bQ.numberOfItems==0){bI.removeAttribute("transform")}bh.addSubCommand(new av(bI,ch));return bh};var p=null;var P=function(bh,bi,bg){return{x:bg.a*bh+bg.c*bi+bg.e,y:bg.b*bh+bg.d*bi+bg.f}};var a8=function(bg){return(bg.a==1&&bg.b==0&&bg.c==0&&bg.d==1&&bg.e==0&&bg.f==0)};var af=this.matrixMultiply=function(){var bh=1e-14,bl=function(bo,bn){var bm=G.createSVGMatrix();bm.a=bo.a*bn.a+bo.c*bn.b;bm.b=bo.b*bn.a+bo.d*bn.b,bm.c=bo.a*bn.c+bo.c*bn.d,bm.d=bo.b*bn.c+bo.d*bn.d,bm.e=bo.a*bn.e+bo.c*bn.f+bo.e,bm.f=bo.b*bn.e+bo.d*bn.f+bo.f;return bm},bj=arguments,bk=bj.length,bg=bj[bk-1];while(bk-->1){var bi=bj[bk-1];bg=bl(bi,bg)}if(Math.abs(bg.a)<bh){bg.a=0}if(Math.abs(bg.b)<bh){bg.b=0}if(Math.abs(bg.c)<bh){bg.c=0}if(Math.abs(bg.d)<bh){bg.d=0}if(Math.abs(bg.e)<bh){bg.e=0}if(Math.abs(bg.f)<bh){bg.f=0}return bg};var s=this.transformListToTransform=function(bm,bl,bh){var bl=bl==undefined?0:bl;var bh=bh==undefined?(bm.numberOfItems-1):bh;bl=parseInt(bl);bh=parseInt(bh);if(bl>bh){var bi=bh;bh=bl;bl=bi}var bg=G.createSVGMatrix();for(var bk=bl;bk<=bh;++bk){var bj=(bk>=0&&bk<bm.numberOfItems?bm.getItem(bk).matrix:G.createSVGMatrix());bg=af(bg,bj)}return G.createSVGTransformFromMatrix(bg)};var aP=this.hasMatrixTransform=function(bi){if(!bi){return false}var bh=bi.numberOfItems;while(bh--){var bg=bi.getItem(bh);if(bg.type==1&&!a8(bg.matrix)){return true}}return false};var B=function(bg){var bh=aQ(bg);return s(bh).matrix};var be=this.transformBox=function(bi,bs,bp,bj,bh){var bl={x:bi,y:bs},bm={x:(bi+bp),y:bs},bg={x:(bi+bp),y:(bs+bj)},bk={x:bi,y:(bs+bj)};bl=P(bl.x,bl.y,bh);var br=bl.x,bo=bl.x,bq=bl.y,bn=bl.y;bm=P(bm.x,bm.y,bh);br=Math.min(br,bm.x);bo=Math.max(bo,bm.x);bq=Math.min(bq,bm.y);bn=Math.max(bn,bm.y);bk=P(bk.x,bk.y,bh);br=Math.min(br,bk.x);bo=Math.max(bo,bk.x);bq=Math.min(bq,bk.y);bn=Math.max(bn,bk.y);bg=P(bg.x,bg.y,bh);br=Math.min(br,bg.x);bo=Math.max(bo,bg.x);bq=Math.min(bq,bg.y);bn=Math.max(bn,bg.y);return{tl:bl,tr:bm,bl:bk,br:bg,aabox:{x:br,y:bq,width:(bo-br),height:(bn-bq)}}};var aZ=this.clearSelection=function(bj){if(aR[0]!=null){var bg=aR.length;for(var bh=0;bh<bg;++bh){var bi=aR[bh];if(bi==null){break}F.releaseSelector(bi);aR[bh]=null}u[0]=null}if(!bj){call("selected",aR)}};var a5=this.addToSelection=function(bg,bk){if(bg.length==0){return}var bh=0;while(bh<aR.length){if(aR[bh]==null){break}++bh}var bi=bg.length;while(bi--){var bj=bg[bi];if(!bj||!au(bj)){continue}if(aR.indexOf(bj)==-1){aR[bh]=bj;if(bh==0){u[bh]=au(bj)}bh++;var bl=F.requestSelector(bj);if(aR.length>1){bl.showGrips(false)}}}if(aR[0]&&aR.length===1&&aR[0].tagName=="a"){aR[0]=aR[0].firstChild}call("selected",aR);if(bk||aR.length==1){F.requestSelector(aR[0]).showGrips(true)}else{F.requestSelector(aR[0]).showGrips(false)}aR.sort(function(bn,bm){if(bn&&bm&&bn.compareDocumentPosition){return 3-(bm.compareDocumentPosition(bn)&6)}else{if(bn==null){return 1}}});while(aR[0]==null){aR.shift(0)}};var ao=this.removeFromSelection=function(bh){if(aR[0]==null){return}if(bh.length==0){return}var bk=new Array(aR.length),bm=new Array(u.length),bi=0,bg=aR.length;for(var bj=0;bj<bg;++bj){var bl=aR[bj];if(bl){if(bh.indexOf(bl)==-1){bk[bi]=bl;if(bi==0){bm[bi]=u[bj]}bi++}else{F.releaseSelector(bl)}}}aR=bk;u=bm};this.selectAllInCurrentLayer=function(){if(V){aZ();a5($(V).children());a1="select";call("selected",aR)}};var X=this.smoothControlPoints=function(bg,bw,bv){var bi=bg.x-bv.x,bu=bg.y-bv.y,bh=bw.x-bv.x,bs=bw.y-bv.y;if((bi!=0||bu!=0)&&(bh!=0||bs!=0)){var bo=Math.atan2(bu,bi),bn=Math.atan2(bs,bh),bk=Math.sqrt(bi*bi+bu*bu),bj=Math.sqrt(bh*bh+bs*bs),bm=G.createSVGPoint(),bl=G.createSVGPoint();if(bo<0){bo+=2*Math.PI}if(bn<0){bn+=2*Math.PI}var bt=Math.abs(bo-bn),bq=Math.abs(Math.PI-bt)/2;var br,bp;if(bo-bn>0){br=bt<Math.PI?(bo+bq):(bo-bq);bp=bt<Math.PI?(bn-bq):(bn+bq)}else{br=bt<Math.PI?(bo-bq):(bo+bq);bp=bt<Math.PI?(bn+bq):(bn-bq)}bm.x=bk*Math.cos(br)+bv.x;bm.y=bk*Math.sin(br)+bv.y;bl.x=bj*Math.cos(bp)+bv.x;bl.y=bj*Math.sin(bp)+bv.y;return[bm,bl]}return undefined};var Z=this.getMouseTarget=function(bg){if(bg==null){return null}var bh=bg.target;if(bh.correspondingUseElement){bh=bh.correspondingUseElement}if($.inArray(bh.namespaceURI,[f,O])!=-1&&bh.id!="svgcanvas"){while(bh.nodeName!="foreignObject"){bh=bh.parentNode}}while(bh.parentNode.parentNode.tagName=="g"){bh=bh.parentNode}if(bh.nodeName.toLowerCase()=="div"){bh=G}return bh};(function(){var bg=null,bn=null,bm=null,bl={},bh={minx:null,miny:null,maxx:null,maxy:null};var bj=function(bE){if(bE.button===1||bc.spaceKey){return}p=ai.getScreenCTM().inverse();var bF=P(bE.pageX,bE.pageY,p),bz=bF.x*ac,by=bF.y*ac;bE.preventDefault();var bD=bz/ac,bB=by/ac,bq=Z(bE);bn=bD;bm=bB;if(bq.parentNode==F.selectorParentGroup&&aR[0]!=null){var bC=bE.target.id,bx=bC.substr(0,20);if(bx=="selectorGrip_rotate_"){a1="rotate"}else{if(bx=="selectorGrip_resize_"){a1="resize";aa=bC.substr(20,bC.indexOf("_",20)-20)}}bq=aR[0]}aj=bq.getAttribute("transform");var bu=aQ(bq);switch(a1){case"select":aG=true;aa="none";if(bq!=G){if(aR.indexOf(bq)==-1){if(!bE.shiftKey){aZ(true)}a5([bq]);K=bq;z.clear()}for(var bs=0;bs<aR.length;++bs){if(aR[bs]==null){continue}var bw=aQ(aR[bs]);bw.insertItemBefore(G.createSVGTransform(),0)}}else{aZ();a1="multiselect";if(j==null){j=F.getRubberBandBox()}bn*=ac;bm*=ac;az(j,{x:bn,y:bm,width:0,height:0,display:"inline"},100)}break;case"zoom":aG=true;bn=bD;bm=bB;if(j==null){j=F.getRubberBandBox()}az(j,{x:bn*ac,y:bm*ac,width:0,height:0,display:"inline"},100);break;case"resize":aG=true;bn=bD;bm=bB;bl=au($("#selectedBox0")[0]);$.each(bl,function(bG,bH){bl[bG]=bH/ac});var bA=aq(bq)?1:0;if(aP(bu)){bu.insertItemBefore(G.createSVGTransform(),bA);bu.insertItemBefore(G.createSVGTransform(),bA);bu.insertItemBefore(G.createSVGTransform(),bA)}else{bu.appendItem(G.createSVGTransform());bu.appendItem(G.createSVGTransform());bu.appendItem(G.createSVGTransform())}break;case"fhellipse":case"fhrect":case"fhpath":aG=true;bn=bD;bm=bB;bg=bD+","+bB+" ";var br=aN.stroke_width==0?1:aN.stroke_width;c({element:"polyline",curStyles:true,attr:{points:bg,id:a7(),fill:"none",opacity:aN.opacity/2,"stroke-linecap":"round",style:"pointer-events:none"}});bh.minx=bD;bh.maxx=bD;bh.miny=bB;bh.maxy=bB;break;case"image":aG=true;bn=bD;bm=bB;var bv=c({element:"image",attr:{x:bD,y:bB,width:0,height:0,id:a7(),opacity:aN.opacity/2,style:"pointer-events:inherit"}});bv.setAttributeNS(aE,"xlink:href",ad);aV(bv);break;case"square":case"rect":aG=true;bn=bD;bm=bB;c({element:"rect",curStyles:true,attr:{x:bD,y:bB,width:0,height:0,id:a7(),opacity:aN.opacity/2}});break;case"line":aG=true;var br=aN.stroke_width==0?1:aN.stroke_width;c({element:"line",curStyles:true,attr:{x1:bD,y1:bB,x2:bD,y2:bB,id:a7(),stroke:aN.stroke,"stroke-width":br,"stroke-dasharray":aN.stroke_dasharray,"stroke-linejoin":aN.stroke_linejoin,"stroke-linecap":aN.stroke_linecap,"stroke-opacity":aN.stroke_opacity,fill:"none",opacity:aN.opacity/2,style:"pointer-events:none"}});break;case"circle":aG=true;c({element:"circle",curStyles:true,attr:{cx:bD,cy:bB,r:0,id:a7(),opacity:aN.opacity/2}});break;case"ellipse":aG=true;c({element:"ellipse",curStyles:true,attr:{cx:bD,cy:bB,rx:0,ry:0,id:a7(),opacity:aN.opacity/2}});break;case"text":aG=true;var bt=c({element:"text",curStyles:true,attr:{x:bD,y:bB,id:a7(),fill:a6.fill,"stroke-width":a6.stroke_width,"font-size":a6.font_size,"font-family":a6.font_family,"text-anchor":"middle","xml:space":"preserve"}});break;case"path":case"pathedit":bn*=ac;bm*=ac;z.mouseDown(bE,bq,bn,bm);aG=true;break;case"textedit":bn*=ac;bm*=ac;L.mouseDown(bE,bq,bn,bm);aG=true;break;case"rotate":aG=true;bc.beginUndoableChange("transform",aR);break;default:break}var bp=aI("mouseDown",{event:bE,start_x:bn,start_y:bm,selectedElements:aR},true);$.each(bp,function(bG,bH){if(bH&&bH.started){aG=true}})};var bo=function(bV){if(!aG){return}if(bV.button===1||bc.spaceKey){return}var bT=aR[0],bC=P(bV.pageX,bV.pageY,p),b2=bC.x*ac,b1=bC.y*ac,bN=b(C());x=b2/ac;y=b1/ac;bV.preventDefault();switch(a1){case"select":if(aR[0]!=null){var bu=x-bn;var bt=y-bm;if(bV.shiftKey){var bW=aw.snapToAngle(bn,bm,x,y);x=bW.x;y=bW.y}if(bu!=0||bt!=0){var bL=aR.length;for(var b9=0;b9<bL;++b9){var bT=aR[b9];if(bT==null){break}if(b9==0){var by=au(bT)}var b4=G.createSVGTransform();var bZ=aQ(bT);b4.setTranslate(bu,bt);if(bZ.numberOfItems){bZ.replaceItem(b4,0)}else{bZ.appendItem(b4)}F.requestSelector(bT).resize()}}}break;case"multiselect":x*=ac;y*=ac;az(j,{x:Math.min(bn,x),y:Math.min(bm,y),width:Math.abs(x-bn),height:Math.abs(y-bm)},100);var bU=[],b8=[],bv=aW(),bL=aR.length;for(var b9=0;b9<bL;++b9){var ca=bv.indexOf(aR[b9]);if(ca==-1){bU.push(aR[b9])}else{bv[ca]=null}}bL=bv.length;for(b9=0;b9<bL;++b9){if(bv[b9]){b8.push(bv[b9])}}if(bU.length>0){bc.removeFromSelection(bU)}if(b8.length>0){a5(b8)}break;case"resize":var bZ=aQ(bT),bD=aP(bZ),by=bD?bl:au(bT),bw=by.x,bx=by.y,bp=by.width,br=by.height,bu=(x-bn),bt=(y-bm);var bK=aq(bT);if(bK){var b3=Math.sqrt(bu*bu+bt*bt),bM=Math.atan2(bt,bu)-bK*Math.PI/180;bu=b3*Math.cos(bM);bt=b3*Math.sin(bM)}if(aa.indexOf("n")==-1&&aa.indexOf("s")==-1){bt=0}if(aa.indexOf("e")==-1&&aa.indexOf("w")==-1){bu=0}var cc=null,b7=0,b6=0,bA=br?(br+bt)/br:1,bB=bp?(bp+bu)/bp:1;if(aa.indexOf("n")!=-1){bA=br?(br-bt)/br:1;b6=br}if(aa.indexOf("w")!=-1){bB=bp?(bp-bu)/bp:1;b7=bp}var ch=G.createSVGTransform(),bX=G.createSVGTransform(),bE=G.createSVGTransform();ch.setTranslate(-(bw+b7),-(bx+b6));if(bV.shiftKey){if(bB==1){bB=bA}else{bA=bB}}bX.setScale(bB,bA);bE.setTranslate(bw+b7,bx+b6);if(bD){var bS=bK?1:0;bZ.replaceItem(ch,2+bS);bZ.replaceItem(bX,1+bS);bZ.replaceItem(bE,0+bS)}else{var bz=bZ.numberOfItems;bZ.replaceItem(bE,bz-3);bZ.replaceItem(bX,bz-2);bZ.replaceItem(ch,bz-1)}var bF=u[0];bF.x=bw;bF.y=bx;if(b7){bF.x+=bu}if(b6){bF.y+=bt}F.requestSelector(bT).resize();break;case"zoom":x*=ac;y*=ac;az(j,{x:Math.min(bn*ac,x),y:Math.min(bm*ac,y),width:Math.abs(x-bn*ac),height:Math.abs(y-bm*ac)},100);break;case"text":az(bN,{x:x,y:y},1000);break;case"line":var bO=null;if(!window.opera){G.suspendRedraw(1000)}var bI=x;var cf=y;if(bV.shiftKey){var bW=aw.snapToAngle(bn,bm,bI,cf);bI=bW.x;cf=bW.y}bN.setAttributeNS(null,"x2",bI);bN.setAttributeNS(null,"y2",cf);if(!window.opera){G.unsuspendRedraw(bO)}break;case"foreignObject":case"square":case"rect":case"image":var ce=(a1=="square")||bV.shiftKey,b0=Math.abs(x-bn),cb=Math.abs(y-bm),bH,bG;if(ce){b0=cb=Math.max(b0,cb);bH=bn<x?bn:bn-b0;bG=bm<y?bm:bm-cb}else{bH=Math.min(bn,x);bG=Math.min(bm,y)}az(bN,{width:b0,height:cb,x:bH,y:bG},1000);break;case"circle":var cd=$(bN).attr(["cx","cy"]);var bQ=cd.cx,bP=cd.cy,bs=Math.sqrt((x-bQ)*(x-bQ)+(y-bP)*(y-bP));bN.setAttributeNS(null,"r",bs);break;case"ellipse":var cd=$(bN).attr(["cx","cy"]);var bQ=cd.cx,bP=cd.cy;bO=null;if(!window.opera){G.suspendRedraw(1000)}bN.setAttributeNS(null,"rx",Math.abs(x-bQ));var bR=Math.abs(bV.shiftKey?(x-bQ):(y-bP));bN.setAttributeNS(null,"ry",bR);if(!window.opera){G.unsuspendRedraw(bO)}break;case"fhellipse":case"fhrect":bh.minx=Math.min(x,bh.minx);bh.maxx=Math.max(x,bh.maxx);bh.miny=Math.min(y,bh.miny);bh.maxy=Math.max(y,bh.maxy);case"fhpath":bn=x;bm=y;bg+=+x+","+y+" ";bN.setAttributeNS(null,"points",bg);break;case"path":case"pathedit":x*=ac;y*=ac;if(bV.shiftKey){var bJ=path.dragging?path.dragging[0]:bn;var cg=path.dragging?path.dragging[1]:bm;var bW=aw.snapToAngle(bJ,cg,x,y);x=bW.x;y=bW.y}if(j&&j.getAttribute("display")!="none"){az(j,{x:Math.min(bn,x),y:Math.min(bm,y),width:Math.abs(x-bn),height:Math.abs(y-bm)},100)}z.mouseMove(x,y);break;case"textedit":x*=ac;y*=ac;L.mouseMove(b2,b1);break;case"rotate":var by=au(bT),bQ=by.x+by.width/2,bP=by.y+by.height/2,b5=B(bT),bq=P(bQ,bP,b5);bQ=bq.x;bP=bq.y;var bK=((Math.atan2(bP-y,bQ-x)*(180/Math.PI))-90)%360;if(bV.shiftKey){var bY=45;bK=Math.round(bK/bY)*bY}bc.setRotationAngle(bK<-180?(360+bK):bK,true);call("changed",aR);break;default:break}aI("mouseMove",{event:bV,mouse_x:b2,mouse_y:b1,selected:bT})};var bk=function(bz){if(bz.button===1){return}var bu=K;K=null;if(!aG){return}var bC=P(bz.pageX,bz.pageY,p),bq=bC.x*ac,bp=bC.y*ac,bw=bq/ac,bv=bp/ac,bs=b(C()),bI=false;aG=false;switch(a1){case"resize":case"multiselect":if(j!=null){j.setAttribute("display","none");aH=[]}a1="select";case"select":if(aR[0]!=null){if(aR[1]==null){var bB=aR[0];if(bB.tagName!="g"&&bB.tagName!="image"&&bB.tagName!="foreignObject"){r.fill=bB.getAttribute("fill");r.fill_opacity=bB.getAttribute("fill-opacity");r.stroke=bB.getAttribute("stroke");r.stroke_opacity=bB.getAttribute("stroke-opacity");r.stroke_width=bB.getAttribute("stroke-width");r.stroke_dasharray=bB.getAttribute("stroke-dasharray");r.stroke_linejoin=bB.getAttribute("stroke-linejoin");r.stroke_linecap=bB.getAttribute("stroke-linecap")}if(bB.tagName=="text"){a6.font_size=bB.getAttribute("font-size");a6.font_family=bB.getAttribute("font-family")}F.requestSelector(bB).showGrips(true)}aY();if(bw!=bn||bv!=bm){var bG=aR.length;for(var bF=0;bF<bG;++bF){if(aR[bF]==null){break}if(aR[bF].tagName!="g"){F.requestSelector(aR[bF]).resize()}}}else{var by=bz.target;if(aR[0].nodeName=="path"&&aR[1]==null){z.select(by)}else{if(aR[0].nodeName=="text"&&aR[1]==null){L.select(by,bw,bv)}else{if(bz.shiftKey){if(bu!=by){bc.removeFromSelection([by])}}}}}}return;break;case"zoom":if(j!=null){j.setAttribute("display","none")}var bA=bz.shiftKey?0.5:2;call("zoomed",{x:Math.min(bn,bw),y:Math.min(bm,bv),width:Math.abs(bw-bn),height:Math.abs(bv-bm),factor:bA});return;case"fhpath":var bE=bs.getAttribute("points");var bt=bE.indexOf(",");if(bt>=0){bI=bE.indexOf(",",bt+1)>=0}else{bI=bE.indexOf(" ",bE.indexOf(" ")+1)>=0}if(bI){bs=z.smoothPolylineIntoPath(bs)}break;case"line":var bD=$(bs).attr(["x1","x2","y1","y2"]);bI=(bD.x1!=bD.x2||bD.y1!=bD.y2);break;case"foreignObject":case"square":case"rect":case"image":var bD=$(bs).attr(["width","height"]);bI=(bD.width!=0||bD.height!=0)||a1==="image";break;case"circle":bI=(bs.getAttribute("r")!=0);break;case"ellipse":var bD=$(bs).attr(["rx","ry"]);bI=(bD.rx!=null||bD.ry!=null);break;case"fhellipse":if((bh.maxx-bh.minx)>0&&(bh.maxy-bh.miny)>0){bs=c({element:"ellipse",curStyles:true,attr:{cx:(bh.minx+bh.maxx)/2,cy:(bh.miny+bh.maxy)/2,rx:(bh.maxx-bh.minx)/2,ry:(bh.maxy-bh.miny)/2,id:C()}});call("changed",[bs]);bI=true}break;case"fhrect":if((bh.maxx-bh.minx)>0&&(bh.maxy-bh.miny)>0){bs=c({element:"rect",curStyles:true,attr:{x:bh.minx,y:bh.miny,width:(bh.maxx-bh.minx),height:(bh.maxy-bh.miny),id:C()}});call("changed",[bs]);bI=true}break;case"text":bI=true;a5([bs]);L.start(bs);break;case"path":bs=null;aG=true;var bK=z.mouseUp(bz,bs,bq,bp);bs=bK.element;bI=bK.keep;break;case"pathedit":bI=true;bs=null;z.mouseUp(bz);break;case"textedit":bI=false;bs=null;L.mouseUp(bz,bq,bp);break;case"rotate":bI=true;bs=null;a1="select";var bx=bc.finishUndoableChange();if(!bx.isEmpty()){aT(bx)}aY();break;default:break}var bH=aI("mouseUp",{event:bz,mouse_x:bq,mouse_y:bp},true);$.each(bH,function(bL,bM){if(bM){bI=bM.keep||bI;bs=bM.element;aG=bM.started||aG}});if(!bI&&bs!=null){bs.parentNode.removeChild(bs);bs=null;var by=bz.target;while(by.parentNode.parentNode.tagName=="g"){by=by.parentNode}if((a1!="path"||current_path_pts.length==0)&&by.parentNode.id!="selectorParentGroup"&&by.id!="svgcanvas"&&by.id!="svgroot"){a5([by],true);bc.setMode("select")}}else{if(bs!=null){bc.addedNew=true;var bJ=0.2,br;if(N.beginElement&&bs.getAttribute("opacity")!=aN.opacity){br=$(N).clone().attr({to:aN.opacity,dur:bJ}).appendTo(bs);br[0].beginElement()}else{bJ=0}setTimeout(function(){if(br){br.remove()}bs.setAttribute("opacity",aN.opacity);bs.setAttribute("style","pointer-events:inherit");ar(bs);if(a1=="path"){z.toEditMode(bs)}else{if(a1=="text"||a1=="image"||a1=="foreignObject"){a5([bs],true)}}aT(new a(bs));call("changed",[bs])},bJ*1000)}}aj=null};var bi=function(bp){bp.preventDefault();return false};$(aL).mousedown(bj).mousemove(bo).click(bi);$(window).mouseup(bk);$(aL).bind("mousewheel DOMMouseScroll",function(bq){if(!bq.shiftKey){return}bq.preventDefault();p=ai.getScreenCTM().inverse();var bp=P(bq.pageX,bq.pageY,p);var br={x:bp.x,y:bp.y,width:0,height:0};if(bq.wheelDelta){if(bq.wheelDelta>=120){br.factor=2}else{if(bq.wheelDelta<=-120){br.factor=0.5}}}else{if(bq.detail){if(bq.detail>0){br.factor=0.5}else{if(bq.detail<0){br.factor=2}}}}if(!br.factor){return}call("zoomed",br)})}());var aV=function(bg){$(bg).click(function(bh){bh.preventDefault()})};var L=bc.textActions=function(){var bp,bt;var bv;var bl;var bs;var bm;var bA=[];var bB,bu;var bw;var bi,bg;var bj;function bC(bD){var bE=(bv.value==="");if(!arguments.length){if(bE){bD=0}else{if(bv.selectionEnd!==bv.selectionStart){return}bD=bv.selectionEnd}}var bF;bF=bA[bD];if(!bE){bv.setSelectionRange(bD,bD)}bl=b("text_cursor");if(!bl){bl=document.createElementNS(aK,"line");az(bl,{id:"text_cursor",stroke:"#333","stroke-width":1});bl=b("selectorParentGroup").appendChild(bl)}if(!bm){bm=setInterval(function(){var bI=(bl.getAttribute("display")==="none");bl.setAttribute("display",bI?"inline":"none")},600)}var bH=bq(bF.x,bB.y);var bG=bq(bF.x,(bB.y+bB.height));az(bl,{x1:bH.x,y1:bH.y,x2:bG.x,y2:bG.y,visibility:"visible",display:"inline"});if(bs){bs.setAttribute("d","")}}function bn(bD,bG,bF){if(bD===bG){bC(bG);return}if(!bF){bv.setSelectionRange(bD,bG)}bs=b("text_selectblock");if(!bs){bs=document.createElementNS(aK,"path");az(bs,{id:"text_selectblock",fill:"green",opacity:0.5,style:"pointer-events:none"});b("selectorParentGroup").appendChild(bs)}var bJ=bA[bD];var bK=bA[bG];bl.setAttribute("visibility","hidden");var bM=bq(bJ.x,bB.y),bI=bq(bJ.x+(bK.x-bJ.x),bB.y),bE=bq(bJ.x,bB.y+bB.height),bL=bq(bJ.x+(bK.x-bJ.x),bB.y+bB.height);var bH="M"+bM.x+","+bM.y+" L"+bI.x+","+bI.y+" "+bL.x+","+bL.y+" "+bE.x+","+bE.y+"z";az(bs,{d:bH,display:"inline"})}function bo(bE,bD){var bG=G.createSVGPoint();bG.x=bE;bG.y=bD;if(bA.length==1){return 0}var bI=bp.getCharNumAtPosition(bG);if(bI<0){bI=bA.length-2;if(bE<=bA[0].x){bI=0}}else{if(bI>=bA.length-2){bI=bA.length-2}}var bH=bA[bI];var bF=bH.x+(bH.width/2);if(bE>bF){bI++}return bI}function by(bE,bD){bC(bo(bE,bD))}function bx(bD,bJ,bF){var bH=bv.selectionStart;var bG=bo(bD,bJ);var bI=Math.min(bH,bG);var bE=Math.max(bH,bG);bn(bI,bE,!bF)}function br(bG,bE){var bD={x:bG,y:bE};bD.x/=ac;bD.y/=ac;if(bw){var bF=P(bD.x,bD.y,bw.inverse());bD.x=bF.x;bD.y=bF.y}return bD}function bq(bG,bE){var bD={x:bG,y:bE};if(bw){var bF=P(bD.x,bD.y,bw);bD.x=bF.x;bD.y=bF.y}bD.x*=ac;bD.y*=ac;return bD}function bh(){if(bl){bl.setAttribute("visibility","hidden")}}function bz(bD){bn(0,bp.textContent.length);$(this).unbind(bD)}function bk(bK){if(!bj){return}var bL=P(bK.pageX,bK.pageY,p),bI=bL.x*ac,bG=bL.y*ac;var bM=br(bI,bG);var bF=bo(bM.x,bM.y);var bH=bp.textContent;var bE=bH.substr(0,bF).replace(/[a-z0-9]+$/i,"").length;var bD=bH.substr(bF).match(/^[a-z0-9]+/i);var bJ=(bD?bD[0].length:0)+bF;bn(bE,bJ);$(bK.target).click(bz);setTimeout(function(){$(bK.target).unbind("click",bz)},300)}return{select:function(bE,bD,bF){if(bt==bE){bp=bE;L.toEditMode(bD,bF)}else{bt=bE}},start:function(bD){bp=bD;L.toEditMode()},mouseDown:function(bE,bG,bF,bD){var bH=br(bF,bD);bv.focus();by(bH.x,bH.y);bi=bF;bg=bD},mouseMove:function(bE,bD){var bF=br(bE,bD);bx(bF.x,bF.y)},mouseUp:function(bF,bE,bD){var bG=br(bE,bD);bx(bG.x,bG.y,true);if(bi===bE&&bg===bD&&bF.target!==bp){L.toSelectMode(true)}},setCursor:bC,toEditMode:function(bD,bF){bj=false;a1="textedit";F.requestSelector(bp).showGrips(false);L.init();$(bp).css("cursor","text");if(!arguments.length){bC()}else{var bE=br(bD,bF);by(bE.x,bE.y)}setTimeout(function(){bj=true},300)},toSelectMode:function(bD){a1="select";clearInterval(bm);bm=null;if(bs){$(bs).attr("display","none")}if(bl){$(bl).attr("visibility","hidden")}$(bp).css("cursor","move");if(bD){aZ();$(bp).css("cursor","move");call("selected",[bp]);a5([bp],true)}if(bp&&!bp.textContent.length){bc.deleteSelectedElements()}$(bv).blur();bp=false},setInputElem:function(bD){bv=bD;$(bv).blur(bh)},clear:function(){bt=null;if(a1=="textedit"){L.toSelectMode()}},init:function(bH){if(!bp){return}if(!bp.parentNode){bp=aR[0];F.requestSelector(bp).showGrips(false)}var bI=bp.textContent;var bE=bI.length;var bD=bp.getAttribute("transform");bB=au(bp);bw=bD?B(bp):null;bA=Array(bE);bv.focus();$(bp).unbind("dblclick",bk).dblclick(bk);if(!bE){var bF={x:bB.x+(bB.width/2),width:0}}for(var bG=0;bG<bE;bG++){var bJ=bp.getStartPositionOfChar(bG);var bF=bp.getEndPositionOfChar(bG);bA[bG]={x:bJ.x,y:bB.y,width:bF.x-bJ.x,height:bB.height}}bA.push({x:bF.x,width:0});bn(bv.selectionStart,bv.selectionEnd,true)}}}();var z=this.pathActions=function(){var bg=false;var bz={};var bv;var bt;var bl={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"]};function bE(){return bt}function bm(bG){bG.setAttribute("d",z.convertPath(bG))}function bq(bL,bN,bI){var bM=bL.pathSegList;if(a0.pathInsertItemBefore){bM.insertItemBefore(bN,bI);return}var bH=bM.numberOfItems;var bG=[];for(var bK=0;bK<bH;bK++){var bJ=bM.getItem(bK);bG.push(bJ)}bM.clear();for(var bK=0;bK<bH;bK++){if(bK==bI){bM.appendItem(bN)}bM.appendItem(bG[bK])}}function bp(bL,bI){var bH=bl[bL],bG=bH.length;var bJ=Array(bG);for(var bK=0;bK<bG;bK++){bJ[bK]=bI[bH[bK]]}return bJ}function bo(){var bH=b("pathpointgrip_container");if(!bH){var bG=b("selectorParentGroup");bH=bG.appendChild(document.createElementNS(aK,"g"));bH.id="pathpointgrip_container"}return bH}var br=function(bI,bG,bL){var bK=bo();var bJ=b("pathpointgrip_"+bI);if(!bJ){bJ=document.createElementNS(aK,"circle");az(bJ,{id:"pathpointgrip_"+bI,display:"none",r:4,fill:"#0FF",stroke:"#00F","stroke-width":2,cursor:"move",style:"pointer-events:all","xlink:title":aB.pathNodeTooltip});bJ=bK.appendChild(bJ);var bH=$("#pathpointgrip_"+bI);bH.dblclick(function(){if(bt){bt.setSegType()}})}if(bG&&bL){az(bJ,{cx:bG,cy:bL,display:"inline"})}return bJ};var bA=function(bG,bK){var bH=bG.index;var bI=br(bH);if(bK){var bJ=bk(bG);az(bI,{cx:bJ.x,cy:bJ.y,display:"inline"})}return bI};var bw=function(bI,bH){var bL=bI.index;var bM=b("segline_"+bL);if(!bM){var bK=bo();bM=document.createElementNS(aK,"path");az(bM,{id:"segline_"+bL,display:"none",fill:"none",stroke:"#0FF","stroke-width":2,style:"pointer-events:none",d:"M0,0 0,0"});bK.appendChild(bM)}if(bH){var bG=bI.prev;if(!bG){bM.setAttribute("display","none");return bM}var bO=bk(bG);bj(2,0,[bO.x,bO.y],bM);var bN=bp(bI.type,bI.item,true);for(var bJ=0;bJ<bN.length;bJ+=2){var bO=bk(bI,{x:bN[bJ],y:bN[bJ+1]});bN[bJ]=bO.x;bN[bJ+1]=bO.y}bj(bI.type,1,bN,bM)}return bM};var bh=function(bK){var bQ=bK.item;var bO=bK.index;if(!("x1" in bQ)||!("x2" in bQ)){return null}var bM={};var bN=bo();var bH=bt.segs[bO-1].item;var bJ=[bH,bQ];for(var bL=1;bL<3;bL++){var bG=bO+"c"+bL;var bS=bM["c"+bL+"_line"]=b("ctrlLine_"+bG);if(!bS){bS=document.createElementNS(aK,"line");az(bS,{id:"ctrlLine_"+bG,stroke:"#555","stroke-width":1,style:"pointer-events:none"});bN.appendChild(bS)}var bR=bk(bK,{x:bQ["x"+bL],y:bQ["y"+bL]});var bI=bk(bK,{x:bJ[bL-1].x,y:bJ[bL-1].y});az(bS,{x1:bR.x,y1:bR.y,x2:bI.x,y2:bI.y,display:"inline"});bM["c"+bL+"_line"]=bS;var bP=bM["c"+bL]=b("ctrlpointgrip_"+bG);if(!bP){bP=document.createElementNS(aK,"circle");az(bP,{id:"ctrlpointgrip_"+bG,display:"none",r:4,fill:"#0FF",stroke:"#55F","stroke-width":1,cursor:"move",style:"pointer-events:all","xlink:title":aB.pathCtrlPtTooltip});bN.appendChild(bP)}az(bP,{cx:bR.x,cy:bR.y,display:"inline"});bM["c"+bL]=bP}return bM};function bk(bG,bK){var bH={x:bK?bK.x:bG.item.x,y:bK?bK.y:bG.item.y},bJ=bG.path;if(bJ.matrix){var bI=P(bH.x,bH.y,bJ.matrix);bH=bI}bH.x*=ac;bH.y*=ac;return bH}function by(bI,bH){var bG={x:bI.x,y:bI.y};if(bH.matrix){var bI=P(bG.x,bG.y,bH.imatrix);bG.x=bI.x;bG.y=bI.y}bG.x/=ac;bG.y/=ac;return bG}function bu(bH,bJ){var bI=this;bI.index=bH;bI.selected=false;bI.type=bJ.pathSegType;var bG;bI.addGrip=function(){bG=bI.ptgrip=bA(bI,true);bI.ctrlpts=bh(bI,true);bI.segsel=bw(bI,true)};bI.item=bJ;bI.show=function(bK){if(bG){bG.setAttribute("display",bK?"inline":"none");bI.segsel.setAttribute("display",bK?"inline":"none");bI.showCtrlPts(bK)}};bI.select=function(bK){if(bG){bG.setAttribute("stroke",bK?"#0FF":"#00F");bI.segsel.setAttribute("display",bK?"inline":"none");if(bI.ctrlpts){bI.selectCtrls(bK)}bI.selected=bK}};bI.selectCtrls=function(bK){$("#ctrlpointgrip_"+bI.index+"c1, #ctrlpointgrip_"+bI.index+"c2").attr("fill",bK?"#0FF":"#EEE")};bI.update=function(bK){bJ=bI.item;if(bG){var bL=bk(bI);az(bG,{cx:bL.x,cy:bL.y});bw(bI,true);if(bI.ctrlpts){if(bK){bI.item=bt.elem.pathSegList.getItem(bI.index);bI.type=bI.item.pathSegType}bh(bI)}}};bI.move=function(bM,bL){var bO=bI.item;var bR=bI;if(bR.ctrlpts){var bK=[bO.x+=bM,bO.y+=bL,bO.x1,bO.y1,bO.x2+=bM,bO.y2+=bL]}else{var bK=[bO.x+=bM,bO.y+=bL]}bj(bR.type,bR.index,bK);if(bI.next&&bI.next.ctrlpts){var bN=bI.next.item;var bP=[bN.x,bN.y,bN.x1+=bM,bN.y1+=bL,bN.x2,bN.y2];bj(bI.next.type,bI.next.index,bP)}if(bI.mate){var bO=bI.mate.item;var bQ=[bO.x+=bM,bO.y+=bL];bj(bI.mate.type,bI.mate.index,bQ)}bI.update(true);if(bI.next){bI.next.update(true)}};bI.setLinked=function(bL){var bK,bP,bN;if(bL==2){bP=1;bK=bI.next;if(!bK){return}bN=bI.item}else{bP=2;bK=bI.prev;if(!bK){return}bN=bK.item}var bM=bK.item;bM["x"+bP]=bN.x+(bN.x-bI.item["x"+bL]);bM["y"+bP]=bN.y+(bN.y-bI.item["y"+bL]);var bO=[bM.x,bM.y,bM.x1,bM.y1,bM.x2,bM.y2];bj(bK.type,bK.index,bO);bK.update(true)};bI.moveCtrl=function(bM,bL,bK){var bN=bI.item;bN["x"+bM]+=bL;bN["y"+bM]+=bK;var bO=[bN.x,bN.y,bN.x1,bN.y1,bN.x2,bN.y2];bj(bI.type,bI.index,bO);bI.update(true)};bI.setType=function(bL,bK){bj(bL,bH,bK);bI.type=bL;bI.item=bt.elem.pathSegList.getItem(bH);bI.showCtrlPts(bL===6);bI.ctrlpts=bh(bI);bI.update(true)};bI.showCtrlPts=function(bL){if(bI.ctrlpts){for(var bK in bI.ctrlpts){bI.ctrlpts[bK].setAttribute("display",bL?"inline":"none")}}}}function bC(bG){if(!bG||bG.tagName!=="path"){return false}var bH=bt=this;this.elem=bG;this.segs=[];this.selected_pts=[];this.init=function(){$(bo()).find("*").attr("display","none");var bL=bG.pathSegList;var bR=bL.numberOfItems;bH.segs=[];bH.selected_pts=[];bH.first_seg=null;for(var bO=0;bO<bR;bO++){var bS=bL.getItem(bO);var bP=new bu(bO,bS);bP.path=bH;bH.segs.push(bP)}var bJ=bH.segs;var bQ=null;for(var bO=0;bO<bR;bO++){var bN=bJ[bO];var bM=(bO+1)>=bR?null:bJ[bO+1];var bI=(bO-1)<0?null:bJ[bO-1];if(bN.type===2){if(bI&&bI.type!==1){var bK=bJ[bQ];bK.next=bJ[bQ+1];bK.next.prev=bK;bK.addGrip()}bQ=bO}else{if(bM&&bM.type===1){bN.next=bJ[bQ+1];bN.next.prev=bN;bN.mate=bJ[bQ];bN.addGrip();if(bH.first_seg==null){bH.first_seg=bN}}else{if(!bM){if(bN.type!==1){var bK=bJ[bQ];bK.next=bJ[bQ+1];bK.next.prev=bK;bK.addGrip();bN.addGrip();if(!bH.first_seg){bH.first_seg=bJ[bQ]}}}else{if(bN.type!==1){bN.addGrip();if(bM&&bM.type!==2){bN.next=bM;bN.next.prev=bN}}}}}}return bH};this.init();this.update=function(){if(aq(bH.elem)){bH.matrix=B(bt.elem);bH.imatrix=bH.matrix.inverse()}bH.eachSeg(function(bI){this.item=bG.pathSegList.getItem(bI);this.update()});return bH};this.eachSeg=function(bL){var bI=bH.segs.length;for(var bK=0;bK<bI;bK++){var bJ=bL.call(bH.segs[bK],bK);if(bJ===false){break}}};this.addSeg=function(bT){var bS=bH.segs[bT];if(!bS.prev){return}var bP=bS.prev;var bO;switch(bS.item.pathSegType){case 4:var bV=(bS.item.x+bP.item.x)/2;var bU=(bS.item.y+bP.item.y)/2;bO=bG.createSVGPathSegLinetoAbs(bV,bU);break;case 6:var bX=(bP.item.x+bS.item.x1)/2;var bN=(bS.item.x1+bS.item.x2)/2;var bR=(bS.item.x2+bS.item.x)/2;var bM=(bX+bN)/2;var bK=(bN+bR)/2;var bV=(bM+bK)/2;var bW=(bP.item.y+bS.item.y1)/2;var bL=(bS.item.y1+bS.item.y2)/2;var bQ=(bS.item.y2+bS.item.y)/2;var bJ=(bW+bL)/2;var bI=(bL+bQ)/2;var bU=(bJ+bI)/2;bO=bG.createSVGPathSegCurvetoCubicAbs(bV,bU,bX,bW,bM,bJ);var bY=[bS.item.x,bS.item.y,bK,bI,bR,bQ];bj(bS.type,bT,bY);break}bq(bG,bO,bT)};this.deleteSeg=function(bJ){var bI=bH.segs[bJ];var bM=bG.pathSegList;bI.show(false);var bK=bI.next;if(bI.mate){var bN=[bK.item.x,bK.item.y];bj(2,bK.index,bN);bj(4,bI.index,bN);bM.removeItem(bI.mate.index)}else{if(!bI.prev){var bL=bI.item;var bN=[bK.item.x,bK.item.y];bj(2,bI.next.index,bN);bM.removeItem(bJ)}else{bM.removeItem(bJ)}}};this.endChanges=function(bJ){if(aC){bm(bH.elem)}var bI=new av(bG,{d:bH.last_d},bJ);aT(bI);call("changed",[bG])};this.subpathIsClosed=function(bJ){var bI=false;bt.eachSeg(function(bK){if(bK<=bJ){return true}if(this.type===2){return false}else{if(this.type===1){bI=true;return false}}});return bI};this.addPtsToSelection=function(bK){if(!$.isArray(bK)){bK=[bK]}for(var bL=0;bL<bK.length;bL++){var bJ=bK[bL];var bI=bH.segs[bJ];if(bI.ptgrip){if($.inArray(bJ,bH.selected_pts)==-1&&bJ>=0){bH.selected_pts.push(bJ)}}}bH.selected_pts.sort();var bL=bH.selected_pts.length,bN=new Array(bL);while(bL--){var bM=bH.selected_pts[bL];var bI=bH.segs[bM];bI.select(true);bN[bL]=bI.ptgrip}z.canDeleteNodes=true;z.closed_subpath=bH.subpathIsClosed(bH.selected_pts[0]);call("selected",bN)};this.removePtFromSelection=function(bI){var bJ=$.inArray(bI,bH.selected_pts);if(bJ==-1){return}bH.segs[bI].select(false);bH.selected_pts.splice(bJ,1)};this.clearSelection=function(){bH.eachSeg(function(bI){this.select(false)});bH.selected_pts=[]};this.selectPt=function(bJ,bI){bH.clearSelection();if(bJ==null){bH.eachSeg(function(bK){if(this.prev){bJ=bK}})}bH.addPtsToSelection(bJ);if(bI){bH.dragctrl=bI;if(bs){bH.segs[bJ].setLinked(bI)}}};this.storeD=function(){this.last_d=bG.getAttribute("d")};this.show=function(bI){bH.eachSeg(function(){this.show(bI)});if(bI){bH.selectPt(bH.first_seg.index)}return bH};this.movePts=function(bL,bK){var bJ=bH.selected_pts.length;while(bJ--){var bI=bH.segs[bH.selected_pts[bJ]];bI.move(bL,bK)}};this.moveCtrl=function(bK,bJ){var bI=bH.segs[bH.selected_pts[0]];bI.moveCtrl(bH.dragctrl,bK,bJ);if(bs){bI.setLinked(bH.dragctrl)}};this.setSegType=function(bP){bH.storeD();var bY=bH.selected_pts.length;var bU;while(bY--){var bW=bH.selected_pts[bY];var bJ=bH.segs[bW];var bV=bJ.prev;if(!bV){continue}if(!bP){bU="Toggle Path Segment Type";var bT=bJ.type;bP=(bT==6)?4:6}bP=bP-0;var bQ=bJ.item.x;var bO=bJ.item.y;var bL=bV.item.x;var bK=bV.item.y;var bX;switch(bP){case 6:if(bJ.olditem){var bI=bJ.olditem;bX=[bQ,bO,bI.x1,bI.y1,bI.x2,bI.y2]}else{var bS=bQ-bL;var bR=bO-bK;var bN=(bL+(bS/3));var bM=(bK+(bR/3));var b0=(bQ-(bS/3));var bZ=(bO-(bR/3));bX=[bQ,bO,bN,bM,b0,bZ]}break;case 4:bX=[bQ,bO];bJ.olditem=bJ.item;break}bJ.setType(bP,bX)}bt.endChanges(bU);return}}function bi(bG){var bH=bz[bG.id];if(!bH){bH=bz[bG.id]=new bC(bG)}return bH}var bx=[],bv=null,bD=[],bs=false,bB=false;var bn=function(bJ){var bP=bJ.points;var bN=bP.numberOfItems;if(bN>=4){var bH=bP.getItem(0),bL=null;var bO=[];bO.push(["M",bH.x,",",bH.y," C"].join(""));for(var bK=1;bK<=(bN-4);bK+=3){var bG=bP.getItem(bK);var bS=bP.getItem(bK+1);var bI=bP.getItem(bK+2);if(bL){var bQ=X(bL,bG,bH);if(bQ&&bQ.length==2){var bM=bO[bO.length-1].split(",");bM[2]=bQ[0].x;bM[3]=bQ[0].y;bO[bO.length-1]=bM.join(",");bG=bQ[1]}}bO.push([bG.x,bG.y,bS.x,bS.y,bI.x,bI.y].join(","));bH=bI;bL=bS}bO.push("L");for(;bK<bN;++bK){var bR=bP.getItem(bK);bO.push([bR.x,bR.y].join(","))}bO=bO.join(" ");bJ=c({element:"path",curStyles:true,attr:{id:C(),d:bO,fill:"none"}});call("changed",[bJ])}return bJ};var bj=function(bP,bO,bQ,bG){var bR=bG||bE().elem;var bH="createSVGPathSeg"+bx[bP];var bK=bR[bH].apply(bR,bQ);if(a0.pathReplaceItem){bR.pathSegList.replaceItem(bK,bO)}else{var bI=bR.pathSegList;var bN=bI.numberOfItems;var bM=[];for(var bL=0;bL<bN;bL++){var bJ=bI.getItem(bL);bM.push(bJ)}bI.clear();for(var bL=0;bL<bN;bL++){if(bL==bO){bI.appendItem(bK)}else{bI.appendItem(bM[bL])}}}};var bF=function(){var bR=bt.elem;var bW=aq(bR,true);if(!bW){return}u[0]=bt.oldbbox;var bM=au(bR),bQ=u[0],bH=bQ.x+bQ.width/2,bG=bQ.y+bQ.height/2,b0=bM.x+bM.width/2,bY=bM.y+bM.height/2,bO=b0-bH,bN=bY-bG,bP=Math.sqrt(bO*bO+bN*bN),bK=Math.atan2(bN,bO)+bW;b0=bP*Math.cos(bK)+bH;bY=bP*Math.sin(bK)+bG;var bU=function(b1,b2){bO=b1-bH;bN=b2-bG;bP=Math.sqrt(bO*bO+bN*bN);bK=Math.atan2(bN,bO)+bW;bO=bP*Math.cos(bK)+bH;bN=bP*Math.sin(bK)+bG;bO-=b0;bN-=bY;bP=Math.sqrt(bO*bO+bN*bN);bK=Math.atan2(bN,bO)-bW;return{x:(bP*Math.cos(bK)+b0)/1,y:(bP*Math.sin(bK)+bY)/1}};var bX=bR.pathSegList,bT=bX.numberOfItems;while(bT){bT-=1;var bV=bX.getItem(bT),bJ=bV.pathSegType;if(bJ==1){continue}var bZ=bU(bV.x,bV.y),bS=[bZ.x,bZ.y];if(bV.x1!=null&&bV.x2!=null){c_vals1=bU(bV.x1,bV.y1);c_vals2=bU(bV.x2,bV.y2);bS.splice(bS.length,0,c_vals1.x,c_vals1.y,c_vals2.x,c_vals2.y)}bj(bJ,bT,bS)}bM=au(bR);u[0].x=bM.x;u[0].y=bM.y;u[0].width=bM.width;u[0].height=bM.height;var bI=G.createSVGTransform(),bL=aQ(bR);bI.setRotate((bW*180/Math.PI),b0,bY);bL.replaceItem(bI,0)};return{init:function(){bx=[0,"ClosePath"];var bG=["Moveto","Lineto","CurvetoCubic","CurvetoQuadratic","Arc","LinetoHorizontal","LinetoVertical","CurvetoCubicSmooth","CurvetoQuadraticSmooth"];$.each(bG,function(bH,bI){bx.push(bI+"Abs");bx.push(bI+"Rel")})},getPath:function(){return bt},mouseDown:function(bO,bI,bN,bM){if(a1=="path"){return}if(!bt){return}bt.storeD();var bG=bO.target.id;if(bG.substr(0,14)=="pathpointgrip_"){var bH=bt.cur_pt=parseInt(bG.substr(14));bt.dragging=[bN,bM];var bL=bt.segs[bH];if(!bO.shiftKey){if(bt.selected_pts.length<=1||!bL.selected){bt.clearSelection()}bt.addPtsToSelection(bH)}else{if(bL.selected){bt.removePtFromSelection(bH)}else{bt.addPtsToSelection(bH)}}}else{if(bG.indexOf("ctrlpointgrip_")==0){bt.dragging=[bN,bM];var bK=bG.split("_")[1].split("c");var bH=bK[0]-0;var bJ=bK[1]-0;bt.selectPt(bH,bJ)}}if(!bt.dragging){if(j==null){j=F.getRubberBandBox()}az(j,{x:bN*ac,y:bM*ac,width:0,height:0,display:"inline"},100)}},mouseMove:function(bJ,bG){bB=true;if(a1=="path"){var bI=b("path_stretch_line");if(bI){bI.setAttribute("x2",bJ);bI.setAttribute("y2",bG)}return}if(bt.dragging){var bM=by({x:bt.dragging[0],y:bt.dragging[1]},bt);var bH=by({x:bJ,y:bG},bt);var bL=bH.x-bM.x;var bK=bH.y-bM.y;bt.dragging=[bJ,bG];if(bt.dragctrl){bt.moveCtrl(bL,bK)}else{bt.movePts(bL,bK)}}else{bt.selected_pts=[];bt.eachSeg(function(bP){var bN=this;if(!bN.next&&!bN.prev){return}var bQ=bN.item;var bO=j.getBBox();var bT=bk(bN);var bS={x:bT.x,y:bT.y,width:0,height:0};var bR=aw.rectsIntersect(bO,bS);this.select(bR);if(bR){bt.selected_pts.push(bN.index)}})}},mouseUp:function(bR,bI,bH,bG){if(a1=="path"){var bO=bH/ac,bN=bG/ac,bJ=b("path_stretch_line");if(!bJ){bJ=document.createElementNS(aK,"line");az(bJ,{id:"path_stretch_line",stroke:"#22C","stroke-width":"0.5"});bJ=b("selectorParentGroup").appendChild(bJ)}bJ.setAttribute("display","inline");var b1=null;if(bD.length==0){bD.push(bO);bD.push(bN);d_attr="M"+bO+","+bN+" ";c({element:"path",curStyles:true,attr:{d:d_attr,id:a7(),opacity:aN.opacity/2,}});az(bJ,{x1:bH,y1:bG,x2:bH,y2:bG});var bL=bg?bt.segs.length:0;br(bL,bH,bG)}else{var bX=bD.length;var bK=6/ac;var bW=false;while(bX){bX-=2;var bS=bD[bX],bQ=bD[bX+1];if(bO>=(bS-bK)&&bO<=(bS+bK)&&bN>=(bQ-bK)&&bN<=(bQ+bK)){bW=true;break}}var bU=C();if(bU in bz){delete bz[bU]}var b0=b(bU);var bZ=bD.length;if(bW){if(bX==0&&bZ>=6){var b3=bD[0];var b2=bD[1];d_attr+=["L",b3,",",b2,"z"].join("");b0.setAttribute("d",d_attr)}else{if(bZ<3){b1=false;return b1}}$(bJ).remove();bI=b0;bD=[];aG=false;if(bg){if(bt.matrix){D(b0,{},bt.matrix.inverse())}var b4=b0.getAttribute("d");var bY=$(bt.elem).attr("d");$(bt.elem).attr("d",bY+b4);$(b0).remove();if(bt.matrix){bF()}bt.init();z.toEditMode(bt.elem);bt.selectPt();return false}}else{if(!$.contains(aL,Z(bR))){console.log("Clicked outside canvas");return false}var bV=bD[bZ-2],bT=bD[bZ-1];if(bR.shiftKey){var bP=aw.snapToAngle(bV,bT,bO,bN);bO=bP.x;bN=bP.y}bD.push(bO);bD.push(bN);d_attr+="L"+Q(bO)+","+Q(bN)+" ";b0.setAttribute("d",d_attr);bO*=ac;bN*=ac;az(bJ,{x1:bO,y1:bN,x2:bO,y2:bN});var bL=(bD.length/2-1);if(bg){bL+=bt.segs.length}br(bL,bO,bN)}b1=true}return{keep:b1,element:bI}}if(bt.dragging){var bM=bt.cur_pt;bt.dragging=false;bt.dragctrl=false;bt.update();if(bB){bt.endChanges("Move path point(s)")}if(!bR.shiftKey&&!bB){bt.selectPt(bM)}}else{if(j&&j.getAttribute("display")!="none"){j.setAttribute("display","none");if(j.getAttribute("width")<=2&&j.getAttribute("height")<=2){z.toSelectMode(bR.target)}}else{z.toSelectMode(bR.target)}}bB=false},clearData:function(){bz={}},toEditMode:function(bG){bt=bi(bG);a1="pathedit";aZ();bt.show(true).update();bt.oldbbox=au(bt.elem);bg=false},toSelectMode:function(bG){var bH=(bG==bt.elem);a1="select";bt.show(false);bv=false;aZ();if(bt.matrix){bF()}if(bH){call("selected",[bG]);a5([bG],true)}},addSubPath:function(bG){if(bG){a1="path";bg=true}else{z.clear(true);z.toEditMode(bt.elem)}},select:function(bG){if(bv==bG){z.toEditMode(bG);a1="pathedit"}else{bv=bG}},reorient:function(){var bI=aR[0];if(!bI){return}var bJ=aq(bI);if(bJ==0){return}var bG=new aA("Reorient path");var bH={d:bI.getAttribute("d"),transform:bI.getAttribute("transform")};bG.addSubCommand(new av(bI,bH));aZ();this.resetOrientation(bI);aT(bG);bi(bI).show(false).matrix=null;this.clear();a5([bI],true);call("changed",aR)},clear:function(bG){bv=null;if(a1=="path"&&bD.length>0){var bH=b(C());$(b("path_stretch_line")).remove();$(bH).remove();$(b("pathpointgrip_container")).find("*").attr("display","none");bD=[];aG=false}else{if(a1=="pathedit"){this.toSelectMode()}}if(bt){bt.init().show(false)}},resetOrientation:function(bO){if(bO==null||bO.nodeName!="path"){return false}var bK=aQ(bO);var bG=s(bK).matrix;bK.clear();bO.removeAttribute("transform");var bH=bO.pathSegList;var bL=bH.numberOfItems;for(var bJ=0;bJ<bL;++bJ){var bI=bH.getItem(bJ);var bM=bI.pathSegType;if(bM==1){continue}var bN=[];$.each(["",1,2],function(bQ,bT){var bP=bI["x"+bT],bS=bI["y"+bT];if(bP&&bS){var bR=P(bP,bS,bG);bN.splice(bN.length,0,bR.x,bR.y)}});bj(bM,bJ,bN,bO)}},zoomChange:function(){if(a1=="pathedit"){bt.update()}},getNodePoint:function(){var bH=bt.selected_pts.length?bt.selected_pts[0]:1;var bG=bt.segs[bH];return{x:bG.item.x,y:bG.item.y,type:bG.type}},linkControlPoints:function(bG){bs=bG},clonePathNode:function(){bt.storeD();var bH=bt.selected_pts;var bG=bt.segs;var bI=bH.length;var bK=[];while(bI--){var bJ=bH[bI];bt.addSeg(bJ);bK.push(bJ+bI);bK.push(bJ+bI+1)}bt.init().addPtsToSelection(bK);bt.endChanges("Clone path node(s)")},opencloseSubPath:function(){var bG=bt.selected_pts;if(bG.length!==1){return}var bJ=bt.elem;var bQ=bJ.pathSegList;var bP=bQ.numberOfItems;var bO=bG[0];var bR=null;var bI=null;bt.eachSeg(function(bW){if(this.type===2&&bW<=bO){bI=this.item}if(bW<=bO){return true}if(this.type===2){bR=bW;return false}else{if(this.type===1){bR=false;return false}}});if(bR==null){bR=bt.segs.length-1}if(bR!==false){var bK=bJ.createSVGPathSegLinetoAbs(bI.x,bI.y);var bT=bJ.createSVGPathSegClosePath();if(bR==bt.segs.length-1){bQ.appendItem(bK);bQ.appendItem(bT)}else{bq(bJ,bT,bR);bq(bJ,bK,bR)}bt.init().selectPt(bR+1);return}var bL=bt.segs[bO];if(bL.mate){bQ.removeItem(bO);bQ.removeItem(bO);bt.init().selectPt(bO-1);return}var bH,bV;for(var bM=0;bM<bQ.numberOfItems;bM++){var bS=bQ.getItem(bM);if(bS.pathSegType===2){bH=bM}else{if(bM===bO){bQ.removeItem(bH)}else{if(bS.pathSegType===1&&bO<bM){bV=bM-1;bQ.removeItem(bM);break}}}}var bN=(bO-bH)-1;while(bN--){bq(bJ,bQ.getItem(bH),bV)}var bU=bQ.getItem(bH);bj(2,bH,[bU.x,bU.y]);var bM=bO;bt.init().selectPt(0)},deletePathNode:function(){if(!z.canDeleteNodes){return}bt.storeD();var bG=bt.selected_pts;var bH=bG.length;while(bH--){var bK=bG[bH];bt.deleteSeg(bK)}var bI=function(){var bN=bt.elem.pathSegList;var bM=bN.numberOfItems;var bL=function(bT,bS){while(bS--){bN.removeItem(bT)}};if(bM<=1){return true}while(bM--){var bQ=bN.getItem(bM);if(bQ.pathSegType===1){var bP=bN.getItem(bM-1);var bO=bN.getItem(bM-2);if(bP.pathSegType===2){bL(bM-1,2);bI();break}else{if(bO.pathSegType===2){bL(bM-2,3);bI();break}}}else{if(bQ.pathSegType===2){if(bM>0){var bR=bN.getItem(bM-1).pathSegType;if(bR===2){bL(bM-1,1);bI();break}else{if(bR===1&&bN.numberOfItems-1===bM){bL(bM,1);bI();break}}}}}}return false};bI();if(bt.elem.pathSegList.numberOfItems<=1){z.toSelectMode(bt.elem);bc.deleteSelectedElements();return}bt.init();bt.clearSelection();if(window.opera){var bJ=$(bt.elem);bJ.attr("d",bJ.attr("d"))}bt.endChanges("Delete path node(s)")},smoothPolylineIntoPath:bn,setSegType:function(bG){bt.setSegType(bG)},moveNode:function(bG,bK){var bI=bt.selected_pts;if(!bI.length){return}bt.storeD();var bH=bt.segs[bI[0]];var bJ={x:0,y:0};bJ[bG]=bK-bH.item[bG];bH.move(bJ.x,bJ.y);bt.endChanges("Move path point")},fixEnd:function(bM){var bI=bM.pathSegList;var bH=bI.numberOfItems;var bG;for(var bJ=0;bJ<bH;++bJ){var bL=bI.getItem(bJ);if(bL.pathSegType===2){bG=bL}if(bL.pathSegType===1){var bK=bI.getItem(bJ-1);if(bK.x!=bG.x||bK.y!=bG.y){var bN=bM.createSVGPathSegLinetoAbs(bG.x,bG.y);bq(bM,bN,bJ);z.fixEnd(bM);break}}}if(aC){bm(bM)}},convertPath:function(bP,bO){var bG=bP.pathSegList;var bT=bG.numberOfItems;var bR=0,bQ=0;var bX="";var bL=null;for(var bS=0;bS<bT;++bS){var bV=bG.getItem(bS);var bN=bV.x||0,bM=bV.y||0,bW=bV.x1||0,bI=bV.y1||0,bU=bV.x2||0,bH=bV.y2||0;var bJ=bV.pathSegType;var bY=E[bJ]["to"+(bO?"Lower":"Upper")+"Case"]();var bK=function(bZ,b0,b1){var b2="";var b0=b0?" "+b0.join(" "):"";var b1=b1?a3(b1):"";$.each(bZ,function(b3,b4){bZ[b3]=a3(b4)});bX+=bY+bZ.join(" ")+b0+b1};switch(bJ){case 1:bX+="z";break;case 12:bN-=bR;case 13:if(bO){bR+=bN}else{bN+=bR;bR=bN}bK([[bN]]);break;case 14:bM-=bQ;case 15:if(bO){bQ+=bM}else{bM+=bQ;bQ=bM}bK([[bM]]);break;case 2:case 4:case 18:bN-=bR;bM-=bQ;case 5:case 3:if(bL&&bG.getItem(bS-1).pathSegType===1&&!bO){bR=bL[0];bQ=bL[1]}case 19:if(bO){bR+=bN;bQ+=bM}else{bN+=bR;bM+=bQ;bR=bN;bQ=bM}if(bJ===3){bL=[bR,bQ]}bK([[bN,bM]]);break;case 6:bN-=bR;bW-=bR;bU-=bR;bM-=bQ;bI-=bQ;bH-=bQ;case 7:if(bO){bR+=bN;bQ+=bM}else{bN+=bR;bW+=bR;bU+=bR;bM+=bQ;bI+=bQ;bH+=bQ;bR=bN;bQ=bM}bK([[bW,bI],[bU,bH],[bN,bM]]);break;case 8:bN-=bR;bW-=bR;bM-=bQ;bI-=bQ;case 9:if(bO){bR+=bN;bQ+=bM}else{bN+=bR;bW+=bR;bM+=bQ;bI+=bQ;bR=bN;bQ=bM}bK([[bW,bI],[bN,bM]]);break;case 10:bN-=bR;bM-=bQ;case 11:if(bO){bR+=bN;bQ+=bM}else{bN+=bR;bM+=bQ;bR=bN;bQ=bM}bK([[bV.r1,bV.r2]],[bV.angle,(bV.largeArcFlag?1:0),(bV.sweepFlag?1:0)],[bN,bM]);break;case 16:bN-=bR;bU-=bR;bM-=bQ;bH-=bQ;case 17:if(bO){bR+=bN;bQ+=bM}else{bN+=bR;bU+=bR;bM+=bQ;bH+=bQ;bR=bN;bQ=bM}bK([[bU,bH],[bN,bM]]);break}}return bX}}}();z.init();var v=this.removeUnusedDefElems=function(){var bp=ai.getElementsByTagNameNS(aK,"defs");if(!bp||!bp.length){return 0}var bt=[],br=0;var bu=["fill","stroke","filter","marker-start","marker-mid","marker-end"];var bn=bu.length;var bv=ai.getElementsByTagNameNS(aK,"*");var bi=bv.length;for(var bq=0;bq<bi;bq++){var bk=bv[bq];for(var bo=0;bo<bn;bo++){var bl=ak(bk.getAttribute(bu[bo]));if(bl){bt.push(bl.substr(1))}}var bg=bk.getAttributeNS(aE,"href");if(bg&&bg.indexOf("#")==0){bt.push(bg.substr(1))}}var bm=$(ai).find("linearGradient, radialGradient, filter, marker");defelem_ids=[],bq=bm.length;while(bq--){var bs=bm[bq];var bh=bs.id;if($.inArray(bh,bt)==-1){bs.parentNode.removeChild(bs);br++}}var bq=bp.length;while(bq--){var bj=bp[bq];if(!bj.getElementsByTagNameNS(aK,"*").length){bj.parentNode.removeChild(bj)}}return br};var i=this.svgCanvasToString=function(){while(v()>0){}z.clear(true);$.each(ai.childNodes,function(bh,bi){if(bh&&bi.nodeType==8&&bi.data.indexOf("Created with")!=-1){ai.insertBefore(bi,ai.firstChild)}});var bg=aU(ai,0);return bg};var aU=this.svgToString=function(bi,bh){var bj=new Array(),bn=aw.toXml;if(bi){ar(bi);var bu=bi.attributes,bq,bl,bs=bi.childNodes;for(var bl=0;bl<bh;bl++){bj.push(" ")}bj.push("<");bj.push(bi.nodeName);if(bi.id=="svgcontent"){var br=d();bj.push(' width="'+br.w+'" height="'+br.h+'" xmlns="'+aK+'"');var bm={};$(bi).find("*").andSelf().each(function(){var bv=this;$.each(this.attributes,function(bx,bw){var by=bw.namespaceURI;if(by&&!bm[by]&&am[by]!=="xmlns"&&am[by]!=="xml"){bm[by]=true;bj.push(" xmlns:"+am[by]+'="'+by+'"')}})});var bl=bu.length;while(bl--){bq=bu.item(bl);var bp=bn(bq.nodeValue);if(bq.nodeName.indexOf("xmlns:")===0){continue}if(bp!=""&&$.inArray(bq.localName,["width","height","xmlns","x","y","viewBox","id","overflow"])==-1){if(!bq.namespaceURI||am[bq.namespaceURI]){bj.push(" ");bj.push(bq.nodeName);bj.push('="');bj.push(bp);bj.push('"')}}}}else{for(var bl=bu.length-1;bl>=0;bl--){bq=bu.item(bl);var bp=bn(bq.nodeValue);if($.inArray(bq.localName,["-moz-math-font-style","_moz-math-font-style"])!==-1){continue}if(bp!=""){if(bp.indexOf("pointer-events")==0){continue}if(bq.localName=="class"&&bp.indexOf("se_")==0){continue}bj.push(" ");if(bq.localName=="d"){bp=z.convertPath(bi,true)}if(!isNaN(bp)){bp=a3(bp)}if(ah.apply&&bi.nodeName=="image"&&bq.localName=="href"&&ah.images&&ah.images=="embed"){var bk=aX[bp];if(bk){bp=bk}}if(!bq.namespaceURI||bq.namespaceURI==aK||am[bq.namespaceURI]){bj.push(bq.nodeName);bj.push('="');bj.push(bp);bj.push('"')}}}}if(bi.hasChildNodes()){bj.push(">");bh++;var bo=false;for(var bl=0;bl<bs.length;bl++){var bg=bs.item(bl);switch(bg.nodeType){case 1:bj.push("\n");bj.push(aU(bs.item(bl),bh));break;case 3:var bt=bg.nodeValue.replace(/^\s+|\s+$/g,"");if(bt!=""){bo=true;bj.push(bn(bt)+"")}break;case 8:bj.push("\n");bj.push(new Array(bh+1).join(" "));bj.push("<!--");bj.push(bg.data);bj.push("-->");break}}bh--;if(!bo){bj.push("\n");for(var bl=0;bl<bh;bl++){bj.push(" ")}}bj.push("</");bj.push(bi.nodeName);bj.push(">")}else{bj.push("/>")}}return bj.join("")};this.embedImage=function(bg,bh){$(new Image()).load(function(){var bi=document.createElement("canvas");bi.width=this.width;bi.height=this.height;bi.getContext("2d").drawImage(this,0,0);try{var bj=";svgedit_url="+encodeURIComponent(bg);bj=bi.toDataURL().replace(";base64",bj+";base64");aX[bg]=bj}catch(bk){aX[bg]=false}ad=bg;if(bh){bh(aX[bg])}}).attr("src",bg)};this.setGoodImage=function(bg){ad=bg};this.open=function(){};this.save=function(bg){aZ();if(bg){$.extend(ah,bg)}ah.apply=true;var bh=i();call("saved",bh)};this.rasterExport=function(){aZ();var bh=[];var bg={feGaussianBlur:aB.exportNoBlur,image:aB.exportNoImage,foreignObject:aB.exportNoforeignObject,"[stroke-dasharray]":aB.exportNoDashArray};var bi=$(ai);if(!("font" in $("<canvas>")[0].getContext("2d"))){bg.text=aB.exportNoText}$.each(bg,function(bk,bl){if(bi.find(bk).length){bh.push(bl)}});var bj=i();call("exported",{svg:bj,issues:bh})};this.getSvgString=function(){ah.apply=false;return i()};this.randomizeIds=function(){if(arguments.length>0&&arguments[0]==false){q=false;if(e.Arrows){call("unsetarrownonce")}}else{q=true;if(!ai.getAttributeNS(al,"nonce")){ai.setAttributeNS(al,"se:nonce",m);if(e.Arrows){call("setarrownonce",m)}}}};this.setSvgString=function(bk){try{var bn=aw.text2xml(bk);M(bn.documentElement);var bg=new aA("Change Source");var bj=G.removeChild(ai);bg.addSubCommand(new R(bj,G));ai=G.appendChild(aM.importNode(bn.documentElement,true));n=ai.getAttributeNS(al,"nonce");if(n){q=true;m=n;if(e.Arrows){call("setarrownonce",n)}}else{if(q){ai.setAttributeNS(bf,"xmlns:se",al);ai.setAttributeNS(al,"se:nonce",m);if(e.Arrows){call("setarrownonce",m)}}}$(ai).find("image").each(function(){var br=this;aV(br);var bs=this.getAttributeNS(aE,"href");if(bs.indexOf("data:")===0){var bp=bs.match(/svgedit_url=(.*?);/);if(bp){var bq=decodeURIComponent(bp[1]);$(new Image()).load(function(){br.setAttributeNS(aE,"xlink:href",bq)}).attr("src",bq)}}bc.embedImage(bs)});$(ai).find("linearGradient, radialGradient").each(function(){var bs=this;if($(bs).attr("gradientUnits")==="userSpaceOnUse"){var bp=$(ai).find("[fill=url(#"+bs.id+")],[stroke=url(#"+bs.id+")]");if(!bp.length){return}var br=bp[0].getBBox();if(bs.tagName==="linearGradient"){var bq=$(bs).attr(["x1","y1","x2","y2"]);$(bs).attr({x1:(bq.x1-br.x)/br.width,y1:(bq.y1-br.y)/br.height,x2:(bq.x2-br.x)/br.width,y2:(bq.y1-br.y)/br.height});bs.removeAttribute("gradientUnits")}else{}}});a9(ai,function(bq){try{l(bq)}catch(bp){console.log(bp)}});var bi=$(ai);var bo={id:"svgcontent",overflow:J.show_outside_canvas?"visible":"hidden"};if(bi.attr("viewBox")){var bl=bi.attr("viewBox").split(" ");bo.width=bl[2];bo.height=bl[3]}else{$.each(["width","height"],function(bp,bq){var br=bi.attr(bq)||100;if((br+"").substr(-1)==="%"){bo[bq]=parseInt(br)}else{bo[bq]=a2(bq,br)}})}bi.attr(bo);this.contentW=bo.width;this.contentH=bo.height;bg.addSubCommand(new a(ai));var bm=bi.attr(["width","height"]);bg.addSubCommand(new av(G,bm));ac=1;Y();T={};aZ();z.clearData();G.appendChild(F.selectorParentGroup);aT(bg);call("changed",[ai])}catch(bh){console.log(bh);return false}return true};this.importSvgString=function(bp){try{var bz=aw.text2xml(bp);M(bz.documentElement);var bn=new aA("Change Source");var bh=aM.importNode(bz.documentElement,true);if(V){var bj=bh.getAttribute("width"),bo=bh.getAttribute("height"),bk=bh.getAttribute("viewBox"),bi=bk?bk.split(" "):[0,0,bj,bo];for(var bw=0;bw<4;++bw){bi[bw]=Number(bi[bw])}var br=Number(ai.getAttribute("width")),bC=Number(ai.getAttribute("height"));if(bo>bj){var bg="scale("+(bC/3)/bi[3]+")"}else{var bg="scale("+(bC/3)/bi[2]+")"}bg="translate(0) "+bg+" translate(0)";var by=aM.createElementNS(aK,"g");while(bh.hasChildNodes()){by.appendChild(bh.firstChild)}if(bg){by.setAttribute("transform",bg)}var bu={};at(by,function(bF){if(bF.nodeType==1){if(bF.id){if(!(bF.id in bu)){bu[bF.id]={elem:null,attrs:[],hrefs:[]}}bu[bF.id]["elem"]=bF}$.each(["clip-path","fill","filter","marker-end","marker-mid","marker-start","mask","stroke"],function(bI,bG){var bK=bF.getAttributeNode(bG);if(bK){var bH=ak(bK.value),bJ=bH?bH.substr(1):null;if(bJ){if(!(bJ in bu)){bu[bJ]={elem:null,attrs:[],hrefs:[]}}bu[bJ]["attrs"].push(bK)}}});var bD=bF.getAttributeNS(aE,"href");if(bD&&$.inArray(bF.nodeName,["filter","linearGradient","pattern","radialGradient","textPath","use"])!=-1){var bE=bD.substr(1);if(!(bE in bu)){bu[bE]={elem:null,attrs:[],hrefs:[]}}bu[bE]["hrefs"].push(bF)}}});for(var bm in bu){var bB=bu[bm]["elem"];if(bB){var bl=a7();a4++;bB.id=bl;var bq=bu[bm]["attrs"];var bw=bq.length;while(bw--){var bt=bq[bw];bt.ownerElement.setAttribute(bt.name,"url(#"+bl+")")}var bx=bu[bm]["hrefs"];var bv=bx.length;while(bv--){var bs=bx[bv];bs.setAttributeNS(aE,"xlink:href","#"+bl)}}}by.id=a7();a4++;V.appendChild(by)}a9(ai,function(bE){try{l(bE)}catch(bD){console.log(bD)}});bn.addSubCommand(new a(ai));T={};aZ();aT(bn);call("changed",[ai])}catch(bA){console.log(bA);return false}return true};var Y=function(){aS=[];var bo=ai.childNodes.length;var bi=[],bp=[];for(var bl=0;bl<bo;++bl){var bh=ai.childNodes.item(bl);if(bh&&bh.nodeType==1){if(bh.tagName=="g"){var bg=$("title",bh).text();if(!bg&&k&&bh.querySelectorAll){bg=$(bh.querySelectorAll("title")).text()}if(bg){bp.push(bg);aS.push([bg,bh]);V=bh;at(bh,function(bq){bq.setAttribute("style","pointer-events:inherit")});V.setAttribute("style","pointer-events:none")}else{bi.push(bh)}}else{if(au(bh)&&bh.nodeName!="defs"){var bn=au(bh);bi.push(bh)}}}}if(bi.length>0){var bl=1;while($.inArray(("Layer "+bl),bp)!=-1){bl++}var bj="Layer "+bl;V=aM.createElementNS(aK,"g");var bm=aM.createElementNS(aK,"title");bm.textContent=bj;V.appendChild(bm);for(var bk=0;bk<bi.length;++bk){V.appendChild(bi[bk])}V=ai.appendChild(V);aS.push([bj,V])}at(V,function(bq){bq.setAttribute("style","pointer-events:inherit")});V.setAttribute("style","pointer-events:all")};this.createLayer=function(bi){var bh=new aA("Create Layer");var bg=aM.createElementNS(aK,"g");var bj=aM.createElementNS(aK,"title");bj.textContent=bi;bg.appendChild(bj);bg=ai.appendChild(bg);bh.addSubCommand(new a(bg));aT(bh);aZ();Y();bc.setCurrentLayer(bi);call("changed",[bg])};this.deleteCurrentLayer=function(){if(V&&aS.length>1){var bg=new aA("Delete Layer");var bh=V.parentNode;bg.addSubCommand(new R(V,bh));bh.removeChild(V);aT(bg);aZ();Y();bc.setCurrentLayer(aS[aS.length-1][0]);call("changed",[ai]);return true}return false};this.getNumLayers=function(){return aS.length};this.getLayer=function(bg){if(bg>=0&&bg<bc.getNumLayers()){return aS[bg][0]}return""};this.getCurrentLayer=function(){for(var bg=0;bg<aS.length;++bg){if(aS[bg][1]==V){return aS[bg][0]}}return""};this.setCurrentLayer=function(bg){bg=aw.toXml(bg);for(var bh=0;bh<aS.length;++bh){if(bg==aS[bh][0]){if(V!=aS[bh][1]){aZ();V.setAttribute("style","pointer-events:none");V=aS[bh][1];V.setAttribute("style","pointer-events:all")}return true}}return false};this.renameCurrentLayer=function(bk){if(V){var bh=V;if(!bc.setCurrentLayer(bk)){var bi=new aA("Rename Layer");for(var bj=0;bj<aS.length;++bj){if(aS[bj][1]==bh){break}}var bl=aS[bj][0];aS[bj][0]=aw.toXml(bk);var bg=bh.childNodes.length;for(var bj=0;bj<bg;++bj){var bm=bh.childNodes.item(bj);if(bm&&bm.tagName=="title"){while(bm.firstChild){bm.removeChild(bm.firstChild)}bm.textContent=bk;bi.addSubCommand(new av(bm,{"#text":bl}));aT(bi);call("changed",[bh]);return true}}}V=bh}return false};this.setCurrentLayerPosition=function(bi){if(V&&bi>=0&&bi<aS.length){for(var bg=0;bg<aS.length;++bg){if(aS[bg][1]==V){break}}if(bg==aS.length){return false}if(bg!=bi){var bj=null;var bh=V.nextSibling;if(bi>bg){if(bi<aS.length-1){bj=aS[bi+1][1]}}else{bj=aS[bi][1]}ai.insertBefore(V,bj);aT(new S(V,bh,ai));Y();bc.setCurrentLayer(aS[bi][0]);return true}}return false};this.getLayerVisibility=function(bi){var bh=null;for(var bg=0;bg<aS.length;++bg){if(aS[bg][0]==bi){bh=aS[bg][1];break}}if(!bh){return false}return(bh.getAttribute("display")!="none")};this.setLayerVisibility=function(bj,bg){var bi=null;for(var bh=0;bh<aS.length;++bh){if(aS[bh][0]==bj){bi=aS[bh][1];break}}if(!bi){return false}var bk=bi.getAttribute("display");if(!bk){bk="inline"}bi.setAttribute("display",bg?"inline":"none");aT(new av(bi,{display:bk},"Layer Visibility"));if(bi==V){aZ();z.clear()}return true};this.moveSelectedToLayer=function(bm){var bk=null;for(var bj=0;bj<aS.length;++bj){if(aS[bj][0]==bm){bk=aS[bj][1];break}}if(!bk){return false}var bi=new aA("Move Elements to Layer");var bh=aR;var bj=bh.length;while(bj--){var bl=bh[bj];if(!bl){continue}var bn=bl.nextSibling;var bg=bl.parentNode;bk.appendChild(bl);bi.addSubCommand(new S(bl,bn,bg))}aT(bi);return true};this.getLayerOpacity=function(bj){for(var bh=0;bh<aS.length;++bh){if(aS[bh][0]==bj){var bi=aS[bh][1];var bg=bi.getAttribute("opacity");if(!bg){bg="1.0"}return parseFloat(bg)}}return null};this.setLayerOpacity=function(bj,bg){if(bg<0||bg>1){return}for(var bh=0;bh<aS.length;++bh){if(aS[bh][0]==bj){var bi=aS[bh][1];bi.setAttribute("opacity",bg);break}}};this.clear=function(){z.clear();var bh=ai.childNodes;var bg=ai.childNodes.length;var bi=0;aZ();for(var bj=0;bj<bg;bj++){if(bh[bi].nodeType==1){ai.removeChild(bh[bi])}else{bi++}}aS=[];bc.createLayer("Layer 1");aJ();F.initGroup();j=F.getRubberBandBox();call("cleared")};this.linkControlPoints=z.linkControlPoints;this.getContentElem=function(){return ai};this.getRootElem=function(){return G};this.getSelectedElems=function(){return aR};var d=this.getResolution=function(){return{w:ai.getAttribute("width")/ac,h:ai.getAttribute("height")/ac,zoom:ac}};this.getZoom=function(){return ac};this.getVersion=function(){return"svgcanvas.js ($Rev: 1738 $)"};this.setUiStrings=function(bg){$.extend(aB,bg)};this.setConfig=function(bg){$.extend(J,bg)};this.getDocumentTitle=function(){var bh=ai.childNodes;for(var bg=0;bg<bh.length;bg++){if(bh[bg].nodeName=="title"){return bh[bg].textContent}}return""};this.setDocumentTitle=function(bj){var bk=ai.childNodes,bl=false,bi="";var bg=new aA("Change Image Title");for(var bh=0;bh<bk.length;bh++){if(bk[bh].nodeName=="title"){bl=bk[bh];bi=bl.textContent;break}}if(!bl){bl=aM.createElementNS(aK,"title");ai.insertBefore(bl,ai.firstChild)}if(bj.length){bl.textContent=bj}else{bl.parentNode.removeChild(bl)}bg.addSubCommand(new av(bl,{"#text":bi}));aT(bg)};this.getEditorNS=function(bg){if(bg){ai.setAttribute("xmlns:se",al)}return al};this.setResolution=function(bn,bm){var bl=d();var bo=bl.w,bi=bl.h;var bh;if(bn=="fit"){var bp=ag();if(bp){bh=new aA("Fit Canvas to Content");var bj=aO();a5(bj);var br=[],bq=[];$.each(bj,function(bs,bt){br.push(bp.x*-1);bq.push(bp.y*-1)});var bg=bc.moveSelectedElements(br,bq,true);bh.addSubCommand(bg);aZ();bn=Math.round(bp.width);bm=Math.round(bp.height)}else{return false}}if(bn!=bo||bm!=bi){var bk=G.suspendRedraw(1000);if(!bh){bh=new aA("Change Image Dimensions")}bn=a2("width",bn);bm=a2("height",bm);ai.setAttribute("width",bn);ai.setAttribute("height",bm);this.contentW=bn;this.contentH=bm;bh.addSubCommand(new av(ai,{width:bo,height:bi}));ai.setAttribute("viewBox",[0,0,bn/ac,bm/ac].join(" "));bh.addSubCommand(new av(ai,{viewBox:["0 0",bo,bi].join(" ")}));aT(bh);G.unsuspendRedraw(bk);call("changed",[ai])}return true};this.getOffset=function(){return $(ai).attr(["x","y"])};this.setBBoxZoom=function(bh,bo,bi){var bn=0.85;var bm;var bk=function(bs){if(!bs){return false}var br=Math.round((bo/bs.width)*100*bn)/100;var bp=Math.round((bi/bs.height)*100*bn)/100;var bq=Math.min(br,bp);bc.setZoom(bq);return{zoom:bq,bbox:bs}};if(typeof bh=="object"){bm=bh;if(bm.width==0||bm.height==0){var bg=bm.zoom?bm.zoom:ac*bm.factor;bc.setZoom(bg);return{zoom:ac,bbox:bm}}return bk(bm)}switch(bh){case"selection":if(!aR[0]){return}var bj=$.map(aR,function(bp){if(bp){return bp}});bm=ag(bj);break;case"canvas":var bl=d();bn=0.95;bm={width:bl.w,height:bl.h,x:0,y:0};break;case"content":bm=ag();break;case"layer":bm=ag(aO(V));break;default:return}return bk(bm)};this.setZoom=function(bg){var bh=d();ai.setAttribute("viewBox","0 0 "+bh.w/bg+" "+bh.h/bg);ac=bg;$.each(aR,function(bi,bj){if(!bj){return}F.requestSelector(bj).resize()});z.zoomChange();aI("zoomChanged",bg)};this.getMode=function(){return a1};this.setMode=function(bg){z.clear(true);L.clear();r=(aR[0]&&aR[0].nodeName=="text")?a6:aN;a1=bg};this.getColor=function(bg){return r[bg]};this.setColor=function(bj,bl,bh){aN[bj]=bl;r[bj+"_paint"]={type:"solidColor"};var bg=[];var bi=aR.length;while(bi--){var bk=aR[bi];if(bk){if(bk.tagName=="g"){at(bk,function(bm){if(bm.nodeName!="g"){bg.push(bm)}})}else{if(bj=="fill"){if(bk.tagName!="polyline"&&bk.tagName!="line"){bg.push(bk)}}else{bg.push(bk)}}}}if(bg.length>0){if(!bh){A(bj,bl,bg);call("changed",bg)}else{o(bj,bl,bg)}}};var aD=function(){var bg=ai.getElementsByTagNameNS(aK,"defs");if(bg.length>0){bg=bg[0]}else{bg=ai.insertBefore(aM.createElementNS(aK,"defs"),ai.firstChild.nextSibling)}return bg};var ae=this.setGradient=function(bh){if(!r[bh+"_paint"]||r[bh+"_paint"].type=="solidColor"){return}var bk=bc[bh+"Grad"];var bj=t(bk);var bg=aD();if(!bj){var bi=bk;bk=bg.appendChild(aM.importNode(bk,true));bk.id=a7()}else{bk=bj}bc.setColor(bh,"url(#"+bk.id+")")};var t=function(bo){var bk=aD();var bq=$(bk).find("linearGradient, radialGradient");var bl=bq.length;var bh=["r","cx","cy","fx","fy"];while(bl--){var bs=bq[bl];if(bo.tagName=="linearGradient"){if(bo.getAttribute("x1")!=bs.getAttribute("x1")||bo.getAttribute("y1")!=bs.getAttribute("y1")||bo.getAttribute("x2")!=bs.getAttribute("x2")||bo.getAttribute("y2")!=bs.getAttribute("y2")){continue}}else{var bi=$(bo).attr(bh);var bp=$(bs).attr(bh);var bn=false;$.each(bh,function(bv,bu){if(bi[bu]!=bp[bu]){bn=true}});if(bn){continue}}var br=bo.getElementsByTagNameNS(aK,"stop");var bt=bs.getElementsByTagNameNS(aK,"stop");if(br.length!=bt.length){continue}var bj=br.length;while(bj--){var bm=br[bj];var bg=bt[bj];if(bm.getAttribute("offset")!=bg.getAttribute("offset")||bm.getAttribute("stop-opacity")!=bg.getAttribute("stop-opacity")||bm.getAttribute("stop-color")!=bg.getAttribute("stop-color")){break}}if(bj==-1){return bs}}return null};this.setPaint=function(bg,bi){var bh=new $.jGraduate.Paint(bi);this.setPaintOpacity(bg,bh.alpha/100,true);r[bg+"_paint"]=bh;switch(bh.type){case"solidColor":this.setColor(bg,bh.solidColor!="none"?"#"+bh.solidColor:"none");break;case"linearGradient":case"radialGradient":bc[bg+"Grad"]=bh[bh.type];ae(bg);break;default:}};this.getStrokeWidth=function(){return r.stroke_width};this.setStrokeWidth=function(bj){if(bj==0&&$.inArray(a1,["line","path"])!=-1){bc.setStrokeWidth(1);return}r.stroke_width=bj;var bg=[];var bh=aR.length;while(bh--){var bi=aR[bh];if(bi){if(bi.tagName=="g"){at(bi,function(bk){if(bk.nodeName!="g"){bg.push(bk)}})}else{bg.push(bi)}}}if(bg.length>0){A("stroke-width",bj,bg);call("changed",aR)}};this.setStrokeAttr=function(bg,bk){aN[bg.replace("-","_")]=bk;var bh=[];var bi=aR.length;while(bi--){var bj=aR[bi];if(bj){if(bj.tagName=="g"){at(bj,function(bl){if(bl.nodeName!="g"){bh.push(bl)}})}else{bh.push(bj)}}}if(bh.length>0){A(bg,bk,bh);call("changed",aR)}};this.getOpacity=function(){return aN.opacity};this.setOpacity=function(bg){aN.opacity=bg;A("opacity",bg)};this.getFillOpacity=function(){return aN.fill_opacity};this.getStrokeOpacity=function(){return aN.stroke_opacity};this.setPaintOpacity=function(bh,bi,bg){aN[bh+"_opacity"]=bi;if(!bg){A(bh+"-opacity",bi)}else{o(bh+"-opacity",bi)}};this.getBlur=function(bg){var bj=0;if(bg){var bh=bg.getAttribute("filter");if(bh){var bi=b(bg.id+"_blur");if(bi){bj=bi.firstChild.getAttribute("stdDeviation")}}}return bj};(function(){var bi=null;var bj=null;var bg=false;bc.setBlurNoUndo=function(bk){if(!bj){bc.setBlur(bk);return}if(bk===0){o("filter","");bg=true}else{if(bg){o("filter","url(#"+aR[0].id+"_blur)")}o("stdDeviation",bk,[bj.firstChild]);bc.setBlurOffsets(bj,bk)}};function bh(){var bk=bc.finishUndoableChange();bi.addSubCommand(bk);aT(bi);bi=null;bj=null}bc.setBlurOffsets=function(bk,bl){if(bl>3){az(bk,{x:"-50%",y:"-50%",width:"200%",height:"200%",},100)}else{bk.removeAttribute("x");bk.removeAttribute("y");bk.removeAttribute("width");bk.removeAttribute("height")}};bc.setBlur=function(bp,bl){if(bi){bh();return}var bo=aR[0];var bk=bo.id;bj=b(bk+"_blur");bp-=0;var bm=new aA();if(bj){if(bp===0){bj=null}}else{var bq=c({element:"feGaussianBlur",attr:{"in":"SourceGraphic",stdDeviation:bp}});bj=c({element:"filter",attr:{id:bk+"_blur"}});bj.appendChild(bq);aD().appendChild(bj);bm.addSubCommand(new a(bj))}var bn={filter:bo.getAttribute("filter")};if(bp===0){bo.removeAttribute("filter");bm.addSubCommand(new av(bo,bn));return}else{A("filter","url(#"+bk+"_blur)");bm.addSubCommand(new av(bo,bn));bc.setBlurOffsets(bj,bp)}bi=bm;bc.beginUndoableChange("stdDeviation",[bj?bj.firstChild:null]);if(bl){bc.setBlurNoUndo(bp);bh()}}}());this.getBold=function(){var bg=aR[0];if(bg!=null&&bg.tagName=="text"&&aR[1]==null){return(bg.getAttribute("font-weight")=="bold")}return false};this.setBold=function(bg){var bh=aR[0];if(bh!=null&&bh.tagName=="text"&&aR[1]==null){A("font-weight",bg?"bold":"normal")}};this.getItalic=function(){var bg=aR[0];if(bg!=null&&bg.tagName=="text"&&aR[1]==null){return(bg.getAttribute("font-style")=="italic")}return false};this.setItalic=function(bg){var bh=aR[0];if(bh!=null&&bh.tagName=="text"&&aR[1]==null){A("font-style",bg?"italic":"normal")}};this.getFontFamily=function(){return a6.font_family};this.setFontFamily=function(bg){a6.font_family=bg;A("font-family",bg)};this.getFontSize=function(){return a6.font_size};this.setFontSize=function(bg){a6.font_size=bg;L.toSelectMode();A("font-size",bg)};this.getText=function(){var bg=aR[0];if(bg==null){return""}return bg.textContent};this.setTextContent=function(bg){A("#text",bg);L.init(bg);L.setCursor()};this.setImageURL=function(bl){var bk=aR[0];if(!bk){return}var bi=$(bk).attr(["width","height"]);var bg=(!bi.width||!bi.height);var bj=bk.getAttributeNS(aE,"href");if(bj!==bl){bg=true}else{if(!bg){return}}var bh=new aA("Change Image URL");bk.setAttributeNS(aE,"xlink:href",bl);bh.addSubCommand(new av(bk,{"#href":bj}));if(bg){$(new Image()).load(function(){var bm=$(bk).attr(["width","height"]);$(bk).attr({width:this.width,height:this.height});F.requestSelector(bk).resize();bh.addSubCommand(new av(bk,bm));aT(bh);call("changed",bk)}).attr("src",bl)}else{aT(bh)}};this.setRectRadius=function(bi){var bg=aR[0];if(bg!=null&&bg.tagName=="rect"){var bh=bg.getAttribute("rx");if(bh!=bi){bg.setAttribute("rx",bi);bg.setAttribute("ry",bi);aT(new av(bg,{rx:bh,ry:bh},"Radius"));call("changed",[bg])}}};this.setSegType=function(bg){z.setSegType(bg)};this.convertToPath=function(bz,bA){if(bz==null){var bF=aR;$.each(aR,function(bG,bH){if(bH){bc.convertToPath(bH)}});return}if(!bA){var bs=new aA("Convert element to Path")}var bw=bA?{}:{fill:aN.fill,"fill-opacity":aN.fill_opacity,stroke:aN.stroke,"stroke-width":aN.stroke_width,"stroke-dasharray":aN.stroke_dasharray,"stroke-linejoin":aN.stroke_linejoin,"stroke-linecap":aN.stroke_linecap,"stroke-opacity":aN.stroke_opacity,opacity:aN.opacity,visibility:"hidden"};$.each(["marker-start","marker-end","marker-mid","filter","clip-path"],function(){if(bz.getAttribute(this)){bw[this]=bz.getAttribute(this)}});var bu=c({element:"path",attr:bw});var bD=bz.getAttribute("transform");if(bD){bu.setAttribute("transform",bD)}var bv=bz.id;var bp=bz.parentNode;if(bz.nextSibling){bp.insertBefore(bu,bz)}else{bp.appendChild(bu)}var bB="";var bl=function(bG){$.each(bG,function(bJ,bI){var bH=bI[0],bL=bI[1];bB+=bH;for(var bK=0;bK<bL.length;bK+=2){bB+=(bL[bK]+","+bL[bK+1])+" "}})};var bm=1.81;switch(bz.tagName){case"ellipse":case"circle":var bE=$(bz).attr(["rx","ry","cx","cy"]);var bh=bE.cx,bg=bE.cy,bj=bE.rx,bi=bE.ry;if(bz.tagName=="circle"){bj=bi=$(bz).attr("r")}bl([["M",[(bh-bj),(bg)]],["C",[(bh-bj),(bg-bi/bm),(bh-bj/bm),(bg-bi),(bh),(bg-bi)]],["C",[(bh+bj/bm),(bg-bi),(bh+bj),(bg-bi/bm),(bh+bj),(bg)]],["C",[(bh+bj),(bg+bi/bm),(bh+bj/bm),(bg+bi),(bh),(bg+bi)]],["C",[(bh-bj/bm),(bg+bi),(bh-bj),(bg+bi/bm),(bh-bj),(bg)]],["Z",[]]]);break;case"path":bB=bz.getAttribute("d");break;case"line":var bE=$(bz).attr(["x1","y1","x2","y2"]);bB="M"+bE.x1+","+bE.y1+"L"+bE.x2+","+bE.y2;break;case"polyline":case"polygon":bB="M"+bz.getAttribute("points");break;case"rect":var bt=$(bz).attr(["rx","ry"]);var bj=bt.rx,bi=bt.ry;var bC=bz.getBBox();var bq=bC.x,bo=bC.y,br=bC.width,bx=bC.height;var bm=4-bm;if(!bj&&!bi){bl([["M",[bq,bo]],["L",[bq+br,bo]],["L",[bq+br,bo+bx]],["L",[bq,bo+bx]],["L",[bq,bo]],["Z",[]]])}else{bl([["M",[bq,bo+bi]],["C",[bq,bo+bi/bm,bq+bj/bm,bo,bq+bj,bo]],["L",[bq+br-bj,bo]],["C",[bq+br-bj/bm,bo,bq+br,bo+bi/bm,bq+br,bo+bi]],["L",[bq+br,bo+bx-bi]],["C",[bq+br,bo+bx-bi/bm,bq+br-bj/bm,bo+bx,bq+br-bj,bo+bx]],["L",[bq+bj,bo+bx]],["C",[bq+bj/bm,bo+bx,bq,bo+bx-bi/bm,bq,bo+bx-bi]],["L",[bq,bo+bi]],["Z",[]]])}break;default:bu.parentNode.removeChild(bu);break}if(bB){bu.setAttribute("d",bB)}if(!bA){if(bD){var bn=aQ(bu);if(aP(bn)){z.resetOrientation(bu)}}bs.addSubCommand(new R(bz,bp));bs.addSubCommand(new a(bu));aZ();bz.parentNode.removeChild(bz);bu.setAttribute("id",bv);bu.removeAttribute("visibility");a5([bu],true);aT(bs)}else{z.resetOrientation(bu);var bk=false;try{bk=bu.getBBox()}catch(by){}bu.parentNode.removeChild(bu);return bk}};var o=function(br,bp,bz){var bw=G.suspendRedraw(1000);if(a1=="pathedit"){z.moveNode(br,bp)}var bz=bz||aR;var bt=bz.length;while(bt--){var bv=bz[bt];if(bv==null){continue}if(a1==="textedit"&&br!=="#text"){L.toSelectMode(bv)}if((br=="x"||br=="y")&&$.inArray(bv.tagName,["g","polyline","path"])!=-1){var bg=ag([bv]);var bm=br=="x"?bp-bg.x:0;var bl=br=="y"?bp-bg.y:0;bc.moveSelectedElements(bm*ac,bl*ac,true);continue}if(bv.tagName=="g"&&$.inArray(br,["transform","opacity","filter"])!==-1){}var bk=br=="#text"?bv.textContent:bv.getAttribute(br);if(bk==null){bk=""}if(bk!=String(bp)){if(br=="#text"){var bs=au(bv).width;bv.textContent=bp;bv=g(bv)}else{if(br=="#href"){bv.setAttributeNS(aE,"xlink:href",bp)}else{bv.setAttribute(br,bp)}}if(bt==0){u[bt]=au(bv)}if(bv.nodeName=="text"){if((bp+"").indexOf("url")==0||$.inArray(br,["font-size","font-family","x","y"])!=-1){bv=g(bv)}}if($.inArray(bv,aR)!=-1){setTimeout(function(){if(!bv.parentNode){return}F.requestSelector(bv).resize()},0)}var bu=aq(bv);if(bu!=0&&br!="transform"){var bn=aQ(bv);var bq=bn.numberOfItems;while(bq--){var bi=bn.getItem(bq);if(bi.type==4){bn.removeItem(bq);var bo=au(bv);var by=P(bo.x+bo.width/2,bo.y+bo.height/2,s(bn).matrix);var bj=by.x,bh=by.y;var bx=G.createSVGTransform();bx.setRotate(bu,bj,bh);bn.insertItemBefore(bx,bq);break}}}}}G.unsuspendRedraw(bw)};var A=this.changeSelectedAttribute=function(bg,bk,bi){var bi=bi||aR;bc.beginUndoableChange(bg,bi);var bj=bi.length;o(bg,bk,bi);var bh=bc.finishUndoableChange();if(!bh.isEmpty()){aT(bh)}};this.deleteSelectedElements=function(){var bi=new aA("Delete Elements");var bh=aR.length;var bg=[];for(var bk=0;bk<bh;++bk){var bm=aR[bk];if(bm==null){break}var bl=bm.parentNode;var bj=bm;F.releaseSelector(bj);var bn=bl.removeChild(bj);bg.push(bm);aR[bk]=null;bi.addSubCommand(new R(bn,bl))}if(!bi.isEmpty()){aT(bi)}call("changed",bg);aZ()};this.groupSelectedElements=function(){var bg=new aA("Group Elements");var bk=c({element:"g",attr:{id:a7()}});bg.addSubCommand(new a(bk));var bi=aR.length;while(bi--){var bj=aR[bi];if(bj==null){continue}var bl=bj.nextSibling;var bh=bj.parentNode;bk.appendChild(bj);bg.addSubCommand(new S(bj,bl,bh))}if(!bg.isEmpty()){aT(bg)}aZ();a5([bk],true)};this.ungroupSelectedElement=function(){var bO=aR[0];if(bO.tagName=="g"){var bg=new aA("Ungroup Elements");var bo=bO.parentNode;var bj=bO.previousSibling;var bv=new Array(bO.childNodes.length);var bI=bO.getAttribute("transform");var bp=aQ(bO);var bK=s(bp).matrix;var bN=0;var bB=aq(bO);var bw=$(bO).attr(["filter","opacity"]);var bM,bk;while(bO.firstChild){var bJ=bO.firstChild;var bC=bJ.nextSibling;var bE=bJ.parentNode;bv[bN++]=bJ=bo.insertBefore(bJ,bj);bg.addSubCommand(new S(bJ,bC,bE));if(bw.opacity!==null&&bw.opacity!==1){var bR=bJ.getAttribute("opacity")||1;var bl=Math.round((bJ.getAttribute("opacity")||1)*bw.opacity*100)/100;A("opacity",bl,[bJ])}if(bw.filter){var bq=this.getBlur(bJ);var bu=bq;if(!bk){bk=this.getBlur(bO)}if(bq){bq=(bk-0)+(bq-0)}else{if(bq===0){bq=bk}}if(!bu){if(!bM){bM=b(ak(bw.filter).substr(1))}else{bM=ap(bM);aD().appendChild(bM)}}else{bM=b(ak(bJ.getAttribute("filter")).substr(1))}var bL=(bM.firstChild.tagName==="feGaussianBlur")?"blur":"filter";bM.id=bJ.id+"_"+bL;A("filter","url(#"+bM.id+")",[bJ]);if(bq){A("stdDeviation",bq,[bM.firstChild]);bc.setBlurOffsets(bM,bq)}}var bD=aQ(bJ);if(bp.numberOfItems){if(bB&&bp.numberOfItems==1){var bh=bp.getItem(0).matrix;var bt=G.createSVGMatrix();var bA=aq(bJ);if(bA){bt=bD.getItem(0).matrix}var bH=au(bJ);var bP=s(bD).matrix;var bs=P(bH.x+bH.width/2,bH.y+bH.height/2,bP);var bF=bB+bA;var br=G.createSVGTransform();br.setRotate(bF,bs.x,bs.y);var bm=af(bh,bt,br.matrix.inverse());if(bA){bD.removeItem(0)}if(bF){bD.insertItemBefore(br,0)}if(bm.e||bm.f){var bQ=G.createSVGTransform();bQ.setTranslate(bm.e,bm.f);bD.insertItemBefore(bQ,0)}}else{var bx=bJ.getAttribute("transform");var by={};by.transform=bx?bx:"";var bi=G.createSVGTransform();var bz=s(bD).matrix,bG=bz.inverse();var bn=af(bG,bK,bz);bi.setMatrix(bn);bD.appendItem(bi)}bg.addSubCommand(l(bJ))}}if(bI){var by={};by.transform=bI;bO.setAttribute("transform","");bO.removeAttribute("transform");bg.addSubCommand(new av(bO,by))}aZ();bO=bo.removeChild(bO);bg.addSubCommand(new R(bO,bo));if(!bg.isEmpty()){aT(bg)}a5(bv)}};this.moveToTopSelectedElement=function(){var bi=aR[0];if(bi!=null){var bh=bi;var bg=bh.parentNode;var bj=bh.nextSibling;bh=bh.parentNode.appendChild(bh);aT(new S(bh,bj,bg,"top"))}};this.moveToBottomSelectedElement=function(){var bi=aR[0];if(bi!=null){var bh=bi;var bg=bh.parentNode;var bk=bh.nextSibling;var bj=bh.parentNode.firstChild;if(bj.tagName=="title"){bj=bj.nextSibling}if(bj.tagName=="defs"){bj=bj.nextSibling}bh=bh.parentNode.insertBefore(bh,bj);aT(new S(bh,bk,bg,"bottom"))}};this.moveSelectedElements=function(bo,bn,bl){if(bo.constructor!=Array){bo/=ac;bn/=ac}var bl=bl||true;var bh=new aA("position");var bj=aR.length;while(bj--){var bi=aR[bj];if(bi!=null){if(bj==0){u[bj]=au(bi)}var bm=G.createSVGTransform();var bk=aQ(bi);if(bo.constructor==Array){if(bj==0){u[bj].x+=bo[bj];u[bj].y+=bn[bj]}bm.setTranslate(bo[bj],bn[bj])}else{if(bj==0){u[bj].x+=bo;u[bj].y+=bn}bm.setTranslate(bo,bn)}bk.insertItemBefore(bm,0);var bg=l(bi);if(bg){bh.addSubCommand(bg)}F.requestSelector(bi).resize()}}if(!bh.isEmpty()){if(bl){aT(bh)}call("changed",aR);return bh}};this.cloneSelectedElements=function(){var bh=new aA("Clone Elements");var bg=aR.length;for(var bi=0;bi<bg;++bi){var bk=aR[bi];if(bk==null){break}}var bj=aR.slice(0,bi);this.clearSelection();var bi=bj.length;while(bi--){var bk=bj[bi]=ap(bj[bi]);V.appendChild(bk);bh.addSubCommand(new a(bk))}if(!bh.isEmpty()){a5(bj.reverse());this.moveSelectedElements(20,20,false);aT(bh);call("selected",aR)}};this.alignSelectedElements=function(bo,bu){var bj=[],bm=[];var bs=Number.MAX_VALUE,bn=Number.MIN_VALUE,bq=Number.MAX_VALUE,bl=Number.MIN_VALUE;var bp=Number.MIN_VALUE,bk=Number.MIN_VALUE;var bi=aR.length;if(!bi){return}for(var bh=0;bh<bi;++bh){if(aR[bh]==null){break}var bg=aR[bh];bj[bh]=ag([bg]);switch(bu){case"smallest":if((bo=="l"||bo=="c"||bo=="r")&&(bp==Number.MIN_VALUE||bp>bj[bh].width)||(bo=="t"||bo=="m"||bo=="b")&&(bk==Number.MIN_VALUE||bk>bj[bh].height)){bs=bj[bh].x;bq=bj[bh].y;bn=bj[bh].x+bj[bh].width;bl=bj[bh].y+bj[bh].height;bp=bj[bh].width;bk=bj[bh].height}break;case"largest":if((bo=="l"||bo=="c"||bo=="r")&&(bp==Number.MIN_VALUE||bp<bj[bh].width)||(bo=="t"||bo=="m"||bo=="b")&&(bk==Number.MIN_VALUE||bk<bj[bh].height)){bs=bj[bh].x;bq=bj[bh].y;bn=bj[bh].x+bj[bh].width;bl=bj[bh].y+bj[bh].height;bp=bj[bh].width;bk=bj[bh].height}break;default:if(bj[bh].x<bs){bs=bj[bh].x}if(bj[bh].y<bq){bq=bj[bh].y}if(bj[bh].x+bj[bh].width>bn){bn=bj[bh].x+bj[bh].width}if(bj[bh].y+bj[bh].height>bl){bl=bj[bh].y+bj[bh].height}break}}if(bu=="page"){bs=0;bq=0;bn=bc.contentW;bl=bc.contentH}var bv=new Array(bi);var bt=new Array(bi);for(var bh=0;bh<bi;++bh){if(aR[bh]==null){break}var bg=aR[bh];var br=bj[bh];bv[bh]=0;bt[bh]=0;switch(bo){case"l":bv[bh]=bs-br.x;break;case"c":bv[bh]=(bs+bn)/2-(br.x+br.width/2);break;case"r":bv[bh]=bn-(br.x+br.width);break;case"t":bt[bh]=bq-br.y;break;case"m":bt[bh]=(bq+bl)/2-(br.y+br.height/2);break;case"b":bt[bh]=bl-(br.y+br.height);break}}this.moveSelectedElements(bv,bt)};this.contentW=d().w;this.contentH=d().h;this.updateCanvas=function(bj,bl){G.setAttribute("width",bj);G.setAttribute("height",bl);var bk=$("#canvasBackground")[0];var bi=ai.getAttribute("x");var bn=ai.getAttribute("y");var bh=(bj/2-this.contentW*ac/2);var bm=(bl/2-this.contentH*ac/2);az(ai,{width:this.contentW*ac,height:this.contentH*ac,x:bh,y:bm,viewBox:"0 0 "+this.contentW+" "+this.contentH});az(bk,{width:ai.getAttribute("width"),height:ai.getAttribute("height"),x:bh,y:bm});F.selectorParentGroup.setAttribute("transform","translate("+bh+","+bm+")");return{x:bh,y:bm,old_x:bi,old_y:bn,d_x:bh-bi,d_y:bm-bn}};this.setBackground=function(bh,bj){var bk=b("canvasBackground");var bi=$(bk).find("rect")[0];var bl=b("background_image");bi.setAttribute("fill",bh);if(bj){if(!bl){bl=aM.createElementNS(aK,"image");az(bl,{id:"background_image",width:"100%",height:"100%",preserveAspectRatio:"xMinYMin",style:"pointer-events:none"})}bl.setAttributeNS(aE,"xlink:href",bj);bk.appendChild(bl)}else{if(bl){bl.parentNode.removeChild(bl)}}};this.cycleElement=function(bi){var bl=aR[0];var bj=false;var bk=aO(V);if(bl==null){var bg=bi?bk.length-1:0;bj=bk[bg]}else{var bh=bk.length;while(bh--){if(bk[bh]==bl){var bg=bi?bh-1:bh+1;if(bg>=bk.length){bg=0}else{if(bg<0){bg=bk.length-1}}bj=bk[bg];break}}}aZ();a5([bj],true);call("selected",aR)};this.clear();this.getPrivateMethods=function(){var bg={addCommandToHistory:aT,setGradient:ae,addSvgElementFromJson:c,assignAttributes:az,BatchCommand:aA,call:call,ChangeElementCommand:av,cleanupElement:ar,copyElem:ap,ffClone:g,findDefs:aD,findDuplicateGradient:t,getElem:b,getId:C,getIntersectionList:aW,getMouseTarget:Z,getNextId:a7,getPathBBox:bb,getUrlFromAttr:ak,hasMatrixTransform:aP,identifyLayers:Y,InsertElementCommand:a,isIdentity:a8,logMatrix:ax,matrixMultiply:af,MoveElementCommand:S,preventClickDefault:aV,recalculateAllSelectedDimensions:aY,recalculateDimensions:l,remapElement:D,RemoveElementCommand:R,removeUnusedDefElems:v,round:Q,runExtensions:aI,sanitizeSvg:M,SelectorManager:bd,shortFloat:a3,svgCanvasToString:i,SVGEditTransformList:H,svgToString:aU,toString:toString,transformBox:be,transformListToTransform:s,transformPoint:P,walkTree:at};return bg};(function(){var bl=document.createElementNS(aK,"path");bl.setAttribute("d","M0,0 10,10");var bh=bl.pathSegList;var bg=bl.createSVGPathSegLinetoAbs(5,5);try{bh.replaceItem(bg,0);a0.pathReplaceItem=true}catch(bk){a0.pathReplaceItem=false}try{bh.insertItemBefore(bg,0);a0.pathInsertItemBefore=true}catch(bk){a0.pathInsertItemBefore=false}a0.editableText=k;var bj=document.createElementNS(aK,"rect");bj.setAttribute("x",0.1);var bi=bj.cloneNode(false);a0.goodDecimals=(bi.getAttribute("x").indexOf(",")==-1);if(!a0.goodDecimals){$.alert("NOTE: This version of Opera is known to contain bugs in SVG-edit.\n Please upgrade to the <a href='http://opera.com'>latest version</a> in which the problems have been fixed.")}var bj=document.createElementNS(aK,"rect");bj.setAttribute("width","1em");bj.setAttribute("height","1ex");ai.appendChild(bj);var bm=bj.getBBox();I.em=bm.width;I.ex=bm.height;ai.removeChild(bj)}())}; \ No newline at end of file
diff --git a/files_svgedit/js/svgicons/jquery.svgicons.js b/files_svgedit/js/svgicons/jquery.svgicons.js
deleted file mode 100644
index 2db257ea1..000000000
--- a/files_svgedit/js/svgicons/jquery.svgicons.js
+++ /dev/null
@@ -1,457 +0,0 @@
-/*
- * SVG Icon Loader 2.0
- *
- * jQuery Plugin for loading SVG icons from a single file
- *
- * Copyright (c) 2009 Alexis Deveria
- * http://a.deveria.com
- *
- * Apache 2 License
-
-How to use:
-
-1. Create the SVG master file that includes all icons:
-
-The master SVG icon-containing file is an SVG file that contains
-<g> elements. Each <g> element should contain the markup of an SVG
-icon. The <g> element has an ID that should
-correspond with the ID of the HTML element used on the page that should contain
-or optionally be replaced by the icon. Additionally, one empty element should be
-added at the end with id "svg_eof".
-
-2. Optionally create fallback raster images for each SVG icon.
-
-3. Include the jQuery and the SVG Icon Loader scripts on your page.
-
-4. Run $.svgIcons() when the document is ready:
-
-$.svgIcons( file [string], options [object literal]);
-
-File is the location of a local SVG or SVGz file.
-
-All options are optional and can include:
-
-- 'w (number)': The icon widths
-
-- 'h (number)': The icon heights
-
-- 'fallback (object literal)': List of raster images with each
- key being the SVG icon ID to replace, and the value the image file name.
-
-- 'fallback_path (string)': The path to use for all images
- listed under "fallback"
-
-- 'replace (boolean)': If set to true, HTML elements will be replaced by,
- rather than include the SVG icon.
-
-- 'placement (object literal)': List with selectors for keys and SVG icon ids
- as values. This provides a custom method of adding icons.
-
-- 'resize (object literal)': List with selectors for keys and numbers
- as values. This allows an easy way to resize specific icons.
-
-- 'callback (function)': A function to call when all icons have been loaded.
- Includes an object literal as its argument with as keys all icon IDs and the
- icon as a jQuery object as its value.
-
-- 'id_match (boolean)': Automatically attempt to match SVG icon ids with
- corresponding HTML id (default: true)
-
-- 'no_img (boolean)': Prevent attempting to convert the icon into an <img>
- element (may be faster, help for browser consistency)
-
-- 'svgz (boolean)': Indicate that the file is an SVGZ file, and thus not to
- parse as XML. SVGZ files add compression benefits, but getting data from
- them fails in Firefox 2 and older.
-
-5. To access an icon at a later point without using the callback, use this:
- $.getSvgIcon(id (string));
-
-This will return the icon (as jQuery object) with a given ID.
-
-6. To resize icons at a later point without using the callback, use this:
- $.resizeSvgIcons(resizeOptions) (use the same way as the "resize" parameter)
-
-
-Example usage #1:
-
-$(function() {
- $.svgIcons('my_icon_set.svg'); // The SVG file that contains all icons
- // No options have been set, so all icons will automatically be inserted
- // into HTML elements that match the same IDs.
-});
-
-Example usage #2:
-
-$(function() {
- $.svgIcons('my_icon_set.svg', { // The SVG file that contains all icons
- callback: function(icons) { // Custom callback function that sets click
- // events for each icon
- $.each(icons, function(id, icon) {
- icon.click(function() {
- alert('You clicked on the icon with id ' + id);
- });
- });
- }
- }); //The SVG file that contains all icons
-});
-
-Example usage #3:
-
-$(function() {
- $.svgIcons('my_icon_set.svgz', { // The SVGZ file that contains all icons
- w: 32, // All icons will be 32px wide
- h: 32, // All icons will be 32px high
- fallback_path: 'icons/', // All fallback files can be found here
- fallback: {
- '#open_icon': 'open.png', // The "open.png" will be appended to the
- // HTML element with ID "open_icon"
- '#close_icon': 'close.png',
- '#save_icon': 'save.png'
- },
- placement: {'.open_icon','open'}, // The "open" icon will be added
- // to all elements with class "open_icon"
- resize: function() {
- '#save_icon .svg_icon': 64 // The "save" icon will be resized to 64 x 64px
- },
-
- callback: function(icons) { // Sets background color for "close" icon
- icons['close'].css('background','red');
- },
-
- svgz: true // Indicates that an SVGZ file is being used
-
- })
-});
-
-*/
-
-
-(function($) {
- var svg_icons = {};
-
- $.svgIcons = function(file, opts) {
- var svgns = "http://www.w3.org/2000/svg",
- xlinkns = "http://www.w3.org/1999/xlink",
- icon_w = opts.w?opts.w : 24,
- icon_h = opts.h?opts.h : 24,
- elems, svgdoc, testImg,
- icons_made = false, data_loaded = false, load_attempts = 0,
- ua = navigator.userAgent, isOpera = !!window.opera, isSafari = (ua.indexOf('Safari/') > -1 && ua.indexOf('Chrome/')==-1),
- data_pre = 'data:image/svg+xml;charset=utf-8;base64,';
-
- if(opts.svgz) {
- var data_el = $('<object data="' + file + '" type=image/svg+xml>').appendTo('body').hide();
- try {
- svgdoc = data_el[0].contentDocument;
- // TODO: IE still loads this, shouldn't even bother.
- data_el.load(getIcons);
- getIcons(0, true); // Opera will not run "load" event if file is already cached
- } catch(err1) {
- useFallback();
- }
- } else {
- $.ajax({
- url: file,
- dataType: 'xml',
- success: function(data) {
- svgdoc = data;
- $(function() {
- getIcons('ajax');
- });
- },
- error: function(err) {
- // TODO: Fix Opera widget icon bug
- if(window.opera) {
- $(function() {
- useFallback();
- });
- } else {
- if(err.responseXML) {
- svgdoc = err.responseXML;
- $(function() {
- getIcons('ajax');
- });
- }
- }
- }
- });
- }
-
- function getIcons(evt, no_wait) {
- if(evt !== 'ajax') {
- if(data_loaded) return;
- // Webkit sometimes says svgdoc is undefined, other times
- // it fails to load all nodes. Thus we must make sure the "eof"
- // element is loaded.
- svgdoc = data_el[0].contentDocument; // Needed again for Webkit
- var isReady = (svgdoc && svgdoc.getElementById('svg_eof'));
- if(!isReady && !(no_wait && isReady)) {
- load_attempts++;
- if(load_attempts < 50) {
- setTimeout(getIcons, 20);
- } else {
- useFallback();
- data_loaded = true;
- }
- return;
- }
- data_loaded = true;
- }
- // Clean source SVGs (mostly for Inkscape files)
- // TODO: Find a way to do this without crashing Safari (when converting to IMG)
- $(svgdoc).find('metadata').remove().end()
- .find('*').each(function(i, el) {
- if(el.nodeName.indexOf(':') != -1) {
- $(el).remove();
- }
- var attrs = $.extend(false, el.attributes, {});
- for(i in attrs) {
- var attr = attrs[i];
- var fullattr = attr.prefix?attr.prefix + ':' + attr.localName:'';
- if(attr.prefix) {
- el.removeAttribute(attr.localName); // for Opera
- el.removeAttribute(fullattr); // for Webkit
- }
- if(fullattr == 'xlink:href') {
- el.setAttribute('xlink:href', attr.nodeValue);
- }
- }
- });
- elems = $(svgdoc.firstChild).children(); //.getElementsByTagName('foreignContent');
- var testSrc = data_pre + 'PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNzUiIGhlaWdodD0iMjc1Ij48L3N2Zz4%3D';
-
- testImg = $(new Image()).attr({
- src: testSrc,
- width: 0,
- height: 0
- }).appendTo('body')
- .load(function () {
- // Safari 4 crashes, Opera and Chrome don't
- makeIcons(!isSafari);
- }).error(function () {
- makeIcons();
- });
- }
-
- function makeIcons(toImage, fallback) {
- if(icons_made) return;
- if(opts.no_img) toImage = false;
- var holder;
-
- var setIcon = function(target, icon, id, setID) {
- if(isOpera) icon.css('visibility','hidden');
- if(opts.replace) {
- if(setID) icon.attr('id',id);
- var cl = target.attr('class');
- if(cl) icon.attr('class','svg_icon '+cl);
- target.replaceWith(icon);
- } else {
-
- target.append(icon);
- }
- if(isOpera) {
- setTimeout(function() {
- icon.attr('style','visibility:visible;');
- },1);
- }
- }
-
- var addIcon = function(icon, id) {
- if(opts.id_match === undefined || opts.id_match !== false) {
- setIcon(holder, icon, id, true);
- }
- svg_icons[id] = icon;
- }
-
- if(toImage) {
- var temp_holder = $(document.createElement('div'));
- temp_holder.hide().appendTo('body');
- }
- if(fallback) {
- var path = opts.fallback_path?opts.fallback_path:'';
- $.each(fallback, function(id, imgsrc) {
- holder = $('#' + id);
- var icon = $(new Image())
- .attr({
- 'class':'svg_icon',
- src: path + imgsrc,
- 'width': icon_w,
- 'height': icon_h,
- 'alt': 'icon'
- });
-
- addIcon(icon, id);
- });
- } else {
- $.each(elems, function(i, elem) {
- var id = elem.getAttribute('id');
- if(id == 'svg_eof') return;
- holder = $('#' + id);
-
- var svg = elem.getElementsByTagNameNS(svgns, 'svg')[0];
- var svgroot = svgdoc.createElementNS(svgns, "svg");
- svgroot.setAttributeNS(svgns, 'viewBox', [0,0,icon_w,icon_h].join(' '));
-
- // Make flexible by converting width/height to viewBox
- var w = svg.getAttribute('width');
- var h = svg.getAttribute('height');
- svg.removeAttribute('width');
- svg.removeAttribute('height');
-
- var vb = svg.getAttribute('viewBox');
- if(!vb) {
- svg.setAttribute('viewBox', [0,0,w,h].join(' '));
- }
-
- $(svgroot).attr({
- "xmlns": svgns,
- "width": icon_w,
- "height": icon_h,
- "xmlns:xlink": xlinkns,
- "class": 'svg_icon'
- });
-
- // Without cloning, Firefox will make another GET request.
- // With cloning, causes issue in Opera/Win/Non-EN
- if(!isOpera) svg = svg.cloneNode(true);
-
- svgroot.appendChild(svg);
-
- if(toImage) {
- // Without cloning, Safari will crash
- // With cloning, causes issue in Opera/Win/Non-EN
- var svgcontent = isOpera?svgroot:svgroot.cloneNode(true);
- temp_holder.empty().append(svgroot);
- var str = data_pre + encode64(temp_holder.html());
- var icon = $(new Image())
- .attr({'class':'svg_icon', src:str});
- } else {
- var icon = fixIDs($(svgroot), i);
- }
- addIcon(icon, id);
- });
- }
-
- if(opts.placement) {
- $.each(opts.placement, function(sel, id) {
- if(!svg_icons[id]) return;
- $(sel).each(function(i) {
- var copy = svg_icons[id].clone();
- if(i > 0 && !toImage) copy = fixIDs(copy, i, true);
- setIcon($(this), copy, id);
- })
- });
- }
- if(!fallback) {
- if(toImage) temp_holder.remove();
- if(data_el) data_el.remove();
- testImg.remove();
- }
-
- if(opts.resize) $.resizeSvgIcons(opts.resize);
-
- icons_made = true;
-
- if(opts.callback) opts.callback(svg_icons);
-
- }
-
- function fixIDs(svg_el, svg_num, force) {
- var defs = svg_el.find('defs');
- if(!defs.length) return svg_el;
-
- defs.find('[id]').each(function(i) {
- var id = this.id;
- var no_dupes = ($(svgdoc).find('#' + id).length <= 1);
- if(isOpera) no_dupes = false; // Opera didn't clone svg_el, so not reliable
- // if(!force && no_dupes) return;
- var new_id = 'x' + id + svg_num + i;
- $(this).attr('id', new_id);
-
- svg_el.find('[fill="url(#' + id + ')"]').each(function() {
- $(this).attr('fill', 'url(#' + new_id + ')');
- }).end().find('[stroke="url(#' + id + ')"]').each(function() {
- $(this).attr('stroke', 'url(#' + new_id + ')');
- }).end().find('use').each(function() {
- if(this.getAttribute('xlink:href') == '#' + id) {
- this.setAttributeNS(xlinkns,'href','#' + new_id);
- }
- }).end().find('[filter="url(#' + id + ')"]').each(function() {
- $(this).attr('filter', 'url(#' + new_id + ')');
- });
- });
- return svg_el;
- }
-
- function useFallback() {
- if(file.indexOf('.svgz') != -1) {
- var reg_file = file.replace('.svgz','.svg');
- if(window.console) {
- console.log('.svgz failed, trying with .svg');
- }
- $.svgIcons(reg_file, opts);
- } else if(opts.fallback) {
- makeIcons(false, opts.fallback);
- }
- }
-
- function encode64(input) {
- // base64 strings are 4/3 larger than the original string
- if(window.btoa) return window.btoa(input);
- var _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
- var output = new Array( Math.floor( (input.length + 2) / 3 ) * 4 );
- var chr1, chr2, chr3;
- var enc1, enc2, enc3, enc4;
- var i = 0, p = 0;
-
- do {
- chr1 = input.charCodeAt(i++);
- chr2 = input.charCodeAt(i++);
- chr3 = input.charCodeAt(i++);
-
- enc1 = chr1 >> 2;
- enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
- enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
- enc4 = chr3 & 63;
-
- if (isNaN(chr2)) {
- enc3 = enc4 = 64;
- } else if (isNaN(chr3)) {
- enc4 = 64;
- }
-
- output[p++] = _keyStr.charAt(enc1);
- output[p++] = _keyStr.charAt(enc2);
- output[p++] = _keyStr.charAt(enc3);
- output[p++] = _keyStr.charAt(enc4);
- } while (i < input.length);
-
- return output.join('');
- }
- }
-
- $.getSvgIcon = function(id) { return svg_icons[id]; }
-
- $.resizeSvgIcons = function(obj) {
- // FF2 and older don't detect .svg_icon, so we change it detect svg elems instead
- var change_sel = !$('.svg_icon:first').length;
- $.each(obj, function(sel, size) {
- var arr = $.isArray(size);
- var w = arr?size[0]:size,
- h = arr?size[1]:size;
- if(change_sel) {
- sel = sel.replace(/\.svg_icon/g,'svg');
- }
- $(sel).each(function() {
- this.setAttribute('width', w);
- this.setAttribute('height', h);
- if(window.opera && window.widget) {
- this.parentNode.style.width = w + 'px';
- this.parentNode.style.height = h + 'px';
- }
- });
- });
- }
-
-})(jQuery);
diff --git a/files_svgedit/js/svgicons/jquery.svgicons.min.js b/files_svgedit/js/svgicons/jquery.svgicons.min.js
deleted file mode 100644
index 4857b97af..000000000
--- a/files_svgedit/js/svgicons/jquery.svgicons.min.js
+++ /dev/null
@@ -1 +0,0 @@
-(function(b){var a={};b.svgIcons=function(t,m){var l="http://www.w3.org/2000/svg",q="http://www.w3.org/1999/xlink",d=m.w?m.w:24,k=m.h?m.h:24,w,f,j,u=false,g=false,h=0,o=navigator.userAgent,v=!!window.opera,s=(o.indexOf("Safari/")>-1&&o.indexOf("Chrome/")==-1),c="data:image/svg+xml;charset=utf-8;base64,";if(m.svgz){var n=b('<object data="'+t+'" type=image/svg+xml>').appendTo("body").hide();try{f=n[0].contentDocument;n.load(i);i(0,true)}catch(r){p()}}else{b.ajax({url:t,dataType:"xml",success:function(z){f=z;b(function(){i("ajax")})},error:function(z){if(window.opera){b(function(){p()})}else{if(z.responseXML){f=z.responseXML;b(function(){i("ajax")})}}}})}function i(z,C){if(z!=="ajax"){if(g){return}f=n[0].contentDocument;var B=(f&&f.getElementById("svg_eof"));if(!B&&!(C&&B)){h++;if(h<50){setTimeout(i,20)}else{p();g=true}return}g=true}b(f).find("metadata").remove().end().find("*").each(function(F,G){if(G.nodeName.indexOf(":")!=-1){b(G).remove()}var E=b.extend(false,G.attributes,{});for(F in E){var D=E[F];var H=D.prefix?D.prefix+":"+D.localName:"";if(D.prefix){G.removeAttribute(D.localName);G.removeAttribute(H)}if(H=="xlink:href"){G.setAttribute("xlink:href",D.nodeValue)}}});w=b(f.firstChild).children();var A=c+"PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNzUiIGhlaWdodD0iMjc1Ij48L3N2Zz4%3D";j=b(new Image()).attr({src:A,width:0,height:0}).appendTo("body").load(function(){y(!s)}).error(function(){y()})}function y(z,F){if(u){return}if(m.no_img){z=false}var A;var E=function(J,I,K,G){if(v){I.css("visibility","hidden")}if(m.replace){if(G){I.attr("id",K)}var H=J.attr("class");if(H){I.attr("class","svg_icon "+H)}J.replaceWith(I)}else{J.append(I)}if(v){setTimeout(function(){I.attr("style","visibility:visible;")},1)}};var D=function(G,H){if(m.id_match===undefined||m.id_match!==false){E(A,G,H,true)}a[H]=G};if(z){var C=b(document.createElement("div"));C.hide().appendTo("body")}if(F){var B=m.fallback_path?m.fallback_path:"";b.each(F,function(I,H){A=b("#"+I);var G=b(new Image()).attr({"class":"svg_icon",src:B+H,width:d,height:k,alt:"icon"});D(G,I)})}else{b.each(w,function(I,H){var G=H.getAttribute("id");if(G=="svg_eof"){return}A=b("#"+G);var M=H.getElementsByTagNameNS(l,"svg")[0];var L=f.createElementNS(l,"svg");L.setAttributeNS(l,"viewBox",[0,0,d,k].join(" "));var Q=M.getAttribute("width");var K=M.getAttribute("height");M.removeAttribute("width");M.removeAttribute("height");var O=M.getAttribute("viewBox");if(!O){M.setAttribute("viewBox",[0,0,Q,K].join(" "))}b(L).attr({xmlns:l,width:d,height:k,"xmlns:xlink":q,"class":"svg_icon"});if(!v){M=M.cloneNode(true)}L.appendChild(M);if(z){var J=v?L:L.cloneNode(true);C.empty().append(L);var N=c+x(C.html());var P=b(new Image()).attr({"class":"svg_icon",src:N})}else{var P=e(b(L),I)}D(P,G)})}if(m.placement){b.each(m.placement,function(G,H){if(!a[H]){return}b(G).each(function(I){var J=a[H].clone();if(I>0&&!z){J=e(J,I,true)}E(b(this),J,H)})})}if(!F){if(z){C.remove()}if(n){n.remove()}j.remove()}if(m.resize){b.resizeSvgIcons(m.resize)}u=true;if(m.callback){m.callback(a)}}function e(C,B,A){var z=C.find("defs");if(!z.length){return C}z.find("[id]").each(function(F){var G=this.id;var D=(b(f).find("#"+G).length<=1);if(v){D=false}var E="x"+G+B+F;b(this).attr("id",E);C.find('[fill="url(#'+G+')"]').each(function(){b(this).attr("fill","url(#"+E+")")}).end().find('[stroke="url(#'+G+')"]').each(function(){b(this).attr("stroke","url(#"+E+")")}).end().find("use").each(function(){if(this.getAttribute("xlink:href")=="#"+G){this.setAttributeNS(q,"href","#"+E)}}).end().find('[filter="url(#'+G+')"]').each(function(){b(this).attr("filter","url(#"+E+")")})});return C}function p(){if(t.indexOf(".svgz")!=-1){var z=t.replace(".svgz",".svg");if(window.console){console.log(".svgz failed, trying with .svg")}b.svgIcons(z,m)}else{if(m.fallback){y(false,m.fallback)}}}function x(D){if(window.btoa){return window.btoa(D)}var C="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";var A=new Array(Math.floor((D.length+2)/3)*4);var K,I,G;var J,H,F,E;var B=0,z=0;do{K=D.charCodeAt(B++);I=D.charCodeAt(B++);G=D.charCodeAt(B++);J=K>>2;H=((K&3)<<4)|(I>>4);F=((I&15)<<2)|(G>>6);E=G&63;if(isNaN(I)){F=E=64}else{if(isNaN(G)){E=64}}A[z++]=C.charAt(J);A[z++]=C.charAt(H);A[z++]=C.charAt(F);A[z++]=C.charAt(E)}while(B<D.length);return A.join("")}};b.getSvgIcon=function(c){return a[c]};b.resizeSvgIcons=function(d){var c=!b(".svg_icon:first").length;b.each(d,function(j,g){var e=b.isArray(g);var f=e?g[0]:g,i=e?g[1]:g;if(c){j=j.replace(/\.svg_icon/g,"svg")}b(j).each(function(){this.setAttribute("width",f);this.setAttribute("height",i);if(window.opera&&window.widget){this.parentNode.style.width=f+"px";this.parentNode.style.height=i+"px"}})})}})(jQuery); \ No newline at end of file