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.
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
+ });