sketchily 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/MIT-LICENSE +20 -0
- data/README.md +39 -0
- data/Rakefile +40 -0
- data/app/helpers/sketchily.rb~ +10 -0
- data/app/helpers/sketchily_helper.rb +10 -0
- data/app/views/sketchily/_embed.html.erb +28 -0
- data/app/views/sketchily/_embed.html.erb~ +28 -0
- data/app/views/sketchily/_embed.js.erb +50 -0
- data/app/views/sketchily/_embed.js.erb~ +50 -0
- data/app/views/sketchily/_sketchily.html.erb +23 -0
- data/app/views/sketchily/_sketchily.html.erb~ +23 -0
- data/app/views/sketchily/_sketchily_tag.html.erb +21 -0
- data/app/views/sketchily/_sketchily_tag.html.erb~ +21 -0
- data/app/views/sketchily/_svg_edit_tag.html.erb~ +51 -0
- data/app/views/sketchily/svg_edit_tag_.html~ +35 -0
- data/lib/sketchily.rb +15 -0
- data/lib/sketchily.rb~ +16 -0
- data/lib/sketchily/engine.rb +4 -0
- data/lib/sketchily/sketchily.rb +28 -0
- data/lib/sketchily/sketchily_show.rb~ +13 -0
- data/lib/sketchily/sketchily_tag.rb +15 -0
- data/lib/sketchily/svg_edit_tag.rb~ +9 -0
- data/lib/sketchily/version.rb +3 -0
- data/lib/sketchily/version.rb~ +3 -0
- data/spec/dummy/README.rdoc +261 -0
- data/spec/dummy/Rakefile +7 -0
- data/spec/dummy/app/assets/javascripts/application.js +15 -0
- data/spec/dummy/app/assets/stylesheets/application.css +13 -0
- data/spec/dummy/app/controllers/application_controller.rb +3 -0
- data/spec/dummy/app/helpers/application_helper.rb +2 -0
- data/spec/dummy/app/views/layouts/application.html.erb +14 -0
- data/spec/dummy/config.ru +4 -0
- data/spec/dummy/config/application.rb +59 -0
- data/spec/dummy/config/boot.rb +10 -0
- data/spec/dummy/config/database.yml +25 -0
- data/spec/dummy/config/environment.rb +5 -0
- data/spec/dummy/config/environments/development.rb +37 -0
- data/spec/dummy/config/environments/production.rb +67 -0
- data/spec/dummy/config/environments/test.rb +37 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/dummy/config/initializers/inflections.rb +15 -0
- data/spec/dummy/config/initializers/mime_types.rb +5 -0
- data/spec/dummy/config/initializers/secret_token.rb +7 -0
- data/spec/dummy/config/initializers/session_store.rb +8 -0
- data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/spec/dummy/config/locales/en.yml +5 -0
- data/spec/dummy/config/routes.rb +58 -0
- data/spec/dummy/public/404.html +26 -0
- data/spec/dummy/public/422.html +26 -0
- data/spec/dummy/public/500.html +25 -0
- data/spec/dummy/public/favicon.ico +0 -0
- data/spec/dummy/script/rails +6 -0
- data/spec/lib/sketchily_spec.rb +0 -0
- data/spec/spec_helper.rb +11 -0
- data/vendor/assets/svg-edit-2.6/browser-not-supported.html +27 -0
- data/vendor/assets/svg-edit-2.6/browser.js +180 -0
- data/vendor/assets/svg-edit-2.6/canvg/canvg.js +2620 -0
- data/vendor/assets/svg-edit-2.6/canvg/rgbcolor.js +287 -0
- data/vendor/assets/svg-edit-2.6/contextmenu.js +67 -0
- data/vendor/assets/svg-edit-2.6/contextmenu/jquery.contextMenu.js +203 -0
- data/vendor/assets/svg-edit-2.6/draw.js +528 -0
- data/vendor/assets/svg-edit-2.6/embedapi.html +56 -0
- data/vendor/assets/svg-edit-2.6/embedapi.js +173 -0
- data/vendor/assets/svg-edit-2.6/extensions/closepath_icons.svg +41 -0
- data/vendor/assets/svg-edit-2.6/extensions/ext-arrows.js +298 -0
- data/vendor/assets/svg-edit-2.6/extensions/ext-closepath.js +92 -0
- data/vendor/assets/svg-edit-2.6/extensions/ext-connector.js +587 -0
- data/vendor/assets/svg-edit-2.6/extensions/ext-eyedropper.js +109 -0
- data/vendor/assets/svg-edit-2.6/extensions/ext-foreignobject.js +277 -0
- data/vendor/assets/svg-edit-2.6/extensions/ext-grid.js +184 -0
- data/vendor/assets/svg-edit-2.6/extensions/ext-helloworld.js +78 -0
- data/vendor/assets/svg-edit-2.6/extensions/ext-imagelib.js +453 -0
- data/vendor/assets/svg-edit-2.6/extensions/ext-imagelib.xml +14 -0
- data/vendor/assets/svg-edit-2.6/extensions/ext-markers.js +572 -0
- data/vendor/assets/svg-edit-2.6/extensions/ext-server_moinsave.js +56 -0
- data/vendor/assets/svg-edit-2.6/extensions/ext-server_opensave.js +180 -0
- data/vendor/assets/svg-edit-2.6/extensions/ext-shapes.js +387 -0
- data/vendor/assets/svg-edit-2.6/extensions/ext-shapes.xml +10 -0
- data/vendor/assets/svg-edit-2.6/extensions/eyedropper-icon.xml +34 -0
- data/vendor/assets/svg-edit-2.6/extensions/eyedropper.png +0 -0
- data/vendor/assets/svg-edit-2.6/extensions/fileopen.php +31 -0
- data/vendor/assets/svg-edit-2.6/extensions/filesave.php +44 -0
- data/vendor/assets/svg-edit-2.6/extensions/foreignobject-icons.xml +96 -0
- data/vendor/assets/svg-edit-2.6/extensions/grid-icon.xml +30 -0
- data/vendor/assets/svg-edit-2.6/extensions/helloworld-icon.xml +21 -0
- data/vendor/assets/svg-edit-2.6/extensions/imagelib/index.html +64 -0
- data/vendor/assets/svg-edit-2.6/extensions/imagelib/smiley.svg +12 -0
- data/vendor/assets/svg-edit-2.6/extensions/markers-icons.xml +115 -0
- data/vendor/assets/svg-edit-2.6/extensions/shapelib/animal.json +21 -0
- data/vendor/assets/svg-edit-2.6/extensions/shapelib/arrow.json +28 -0
- data/vendor/assets/svg-edit-2.6/extensions/shapelib/dialog_balloon.json +9 -0
- data/vendor/assets/svg-edit-2.6/extensions/shapelib/electronics.json +20 -0
- data/vendor/assets/svg-edit-2.6/extensions/shapelib/flowchart.json +25 -0
- data/vendor/assets/svg-edit-2.6/extensions/shapelib/game.json +13 -0
- data/vendor/assets/svg-edit-2.6/extensions/shapelib/math.json +9 -0
- data/vendor/assets/svg-edit-2.6/extensions/shapelib/misc.json +37 -0
- data/vendor/assets/svg-edit-2.6/extensions/shapelib/music.json +21 -0
- data/vendor/assets/svg-edit-2.6/extensions/shapelib/object.json +19 -0
- data/vendor/assets/svg-edit-2.6/extensions/shapelib/raphael.txt +12 -0
- data/vendor/assets/svg-edit-2.6/extensions/shapelib/raphael_1.json +67 -0
- data/vendor/assets/svg-edit-2.6/extensions/shapelib/raphael_2.json +64 -0
- data/vendor/assets/svg-edit-2.6/extensions/shapelib/symbol.json +28 -0
- data/vendor/assets/svg-edit-2.6/history.js +601 -0
- data/vendor/assets/svg-edit-2.6/images/README.txt +61 -0
- data/vendor/assets/svg-edit-2.6/images/align-bottom.png +0 -0
- data/vendor/assets/svg-edit-2.6/images/align-bottom.svg +277 -0
- data/vendor/assets/svg-edit-2.6/images/align-center.png +0 -0
- data/vendor/assets/svg-edit-2.6/images/align-center.svg +252 -0
- data/vendor/assets/svg-edit-2.6/images/align-left.png +0 -0
- data/vendor/assets/svg-edit-2.6/images/align-left.svg +235 -0
- data/vendor/assets/svg-edit-2.6/images/align-middle.png +0 -0
- data/vendor/assets/svg-edit-2.6/images/align-middle.svg +250 -0
- data/vendor/assets/svg-edit-2.6/images/align-right.png +0 -0
- data/vendor/assets/svg-edit-2.6/images/align-right.svg +233 -0
- data/vendor/assets/svg-edit-2.6/images/align-top.png +0 -0
- data/vendor/assets/svg-edit-2.6/images/align-top.svg +233 -0
- data/vendor/assets/svg-edit-2.6/images/bold.png +0 -0
- data/vendor/assets/svg-edit-2.6/images/cancel.png +0 -0
- data/vendor/assets/svg-edit-2.6/images/circle.png +0 -0
- data/vendor/assets/svg-edit-2.6/images/clear.png +0 -0
- data/vendor/assets/svg-edit-2.6/images/clone.png +0 -0
- data/vendor/assets/svg-edit-2.6/images/conn.svg +29 -0
- data/vendor/assets/svg-edit-2.6/images/copy.png +0 -0
- data/vendor/assets/svg-edit-2.6/images/cut.png +0 -0
- data/vendor/assets/svg-edit-2.6/images/delete.png +0 -0
- data/vendor/assets/svg-edit-2.6/images/document-properties.png +0 -0
- data/vendor/assets/svg-edit-2.6/images/dropdown.gif +0 -0
- data/vendor/assets/svg-edit-2.6/images/ellipse.png +0 -0
- data/vendor/assets/svg-edit-2.6/images/eye.png +0 -0
- data/vendor/assets/svg-edit-2.6/images/fhpath.png +0 -0
- data/vendor/assets/svg-edit-2.6/images/flyouth.png +0 -0
- data/vendor/assets/svg-edit-2.6/images/flyup.gif +0 -0
- data/vendor/assets/svg-edit-2.6/images/freehand-circle.png +0 -0
- data/vendor/assets/svg-edit-2.6/images/freehand-square.png +0 -0
- data/vendor/assets/svg-edit-2.6/images/go-down.png +0 -0
- data/vendor/assets/svg-edit-2.6/images/go-up.png +0 -0
- data/vendor/assets/svg-edit-2.6/images/image.png +0 -0
- data/vendor/assets/svg-edit-2.6/images/italic.png +0 -0
- data/vendor/assets/svg-edit-2.6/images/line.png +0 -0
- data/vendor/assets/svg-edit-2.6/images/link_controls.png +0 -0
- data/vendor/assets/svg-edit-2.6/images/logo.png +0 -0
- data/vendor/assets/svg-edit-2.6/images/logo.svg +32 -0
- data/vendor/assets/svg-edit-2.6/images/move_bottom.png +0 -0
- data/vendor/assets/svg-edit-2.6/images/move_top.png +0 -0
- data/vendor/assets/svg-edit-2.6/images/node_clone.png +0 -0
- data/vendor/assets/svg-edit-2.6/images/node_delete.png +0 -0
- data/vendor/assets/svg-edit-2.6/images/none.png +0 -0
- data/vendor/assets/svg-edit-2.6/images/open.png +0 -0
- data/vendor/assets/svg-edit-2.6/images/paste.png +0 -0
- data/vendor/assets/svg-edit-2.6/images/path.png +0 -0
- data/vendor/assets/svg-edit-2.6/images/polygon.png +0 -0
- data/vendor/assets/svg-edit-2.6/images/polygon.svg +219 -0
- data/vendor/assets/svg-edit-2.6/images/rect.png +0 -0
- data/vendor/assets/svg-edit-2.6/images/redo.png +0 -0
- data/vendor/assets/svg-edit-2.6/images/reorient.png +0 -0
- data/vendor/assets/svg-edit-2.6/images/rotate.png +0 -0
- data/vendor/assets/svg-edit-2.6/images/save.png +0 -0
- data/vendor/assets/svg-edit-2.6/images/select.png +0 -0
- data/vendor/assets/svg-edit-2.6/images/select_node.png +0 -0
- data/vendor/assets/svg-edit-2.6/images/sep.png +0 -0
- data/vendor/assets/svg-edit-2.6/images/shape_group.png +0 -0
- data/vendor/assets/svg-edit-2.6/images/shape_ungroup.png +0 -0
- data/vendor/assets/svg-edit-2.6/images/source.png +0 -0
- data/vendor/assets/svg-edit-2.6/images/spinbtn_updn_big.png +0 -0
- data/vendor/assets/svg-edit-2.6/images/square.png +0 -0
- data/vendor/assets/svg-edit-2.6/images/svg_edit_icons.svg +1034 -0
- data/vendor/assets/svg-edit-2.6/images/svg_edit_icons.svgz +0 -0
- data/vendor/assets/svg-edit-2.6/images/text.png +0 -0
- data/vendor/assets/svg-edit-2.6/images/text.svg +157 -0
- data/vendor/assets/svg-edit-2.6/images/to_path.png +0 -0
- data/vendor/assets/svg-edit-2.6/images/undo.png +0 -0
- data/vendor/assets/svg-edit-2.6/images/view-refresh.png +0 -0
- data/vendor/assets/svg-edit-2.6/images/wave.png +0 -0
- data/vendor/assets/svg-edit-2.6/images/wireframe.png +0 -0
- data/vendor/assets/svg-edit-2.6/images/zoom.png +0 -0
- data/vendor/assets/svg-edit-2.6/jgraduate/LICENSE +202 -0
- data/vendor/assets/svg-edit-2.6/jgraduate/README +3 -0
- data/vendor/assets/svg-edit-2.6/jgraduate/css/jPicker.css +1 -0
- data/vendor/assets/svg-edit-2.6/jgraduate/css/jgraduate.css +351 -0
- data/vendor/assets/svg-edit-2.6/jgraduate/images/AlphaBar.png +0 -0
- data/vendor/assets/svg-edit-2.6/jgraduate/images/Bars.png +0 -0
- data/vendor/assets/svg-edit-2.6/jgraduate/images/Maps.png +0 -0
- data/vendor/assets/svg-edit-2.6/jgraduate/images/NoColor.png +0 -0
- data/vendor/assets/svg-edit-2.6/jgraduate/images/bar-opacity.png +0 -0
- data/vendor/assets/svg-edit-2.6/jgraduate/images/map-opacity.png +0 -0
- data/vendor/assets/svg-edit-2.6/jgraduate/images/mappoint.gif +0 -0
- data/vendor/assets/svg-edit-2.6/jgraduate/images/mappoint_c.png +0 -0
- data/vendor/assets/svg-edit-2.6/jgraduate/images/mappoint_f.png +0 -0
- data/vendor/assets/svg-edit-2.6/jgraduate/images/picker.gif +0 -0
- data/vendor/assets/svg-edit-2.6/jgraduate/images/preview-opacity.png +0 -0
- data/vendor/assets/svg-edit-2.6/jgraduate/images/rangearrows.gif +0 -0
- data/vendor/assets/svg-edit-2.6/jgraduate/images/rangearrows2.gif +0 -0
- data/vendor/assets/svg-edit-2.6/jgraduate/jpicker.js +2091 -0
- data/vendor/assets/svg-edit-2.6/jgraduate/jpicker.min.js +1 -0
- data/vendor/assets/svg-edit-2.6/jgraduate/jquery.jgraduate.js +1175 -0
- data/vendor/assets/svg-edit-2.6/jgraduate/jquery.jgraduate.min.js +37 -0
- data/vendor/assets/svg-edit-2.6/jquery-ui/jquery-ui-1.8.17.custom.min.js +54 -0
- data/vendor/assets/svg-edit-2.6/jquery-ui/jquery-ui-1.8.custom.min.js +84 -0
- data/vendor/assets/svg-edit-2.6/jquery.js +4 -0
- data/vendor/assets/svg-edit-2.6/jquerybbq/jquery.bbq.min.js +18 -0
- data/vendor/assets/svg-edit-2.6/js-hotkeys/README.md +45 -0
- data/vendor/assets/svg-edit-2.6/js-hotkeys/jquery.hotkeys.min.js +15 -0
- data/vendor/assets/svg-edit-2.6/locale/README.txt +17 -0
- data/vendor/assets/svg-edit-2.6/locale/lang.af.js +234 -0
- data/vendor/assets/svg-edit-2.6/locale/lang.ar.js +234 -0
- data/vendor/assets/svg-edit-2.6/locale/lang.az.js +234 -0
- data/vendor/assets/svg-edit-2.6/locale/lang.be.js +234 -0
- data/vendor/assets/svg-edit-2.6/locale/lang.bg.js +234 -0
- data/vendor/assets/svg-edit-2.6/locale/lang.ca.js +234 -0
- data/vendor/assets/svg-edit-2.6/locale/lang.cs.js +234 -0
- data/vendor/assets/svg-edit-2.6/locale/lang.cy.js +234 -0
- data/vendor/assets/svg-edit-2.6/locale/lang.da.js +234 -0
- data/vendor/assets/svg-edit-2.6/locale/lang.de.js +234 -0
- data/vendor/assets/svg-edit-2.6/locale/lang.el.js +234 -0
- data/vendor/assets/svg-edit-2.6/locale/lang.en.js +234 -0
- data/vendor/assets/svg-edit-2.6/locale/lang.es.js +234 -0
- data/vendor/assets/svg-edit-2.6/locale/lang.et.js +234 -0
- data/vendor/assets/svg-edit-2.6/locale/lang.fa.js +234 -0
- data/vendor/assets/svg-edit-2.6/locale/lang.fi.js +234 -0
- data/vendor/assets/svg-edit-2.6/locale/lang.fr.js +234 -0
- data/vendor/assets/svg-edit-2.6/locale/lang.fy.js +234 -0
- data/vendor/assets/svg-edit-2.6/locale/lang.ga.js +234 -0
- data/vendor/assets/svg-edit-2.6/locale/lang.gl.js +234 -0
- data/vendor/assets/svg-edit-2.6/locale/lang.he.js +234 -0
- data/vendor/assets/svg-edit-2.6/locale/lang.hi.js +234 -0
- data/vendor/assets/svg-edit-2.6/locale/lang.hr.js +234 -0
- data/vendor/assets/svg-edit-2.6/locale/lang.hu.js +234 -0
- data/vendor/assets/svg-edit-2.6/locale/lang.hy.js +234 -0
- data/vendor/assets/svg-edit-2.6/locale/lang.id.js +234 -0
- data/vendor/assets/svg-edit-2.6/locale/lang.is.js +234 -0
- data/vendor/assets/svg-edit-2.6/locale/lang.it.js +234 -0
- data/vendor/assets/svg-edit-2.6/locale/lang.ja.js +234 -0
- data/vendor/assets/svg-edit-2.6/locale/lang.ko.js +234 -0
- data/vendor/assets/svg-edit-2.6/locale/lang.lt.js +234 -0
- data/vendor/assets/svg-edit-2.6/locale/lang.lv.js +234 -0
- data/vendor/assets/svg-edit-2.6/locale/lang.mk.js +234 -0
- data/vendor/assets/svg-edit-2.6/locale/lang.ms.js +234 -0
- data/vendor/assets/svg-edit-2.6/locale/lang.mt.js +234 -0
- data/vendor/assets/svg-edit-2.6/locale/lang.nl.js +234 -0
- data/vendor/assets/svg-edit-2.6/locale/lang.no.js +234 -0
- data/vendor/assets/svg-edit-2.6/locale/lang.pl.js +234 -0
- data/vendor/assets/svg-edit-2.6/locale/lang.pt-BR.js +234 -0
- data/vendor/assets/svg-edit-2.6/locale/lang.pt-PT.js +234 -0
- data/vendor/assets/svg-edit-2.6/locale/lang.ro.js +234 -0
- data/vendor/assets/svg-edit-2.6/locale/lang.ru.js +234 -0
- data/vendor/assets/svg-edit-2.6/locale/lang.sk.js +234 -0
- data/vendor/assets/svg-edit-2.6/locale/lang.sl.js +234 -0
- data/vendor/assets/svg-edit-2.6/locale/lang.sq.js +234 -0
- data/vendor/assets/svg-edit-2.6/locale/lang.sr.js +234 -0
- data/vendor/assets/svg-edit-2.6/locale/lang.sv.js +234 -0
- data/vendor/assets/svg-edit-2.6/locale/lang.sw.js +234 -0
- data/vendor/assets/svg-edit-2.6/locale/lang.test.js +234 -0
- data/vendor/assets/svg-edit-2.6/locale/lang.th.js +234 -0
- data/vendor/assets/svg-edit-2.6/locale/lang.tl.js +234 -0
- data/vendor/assets/svg-edit-2.6/locale/lang.tr.js +234 -0
- data/vendor/assets/svg-edit-2.6/locale/lang.uk.js +234 -0
- data/vendor/assets/svg-edit-2.6/locale/lang.vi.js +234 -0
- data/vendor/assets/svg-edit-2.6/locale/lang.yi.js +234 -0
- data/vendor/assets/svg-edit-2.6/locale/lang.zh-CN.js +234 -0
- data/vendor/assets/svg-edit-2.6/locale/lang.zh-HK.js +234 -0
- data/vendor/assets/svg-edit-2.6/locale/lang.zh-TW.js +234 -0
- data/vendor/assets/svg-edit-2.6/locale/locale.js +320 -0
- data/vendor/assets/svg-edit-2.6/math.js +246 -0
- data/vendor/assets/svg-edit-2.6/path.js +980 -0
- data/vendor/assets/svg-edit-2.6/sanitize.js +273 -0
- data/vendor/assets/svg-edit-2.6/select.js +532 -0
- data/vendor/assets/svg-edit-2.6/spinbtn/JQuerySpinBtn.css +41 -0
- data/vendor/assets/svg-edit-2.6/spinbtn/JQuerySpinBtn.js +266 -0
- data/vendor/assets/svg-edit-2.6/spinbtn/JQuerySpinBtn.min.js +7 -0
- data/vendor/assets/svg-edit-2.6/spinbtn/spinbtn_updn.png +0 -0
- data/vendor/assets/svg-edit-2.6/svg-editor.css +1495 -0
- data/vendor/assets/svg-edit-2.6/svg-editor.css~ +1500 -0
- data/vendor/assets/svg-edit-2.6/svg-editor.html +788 -0
- data/vendor/assets/svg-edit-2.6/svg-editor.html~ +788 -0
- data/vendor/assets/svg-edit-2.6/svg-editor.js +4969 -0
- data/vendor/assets/svg-edit-2.6/svg-editor.manifest +121 -0
- data/vendor/assets/svg-edit-2.6/svgcanvas.js +8775 -0
- data/vendor/assets/svg-edit-2.6/svgedit.compiled.js +465 -0
- data/vendor/assets/svg-edit-2.6/svgicons/jquery.svgicons.js +486 -0
- data/vendor/assets/svg-edit-2.6/svgtransformlist.js +291 -0
- data/vendor/assets/svg-edit-2.6/svgutils.js +651 -0
- data/vendor/assets/svg-edit-2.6/touch.js +30 -0
- data/vendor/assets/svg-edit-2.6/units.js +281 -0
- metadata +407 -0
data/MIT-LICENSE
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
Copyright 2013 Rice University
|
|
2
|
+
|
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
|
4
|
+
a copy of this software and associated documentation files (the
|
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
|
9
|
+
the following conditions:
|
|
10
|
+
|
|
11
|
+
The above copyright notice and this permission notice shall be
|
|
12
|
+
included in all copies or substantial portions of the Software.
|
|
13
|
+
|
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Sketchily
|
|
2
|
+
|
|
3
|
+
Sketchily allows the easy integration of svg-edit with any rails application.
|
|
4
|
+
Currently supports and provides svg-edit-2.6.
|
|
5
|
+
|
|
6
|
+
## Installation
|
|
7
|
+
|
|
8
|
+
Add this line to your application's Gemfile:
|
|
9
|
+
|
|
10
|
+
gem 'sketchily'
|
|
11
|
+
|
|
12
|
+
And then execute:
|
|
13
|
+
|
|
14
|
+
$ bundle
|
|
15
|
+
|
|
16
|
+
Or install it yourself as:
|
|
17
|
+
|
|
18
|
+
$ gem install sketchily
|
|
19
|
+
|
|
20
|
+
## Usage
|
|
21
|
+
|
|
22
|
+
Sketchily adds new form elements which can be accessed by calling f.sketchily or simply sketchily from inside a form_for |f| or sketchily_tag from inside a form_tag.
|
|
23
|
+
Both of these functions work exactly like the equivalent hidden_field functions, except that svg-edit is displayed instead.
|
|
24
|
+
The f.sketchily format accepts a method name and an options hash.
|
|
25
|
+
The sketchily format accepts an object name, a method name and an options hash.
|
|
26
|
+
The sketchily_tag format accepts a tag name, the svg string to be edited and an options hash.
|
|
27
|
+
Currently available options are width, height, show_menu (true if you want svg-edit's menu to be displayed), hide_image_tool (true if you want to hide the image tool button), canvas_width (number specifying initial canvas width), canvas_height (number specifying initial canvas height), canvas_expansion (0 if you want to disable scrolling), hide_rulers (true if you want to hide the canvas rulers) and other standard html attributes for the input tag.
|
|
28
|
+
It is recommended that the database entries associated with sketchily form elements be of type 'text'.
|
|
29
|
+
|
|
30
|
+
## Contributing
|
|
31
|
+
|
|
32
|
+
1. Fork it
|
|
33
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
|
34
|
+
3. Create specs for your feature
|
|
35
|
+
4. Ensure that all specs pass
|
|
36
|
+
5. Commit your changes (`git commit -am 'Add some feature'`)
|
|
37
|
+
6. Push to the branch (`git push origin my-new-feature`)
|
|
38
|
+
7. Create new pull request
|
|
39
|
+
|
data/Rakefile
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
#!/usr/bin/env rake
|
|
2
|
+
begin
|
|
3
|
+
require 'bundler/setup'
|
|
4
|
+
rescue LoadError
|
|
5
|
+
puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
|
|
6
|
+
end
|
|
7
|
+
begin
|
|
8
|
+
require 'rdoc/task'
|
|
9
|
+
rescue LoadError
|
|
10
|
+
require 'rdoc/rdoc'
|
|
11
|
+
require 'rake/rdoctask'
|
|
12
|
+
RDoc::Task = Rake::RDocTask
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
RDoc::Task.new(:rdoc) do |rdoc|
|
|
16
|
+
rdoc.rdoc_dir = 'rdoc'
|
|
17
|
+
rdoc.title = 'Sketchily'
|
|
18
|
+
rdoc.options << '--line-numbers'
|
|
19
|
+
rdoc.rdoc_files.include('README.rdoc')
|
|
20
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
APP_RAKEFILE = File.expand_path("../test/dummy/Rakefile", __FILE__)
|
|
24
|
+
load 'rails/tasks/engine.rake'
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
Bundler::GemHelper.install_tasks
|
|
29
|
+
|
|
30
|
+
require 'rake/testtask'
|
|
31
|
+
|
|
32
|
+
Rake::TestTask.new(:test) do |t|
|
|
33
|
+
t.libs << 'lib'
|
|
34
|
+
t.libs << 'test'
|
|
35
|
+
t.pattern = 'test/**/*_test.rb'
|
|
36
|
+
t.verbose = false
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
task :default => :test
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
module Sketchily
|
|
2
|
+
def sketchily_show(uri, options = {})
|
|
3
|
+
"<img src='data:image/svg+xml;base64,#{uri}' #{"width='#{options[:width]}'" if options[:width]} #{"height='#{options[:height]}'" if options[:height]}/>".html_safe
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
def svg_show(uri, options = {})
|
|
7
|
+
sketchily_show(uri, options)
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
module SketchilyHelper
|
|
2
|
+
def sketchily_show(uri, options = {})
|
|
3
|
+
"<img src='data:image/svg+xml;base64,#{uri}' #{"width='#{options[:width]}'" if options[:width]} #{"height='#{options[:height]}'" if options[:height]}/>".html_safe
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
def svg_show(uri, options = {})
|
|
7
|
+
sketchily_show(uri, options)
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
<% # Clients of this partial must supply the following variables:
|
|
2
|
+
# id
|
|
3
|
+
# value
|
|
4
|
+
#
|
|
5
|
+
# Additionally, they may override the following variables:
|
|
6
|
+
show_menu ||= false
|
|
7
|
+
hide_image_tool ||= false
|
|
8
|
+
canvas_width ||= 640
|
|
9
|
+
canvas_height ||= 480
|
|
10
|
+
canvas_expansion ||= 3
|
|
11
|
+
hide_rulers ||= false
|
|
12
|
+
width ||= "750px"
|
|
13
|
+
height ||= "650px" %>
|
|
14
|
+
|
|
15
|
+
<%= javascript_include_tag "embedapi" %>
|
|
16
|
+
<%= javascript_include_tag "svgutils" %>
|
|
17
|
+
|
|
18
|
+
<script type="text/javascript">
|
|
19
|
+
<%= render :partial => "sketchily/embed",
|
|
20
|
+
:formats => :js,
|
|
21
|
+
:locals => {:id => id,
|
|
22
|
+
:value => value,
|
|
23
|
+
:show_menu => show_menu,
|
|
24
|
+
:hide_image_tool => hide_image_tool} %>
|
|
25
|
+
</script>
|
|
26
|
+
|
|
27
|
+
<iframe src="/assets/svg-editor.html?source=&dimensions=<%= "#{canvas_width},#{canvas_height}" %>&canvas_expansion=<%= canvas_expansion %>&showRulers=<%= !hide_rulers %>"
|
|
28
|
+
width="<%= width %>" height="<%= height %>" id="svgedit_<%= id %>" onload="initEmbed_<%= id %>();"></iframe>
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
<% # Clients of this partial must supply the following variables:
|
|
2
|
+
# id
|
|
3
|
+
# value
|
|
4
|
+
#
|
|
5
|
+
# Additionally, they may override the following variables:
|
|
6
|
+
show_menu ||= false
|
|
7
|
+
hide_image_tool ||= false
|
|
8
|
+
canvas_width ||= 640,
|
|
9
|
+
canvas_height ||= 480,
|
|
10
|
+
canvas_expansion ||= 3
|
|
11
|
+
hide_rulers ||= false
|
|
12
|
+
width ||= "750px"
|
|
13
|
+
height ||= "650px" %>
|
|
14
|
+
|
|
15
|
+
<%= javascript_include_tag "embedapi" %>
|
|
16
|
+
<%= javascript_include_tag "svgutils" %>
|
|
17
|
+
|
|
18
|
+
<script type="text/javascript">
|
|
19
|
+
<%= render :partial => "sketchily/embed",
|
|
20
|
+
:formats => :js,
|
|
21
|
+
:locals => {:id => id,
|
|
22
|
+
:value => value,
|
|
23
|
+
:show_menu => show_menu,
|
|
24
|
+
:hide_image_tool => hide_image_tool} %>
|
|
25
|
+
</script>
|
|
26
|
+
|
|
27
|
+
<iframe src="/assets/svg-editor.html?source=&dimensions=<%= "#{canvas_width},#{canvas_height}" %>&canvas_expansion=<%= canvas_expansion %>&showRulers=<%= !hide_rulers %>"
|
|
28
|
+
width="<%= width %>" height="<%= height %>" id="svgedit_<%= id %>" onload="initEmbed_<%= id %>();"></iframe>
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
<% # This partial requires svgutils.js
|
|
2
|
+
#
|
|
3
|
+
# Clients of this partial must supply the following variables:
|
|
4
|
+
# id
|
|
5
|
+
# value
|
|
6
|
+
# show_menu
|
|
7
|
+
# hide_image_tool %>
|
|
8
|
+
|
|
9
|
+
var svgCanvas_<%= id %> = null;
|
|
10
|
+
|
|
11
|
+
function handleSvgData_<%= id %>(data, error) {
|
|
12
|
+
if (error) {
|
|
13
|
+
alert('Error: ' + error);
|
|
14
|
+
}
|
|
15
|
+
else {
|
|
16
|
+
$("input#<%= id %>").attr("value", svgedit.utilities.encode64("<?xml version=\"1.0\"?>\n" + data));
|
|
17
|
+
$("input#<%= id %>").closest("form").submit();
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
function initEmbed_<%= id %>() {
|
|
22
|
+
var frame = document.getElementById('svgedit_<%= id %>');
|
|
23
|
+
svgCanvas_<%= id %> = new embedded_svg_edit(frame);
|
|
24
|
+
|
|
25
|
+
var doc;
|
|
26
|
+
doc = frame.contentDocument;
|
|
27
|
+
if (!doc) {
|
|
28
|
+
doc = frame.contentWindow.document;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
<% if show_menu %>
|
|
32
|
+
var mainButton = doc.getElementById('main_button');
|
|
33
|
+
mainButton.style.display = 'block';
|
|
34
|
+
var toolsTop = doc.getElementById('tools_top');
|
|
35
|
+
toolsTop.style.left = '120px';
|
|
36
|
+
toolsTop.style.right = '2px';
|
|
37
|
+
<% end %>
|
|
38
|
+
|
|
39
|
+
<% if hide_image_tool %>
|
|
40
|
+
var imageTool = doc.getElementById('tool_image');
|
|
41
|
+
imageTool.style.display = 'none';
|
|
42
|
+
<% end %>
|
|
43
|
+
|
|
44
|
+
$("input#<%= id %>").closest("form").one("submit", function(event) {
|
|
45
|
+
svgCanvas_<%= id %>.getSvgString()(handleSvgData_<%= id %>);
|
|
46
|
+
event.preventDefault();
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
svgCanvas_<%= id %>.setSvgString(svgedit.utilities.decode64("<%= value.try(:squish) %>"));
|
|
50
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
<% # This partial requires svgutils.js
|
|
2
|
+
#
|
|
3
|
+
# Clients of this partial must supply the following variables:
|
|
4
|
+
# id
|
|
5
|
+
# value
|
|
6
|
+
# show_menu
|
|
7
|
+
# hide_image_tool %>
|
|
8
|
+
|
|
9
|
+
var svgCanvas_<%= id %> = null;
|
|
10
|
+
|
|
11
|
+
function handleSvgData_<%= id %>(data, error) {
|
|
12
|
+
if (error) {
|
|
13
|
+
alert('Error: ' + error);
|
|
14
|
+
}
|
|
15
|
+
else {
|
|
16
|
+
$("input#<%= id %>").attr("value", svgedit.utilities.encode64("<?xml version=\"1.0\"?>\n" + data));
|
|
17
|
+
$("input#<%= id %>").closest("form").submit();
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
function initEmbed_<%= id %>() {
|
|
22
|
+
var frame = document.getElementById('svgedit_<%= id %>');
|
|
23
|
+
svgCanvas_<%= id %> = new embedded_svg_edit(frame);
|
|
24
|
+
|
|
25
|
+
var doc;
|
|
26
|
+
doc = frame.contentDocument;
|
|
27
|
+
if (!doc) {
|
|
28
|
+
doc = frame.contentWindow.document;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
<% if show_menu %>
|
|
32
|
+
var mainButton = doc.getElementById('main_button');
|
|
33
|
+
mainButton.style.display = 'block';
|
|
34
|
+
var toolsTop = doc.getElementById('tools_top');
|
|
35
|
+
toolsTop.style.left = '120px';
|
|
36
|
+
toolsTop.style.right = '2px';
|
|
37
|
+
<% end %>
|
|
38
|
+
|
|
39
|
+
<% if hide_image %>
|
|
40
|
+
var imageTool = doc.getElementById('tool_image');
|
|
41
|
+
imageTool.style.display = 'none';
|
|
42
|
+
<% end %>
|
|
43
|
+
|
|
44
|
+
$("input#<%= id %>").closest("form").one("submit", function(event) {
|
|
45
|
+
svgCanvas_<%= id %>.getSvgString()(handleSvgData_<%= id %>);
|
|
46
|
+
event.preventDefault();
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
svgCanvas_<%= id %>.setSvgString(svgedit.utilities.decode64("<%= value.try(:squish) %>"));
|
|
50
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
<% # Clients of this partial must supply the following variables:
|
|
2
|
+
# template
|
|
3
|
+
# object_name
|
|
4
|
+
# method
|
|
5
|
+
# options %>
|
|
6
|
+
|
|
7
|
+
<% sketchily_tag = ActionView::Helpers::InstanceTag.new(object_name, method, template, options.delete(:object)) %>
|
|
8
|
+
|
|
9
|
+
<%= render :partial => "sketchily/embed",
|
|
10
|
+
:formats => :html,
|
|
11
|
+
:locals => {:id => sketchily_tag.send(:tag_id),
|
|
12
|
+
:value => sketchily_tag.value(sketchily_tag.object),
|
|
13
|
+
:show_menu => options[:show_menu],
|
|
14
|
+
:hide_image_tool => options[:hide_image_tool],
|
|
15
|
+
:canvas_width => options[:canvas_width],
|
|
16
|
+
:canvas_height => options[:canvas_height],
|
|
17
|
+
:canvas_expansion => options[:canvas_expansion],
|
|
18
|
+
:hide_rulers => options[:hide_rulers],
|
|
19
|
+
:width => options[:width],
|
|
20
|
+
:height => options[:height]} %>
|
|
21
|
+
|
|
22
|
+
<%= sketchily_tag.to_input_field_tag("hidden", options.except(:show_menu, :hide_image_tool, :canvas_width, :canvas_height, :canvas_expansion, :hide_rulers, :width, :height)) %>
|
|
23
|
+
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
<% # Clients of this partial must supply the following variables:
|
|
2
|
+
# template
|
|
3
|
+
# object_name
|
|
4
|
+
# method
|
|
5
|
+
# options %>
|
|
6
|
+
|
|
7
|
+
<% sketchily_tag = ActionView::Helpers::InstanceTag.new(object_name, method, template, options.delete(:object)) %>
|
|
8
|
+
|
|
9
|
+
<%= render :partial => "sketchily/embed",
|
|
10
|
+
:formats => :html,
|
|
11
|
+
:locals => {:id => sketchily_tag.send(:tag_id),
|
|
12
|
+
:value => sketchily_tag.value(sketchily_tag.object),
|
|
13
|
+
:show_menu => options[:show_menu],
|
|
14
|
+
:hide_image_tool => options[:hide_image_tool],
|
|
15
|
+
:canvas_width => options[:canvas_width],
|
|
16
|
+
:canvas_height => options[:canvas_height],
|
|
17
|
+
:canvas_expansion => options[:canvas_expansion],
|
|
18
|
+
:hide_rulers => options[:hide_rulers],
|
|
19
|
+
:width => options[:width],
|
|
20
|
+
:height => options[:height]} %>
|
|
21
|
+
|
|
22
|
+
<%= sketchily_tag.to_input_field_tag("hidden", options.except(:show_menu, :hide_image_tool, :canvas_dimensions, :canvas_expansion, :hide_rulers, :width, :height)) %>
|
|
23
|
+
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
<% # Clients of this partial must supply the following variables:
|
|
2
|
+
# name
|
|
3
|
+
# id
|
|
4
|
+
# value
|
|
5
|
+
# options %>
|
|
6
|
+
|
|
7
|
+
<%= render :partial => "sketchily/embed",
|
|
8
|
+
:formats => :html,
|
|
9
|
+
:locals => {:id => id,
|
|
10
|
+
:value => value,
|
|
11
|
+
:show_menu => options[:show_menu],
|
|
12
|
+
:hide_image_tool => options[:hide_image_tool],
|
|
13
|
+
:canvas_width => options[:canvas_width],
|
|
14
|
+
:canvas_height => options[:canvas_height],
|
|
15
|
+
:canvas_expansion => options[:canvas_expansion],
|
|
16
|
+
:hide_rulers => options[:hide_rulers],
|
|
17
|
+
:width => options[:width],
|
|
18
|
+
:height => options[:height]} %>
|
|
19
|
+
|
|
20
|
+
<%= tag :input, { "type" => "hidden", "name" => name, "id" => id, "value" => value }.update(options.except(:show_menu, :hide_image_tool, :canvas_width, :canvas_height, :canvas_expansion, :hide_rulers, :width, :height).stringify_keys) %>
|
|
21
|
+
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
<% # Clients of this partial must supply the following variables:
|
|
2
|
+
# name
|
|
3
|
+
# id
|
|
4
|
+
# value
|
|
5
|
+
# options %>
|
|
6
|
+
|
|
7
|
+
<%= render :partial => "sketchily/embed",
|
|
8
|
+
:formats => :html,
|
|
9
|
+
:locals => {:id => id,
|
|
10
|
+
:value => value,
|
|
11
|
+
:show_menu => options[:show_menu],
|
|
12
|
+
:hide_image_tool => options[:hide_image_tool],
|
|
13
|
+
:canvas_width => options[:canvas_width],
|
|
14
|
+
:canvas_height => options[:canvas_height],
|
|
15
|
+
:canvas_expansion => options[:canvas_expansion],
|
|
16
|
+
:hide_rulers => options[:hide_rulers],
|
|
17
|
+
:width => options[:width],
|
|
18
|
+
:height => options[:height]} %>
|
|
19
|
+
|
|
20
|
+
<%= tag :input, { "type" => "hidden", "name" => name, "id" => id, "value" => value }.update(options.except(:show_menu, :hide_image_tool, :canvas_dimensions, :canvas_expansion, :hide_rulers, :width, :height).stringify_keys) %>
|
|
21
|
+
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
<% # Clients of this partial may override the following variables:
|
|
2
|
+
show_menu ||= false
|
|
3
|
+
name ||= svgedit
|
|
4
|
+
value ||= nil
|
|
5
|
+
options ||= {}
|
|
6
|
+
%>
|
|
7
|
+
|
|
8
|
+
<script type="text/javascript" src="/assets/embedapi.js"></script>
|
|
9
|
+
<script type="text/javascript">
|
|
10
|
+
var svgCanvas = null;
|
|
11
|
+
|
|
12
|
+
function init_embed() {
|
|
13
|
+
var frame = document.getElementById('svgedit');
|
|
14
|
+
svgCanvas = new embedded_svg_edit(frame);
|
|
15
|
+
svgCanvas.setSvgString("<%= value %>");
|
|
16
|
+
|
|
17
|
+
<% unless show_menu %>
|
|
18
|
+
// Hide main button, as we will be controlling new/load/save etc from the host document
|
|
19
|
+
var doc;
|
|
20
|
+
doc = frame.contentDocument;
|
|
21
|
+
if (!doc) {
|
|
22
|
+
doc = frame.contentWindow.document;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
var mainButton = doc.getElementById('main_button');
|
|
26
|
+
mainButton.style.display = 'none';
|
|
27
|
+
<% end %>
|
|
28
|
+
|
|
29
|
+
$("form").attr("onSubmit", "return saveSvg()");
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function handleSvgData(data, error) {
|
|
33
|
+
if (error) {
|
|
34
|
+
alert('Error: ' + error);
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
$("#<%= sanitize_to_id(name) %>").attr("value", data);
|
|
39
|
+
return true;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
function saveSvg() {
|
|
44
|
+
return svgCanvas.getSvgString()(handleSvgData);
|
|
45
|
+
}
|
|
46
|
+
</script>
|
|
47
|
+
|
|
48
|
+
<iframe src="/assets/svg-editor" width="900px" height="600px" id="svgedit" onload="init_embed()"></iframe>
|
|
49
|
+
|
|
50
|
+
<%= tag :input, { "type" => "hidden", "name" => name, "id" => sanitize_to_id(name), "value" => value }.update(options.stringify_keys) %>
|
|
51
|
+
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
<% # Clients of this partial may override the following variable:
|
|
2
|
+
svgstring ||= nil
|
|
3
|
+
%>
|
|
4
|
+
<script type="text/javascript" src="/assets/embedapi.js"></script>
|
|
5
|
+
<script type="text/javascript">
|
|
6
|
+
var svgCanvas = null;
|
|
7
|
+
|
|
8
|
+
function init_embed() {
|
|
9
|
+
var frame = document.getElementById('svgedit');
|
|
10
|
+
svgCanvas = new embedded_svg_edit(frame);
|
|
11
|
+
svgCanvas.setSvgString(svgstring);
|
|
12
|
+
|
|
13
|
+
if () {
|
|
14
|
+
// Hide main button, as we will be controlling new/load/save etc from the host document
|
|
15
|
+
var doc;
|
|
16
|
+
doc = frame.contentDocument;
|
|
17
|
+
if (!doc) {
|
|
18
|
+
doc = frame.contentWindow.document;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
var mainButton = doc.getElementById('main_button');
|
|
22
|
+
mainButton.style.display = 'none';
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function handleSvgData(data, error) {
|
|
26
|
+
alert('Congratulations. Your SVG string is back in the host page, do with it what you will\n\n' + data);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
function saveSvg() {
|
|
31
|
+
svgCanvas.getSvgString()(handleSvgData);
|
|
32
|
+
}
|
|
33
|
+
</script>
|
|
34
|
+
|
|
35
|
+
<iframe src="/assets/svg-editor" width="900px" height="600px" id="svgedit" onload="init_embed()"></iframe>
|