sketchily 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (284) hide show
  1. data/MIT-LICENSE +20 -0
  2. data/README.md +39 -0
  3. data/Rakefile +40 -0
  4. data/app/helpers/sketchily.rb~ +10 -0
  5. data/app/helpers/sketchily_helper.rb +10 -0
  6. data/app/views/sketchily/_embed.html.erb +28 -0
  7. data/app/views/sketchily/_embed.html.erb~ +28 -0
  8. data/app/views/sketchily/_embed.js.erb +50 -0
  9. data/app/views/sketchily/_embed.js.erb~ +50 -0
  10. data/app/views/sketchily/_sketchily.html.erb +23 -0
  11. data/app/views/sketchily/_sketchily.html.erb~ +23 -0
  12. data/app/views/sketchily/_sketchily_tag.html.erb +21 -0
  13. data/app/views/sketchily/_sketchily_tag.html.erb~ +21 -0
  14. data/app/views/sketchily/_svg_edit_tag.html.erb~ +51 -0
  15. data/app/views/sketchily/svg_edit_tag_.html~ +35 -0
  16. data/lib/sketchily.rb +15 -0
  17. data/lib/sketchily.rb~ +16 -0
  18. data/lib/sketchily/engine.rb +4 -0
  19. data/lib/sketchily/sketchily.rb +28 -0
  20. data/lib/sketchily/sketchily_show.rb~ +13 -0
  21. data/lib/sketchily/sketchily_tag.rb +15 -0
  22. data/lib/sketchily/svg_edit_tag.rb~ +9 -0
  23. data/lib/sketchily/version.rb +3 -0
  24. data/lib/sketchily/version.rb~ +3 -0
  25. data/spec/dummy/README.rdoc +261 -0
  26. data/spec/dummy/Rakefile +7 -0
  27. data/spec/dummy/app/assets/javascripts/application.js +15 -0
  28. data/spec/dummy/app/assets/stylesheets/application.css +13 -0
  29. data/spec/dummy/app/controllers/application_controller.rb +3 -0
  30. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  31. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  32. data/spec/dummy/config.ru +4 -0
  33. data/spec/dummy/config/application.rb +59 -0
  34. data/spec/dummy/config/boot.rb +10 -0
  35. data/spec/dummy/config/database.yml +25 -0
  36. data/spec/dummy/config/environment.rb +5 -0
  37. data/spec/dummy/config/environments/development.rb +37 -0
  38. data/spec/dummy/config/environments/production.rb +67 -0
  39. data/spec/dummy/config/environments/test.rb +37 -0
  40. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  41. data/spec/dummy/config/initializers/inflections.rb +15 -0
  42. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  43. data/spec/dummy/config/initializers/secret_token.rb +7 -0
  44. data/spec/dummy/config/initializers/session_store.rb +8 -0
  45. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  46. data/spec/dummy/config/locales/en.yml +5 -0
  47. data/spec/dummy/config/routes.rb +58 -0
  48. data/spec/dummy/public/404.html +26 -0
  49. data/spec/dummy/public/422.html +26 -0
  50. data/spec/dummy/public/500.html +25 -0
  51. data/spec/dummy/public/favicon.ico +0 -0
  52. data/spec/dummy/script/rails +6 -0
  53. data/spec/lib/sketchily_spec.rb +0 -0
  54. data/spec/spec_helper.rb +11 -0
  55. data/vendor/assets/svg-edit-2.6/browser-not-supported.html +27 -0
  56. data/vendor/assets/svg-edit-2.6/browser.js +180 -0
  57. data/vendor/assets/svg-edit-2.6/canvg/canvg.js +2620 -0
  58. data/vendor/assets/svg-edit-2.6/canvg/rgbcolor.js +287 -0
  59. data/vendor/assets/svg-edit-2.6/contextmenu.js +67 -0
  60. data/vendor/assets/svg-edit-2.6/contextmenu/jquery.contextMenu.js +203 -0
  61. data/vendor/assets/svg-edit-2.6/draw.js +528 -0
  62. data/vendor/assets/svg-edit-2.6/embedapi.html +56 -0
  63. data/vendor/assets/svg-edit-2.6/embedapi.js +173 -0
  64. data/vendor/assets/svg-edit-2.6/extensions/closepath_icons.svg +41 -0
  65. data/vendor/assets/svg-edit-2.6/extensions/ext-arrows.js +298 -0
  66. data/vendor/assets/svg-edit-2.6/extensions/ext-closepath.js +92 -0
  67. data/vendor/assets/svg-edit-2.6/extensions/ext-connector.js +587 -0
  68. data/vendor/assets/svg-edit-2.6/extensions/ext-eyedropper.js +109 -0
  69. data/vendor/assets/svg-edit-2.6/extensions/ext-foreignobject.js +277 -0
  70. data/vendor/assets/svg-edit-2.6/extensions/ext-grid.js +184 -0
  71. data/vendor/assets/svg-edit-2.6/extensions/ext-helloworld.js +78 -0
  72. data/vendor/assets/svg-edit-2.6/extensions/ext-imagelib.js +453 -0
  73. data/vendor/assets/svg-edit-2.6/extensions/ext-imagelib.xml +14 -0
  74. data/vendor/assets/svg-edit-2.6/extensions/ext-markers.js +572 -0
  75. data/vendor/assets/svg-edit-2.6/extensions/ext-server_moinsave.js +56 -0
  76. data/vendor/assets/svg-edit-2.6/extensions/ext-server_opensave.js +180 -0
  77. data/vendor/assets/svg-edit-2.6/extensions/ext-shapes.js +387 -0
  78. data/vendor/assets/svg-edit-2.6/extensions/ext-shapes.xml +10 -0
  79. data/vendor/assets/svg-edit-2.6/extensions/eyedropper-icon.xml +34 -0
  80. data/vendor/assets/svg-edit-2.6/extensions/eyedropper.png +0 -0
  81. data/vendor/assets/svg-edit-2.6/extensions/fileopen.php +31 -0
  82. data/vendor/assets/svg-edit-2.6/extensions/filesave.php +44 -0
  83. data/vendor/assets/svg-edit-2.6/extensions/foreignobject-icons.xml +96 -0
  84. data/vendor/assets/svg-edit-2.6/extensions/grid-icon.xml +30 -0
  85. data/vendor/assets/svg-edit-2.6/extensions/helloworld-icon.xml +21 -0
  86. data/vendor/assets/svg-edit-2.6/extensions/imagelib/index.html +64 -0
  87. data/vendor/assets/svg-edit-2.6/extensions/imagelib/smiley.svg +12 -0
  88. data/vendor/assets/svg-edit-2.6/extensions/markers-icons.xml +115 -0
  89. data/vendor/assets/svg-edit-2.6/extensions/shapelib/animal.json +21 -0
  90. data/vendor/assets/svg-edit-2.6/extensions/shapelib/arrow.json +28 -0
  91. data/vendor/assets/svg-edit-2.6/extensions/shapelib/dialog_balloon.json +9 -0
  92. data/vendor/assets/svg-edit-2.6/extensions/shapelib/electronics.json +20 -0
  93. data/vendor/assets/svg-edit-2.6/extensions/shapelib/flowchart.json +25 -0
  94. data/vendor/assets/svg-edit-2.6/extensions/shapelib/game.json +13 -0
  95. data/vendor/assets/svg-edit-2.6/extensions/shapelib/math.json +9 -0
  96. data/vendor/assets/svg-edit-2.6/extensions/shapelib/misc.json +37 -0
  97. data/vendor/assets/svg-edit-2.6/extensions/shapelib/music.json +21 -0
  98. data/vendor/assets/svg-edit-2.6/extensions/shapelib/object.json +19 -0
  99. data/vendor/assets/svg-edit-2.6/extensions/shapelib/raphael.txt +12 -0
  100. data/vendor/assets/svg-edit-2.6/extensions/shapelib/raphael_1.json +67 -0
  101. data/vendor/assets/svg-edit-2.6/extensions/shapelib/raphael_2.json +64 -0
  102. data/vendor/assets/svg-edit-2.6/extensions/shapelib/symbol.json +28 -0
  103. data/vendor/assets/svg-edit-2.6/history.js +601 -0
  104. data/vendor/assets/svg-edit-2.6/images/README.txt +61 -0
  105. data/vendor/assets/svg-edit-2.6/images/align-bottom.png +0 -0
  106. data/vendor/assets/svg-edit-2.6/images/align-bottom.svg +277 -0
  107. data/vendor/assets/svg-edit-2.6/images/align-center.png +0 -0
  108. data/vendor/assets/svg-edit-2.6/images/align-center.svg +252 -0
  109. data/vendor/assets/svg-edit-2.6/images/align-left.png +0 -0
  110. data/vendor/assets/svg-edit-2.6/images/align-left.svg +235 -0
  111. data/vendor/assets/svg-edit-2.6/images/align-middle.png +0 -0
  112. data/vendor/assets/svg-edit-2.6/images/align-middle.svg +250 -0
  113. data/vendor/assets/svg-edit-2.6/images/align-right.png +0 -0
  114. data/vendor/assets/svg-edit-2.6/images/align-right.svg +233 -0
  115. data/vendor/assets/svg-edit-2.6/images/align-top.png +0 -0
  116. data/vendor/assets/svg-edit-2.6/images/align-top.svg +233 -0
  117. data/vendor/assets/svg-edit-2.6/images/bold.png +0 -0
  118. data/vendor/assets/svg-edit-2.6/images/cancel.png +0 -0
  119. data/vendor/assets/svg-edit-2.6/images/circle.png +0 -0
  120. data/vendor/assets/svg-edit-2.6/images/clear.png +0 -0
  121. data/vendor/assets/svg-edit-2.6/images/clone.png +0 -0
  122. data/vendor/assets/svg-edit-2.6/images/conn.svg +29 -0
  123. data/vendor/assets/svg-edit-2.6/images/copy.png +0 -0
  124. data/vendor/assets/svg-edit-2.6/images/cut.png +0 -0
  125. data/vendor/assets/svg-edit-2.6/images/delete.png +0 -0
  126. data/vendor/assets/svg-edit-2.6/images/document-properties.png +0 -0
  127. data/vendor/assets/svg-edit-2.6/images/dropdown.gif +0 -0
  128. data/vendor/assets/svg-edit-2.6/images/ellipse.png +0 -0
  129. data/vendor/assets/svg-edit-2.6/images/eye.png +0 -0
  130. data/vendor/assets/svg-edit-2.6/images/fhpath.png +0 -0
  131. data/vendor/assets/svg-edit-2.6/images/flyouth.png +0 -0
  132. data/vendor/assets/svg-edit-2.6/images/flyup.gif +0 -0
  133. data/vendor/assets/svg-edit-2.6/images/freehand-circle.png +0 -0
  134. data/vendor/assets/svg-edit-2.6/images/freehand-square.png +0 -0
  135. data/vendor/assets/svg-edit-2.6/images/go-down.png +0 -0
  136. data/vendor/assets/svg-edit-2.6/images/go-up.png +0 -0
  137. data/vendor/assets/svg-edit-2.6/images/image.png +0 -0
  138. data/vendor/assets/svg-edit-2.6/images/italic.png +0 -0
  139. data/vendor/assets/svg-edit-2.6/images/line.png +0 -0
  140. data/vendor/assets/svg-edit-2.6/images/link_controls.png +0 -0
  141. data/vendor/assets/svg-edit-2.6/images/logo.png +0 -0
  142. data/vendor/assets/svg-edit-2.6/images/logo.svg +32 -0
  143. data/vendor/assets/svg-edit-2.6/images/move_bottom.png +0 -0
  144. data/vendor/assets/svg-edit-2.6/images/move_top.png +0 -0
  145. data/vendor/assets/svg-edit-2.6/images/node_clone.png +0 -0
  146. data/vendor/assets/svg-edit-2.6/images/node_delete.png +0 -0
  147. data/vendor/assets/svg-edit-2.6/images/none.png +0 -0
  148. data/vendor/assets/svg-edit-2.6/images/open.png +0 -0
  149. data/vendor/assets/svg-edit-2.6/images/paste.png +0 -0
  150. data/vendor/assets/svg-edit-2.6/images/path.png +0 -0
  151. data/vendor/assets/svg-edit-2.6/images/polygon.png +0 -0
  152. data/vendor/assets/svg-edit-2.6/images/polygon.svg +219 -0
  153. data/vendor/assets/svg-edit-2.6/images/rect.png +0 -0
  154. data/vendor/assets/svg-edit-2.6/images/redo.png +0 -0
  155. data/vendor/assets/svg-edit-2.6/images/reorient.png +0 -0
  156. data/vendor/assets/svg-edit-2.6/images/rotate.png +0 -0
  157. data/vendor/assets/svg-edit-2.6/images/save.png +0 -0
  158. data/vendor/assets/svg-edit-2.6/images/select.png +0 -0
  159. data/vendor/assets/svg-edit-2.6/images/select_node.png +0 -0
  160. data/vendor/assets/svg-edit-2.6/images/sep.png +0 -0
  161. data/vendor/assets/svg-edit-2.6/images/shape_group.png +0 -0
  162. data/vendor/assets/svg-edit-2.6/images/shape_ungroup.png +0 -0
  163. data/vendor/assets/svg-edit-2.6/images/source.png +0 -0
  164. data/vendor/assets/svg-edit-2.6/images/spinbtn_updn_big.png +0 -0
  165. data/vendor/assets/svg-edit-2.6/images/square.png +0 -0
  166. data/vendor/assets/svg-edit-2.6/images/svg_edit_icons.svg +1034 -0
  167. data/vendor/assets/svg-edit-2.6/images/svg_edit_icons.svgz +0 -0
  168. data/vendor/assets/svg-edit-2.6/images/text.png +0 -0
  169. data/vendor/assets/svg-edit-2.6/images/text.svg +157 -0
  170. data/vendor/assets/svg-edit-2.6/images/to_path.png +0 -0
  171. data/vendor/assets/svg-edit-2.6/images/undo.png +0 -0
  172. data/vendor/assets/svg-edit-2.6/images/view-refresh.png +0 -0
  173. data/vendor/assets/svg-edit-2.6/images/wave.png +0 -0
  174. data/vendor/assets/svg-edit-2.6/images/wireframe.png +0 -0
  175. data/vendor/assets/svg-edit-2.6/images/zoom.png +0 -0
  176. data/vendor/assets/svg-edit-2.6/jgraduate/LICENSE +202 -0
  177. data/vendor/assets/svg-edit-2.6/jgraduate/README +3 -0
  178. data/vendor/assets/svg-edit-2.6/jgraduate/css/jPicker.css +1 -0
  179. data/vendor/assets/svg-edit-2.6/jgraduate/css/jgraduate.css +351 -0
  180. data/vendor/assets/svg-edit-2.6/jgraduate/images/AlphaBar.png +0 -0
  181. data/vendor/assets/svg-edit-2.6/jgraduate/images/Bars.png +0 -0
  182. data/vendor/assets/svg-edit-2.6/jgraduate/images/Maps.png +0 -0
  183. data/vendor/assets/svg-edit-2.6/jgraduate/images/NoColor.png +0 -0
  184. data/vendor/assets/svg-edit-2.6/jgraduate/images/bar-opacity.png +0 -0
  185. data/vendor/assets/svg-edit-2.6/jgraduate/images/map-opacity.png +0 -0
  186. data/vendor/assets/svg-edit-2.6/jgraduate/images/mappoint.gif +0 -0
  187. data/vendor/assets/svg-edit-2.6/jgraduate/images/mappoint_c.png +0 -0
  188. data/vendor/assets/svg-edit-2.6/jgraduate/images/mappoint_f.png +0 -0
  189. data/vendor/assets/svg-edit-2.6/jgraduate/images/picker.gif +0 -0
  190. data/vendor/assets/svg-edit-2.6/jgraduate/images/preview-opacity.png +0 -0
  191. data/vendor/assets/svg-edit-2.6/jgraduate/images/rangearrows.gif +0 -0
  192. data/vendor/assets/svg-edit-2.6/jgraduate/images/rangearrows2.gif +0 -0
  193. data/vendor/assets/svg-edit-2.6/jgraduate/jpicker.js +2091 -0
  194. data/vendor/assets/svg-edit-2.6/jgraduate/jpicker.min.js +1 -0
  195. data/vendor/assets/svg-edit-2.6/jgraduate/jquery.jgraduate.js +1175 -0
  196. data/vendor/assets/svg-edit-2.6/jgraduate/jquery.jgraduate.min.js +37 -0
  197. data/vendor/assets/svg-edit-2.6/jquery-ui/jquery-ui-1.8.17.custom.min.js +54 -0
  198. data/vendor/assets/svg-edit-2.6/jquery-ui/jquery-ui-1.8.custom.min.js +84 -0
  199. data/vendor/assets/svg-edit-2.6/jquery.js +4 -0
  200. data/vendor/assets/svg-edit-2.6/jquerybbq/jquery.bbq.min.js +18 -0
  201. data/vendor/assets/svg-edit-2.6/js-hotkeys/README.md +45 -0
  202. data/vendor/assets/svg-edit-2.6/js-hotkeys/jquery.hotkeys.min.js +15 -0
  203. data/vendor/assets/svg-edit-2.6/locale/README.txt +17 -0
  204. data/vendor/assets/svg-edit-2.6/locale/lang.af.js +234 -0
  205. data/vendor/assets/svg-edit-2.6/locale/lang.ar.js +234 -0
  206. data/vendor/assets/svg-edit-2.6/locale/lang.az.js +234 -0
  207. data/vendor/assets/svg-edit-2.6/locale/lang.be.js +234 -0
  208. data/vendor/assets/svg-edit-2.6/locale/lang.bg.js +234 -0
  209. data/vendor/assets/svg-edit-2.6/locale/lang.ca.js +234 -0
  210. data/vendor/assets/svg-edit-2.6/locale/lang.cs.js +234 -0
  211. data/vendor/assets/svg-edit-2.6/locale/lang.cy.js +234 -0
  212. data/vendor/assets/svg-edit-2.6/locale/lang.da.js +234 -0
  213. data/vendor/assets/svg-edit-2.6/locale/lang.de.js +234 -0
  214. data/vendor/assets/svg-edit-2.6/locale/lang.el.js +234 -0
  215. data/vendor/assets/svg-edit-2.6/locale/lang.en.js +234 -0
  216. data/vendor/assets/svg-edit-2.6/locale/lang.es.js +234 -0
  217. data/vendor/assets/svg-edit-2.6/locale/lang.et.js +234 -0
  218. data/vendor/assets/svg-edit-2.6/locale/lang.fa.js +234 -0
  219. data/vendor/assets/svg-edit-2.6/locale/lang.fi.js +234 -0
  220. data/vendor/assets/svg-edit-2.6/locale/lang.fr.js +234 -0
  221. data/vendor/assets/svg-edit-2.6/locale/lang.fy.js +234 -0
  222. data/vendor/assets/svg-edit-2.6/locale/lang.ga.js +234 -0
  223. data/vendor/assets/svg-edit-2.6/locale/lang.gl.js +234 -0
  224. data/vendor/assets/svg-edit-2.6/locale/lang.he.js +234 -0
  225. data/vendor/assets/svg-edit-2.6/locale/lang.hi.js +234 -0
  226. data/vendor/assets/svg-edit-2.6/locale/lang.hr.js +234 -0
  227. data/vendor/assets/svg-edit-2.6/locale/lang.hu.js +234 -0
  228. data/vendor/assets/svg-edit-2.6/locale/lang.hy.js +234 -0
  229. data/vendor/assets/svg-edit-2.6/locale/lang.id.js +234 -0
  230. data/vendor/assets/svg-edit-2.6/locale/lang.is.js +234 -0
  231. data/vendor/assets/svg-edit-2.6/locale/lang.it.js +234 -0
  232. data/vendor/assets/svg-edit-2.6/locale/lang.ja.js +234 -0
  233. data/vendor/assets/svg-edit-2.6/locale/lang.ko.js +234 -0
  234. data/vendor/assets/svg-edit-2.6/locale/lang.lt.js +234 -0
  235. data/vendor/assets/svg-edit-2.6/locale/lang.lv.js +234 -0
  236. data/vendor/assets/svg-edit-2.6/locale/lang.mk.js +234 -0
  237. data/vendor/assets/svg-edit-2.6/locale/lang.ms.js +234 -0
  238. data/vendor/assets/svg-edit-2.6/locale/lang.mt.js +234 -0
  239. data/vendor/assets/svg-edit-2.6/locale/lang.nl.js +234 -0
  240. data/vendor/assets/svg-edit-2.6/locale/lang.no.js +234 -0
  241. data/vendor/assets/svg-edit-2.6/locale/lang.pl.js +234 -0
  242. data/vendor/assets/svg-edit-2.6/locale/lang.pt-BR.js +234 -0
  243. data/vendor/assets/svg-edit-2.6/locale/lang.pt-PT.js +234 -0
  244. data/vendor/assets/svg-edit-2.6/locale/lang.ro.js +234 -0
  245. data/vendor/assets/svg-edit-2.6/locale/lang.ru.js +234 -0
  246. data/vendor/assets/svg-edit-2.6/locale/lang.sk.js +234 -0
  247. data/vendor/assets/svg-edit-2.6/locale/lang.sl.js +234 -0
  248. data/vendor/assets/svg-edit-2.6/locale/lang.sq.js +234 -0
  249. data/vendor/assets/svg-edit-2.6/locale/lang.sr.js +234 -0
  250. data/vendor/assets/svg-edit-2.6/locale/lang.sv.js +234 -0
  251. data/vendor/assets/svg-edit-2.6/locale/lang.sw.js +234 -0
  252. data/vendor/assets/svg-edit-2.6/locale/lang.test.js +234 -0
  253. data/vendor/assets/svg-edit-2.6/locale/lang.th.js +234 -0
  254. data/vendor/assets/svg-edit-2.6/locale/lang.tl.js +234 -0
  255. data/vendor/assets/svg-edit-2.6/locale/lang.tr.js +234 -0
  256. data/vendor/assets/svg-edit-2.6/locale/lang.uk.js +234 -0
  257. data/vendor/assets/svg-edit-2.6/locale/lang.vi.js +234 -0
  258. data/vendor/assets/svg-edit-2.6/locale/lang.yi.js +234 -0
  259. data/vendor/assets/svg-edit-2.6/locale/lang.zh-CN.js +234 -0
  260. data/vendor/assets/svg-edit-2.6/locale/lang.zh-HK.js +234 -0
  261. data/vendor/assets/svg-edit-2.6/locale/lang.zh-TW.js +234 -0
  262. data/vendor/assets/svg-edit-2.6/locale/locale.js +320 -0
  263. data/vendor/assets/svg-edit-2.6/math.js +246 -0
  264. data/vendor/assets/svg-edit-2.6/path.js +980 -0
  265. data/vendor/assets/svg-edit-2.6/sanitize.js +273 -0
  266. data/vendor/assets/svg-edit-2.6/select.js +532 -0
  267. data/vendor/assets/svg-edit-2.6/spinbtn/JQuerySpinBtn.css +41 -0
  268. data/vendor/assets/svg-edit-2.6/spinbtn/JQuerySpinBtn.js +266 -0
  269. data/vendor/assets/svg-edit-2.6/spinbtn/JQuerySpinBtn.min.js +7 -0
  270. data/vendor/assets/svg-edit-2.6/spinbtn/spinbtn_updn.png +0 -0
  271. data/vendor/assets/svg-edit-2.6/svg-editor.css +1495 -0
  272. data/vendor/assets/svg-edit-2.6/svg-editor.css~ +1500 -0
  273. data/vendor/assets/svg-edit-2.6/svg-editor.html +788 -0
  274. data/vendor/assets/svg-edit-2.6/svg-editor.html~ +788 -0
  275. data/vendor/assets/svg-edit-2.6/svg-editor.js +4969 -0
  276. data/vendor/assets/svg-edit-2.6/svg-editor.manifest +121 -0
  277. data/vendor/assets/svg-edit-2.6/svgcanvas.js +8775 -0
  278. data/vendor/assets/svg-edit-2.6/svgedit.compiled.js +465 -0
  279. data/vendor/assets/svg-edit-2.6/svgicons/jquery.svgicons.js +486 -0
  280. data/vendor/assets/svg-edit-2.6/svgtransformlist.js +291 -0
  281. data/vendor/assets/svg-edit-2.6/svgutils.js +651 -0
  282. data/vendor/assets/svg-edit-2.6/touch.js +30 -0
  283. data/vendor/assets/svg-edit-2.6/units.js +281 -0
  284. 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: "----&gt;",
241
+ start: "&lt;----",
242
+ both: "&lt;---&gt;",
243
+ mid: "--&gt;--",
244
+ mid_bk: "--&lt;--"
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
+ });