sketchily 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
@@ -0,0 +1,56 @@
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
2
|
+
<html xmlns="http://www.w3.org/1999/xhtml" >
|
3
|
+
<head>
|
4
|
+
<title></title>
|
5
|
+
</head>
|
6
|
+
<body>
|
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
|
+
|
16
|
+
// Hide main button, as we will be controlling new/load/save etc from the host document
|
17
|
+
var doc;
|
18
|
+
doc = frame.contentDocument;
|
19
|
+
if (!doc)
|
20
|
+
{
|
21
|
+
doc = frame.contentWindow.document;
|
22
|
+
}
|
23
|
+
|
24
|
+
var mainButton = doc.getElementById('main_button');
|
25
|
+
mainButton.style.display = 'none';
|
26
|
+
}
|
27
|
+
|
28
|
+
function handleSvgData(data, error) {
|
29
|
+
if (error)
|
30
|
+
{
|
31
|
+
alert('error ' + error);
|
32
|
+
}
|
33
|
+
else
|
34
|
+
{
|
35
|
+
alert('Congratulations. Your SVG string is back in the host page, do with it what you will\n\n' + data);
|
36
|
+
}
|
37
|
+
}
|
38
|
+
|
39
|
+
function loadSvg() {
|
40
|
+
var svgexample = '<svg width="640" height="480" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg"><g><title>Layer 1</title><rect stroke-width="5" stroke="#000000" fill="#FF0000" id="svg_1" height="35" width="51" y="35" x="32"/><ellipse ry="15" rx="24" stroke-width="5" stroke="#000000" fill="#0000ff" id="svg_2" cy="60" cx="66"/></g></svg>';
|
41
|
+
svgCanvas.setSvgString(svgexample);
|
42
|
+
}
|
43
|
+
|
44
|
+
function saveSvg() {
|
45
|
+
svgCanvas.getSvgString()(handleSvgData);
|
46
|
+
}
|
47
|
+
</script>
|
48
|
+
|
49
|
+
|
50
|
+
<button onclick="loadSvg();">Load example</button>
|
51
|
+
<button onclick="saveSvg();">Save data</button>
|
52
|
+
<br/>
|
53
|
+
|
54
|
+
<iframe src="/assets/svg-editor" width="900px" height="600px" id="svgedit" onload="init_embed()"></iframe>
|
55
|
+
</body>
|
56
|
+
</html>
|
@@ -0,0 +1,173 @@
|
|
1
|
+
/*
|
2
|
+
function embedded_svg_edit(frame){
|
3
|
+
//initialize communication
|
4
|
+
this.frame = frame;
|
5
|
+
this.stack = []; //callback stack
|
6
|
+
|
7
|
+
var editapi = this;
|
8
|
+
|
9
|
+
window.addEventListener("message", function(e){
|
10
|
+
if(e.data.substr(0,5) == "ERROR"){
|
11
|
+
editapi.stack.splice(0,1)[0](e.data,"error")
|
12
|
+
}else{
|
13
|
+
editapi.stack.splice(0,1)[0](e.data)
|
14
|
+
}
|
15
|
+
}, false)
|
16
|
+
}
|
17
|
+
|
18
|
+
embedded_svg_edit.prototype.call = function(code, callback){
|
19
|
+
this.stack.push(callback);
|
20
|
+
this.frame.contentWindow.postMessage(code,"*");
|
21
|
+
}
|
22
|
+
|
23
|
+
embedded_svg_edit.prototype.getSvgString = function(callback){
|
24
|
+
this.call("svgCanvas.getSvgString()",callback)
|
25
|
+
}
|
26
|
+
|
27
|
+
embedded_svg_edit.prototype.setSvgString = function(svg){
|
28
|
+
this.call("svgCanvas.setSvgString('"+svg.replace(/'/g, "\\'")+"')");
|
29
|
+
}
|
30
|
+
*/
|
31
|
+
|
32
|
+
|
33
|
+
/*
|
34
|
+
Embedded SVG-edit API
|
35
|
+
|
36
|
+
General usage:
|
37
|
+
- Have an iframe somewhere pointing to a version of svg-edit > r1000
|
38
|
+
- Initialize the magic with:
|
39
|
+
var svgCanvas = new embedded_svg_edit(window.frames['svgedit']);
|
40
|
+
- Pass functions in this format:
|
41
|
+
svgCanvas.setSvgString("string")
|
42
|
+
- Or if a callback is needed:
|
43
|
+
svgCanvas.setSvgString("string")(function(data, error){
|
44
|
+
if(error){
|
45
|
+
//there was an error
|
46
|
+
}else{
|
47
|
+
//handle data
|
48
|
+
}
|
49
|
+
})
|
50
|
+
|
51
|
+
Everything is done with the same API as the real svg-edit,
|
52
|
+
and all documentation is unchanged. The only difference is
|
53
|
+
when handling returns, the callback notation is used instead.
|
54
|
+
|
55
|
+
var blah = new embedded_svg_edit(window.frames['svgedit']);
|
56
|
+
blah.clearSelection("woot","blah",1337,[1,2,3,4,5,"moo"],-42,{a: "tree",b:6, c: 9})(function(){console.log("GET DATA",arguments)})
|
57
|
+
*/
|
58
|
+
|
59
|
+
function embedded_svg_edit(frame){
|
60
|
+
//initialize communication
|
61
|
+
this.frame = frame;
|
62
|
+
//this.stack = [] //callback stack
|
63
|
+
this.callbacks = {}; //successor to stack
|
64
|
+
this.encode = embedded_svg_edit.encode;
|
65
|
+
//List of functions extracted with this:
|
66
|
+
//Run in firebug on http://svg-edit.googlecode.com/svn/trunk/docs/files/svgcanvas-js.html
|
67
|
+
|
68
|
+
//for(var i=0,q=[],f = document.querySelectorAll("div.CFunction h3.CTitle a");i<f.length;i++){q.push(f[i].name)};q
|
69
|
+
//var functions = ["clearSelection", "addToSelection", "removeFromSelection", "open", "save", "getSvgString", "setSvgString",
|
70
|
+
//"createLayer", "deleteCurrentLayer", "setCurrentLayer", "renameCurrentLayer", "setCurrentLayerPosition", "setLayerVisibility",
|
71
|
+
//"moveSelectedToLayer", "clear"];
|
72
|
+
|
73
|
+
|
74
|
+
//Newer, well, it extracts things that aren't documented as well. All functions accessible through the normal thingy can now be accessed though the API
|
75
|
+
//var l=[];for(var i in svgCanvas){if(typeof svgCanvas[i] == "function"){l.push(i)}};
|
76
|
+
//run in svgedit itself
|
77
|
+
var functions = ["updateElementFromJson", "embedImage", "fixOperaXML", "clearSelection", "addToSelection",
|
78
|
+
"removeFromSelection", "addNodeToSelection", "open", "save", "getSvgString", "setSvgString", "createLayer",
|
79
|
+
"deleteCurrentLayer", "getCurrentDrawing", "setCurrentLayer", "renameCurrentLayer", "setCurrentLayerPosition",
|
80
|
+
"setLayerVisibility", "moveSelectedToLayer", "clear", "clearPath", "getNodePoint", "clonePathNode", "deletePathNode",
|
81
|
+
"getResolution", "getImageTitle", "setImageTitle", "setResolution", "setBBoxZoom", "setZoom", "getMode", "setMode",
|
82
|
+
"getStrokeColor", "setStrokeColor", "getFillColor", "setFillColor", "setStrokePaint", "setFillPaint", "getStrokeWidth",
|
83
|
+
"setStrokeWidth", "getStrokeStyle", "setStrokeStyle", "getOpacity", "setOpacity", "getFillOpacity", "setFillOpacity",
|
84
|
+
"getStrokeOpacity", "setStrokeOpacity", "getTransformList", "getBBox", "getRotationAngle", "setRotationAngle", "each",
|
85
|
+
"bind", "setIdPrefix", "getBold", "setBold", "getItalic", "setItalic", "getFontFamily", "setFontFamily", "getFontSize",
|
86
|
+
"setFontSize", "getText", "setTextContent", "setImageURL", "setRectRadius", "setSegType", "quickClone",
|
87
|
+
"changeSelectedAttributeNoUndo", "changeSelectedAttribute", "deleteSelectedElements", "groupSelectedElements", "zoomChanged",
|
88
|
+
"ungroupSelectedElement", "moveToTopSelectedElement", "moveToBottomSelectedElement", "moveSelectedElements",
|
89
|
+
"getStrokedBBox", "getVisibleElements", "cycleElement", "getUndoStackSize", "getRedoStackSize", "getNextUndoCommandText",
|
90
|
+
"getNextRedoCommandText", "undo", "redo", "cloneSelectedElements", "alignSelectedElements", "getZoom", "getVersion",
|
91
|
+
"setIconSize", "setLang", "setCustomHandlers"];
|
92
|
+
|
93
|
+
//TODO: rewrite the following, it's pretty scary.
|
94
|
+
for(var i = 0; i < functions.length; i++){
|
95
|
+
this[functions[i]] = (function(d){
|
96
|
+
return function(){
|
97
|
+
var t = this //new callback
|
98
|
+
for(var g = 0, args = []; g < arguments.length; g++){
|
99
|
+
args.push(arguments[g]);
|
100
|
+
}
|
101
|
+
var cbid = t.send(d,args, function(){}) //the callback (currently it's nothing, but will be set later
|
102
|
+
|
103
|
+
return function(newcallback){
|
104
|
+
t.callbacks[cbid] = newcallback; //set callback
|
105
|
+
}
|
106
|
+
}
|
107
|
+
})(functions[i])
|
108
|
+
}
|
109
|
+
//TODO: use AddEvent for Trident browsers, currently they dont support SVG, but they do support onmessage
|
110
|
+
var t = this;
|
111
|
+
window.addEventListener("message", function(e){
|
112
|
+
if(e.data.substr(0,4)=="SVGe"){ //because svg-edit is too longish
|
113
|
+
var data = e.data.substr(4);
|
114
|
+
var cbid = data.substr(0, data.indexOf(";"));
|
115
|
+
if(t.callbacks[cbid]){
|
116
|
+
if(data.substr(cbid.length + 1,6) != "error:"){
|
117
|
+
t.callbacks[cbid](eval("("+data.substr(cbid.length+1)+")"))
|
118
|
+
}else{
|
119
|
+
t.callbacks[cbid](data, "error");
|
120
|
+
}
|
121
|
+
}
|
122
|
+
}
|
123
|
+
//this.stack.shift()[0](e.data,e.data.substr(0,5) == "ERROR"?'error':null) //replace with shift
|
124
|
+
}, false)
|
125
|
+
}
|
126
|
+
|
127
|
+
embedded_svg_edit.encode = function(obj){
|
128
|
+
//simple partial JSON encoder implementation
|
129
|
+
if(window.JSON && JSON.stringify) return JSON.stringify(obj);
|
130
|
+
var enc = arguments.callee; //for purposes of recursion
|
131
|
+
|
132
|
+
if(typeof obj == "boolean" || typeof obj == "number"){
|
133
|
+
return obj+'' //should work...
|
134
|
+
}else if(typeof obj == "string"){
|
135
|
+
//a large portion of this is stolen from Douglas Crockford's json2.js
|
136
|
+
return '"'+
|
137
|
+
obj.replace(
|
138
|
+
/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g
|
139
|
+
, function (a) {
|
140
|
+
return '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
|
141
|
+
})
|
142
|
+
+'"'; //note that this isn't quite as purtyful as the usualness
|
143
|
+
}else if(obj.length){ //simple hackish test for arrayish-ness
|
144
|
+
for(var i = 0; i < obj.length; i++){
|
145
|
+
obj[i] = enc(obj[i]); //encode every sub-thingy on top
|
146
|
+
}
|
147
|
+
return "["+obj.join(",")+"]";
|
148
|
+
}else{
|
149
|
+
var pairs = []; //pairs will be stored here
|
150
|
+
for(var k in obj){ //loop through thingys
|
151
|
+
pairs.push(enc(k)+":"+enc(obj[k])); //key: value
|
152
|
+
}
|
153
|
+
return "{"+pairs.join(",")+"}" //wrap in the braces
|
154
|
+
}
|
155
|
+
}
|
156
|
+
|
157
|
+
embedded_svg_edit.prototype.send = function(name, args, callback){
|
158
|
+
var cbid = Math.floor(Math.random()*31776352877+993577).toString();
|
159
|
+
//this.stack.push(callback);
|
160
|
+
this.callbacks[cbid] = callback;
|
161
|
+
for(var argstr = [], i = 0; i < args.length; i++){
|
162
|
+
argstr.push(this.encode(args[i]))
|
163
|
+
}
|
164
|
+
var t = this;
|
165
|
+
setTimeout(function(){//delay for the callback to be set in case its synchronous
|
166
|
+
t.frame.contentWindow.postMessage(cbid+";svgCanvas['"+name+"']("+argstr.join(",")+")","*");
|
167
|
+
}, 0);
|
168
|
+
return cbid;
|
169
|
+
//this.stack.shift()("svgCanvas['"+name+"']("+argstr.join(",")+")")
|
170
|
+
}
|
171
|
+
|
172
|
+
|
173
|
+
|
@@ -0,0 +1,41 @@
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg">
|
2
|
+
<g id="tool_closepath">
|
3
|
+
<svg viewBox="0 0 300 300" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
4
|
+
<g>
|
5
|
+
<title>Layer 1</title>
|
6
|
+
<path stroke="#000" stroke-width="15" fill="#ffc8c8" d="m121.5,40l-84,106l27,115l166,2l29,-111"/>
|
7
|
+
<line x1="240" y1="136" x2="169.5" y2="74" stroke="#A00" stroke-width="25" fill="none"/>
|
8
|
+
<path stroke="none" fill ="#A00" d="m158,65l31,74l-3,-50l51,-3z"/>
|
9
|
+
<g stroke-width="15" stroke="#00f" fill="#0ff">
|
10
|
+
<circle r="30" cy="41" cx="123"/>
|
11
|
+
<circle r="30" cy="146" cx="40"/>
|
12
|
+
<circle r="30" cy="260" cx="69"/>
|
13
|
+
<circle r="30" cy="260" cx="228"/>
|
14
|
+
<circle r="30" cy="148" cx="260"/>
|
15
|
+
</g>
|
16
|
+
</g>
|
17
|
+
</svg>
|
18
|
+
</g>
|
19
|
+
<g id="tool_openpath">
|
20
|
+
<svg viewBox="0 0 300 300" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
21
|
+
<g>
|
22
|
+
<title>Layer 1</title>
|
23
|
+
<path stroke="#000" stroke-width="15" fill="#ffc8c8" d="m123.5,38l-84,106l27,115l166,2l29,-111"/>
|
24
|
+
<line x1="276.5" y1="153" x2="108.5" y2="24" stroke="#000" stroke-width="10" fill="none"/>
|
25
|
+
<g stroke-width="15" stroke="#00f" fill="#0ff">
|
26
|
+
<circle r="30" cy="41" cx="123"/>
|
27
|
+
<circle r="30" cy="146" cx="40"/>
|
28
|
+
<circle r="30" cy="260" cx="69"/>
|
29
|
+
<circle r="30" cy="260" cx="228"/>
|
30
|
+
<circle r="30" cy="148" cx="260"/>
|
31
|
+
</g>
|
32
|
+
<g stroke="#A00" stroke-width="15" fill="none">
|
33
|
+
<line x1="168" y1="24" x2="210" y2="150"/>
|
34
|
+
<line x1="210" y1="24" x2="168" y2="150"/>
|
35
|
+
</g>
|
36
|
+
</g>
|
37
|
+
</svg>
|
38
|
+
</g>
|
39
|
+
|
40
|
+
<g id="svg_eof"/>
|
41
|
+
</svg>
|
@@ -0,0 +1,298 @@
|
|
1
|
+
/*
|
2
|
+
* ext-arrows.js
|
3
|
+
*
|
4
|
+
* Licensed under the MIT License
|
5
|
+
*
|
6
|
+
* Copyright(c) 2010 Alexis Deveria
|
7
|
+
*
|
8
|
+
*/
|
9
|
+
|
10
|
+
|
11
|
+
svgEditor.addExtension("Arrows", function(S) {
|
12
|
+
var svgcontent = S.svgcontent,
|
13
|
+
addElem = S.addSvgElementFromJson,
|
14
|
+
nonce = S.nonce,
|
15
|
+
randomize_ids = S.randomize_ids,
|
16
|
+
selElems;
|
17
|
+
|
18
|
+
svgCanvas.bind('setnonce', setArrowNonce);
|
19
|
+
svgCanvas.bind('unsetnonce', unsetArrowNonce);
|
20
|
+
|
21
|
+
var lang_list = {
|
22
|
+
"en":[
|
23
|
+
{"id": "arrow_none", "textContent": "No arrow" }
|
24
|
+
],
|
25
|
+
"fr":[
|
26
|
+
{"id": "arrow_none", "textContent": "Sans flèche" }
|
27
|
+
]
|
28
|
+
};
|
29
|
+
|
30
|
+
var prefix = 'se_arrow_';
|
31
|
+
if (randomize_ids) {
|
32
|
+
var arrowprefix = prefix + nonce + '_';
|
33
|
+
} else {
|
34
|
+
var arrowprefix = prefix;
|
35
|
+
}
|
36
|
+
|
37
|
+
var pathdata = {
|
38
|
+
fw: {d:"m0,0l10,5l-10,5l5,-5l-5,-5z", refx:8, id: arrowprefix + 'fw'},
|
39
|
+
bk: {d:"m10,0l-10,5l10,5l-5,-5l5,-5z", refx:2, id: arrowprefix + 'bk'}
|
40
|
+
}
|
41
|
+
|
42
|
+
function setArrowNonce(window, n) {
|
43
|
+
randomize_ids = true;
|
44
|
+
arrowprefix = prefix + n + '_';
|
45
|
+
pathdata.fw.id = arrowprefix + 'fw';
|
46
|
+
pathdata.bk.id = arrowprefix + 'bk';
|
47
|
+
}
|
48
|
+
|
49
|
+
function unsetArrowNonce(window) {
|
50
|
+
randomize_ids = false;
|
51
|
+
arrowprefix = prefix;
|
52
|
+
pathdata.fw.id = arrowprefix + 'fw';
|
53
|
+
pathdata.bk.id = arrowprefix + 'bk';
|
54
|
+
}
|
55
|
+
|
56
|
+
function getLinked(elem, attr) {
|
57
|
+
var str = elem.getAttribute(attr);
|
58
|
+
if(!str) return null;
|
59
|
+
var m = str.match(/\(\#(.*)\)/);
|
60
|
+
if(!m || m.length !== 2) {
|
61
|
+
return null;
|
62
|
+
}
|
63
|
+
return S.getElem(m[1]);
|
64
|
+
}
|
65
|
+
|
66
|
+
function showPanel(on) {
|
67
|
+
$('#arrow_panel').toggle(on);
|
68
|
+
|
69
|
+
if(on) {
|
70
|
+
var el = selElems[0];
|
71
|
+
var end = el.getAttribute("marker-end");
|
72
|
+
var start = el.getAttribute("marker-start");
|
73
|
+
var mid = el.getAttribute("marker-mid");
|
74
|
+
var val;
|
75
|
+
|
76
|
+
if(end && start) {
|
77
|
+
val = "both";
|
78
|
+
} else if(end) {
|
79
|
+
val = "end";
|
80
|
+
} else if(start) {
|
81
|
+
val = "start";
|
82
|
+
} else if(mid) {
|
83
|
+
val = "mid";
|
84
|
+
if(mid.indexOf("bk") != -1) {
|
85
|
+
val = "mid_bk";
|
86
|
+
}
|
87
|
+
}
|
88
|
+
|
89
|
+
if(!start && !mid && !end) {
|
90
|
+
val = "none";
|
91
|
+
}
|
92
|
+
|
93
|
+
$("#arrow_list").val(val);
|
94
|
+
}
|
95
|
+
}
|
96
|
+
|
97
|
+
function resetMarker() {
|
98
|
+
var el = selElems[0];
|
99
|
+
el.removeAttribute("marker-start");
|
100
|
+
el.removeAttribute("marker-mid");
|
101
|
+
el.removeAttribute("marker-end");
|
102
|
+
}
|
103
|
+
|
104
|
+
function addMarker(dir, type, id) {
|
105
|
+
// TODO: Make marker (or use?) per arrow type, since refX can be different
|
106
|
+
id = id || arrowprefix + dir;
|
107
|
+
|
108
|
+
var marker = S.getElem(id);
|
109
|
+
|
110
|
+
var data = pathdata[dir];
|
111
|
+
|
112
|
+
if(type == "mid") {
|
113
|
+
data.refx = 5;
|
114
|
+
}
|
115
|
+
|
116
|
+
if(!marker) {
|
117
|
+
marker = addElem({
|
118
|
+
"element": "marker",
|
119
|
+
"attr": {
|
120
|
+
"viewBox": "0 0 10 10",
|
121
|
+
"id": id,
|
122
|
+
"refY": 5,
|
123
|
+
"markerUnits": "strokeWidth",
|
124
|
+
"markerWidth": 5,
|
125
|
+
"markerHeight": 5,
|
126
|
+
"orient": "auto",
|
127
|
+
"style": "pointer-events:none" // Currently needed for Opera
|
128
|
+
}
|
129
|
+
});
|
130
|
+
var arrow = addElem({
|
131
|
+
"element": "path",
|
132
|
+
"attr": {
|
133
|
+
"d": data.d,
|
134
|
+
"fill": "#000000"
|
135
|
+
}
|
136
|
+
});
|
137
|
+
marker.appendChild(arrow);
|
138
|
+
S.findDefs().appendChild(marker);
|
139
|
+
}
|
140
|
+
|
141
|
+
marker.setAttribute('refX', data.refx);
|
142
|
+
|
143
|
+
return marker;
|
144
|
+
}
|
145
|
+
|
146
|
+
function setArrow() {
|
147
|
+
var type = this.value;
|
148
|
+
resetMarker();
|
149
|
+
|
150
|
+
if(type == "none") {
|
151
|
+
return;
|
152
|
+
}
|
153
|
+
|
154
|
+
// Set marker on element
|
155
|
+
var dir = "fw";
|
156
|
+
if(type == "mid_bk") {
|
157
|
+
type = "mid";
|
158
|
+
dir = "bk";
|
159
|
+
} else if(type == "both") {
|
160
|
+
addMarker("bk", type);
|
161
|
+
svgCanvas.changeSelectedAttribute("marker-start", "url(#" + pathdata.bk.id + ")");
|
162
|
+
type = "end";
|
163
|
+
dir = "fw";
|
164
|
+
} else if (type == "start") {
|
165
|
+
dir = "bk";
|
166
|
+
}
|
167
|
+
|
168
|
+
addMarker(dir, type);
|
169
|
+
svgCanvas.changeSelectedAttribute("marker-"+type, "url(#" + pathdata[dir].id + ")");
|
170
|
+
S.call("changed", selElems);
|
171
|
+
}
|
172
|
+
|
173
|
+
function colorChanged(elem) {
|
174
|
+
var color = elem.getAttribute('stroke');
|
175
|
+
|
176
|
+
var mtypes = ['start','mid','end'];
|
177
|
+
var defs = S.findDefs();
|
178
|
+
|
179
|
+
$.each(mtypes, function(i, type) {
|
180
|
+
var marker = getLinked(elem, 'marker-'+type);
|
181
|
+
if(!marker) return;
|
182
|
+
|
183
|
+
var cur_color = $(marker).children().attr('fill');
|
184
|
+
var cur_d = $(marker).children().attr('d');
|
185
|
+
var new_marker = null;
|
186
|
+
if(cur_color === color) return;
|
187
|
+
|
188
|
+
var all_markers = $(defs).find('marker');
|
189
|
+
// Different color, check if already made
|
190
|
+
all_markers.each(function() {
|
191
|
+
var attrs = $(this).children().attr(['fill', 'd']);
|
192
|
+
if(attrs.fill === color && attrs.d === cur_d) {
|
193
|
+
// Found another marker with this color and this path
|
194
|
+
new_marker = this;
|
195
|
+
}
|
196
|
+
});
|
197
|
+
|
198
|
+
if(!new_marker) {
|
199
|
+
// Create a new marker with this color
|
200
|
+
var last_id = marker.id;
|
201
|
+
var dir = last_id.indexOf('_fw') !== -1?'fw':'bk';
|
202
|
+
|
203
|
+
new_marker = addMarker(dir, type, arrowprefix + dir + all_markers.length);
|
204
|
+
|
205
|
+
$(new_marker).children().attr('fill', color);
|
206
|
+
}
|
207
|
+
|
208
|
+
$(elem).attr('marker-'+type, "url(#" + new_marker.id + ")");
|
209
|
+
|
210
|
+
// Check if last marker can be removed
|
211
|
+
var remove = true;
|
212
|
+
$(S.svgcontent).find('line, polyline, path, polygon').each(function() {
|
213
|
+
var elem = this;
|
214
|
+
$.each(mtypes, function(j, mtype) {
|
215
|
+
if($(elem).attr('marker-' + mtype) === "url(#" + marker.id + ")") {
|
216
|
+
return remove = false;
|
217
|
+
}
|
218
|
+
});
|
219
|
+
if(!remove) return false;
|
220
|
+
});
|
221
|
+
|
222
|
+
// Not found, so can safely remove
|
223
|
+
if(remove) {
|
224
|
+
$(marker).remove();
|
225
|
+
}
|
226
|
+
|
227
|
+
});
|
228
|
+
|
229
|
+
}
|
230
|
+
|
231
|
+
return {
|
232
|
+
name: "Arrows",
|
233
|
+
context_tools: [{
|
234
|
+
type: "select",
|
235
|
+
panel: "arrow_panel",
|
236
|
+
title: "Select arrow type",
|
237
|
+
id: "arrow_list",
|
238
|
+
options: {
|
239
|
+
none: "No arrow",
|
240
|
+
end: "---->",
|
241
|
+
start: "<----",
|
242
|
+
both: "<--->",
|
243
|
+
mid: "-->--",
|
244
|
+
mid_bk: "--<--"
|
245
|
+
},
|
246
|
+
defval: "none",
|
247
|
+
events: {
|
248
|
+
change: setArrow
|
249
|
+
}
|
250
|
+
}],
|
251
|
+
callback: function() {
|
252
|
+
$('#arrow_panel').hide();
|
253
|
+
// Set ID so it can be translated in locale file
|
254
|
+
$('#arrow_list option')[0].id = 'connector_no_arrow';
|
255
|
+
},
|
256
|
+
addLangData: function(lang) {
|
257
|
+
return {
|
258
|
+
data: lang_list[lang]
|
259
|
+
};
|
260
|
+
},
|
261
|
+
selectedChanged: function(opts) {
|
262
|
+
|
263
|
+
// Use this to update the current selected elements
|
264
|
+
selElems = opts.elems;
|
265
|
+
|
266
|
+
var i = selElems.length;
|
267
|
+
var marker_elems = ['line','path','polyline','polygon'];
|
268
|
+
|
269
|
+
while(i--) {
|
270
|
+
var elem = selElems[i];
|
271
|
+
if(elem && $.inArray(elem.tagName, marker_elems) != -1) {
|
272
|
+
if(opts.selectedElement && !opts.multiselected) {
|
273
|
+
showPanel(true);
|
274
|
+
} else {
|
275
|
+
showPanel(false);
|
276
|
+
}
|
277
|
+
} else {
|
278
|
+
showPanel(false);
|
279
|
+
}
|
280
|
+
}
|
281
|
+
},
|
282
|
+
elementChanged: function(opts) {
|
283
|
+
var elem = opts.elems[0];
|
284
|
+
if(elem && (
|
285
|
+
elem.getAttribute("marker-start") ||
|
286
|
+
elem.getAttribute("marker-mid") ||
|
287
|
+
elem.getAttribute("marker-end")
|
288
|
+
)) {
|
289
|
+
// var start = elem.getAttribute("marker-start");
|
290
|
+
// var mid = elem.getAttribute("marker-mid");
|
291
|
+
// var end = elem.getAttribute("marker-end");
|
292
|
+
// Has marker, so see if it should match color
|
293
|
+
colorChanged(elem);
|
294
|
+
}
|
295
|
+
|
296
|
+
}
|
297
|
+
};
|
298
|
+
});
|