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,109 @@
1
+ /*
2
+ * ext-eyedropper.js
3
+ *
4
+ * Licensed under the MIT License
5
+ *
6
+ * Copyright(c) 2010 Jeff Schiller
7
+ *
8
+ */
9
+
10
+ // Dependencies:
11
+ // 1) jQuery
12
+ // 2) history.js
13
+ // 3) svg_editor.js
14
+ // 4) svgcanvas.js
15
+
16
+ svgEditor.addExtension("eyedropper", function(S) {
17
+ var svgcontent = S.svgcontent,
18
+ svgns = "http://www.w3.org/2000/svg",
19
+ svgdoc = S.svgroot.parentNode.ownerDocument,
20
+ svgCanvas = svgEditor.canvas,
21
+ ChangeElementCommand = svgedit.history.ChangeElementCommand,
22
+ addToHistory = function(cmd) { svgCanvas.undoMgr.addCommandToHistory(cmd); },
23
+ currentStyle = {fillPaint: "red", fillOpacity: 1.0,
24
+ strokePaint: "black", strokeOpacity: 1.0,
25
+ strokeWidth: 5, strokeDashArray: null,
26
+ opacity: 1.0,
27
+ strokeLinecap: 'butt',
28
+ strokeLinejoin: 'miter',
29
+ };
30
+
31
+ function getStyle(opts) {
32
+ // if we are in eyedropper mode, we don't want to disable the eye-dropper tool
33
+ var mode = svgCanvas.getMode();
34
+ if (mode == "eyedropper") return;
35
+
36
+ var elem = null;
37
+ var tool = $('#tool_eyedropper');
38
+ // enable-eye-dropper if one element is selected
39
+ if (!opts.multiselected && opts.elems[0] &&
40
+ $.inArray(opts.elems[0].nodeName, ['svg', 'g', 'use']) == -1)
41
+ {
42
+ elem = opts.elems[0];
43
+ tool.removeClass('disabled');
44
+ // grab the current style
45
+ currentStyle.fillPaint = elem.getAttribute("fill") || "black";
46
+ currentStyle.fillOpacity = elem.getAttribute("fill-opacity") || 1.0;
47
+ currentStyle.strokePaint = elem.getAttribute("stroke");
48
+ currentStyle.strokeOpacity = elem.getAttribute("stroke-opacity") || 1.0;
49
+ currentStyle.strokeWidth = elem.getAttribute("stroke-width");
50
+ currentStyle.strokeDashArray = elem.getAttribute("stroke-dasharray");
51
+ currentStyle.strokeLinecap = elem.getAttribute("stroke-linecap");
52
+ currentStyle.strokeLinejoin = elem.getAttribute("stroke-linejoin");
53
+ currentStyle.opacity = elem.getAttribute("opacity") || 1.0;
54
+ }
55
+ // disable eye-dropper tool
56
+ else {
57
+ tool.addClass('disabled');
58
+ }
59
+
60
+ }
61
+
62
+ return {
63
+ name: "eyedropper",
64
+ svgicons: "/assets/extensions/eyedropper-icon.xml",
65
+ buttons: [{
66
+ id: "tool_eyedropper",
67
+ type: "mode",
68
+ title: "Eye Dropper Tool",
69
+ key: "I",
70
+ events: {
71
+ "click": function() {
72
+ svgCanvas.setMode("eyedropper");
73
+ }
74
+ }
75
+ }],
76
+
77
+ // if we have selected an element, grab its paint and enable the eye dropper button
78
+ selectedChanged: getStyle,
79
+ elementChanged: getStyle,
80
+
81
+ mouseDown: function(opts) {
82
+ var mode = svgCanvas.getMode();
83
+ if (mode == "eyedropper") {
84
+ var e = opts.event;
85
+ var target = e.target;
86
+ if ($.inArray(target.nodeName, ['svg', 'g', 'use']) == -1) {
87
+ var changes = {};
88
+
89
+ var change = function(elem, attrname, newvalue) {
90
+ changes[attrname] = elem.getAttribute(attrname);
91
+ elem.setAttribute(attrname, newvalue);
92
+ };
93
+
94
+ if (currentStyle.fillPaint) change(target, "fill", currentStyle.fillPaint);
95
+ if (currentStyle.fillOpacity) change(target, "fill-opacity", currentStyle.fillOpacity);
96
+ if (currentStyle.strokePaint) change(target, "stroke", currentStyle.strokePaint);
97
+ if (currentStyle.strokeOpacity) change(target, "stroke-opacity", currentStyle.strokeOpacity);
98
+ if (currentStyle.strokeWidth) change(target, "stroke-width", currentStyle.strokeWidth);
99
+ if (currentStyle.strokeDashArray) change(target, "stroke-dasharray", currentStyle.strokeDashArray);
100
+ if (currentStyle.opacity) change(target, "opacity", currentStyle.opacity);
101
+ if (currentStyle.strokeLinecap) change(target, "stroke-linecap", currentStyle.strokeLinecap);
102
+ if (currentStyle.strokeLinejoin) change(target, "stroke-linejoin", currentStyle.strokeLinejoin);
103
+
104
+ addToHistory(new ChangeElementCommand(target, changes));
105
+ }
106
+ }
107
+ },
108
+ };
109
+ });
@@ -0,0 +1,277 @@
1
+ /*
2
+ * ext-foreignobject.js
3
+ *
4
+ * Licensed under the Apache License, Version 2
5
+ *
6
+ * Copyright(c) 2010 Jacques Distler
7
+ * Copyright(c) 2010 Alexis Deveria
8
+ *
9
+ */
10
+
11
+ svgEditor.addExtension("foreignObject", function(S) {
12
+ var svgcontent = S.svgcontent,
13
+ addElem = S.addSvgElementFromJson,
14
+ selElems,
15
+ svgns = "http://www.w3.org/2000/svg",
16
+ xlinkns = "http://www.w3.org/1999/xlink",
17
+ xmlns = "http://www.w3.org/XML/1998/namespace",
18
+ xmlnsns = "http://www.w3.org/2000/xmlns/",
19
+ se_ns = "http://svg-edit.googlecode.com",
20
+ htmlns = "http://www.w3.org/1999/xhtml",
21
+ mathns = "http://www.w3.org/1998/Math/MathML",
22
+ editingforeign = false,
23
+ svgdoc = S.svgroot.parentNode.ownerDocument,
24
+ started,
25
+ newFO;
26
+
27
+
28
+ var properlySourceSizeTextArea = function(){
29
+ // TODO: remove magic numbers here and get values from CSS
30
+ var height = $('#svg_source_container').height() - 80;
31
+ $('#svg_source_textarea').css('height', height);
32
+ };
33
+
34
+ function showPanel(on) {
35
+ var fc_rules = $('#fc_rules');
36
+ if(!fc_rules.length) {
37
+ fc_rules = $('<style id="fc_rules"><\/style>').appendTo('head');
38
+ }
39
+ fc_rules.text(!on?"":" #tool_topath { display: none !important; }");
40
+ $('#foreignObject_panel').toggle(on);
41
+ }
42
+
43
+ function toggleSourceButtons(on) {
44
+ $('#tool_source_save, #tool_source_cancel').toggle(!on);
45
+ $('#foreign_save, #foreign_cancel').toggle(on);
46
+ }
47
+
48
+
49
+ // Function: setForeignString(xmlString, elt)
50
+ // This function sets the content of element elt to the input XML.
51
+ //
52
+ // Parameters:
53
+ // xmlString - The XML text.
54
+ // elt - the parent element to append to
55
+ //
56
+ // Returns:
57
+ // This function returns false if the set was unsuccessful, true otherwise.
58
+ function setForeignString(xmlString) {
59
+ var elt = selElems[0];
60
+ try {
61
+ // convert string into XML document
62
+ var newDoc = Utils.text2xml('<svg xmlns="'+svgns+'" xmlns:xlink="'+xlinkns+'">'+xmlString+'</svg>');
63
+ // run it through our sanitizer to remove anything we do not support
64
+ S.sanitizeSvg(newDoc.documentElement);
65
+ elt.parentNode.replaceChild(svgdoc.importNode(newDoc.documentElement.firstChild, true), elt);
66
+ S.call("changed", [elt]);
67
+ svgCanvas.clearSelection();
68
+ } catch(e) {
69
+ console.log(e);
70
+ return false;
71
+ }
72
+
73
+ return true;
74
+ };
75
+
76
+ function showForeignEditor() {
77
+ var elt = selElems[0];
78
+ if (!elt || editingforeign) return;
79
+ editingforeign = true;
80
+ toggleSourceButtons(true);
81
+ elt.removeAttribute('fill');
82
+
83
+ var str = S.svgToString(elt, 0);
84
+ $('#svg_source_textarea').val(str);
85
+ $('#svg_source_editor').fadeIn();
86
+ properlySourceSizeTextArea();
87
+ $('#svg_source_textarea').focus();
88
+ }
89
+
90
+ function setAttr(attr, val) {
91
+ svgCanvas.changeSelectedAttribute(attr, val);
92
+ S.call("changed", selElems);
93
+ }
94
+
95
+
96
+ return {
97
+ name: "foreignObject",
98
+ svgicons: "/assets/extensions/foreignobject-icons.xml",
99
+ buttons: [{
100
+ id: "tool_foreign",
101
+ type: "mode",
102
+ title: "Foreign Object Tool",
103
+ events: {
104
+ 'click': function() {
105
+ svgCanvas.setMode('foreign')
106
+ }
107
+ }
108
+ },{
109
+ id: "edit_foreign",
110
+ type: "context",
111
+ panel: "foreignObject_panel",
112
+ title: "Edit ForeignObject Content",
113
+ events: {
114
+ 'click': function() {
115
+ showForeignEditor();
116
+ }
117
+ }
118
+ }],
119
+
120
+ context_tools: [{
121
+ type: "input",
122
+ panel: "foreignObject_panel",
123
+ title: "Change foreignObject's width",
124
+ id: "foreign_width",
125
+ label: "w",
126
+ size: 3,
127
+ events: {
128
+ change: function() {
129
+ setAttr('width', this.value);
130
+ }
131
+ }
132
+ },{
133
+ type: "input",
134
+ panel: "foreignObject_panel",
135
+ title: "Change foreignObject's height",
136
+ id: "foreign_height",
137
+ label: "h",
138
+ events: {
139
+ change: function() {
140
+ setAttr('height', this.value);
141
+ }
142
+ }
143
+ }, {
144
+ type: "input",
145
+ panel: "foreignObject_panel",
146
+ title: "Change foreignObject's font size",
147
+ id: "foreign_font_size",
148
+ label: "font-size",
149
+ size: 2,
150
+ defval: 16,
151
+ events: {
152
+ change: function() {
153
+ setAttr('font-size', this.value);
154
+ }
155
+ }
156
+ }
157
+
158
+
159
+ ],
160
+ callback: function() {
161
+ $('#foreignObject_panel').hide();
162
+
163
+ var endChanges = function() {
164
+ $('#svg_source_editor').hide();
165
+ editingforeign = false;
166
+ $('#svg_source_textarea').blur();
167
+ toggleSourceButtons(false);
168
+ }
169
+
170
+ // TODO: Needs to be done after orig icon loads
171
+ setTimeout(function() {
172
+ // Create source save/cancel buttons
173
+ var save = $('#tool_source_save').clone()
174
+ .hide().attr('id', 'foreign_save').unbind()
175
+ .appendTo("#tool_source_back").click(function() {
176
+
177
+ if (!editingforeign) return;
178
+
179
+ if (!setForeignString($('#svg_source_textarea').val())) {
180
+ $.confirm("Errors found. Revert to original?", function(ok) {
181
+ if(!ok) return false;
182
+ endChanges();
183
+ });
184
+ } else {
185
+ endChanges();
186
+ }
187
+ // setSelectMode();
188
+ });
189
+
190
+ var cancel = $('#tool_source_cancel').clone()
191
+ .hide().attr('id', 'foreign_cancel').unbind()
192
+ .appendTo("#tool_source_back").click(function() {
193
+ endChanges();
194
+ });
195
+
196
+ }, 3000);
197
+ },
198
+ mouseDown: function(opts) {
199
+ var e = opts.event;
200
+
201
+ if(svgCanvas.getMode() == "foreign") {
202
+
203
+ started = true;
204
+ newFO = S.addSvgElementFromJson({
205
+ "element": "foreignObject",
206
+ "attr": {
207
+ "x": opts.start_x,
208
+ "y": opts.start_y,
209
+ "id": S.getNextId(),
210
+ "font-size": 16, //cur_text.font_size,
211
+ "width": "48",
212
+ "height": "20",
213
+ "style": "pointer-events:inherit"
214
+ }
215
+ });
216
+ var m = svgdoc.createElementNS(mathns, 'math');
217
+ m.setAttributeNS(xmlnsns, 'xmlns', mathns);
218
+ m.setAttribute('display', 'inline');
219
+ var mi = svgdoc.createElementNS(mathns, 'mi');
220
+ mi.setAttribute('mathvariant', 'normal');
221
+ mi.textContent = "\u03A6";
222
+ var mo = svgdoc.createElementNS(mathns, 'mo');
223
+ mo.textContent = "\u222A";
224
+ var mi2 = svgdoc.createElementNS(mathns, 'mi');
225
+ mi2.textContent = "\u2133";
226
+ m.appendChild(mi);
227
+ m.appendChild(mo);
228
+ m.appendChild(mi2);
229
+ newFO.appendChild(m);
230
+ return {
231
+ started: true
232
+ }
233
+ }
234
+ },
235
+ mouseUp: function(opts) {
236
+ var e = opts.event;
237
+ if(svgCanvas.getMode() == "foreign" && started) {
238
+ var attrs = $(newFO).attr(["width", "height"]);
239
+ keep = (attrs.width != 0 || attrs.height != 0);
240
+ svgCanvas.addToSelection([newFO], true);
241
+
242
+ return {
243
+ keep: keep,
244
+ element: newFO
245
+ }
246
+
247
+ }
248
+
249
+ },
250
+ selectedChanged: function(opts) {
251
+ // Use this to update the current selected elements
252
+ selElems = opts.elems;
253
+
254
+ var i = selElems.length;
255
+
256
+ while(i--) {
257
+ var elem = selElems[i];
258
+ if(elem && elem.tagName == "foreignObject") {
259
+ if(opts.selectedElement && !opts.multiselected) {
260
+ $('#foreign_font_size').val(elem.getAttribute("font-size"));
261
+ $('#foreign_width').val(elem.getAttribute("width"));
262
+ $('#foreign_height').val(elem.getAttribute("height"));
263
+
264
+ showPanel(true);
265
+ } else {
266
+ showPanel(false);
267
+ }
268
+ } else {
269
+ showPanel(false);
270
+ }
271
+ }
272
+ },
273
+ elementChanged: function(opts) {
274
+ var elem = opts.elems[0];
275
+ }
276
+ };
277
+ });
@@ -0,0 +1,184 @@
1
+ /*
2
+ * ext-grid.js
3
+ *
4
+ * Licensed under the Apache License, Version 2
5
+ *
6
+ * Copyright(c) 2010 Redou Mine
7
+ * Copyright(c) 2010 Alexis Deveria
8
+ *
9
+ */
10
+
11
+ // Dependencies:
12
+ // 1) units.js
13
+ // 2) everything else
14
+
15
+ svgEditor.addExtension("view_grid", function(s) {
16
+
17
+ var svgdoc = document.getElementById("svgcanvas").ownerDocument,
18
+ svgns = "http://www.w3.org/2000/svg",
19
+ dims = svgEditor.curConfig.dimensions,
20
+ svgroot = s.svgroot;
21
+
22
+ var showGrid = false;
23
+ var assignAttributes = svgCanvas.assignAttributes;
24
+
25
+ var hcanvas = document.createElement('canvas');
26
+ $(hcanvas).hide().appendTo('body');
27
+
28
+ var canvasgrid = svgdoc.createElementNS(svgns, "svg");
29
+ assignAttributes(canvasgrid, {
30
+ 'id': 'canvasGrid',
31
+ 'width': '100%',
32
+ 'height': '100%',
33
+ 'x': 0,
34
+ 'y': 0,
35
+ 'overflow': 'visible',
36
+ 'display': 'none'
37
+ });
38
+
39
+ var canvBG = $('#canvasBackground');
40
+ canvBG.append(canvasgrid);
41
+
42
+ // grid-pattern
43
+ var gridPattern = svgdoc.createElementNS(svgns, "pattern");
44
+ assignAttributes(gridPattern, {
45
+ 'id': 'gridpattern',
46
+ 'patternUnits': 'userSpaceOnUse',
47
+ 'x': 0, //-(value.strokeWidth / 2), // position for strokewidth
48
+ 'y': 0, //-(value.strokeWidth / 2), // position for strokewidth
49
+ 'width': 100,
50
+ 'height': 100
51
+ });
52
+
53
+ var gridimg = svgdoc.createElementNS(svgns, "image");
54
+ assignAttributes(gridimg, {
55
+ 'x': 0,
56
+ 'y': 0,
57
+ 'width': 100,
58
+ 'height': 100
59
+ });
60
+
61
+ gridPattern.appendChild(gridimg);
62
+ $('#svgroot defs').append(gridPattern);
63
+
64
+ // grid-box
65
+ var gridBox = svgdoc.createElementNS(svgns, "rect");
66
+ assignAttributes(gridBox, {
67
+ 'width': '100%',
68
+ 'height': '100%',
69
+ 'x': 0,
70
+ 'y': 0,
71
+ 'stroke-width': 0,
72
+ 'stroke': 'none',
73
+ 'fill': 'url(#gridpattern)',
74
+ 'style': 'pointer-events: none; display:visible;'
75
+ });
76
+ $('#canvasGrid').append(gridBox);
77
+ // });
78
+
79
+ function updateGrid(zoom) {
80
+ // TODO: Try this with <line> elements, then compare performance difference
81
+
82
+ var bgwidth = +canvBG.attr('width');
83
+ var bgheight = +canvBG.attr('height');
84
+
85
+ var units = svgedit.units.getTypeMap();
86
+ var unit = units[svgEditor.curConfig.baseUnit]; // 1 = 1px
87
+ var r_intervals = [.01, .1, 1, 10, 100, 1000];
88
+
89
+ var d = 0;
90
+ var is_x = (d === 0);
91
+ var dim = is_x ? 'x' : 'y';
92
+ var lentype = is_x?'width':'height';
93
+ var c_elem = svgCanvas.getContentElem();
94
+ var content_d = c_elem.getAttribute(dim)-0;
95
+
96
+ var hcanv = hcanvas;
97
+
98
+ var u_multi = unit * zoom;
99
+
100
+ // Calculate the main number interval
101
+ var raw_m = 100 / u_multi;
102
+ var multi = 1;
103
+ for(var i = 0; i < r_intervals.length; i++) {
104
+ var num = r_intervals[i];
105
+ multi = num;
106
+ if(raw_m <= num) {
107
+ break;
108
+ }
109
+ }
110
+
111
+ var big_int = multi * u_multi;
112
+
113
+ // Set the canvas size to the width of the container
114
+ hcanv.width = big_int;
115
+ hcanv.height = big_int;
116
+ var ctx = hcanv.getContext("2d");
117
+
118
+ var ruler_d = 0;
119
+ var cur_d = .5;
120
+
121
+ var part = big_int / 10;
122
+
123
+ ctx.globalAlpha = 0.2;
124
+ ctx.strokeStyle = "#000";
125
+ for(var i = 1; i < 10; i++) {
126
+ var sub_d = Math.round(part * i) + .5;
127
+ // var line_num = (i % 2)?12:10;
128
+ var line_num = 0;
129
+ ctx.moveTo(sub_d, big_int);
130
+ ctx.lineTo(sub_d, line_num);
131
+ ctx.moveTo(big_int, sub_d);
132
+ ctx.lineTo(line_num ,sub_d);
133
+ }
134
+ ctx.stroke();
135
+ ctx.beginPath();
136
+ ctx.globalAlpha = 0.5;
137
+ ctx.moveTo(cur_d, big_int);
138
+ ctx.lineTo(cur_d, 0);
139
+
140
+ ctx.moveTo(big_int, cur_d);
141
+ ctx.lineTo(0, cur_d);
142
+ ctx.stroke();
143
+
144
+ var datauri = hcanv.toDataURL('image/png');
145
+ gridimg.setAttribute('width', big_int);
146
+ gridimg.setAttribute('height', big_int);
147
+ gridimg.parentNode.setAttribute('width', big_int);
148
+ gridimg.parentNode.setAttribute('height', big_int);
149
+ svgCanvas.setHref(gridimg, datauri);
150
+ }
151
+
152
+ return {
153
+ name: "view_grid",
154
+ svgicons: "/assets/extensions/grid-icon.xml",
155
+
156
+ zoomChanged: function(zoom) {
157
+ // update size
158
+ if(showGrid) updateGrid(zoom);
159
+ },
160
+
161
+ buttons: [{
162
+ id: "view_grid",
163
+ type: "context",
164
+ panel: "editor_panel",
165
+ title: "Show/Hide Grid",
166
+ events: {
167
+ 'click': function() {
168
+ var gr = !$('#view_grid').hasClass('push_button_pressed');
169
+ if (gr) {
170
+ svgEditor.curConfig.showGrid = showGrid = true;
171
+ $('#view_grid').addClass('push_button_pressed').removeClass('tool_button');
172
+ $('#canvasGrid').attr('display', 'normal');
173
+ updateGrid(svgCanvas.getZoom());
174
+ }
175
+ else {
176
+ svgEditor.curConfig.showGrid = showGrid = false;
177
+ $('#view_grid').removeClass('push_button_pressed').addClass('tool_button');
178
+ $('#canvasGrid').attr('display', 'none');
179
+ }
180
+ }
181
+ }
182
+ }]
183
+ };
184
+ });