method_draw 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (389) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +148 -0
  4. data/Rakefile +23 -0
  5. data/app/assets/javascripts/method_draw.js +9 -0
  6. data/app/assets/javascripts/method_draw/base64.js +95 -0
  7. data/app/assets/javascripts/method_draw_embed.js +76 -0
  8. data/app/assets/stylesheets/sketchily.css +6 -0
  9. data/app/helpers/method_draw_helper.rb +35 -0
  10. data/app/views/method_draw/_embed.html.erb +51 -0
  11. data/app/views/method_draw/_method_draw.html.erb +19 -0
  12. data/app/views/method_draw/_method_draw_tag.html.erb +14 -0
  13. data/lib/method_draw.rb +16 -0
  14. data/lib/method_draw/engine.rb +4 -0
  15. data/lib/method_draw/method_draw.rb +37 -0
  16. data/lib/method_draw/method_draw_tag.rb +20 -0
  17. data/lib/method_draw/version.rb +3 -0
  18. data/spec/app/helpers/method_draw_helper_spec.rb +8 -0
  19. data/spec/dummy/README.md +3 -0
  20. data/spec/dummy/Rakefile +7 -0
  21. data/spec/dummy/app/assets/javascripts/application.js +15 -0
  22. data/spec/dummy/app/assets/stylesheets/application.css +13 -0
  23. data/spec/dummy/app/controllers/application_controller.rb +3 -0
  24. data/spec/dummy/app/controllers/drawings_controller.rb +18 -0
  25. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  26. data/spec/dummy/app/models/drawing.rb +2 -0
  27. data/spec/dummy/app/views/drawings/method_draw.html.erb +3 -0
  28. data/spec/dummy/app/views/drawings/method_draw_tag.html.erb +3 -0
  29. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  30. data/spec/dummy/config.ru +4 -0
  31. data/spec/dummy/config/application.rb +27 -0
  32. data/spec/dummy/config/boot.rb +5 -0
  33. data/spec/dummy/config/database.yml +25 -0
  34. data/spec/dummy/config/environment.rb +5 -0
  35. data/spec/dummy/config/environments/development.rb +29 -0
  36. data/spec/dummy/config/environments/production.rb +80 -0
  37. data/spec/dummy/config/environments/test.rb +36 -0
  38. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  39. data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  40. data/spec/dummy/config/initializers/inflections.rb +16 -0
  41. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  42. data/spec/dummy/config/initializers/secret_token.rb +12 -0
  43. data/spec/dummy/config/initializers/session_store.rb +3 -0
  44. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  45. data/spec/dummy/config/locales/en.yml +23 -0
  46. data/spec/dummy/config/routes.rb +8 -0
  47. data/spec/dummy/db/development.sqlite3 +0 -0
  48. data/spec/dummy/db/migrate/0_create_drawings.rb +7 -0
  49. data/spec/dummy/db/schema.rb +20 -0
  50. data/spec/dummy/db/test.sqlite3 +0 -0
  51. data/spec/dummy/log/development.log +922 -0
  52. data/spec/dummy/log/test.log +181 -0
  53. data/spec/dummy/public/404.html +26 -0
  54. data/spec/dummy/public/422.html +26 -0
  55. data/spec/dummy/public/500.html +25 -0
  56. data/spec/dummy/public/favicon.ico +0 -0
  57. data/spec/dummy/script/rails +6 -0
  58. data/spec/dummy/tmp/cache/assets/development/sprockets/01e63791dcd008779246d1eeeace9408 +0 -0
  59. data/spec/dummy/tmp/cache/assets/development/sprockets/061f36c32f08daef6eca93b74eaf74fd +0 -0
  60. data/spec/dummy/tmp/cache/assets/development/sprockets/13fe41fee1fe35b49d145bcc06610705 +0 -0
  61. data/spec/dummy/tmp/cache/assets/development/sprockets/1dbfe77fba798ba3dc24571c3b6d7eed +0 -0
  62. data/spec/dummy/tmp/cache/assets/development/sprockets/1fd7477d83ec1798c2bc740be42bd6b2 +0 -0
  63. data/spec/dummy/tmp/cache/assets/development/sprockets/203471220004cb0cc667b886fb87dc46 +0 -0
  64. data/spec/dummy/tmp/cache/assets/development/sprockets/213e12fc648032455ca0b118e987cca6 +0 -0
  65. data/spec/dummy/tmp/cache/assets/development/sprockets/296bbe63b0505bc5be472fc1c8a1a5fd +0 -0
  66. data/spec/dummy/tmp/cache/assets/development/sprockets/2f5173deea6c795b8fdde723bb4b63af +0 -0
  67. data/spec/dummy/tmp/cache/assets/development/sprockets/3239b44c026d7c1646c17a10c72905bf +0 -0
  68. data/spec/dummy/tmp/cache/assets/development/sprockets/357970feca3ac29060c1e3861e2c0953 +0 -0
  69. data/spec/dummy/tmp/cache/assets/development/sprockets/38c8fbf05056bbe66399b6923521dc20 +0 -0
  70. data/spec/dummy/tmp/cache/assets/development/sprockets/3e30c8cfdf7deeda4607e4a8298f09a5 +0 -0
  71. data/spec/dummy/tmp/cache/assets/development/sprockets/4bdd61ba53e8d9b7c19afea13c6e8985 +0 -0
  72. data/spec/dummy/tmp/cache/assets/development/sprockets/52b0b11efea48f1fe5e46eeb4aa20193 +0 -0
  73. data/spec/dummy/tmp/cache/assets/development/sprockets/5ef314d6f1af1570631d60b7f9a96d6c +0 -0
  74. data/spec/dummy/tmp/cache/assets/development/sprockets/6215f00c593e1789ef865a545b17fc14 +0 -0
  75. data/spec/dummy/tmp/cache/assets/development/sprockets/624fdd5478edd235a86af4b6168d0f75 +0 -0
  76. data/spec/dummy/tmp/cache/assets/development/sprockets/6299190ac3952cf7eee042e60c9aee89 +0 -0
  77. data/spec/dummy/tmp/cache/assets/development/sprockets/62a95a2d67ec78570de6d0b31436206a +0 -0
  78. data/spec/dummy/tmp/cache/assets/development/sprockets/65ed942dea29700b739c2292791eb65e +0 -0
  79. data/spec/dummy/tmp/cache/assets/development/sprockets/66eb709561f77a29885af4423a3eb193 +0 -0
  80. data/spec/dummy/tmp/cache/assets/development/sprockets/6f8f2c21bc49ae5ebad6e8a96cea4fe6 +0 -0
  81. data/spec/dummy/tmp/cache/assets/development/sprockets/85dab60ed9ec9625b7ee22d4342fe26c +0 -0
  82. data/spec/dummy/tmp/cache/assets/development/sprockets/86358bce0bfd5de6ac8afb1bfa9d675b +0 -0
  83. data/spec/dummy/tmp/cache/assets/development/sprockets/8b835ce894c1218dea1e7c83a9109d2d +0 -0
  84. data/spec/dummy/tmp/cache/assets/development/sprockets/8e177cc7106653a1e053bb2444bb43a5 +0 -0
  85. data/spec/dummy/tmp/cache/assets/development/sprockets/8f41435d82ae4df55ae7dfdc1e99b0bb +0 -0
  86. data/spec/dummy/tmp/cache/assets/development/sprockets/94be0a0bca76437d0766c265a9cdecda +0 -0
  87. data/spec/dummy/tmp/cache/assets/development/sprockets/9a093e6973aa150a0a4388167364593d +0 -0
  88. data/spec/dummy/tmp/cache/assets/development/sprockets/a280ac195f56a87267d2ec5d3e22ebcd +0 -0
  89. data/spec/dummy/tmp/cache/assets/development/sprockets/b13cddebc9106da6cfaf949ab3856d1f +0 -0
  90. data/spec/dummy/tmp/cache/assets/development/sprockets/b29ac216cb03ce2f30655a0d9bed77d4 +0 -0
  91. data/spec/dummy/tmp/cache/assets/development/sprockets/c39d32e3ef6cc89f9c522212e65c49e1 +0 -0
  92. data/spec/dummy/tmp/cache/assets/development/sprockets/c9910a0652952be02900dc71594d4384 +0 -0
  93. data/spec/dummy/tmp/cache/assets/development/sprockets/cb14e22baac3ab2cc947628f283e117b +0 -0
  94. data/spec/dummy/tmp/cache/assets/development/sprockets/cffd775d018f68ce5dba1ee0d951a994 +0 -0
  95. data/spec/dummy/tmp/cache/assets/development/sprockets/d1475c156face9f06092c9cf89905372 +0 -0
  96. data/spec/dummy/tmp/cache/assets/development/sprockets/d22aa5a4d864d00cced2437352fe8fe4 +0 -0
  97. data/spec/dummy/tmp/cache/assets/development/sprockets/d46cc5e60d1b2a20d622cdf9bab35fad +0 -0
  98. data/spec/dummy/tmp/cache/assets/development/sprockets/d771ace226fc8215a3572e0aa35bb0d6 +0 -0
  99. data/spec/dummy/tmp/cache/assets/development/sprockets/d7f27a7f35278e87c69668a65683360a +0 -0
  100. data/spec/dummy/tmp/cache/assets/development/sprockets/e0080336bb31d78e9efab59b234e0d85 +0 -0
  101. data/spec/dummy/tmp/cache/assets/development/sprockets/e06104d99b055e792effca7bd66ad384 +0 -0
  102. data/spec/dummy/tmp/cache/assets/development/sprockets/e095df19da361d5f53d90f6749a38ea6 +0 -0
  103. data/spec/dummy/tmp/cache/assets/development/sprockets/e5fb97d39fdd2e383e61115ef06079fd +0 -0
  104. data/spec/dummy/tmp/cache/assets/development/sprockets/e6d1ec9817258cfda7c68499a841a9d2 +0 -0
  105. data/spec/dummy/tmp/cache/assets/development/sprockets/edec019e8f1d7e758eb45524a913fd47 +0 -0
  106. data/spec/dummy/tmp/cache/assets/development/sprockets/f37cf330dccb15bee2a195f643f3ba29 +0 -0
  107. data/spec/dummy/tmp/cache/assets/development/sprockets/f7cbd26ba1d28d48de824f0e94586655 +0 -0
  108. data/spec/dummy/tmp/cache/assets/development/sprockets/fc84011813992cacde5880c6b21701de +0 -0
  109. data/spec/dummy/tmp/cache/assets/test/sprockets/061f36c32f08daef6eca93b74eaf74fd +0 -0
  110. data/spec/dummy/tmp/cache/assets/test/sprockets/13fe41fee1fe35b49d145bcc06610705 +0 -0
  111. data/spec/dummy/tmp/cache/assets/test/sprockets/2f5173deea6c795b8fdde723bb4b63af +0 -0
  112. data/spec/dummy/tmp/cache/assets/test/sprockets/357970feca3ac29060c1e3861e2c0953 +0 -0
  113. data/spec/dummy/tmp/cache/assets/test/sprockets/38c8fbf05056bbe66399b6923521dc20 +0 -0
  114. data/spec/dummy/tmp/cache/assets/test/sprockets/3e30c8cfdf7deeda4607e4a8298f09a5 +0 -0
  115. data/spec/dummy/tmp/cache/assets/test/sprockets/52b0b11efea48f1fe5e46eeb4aa20193 +0 -0
  116. data/spec/dummy/tmp/cache/assets/test/sprockets/5ef314d6f1af1570631d60b7f9a96d6c +0 -0
  117. data/spec/dummy/tmp/cache/assets/test/sprockets/6299190ac3952cf7eee042e60c9aee89 +0 -0
  118. data/spec/dummy/tmp/cache/assets/test/sprockets/62a95a2d67ec78570de6d0b31436206a +0 -0
  119. data/spec/dummy/tmp/cache/assets/test/sprockets/65ed942dea29700b739c2292791eb65e +0 -0
  120. data/spec/dummy/tmp/cache/assets/test/sprockets/85dab60ed9ec9625b7ee22d4342fe26c +0 -0
  121. data/spec/dummy/tmp/cache/assets/test/sprockets/a280ac195f56a87267d2ec5d3e22ebcd +0 -0
  122. data/spec/dummy/tmp/cache/assets/test/sprockets/cb14e22baac3ab2cc947628f283e117b +0 -0
  123. data/spec/dummy/tmp/cache/assets/test/sprockets/cffd775d018f68ce5dba1ee0d951a994 +0 -0
  124. data/spec/dummy/tmp/cache/assets/test/sprockets/d1475c156face9f06092c9cf89905372 +0 -0
  125. data/spec/dummy/tmp/cache/assets/test/sprockets/d771ace226fc8215a3572e0aa35bb0d6 +0 -0
  126. data/spec/dummy/tmp/cache/assets/test/sprockets/e0080336bb31d78e9efab59b234e0d85 +0 -0
  127. data/spec/dummy/tmp/cache/assets/test/sprockets/f7cbd26ba1d28d48de824f0e94586655 +0 -0
  128. data/spec/dummy/tmp/pids/server.pid +1 -0
  129. data/spec/features/method_draw_spec.rb +10 -0
  130. data/spec/features/method_draw_tag_spec.rb +11 -0
  131. data/spec/lib/method_draw/method_draw_spec.rb +27 -0
  132. data/spec/lib/method_draw/method_draw_tag_spec.rb +19 -0
  133. data/spec/lib/method_draw_spec.rb +11 -0
  134. data/spec/test_helper.rb +24 -0
  135. data/vendor/assets/javascripts/method-draw-js/browser-not-supported.html +27 -0
  136. data/vendor/assets/javascripts/method-draw-js/css/font-files/Anivers-webfont.eot +0 -0
  137. data/vendor/assets/javascripts/method-draw-js/css/font-files/Anivers-webfont.ttf +0 -0
  138. data/vendor/assets/javascripts/method-draw-js/css/font-files/Anivers-webfont.woff +0 -0
  139. data/vendor/assets/javascripts/method-draw-js/css/font-files/Arvo-Regular-webfont.svg +145 -0
  140. data/vendor/assets/javascripts/method-draw-js/css/font-files/Arvo-Regular-webfont.ttf +0 -0
  141. data/vendor/assets/javascripts/method-draw-js/css/font-files/Junction-webfont.eot +0 -0
  142. data/vendor/assets/javascripts/method-draw-js/css/font-files/Junction-webfont.svg +133 -0
  143. data/vendor/assets/javascripts/method-draw-js/css/font-files/Junction-webfont.ttf +0 -0
  144. data/vendor/assets/javascripts/method-draw-js/css/font-files/Junction-webfont.woff +0 -0
  145. data/vendor/assets/javascripts/method-draw-js/css/font-files/League_Gothic-webfont.eot +0 -0
  146. data/vendor/assets/javascripts/method-draw-js/css/font-files/League_Gothic-webfont.svg +235 -0
  147. data/vendor/assets/javascripts/method-draw-js/css/font-files/League_Gothic-webfont.ttf +0 -0
  148. data/vendor/assets/javascripts/method-draw-js/css/font-files/League_Gothic-webfont.woff +0 -0
  149. data/vendor/assets/javascripts/method-draw-js/css/font-files/Museo_Slab-webfont.eot +0 -0
  150. data/vendor/assets/javascripts/method-draw-js/css/font-files/Museo_Slab-webfont.ttf +0 -0
  151. data/vendor/assets/javascripts/method-draw-js/css/font-files/Museo_Slab-webfont.woff +0 -0
  152. data/vendor/assets/javascripts/method-draw-js/css/font-files/Museo_Slab_Italic-webfont.eot +0 -0
  153. data/vendor/assets/javascripts/method-draw-js/css/font-files/Museo_Slab_Italic-webfont.ttf +0 -0
  154. data/vendor/assets/javascripts/method-draw-js/css/font-files/Museo_Slab_Italic-webfont.woff +0 -0
  155. data/vendor/assets/javascripts/method-draw-js/css/font-files/arvo-bold-webfont.woff +0 -0
  156. data/vendor/assets/javascripts/method-draw-js/css/font-files/arvo-bolditalic-webfont.woff +0 -0
  157. data/vendor/assets/javascripts/method-draw-js/css/font-files/arvo-italic-webfont.woff +0 -0
  158. data/vendor/assets/javascripts/method-draw-js/css/font-files/arvo-regular-webfont.woff +0 -0
  159. data/vendor/assets/javascripts/method-draw-js/css/font-files/euphoriascript-regular-webfont.woff +0 -0
  160. data/vendor/assets/javascripts/method-draw-js/css/font-files/fanwood-webfont.eot +0 -0
  161. data/vendor/assets/javascripts/method-draw-js/css/font-files/fanwood-webfont.svg +939 -0
  162. data/vendor/assets/javascripts/method-draw-js/css/font-files/fanwood-webfont.ttf +0 -0
  163. data/vendor/assets/javascripts/method-draw-js/css/font-files/fanwood-webfont.woff +0 -0
  164. data/vendor/assets/javascripts/method-draw-js/css/font-files/fanwood_italic-webfont.eot +0 -0
  165. data/vendor/assets/javascripts/method-draw-js/css/font-files/fanwood_italic-webfont.svg +682 -0
  166. data/vendor/assets/javascripts/method-draw-js/css/font-files/fanwood_italic-webfont.ttf +0 -0
  167. data/vendor/assets/javascripts/method-draw-js/css/font-files/fanwood_italic-webfont.woff +0 -0
  168. data/vendor/assets/javascripts/method-draw-js/css/font-files/fertigo-webfont.eot +0 -0
  169. data/vendor/assets/javascripts/method-draw-js/css/font-files/fertigo-webfont.ttf +0 -0
  170. data/vendor/assets/javascripts/method-draw-js/css/font-files/fertigo-webfont.woff +0 -0
  171. data/vendor/assets/javascripts/method-draw-js/css/font-files/oswald-bold-webfont.woff +0 -0
  172. data/vendor/assets/javascripts/method-draw-js/css/font-files/oswald-light-webfont.woff +0 -0
  173. data/vendor/assets/javascripts/method-draw-js/css/font-files/shadowsintolight-webfont.woff +0 -0
  174. data/vendor/assets/javascripts/method-draw-js/css/font-files/simonetta-black-webfont.woff +0 -0
  175. data/vendor/assets/javascripts/method-draw-js/css/font-files/simonetta-blackitalic-webfont.woff +0 -0
  176. data/vendor/assets/javascripts/method-draw-js/css/font-files/simonetta-italic-webfont.ttf +0 -0
  177. data/vendor/assets/javascripts/method-draw-js/css/font-files/simonetta-regular-webfont.woff +0 -0
  178. data/vendor/assets/javascripts/method-draw-js/css/font-files/test.html +62 -0
  179. data/vendor/assets/javascripts/method-draw-js/css/font-files/test.svg +15 -0
  180. data/vendor/assets/javascripts/method-draw-js/css/font-files/test_ff.svg +16 -0
  181. data/vendor/assets/javascripts/method-draw-js/css/font-files/test_ffsvg.svg +13 -0
  182. data/vendor/assets/javascripts/method-draw-js/css/fonts.css +72 -0
  183. data/vendor/assets/javascripts/method-draw-js/css/method-draw.compiled.css +417 -0
  184. data/vendor/assets/javascripts/method-draw-js/css/method-draw.css +2083 -0
  185. data/vendor/assets/javascripts/method-draw-js/embedapi.html +56 -0
  186. data/vendor/assets/javascripts/method-draw-js/extensions/closepath_icons.svg +41 -0
  187. data/vendor/assets/javascripts/method-draw-js/extensions/ext-arrows.js +298 -0
  188. data/vendor/assets/javascripts/method-draw-js/extensions/ext-closepath.js +92 -0
  189. data/vendor/assets/javascripts/method-draw-js/extensions/ext-connector.js +587 -0
  190. data/vendor/assets/javascripts/method-draw-js/extensions/ext-eyedropper.js +135 -0
  191. data/vendor/assets/javascripts/method-draw-js/extensions/ext-foreignobject.js +277 -0
  192. data/vendor/assets/javascripts/method-draw-js/extensions/ext-grid.js +186 -0
  193. data/vendor/assets/javascripts/method-draw-js/extensions/ext-helloworld.js +78 -0
  194. data/vendor/assets/javascripts/method-draw-js/extensions/ext-imagelib.js +444 -0
  195. data/vendor/assets/javascripts/method-draw-js/extensions/ext-imagelib.xml +14 -0
  196. data/vendor/assets/javascripts/method-draw-js/extensions/ext-markers.js +576 -0
  197. data/vendor/assets/javascripts/method-draw-js/extensions/ext-server_moinsave.js +56 -0
  198. data/vendor/assets/javascripts/method-draw-js/extensions/ext-server_opensave.js +180 -0
  199. data/vendor/assets/javascripts/method-draw-js/extensions/ext-shapes.js +358 -0
  200. data/vendor/assets/javascripts/method-draw-js/extensions/ext-shapes.png +0 -0
  201. data/vendor/assets/javascripts/method-draw-js/extensions/ext-shapes.xml +8 -0
  202. data/vendor/assets/javascripts/method-draw-js/extensions/eyedropper-icon.xml +17 -0
  203. data/vendor/assets/javascripts/method-draw-js/extensions/eyedropper.png +0 -0
  204. data/vendor/assets/javascripts/method-draw-js/extensions/eyedropper.svg +15 -0
  205. data/vendor/assets/javascripts/method-draw-js/extensions/fileopen.php +31 -0
  206. data/vendor/assets/javascripts/method-draw-js/extensions/filesave.php +44 -0
  207. data/vendor/assets/javascripts/method-draw-js/extensions/foreignobject-icons.xml +96 -0
  208. data/vendor/assets/javascripts/method-draw-js/extensions/grid-icon.xml +30 -0
  209. data/vendor/assets/javascripts/method-draw-js/extensions/helloworld-icon.xml +21 -0
  210. data/vendor/assets/javascripts/method-draw-js/extensions/imagelib/index.html +64 -0
  211. data/vendor/assets/javascripts/method-draw-js/extensions/imagelib/smiley.svg +12 -0
  212. data/vendor/assets/javascripts/method-draw-js/extensions/markers-icons.xml +115 -0
  213. data/vendor/assets/javascripts/method-draw-js/extensions/shapelib.png +0 -0
  214. data/vendor/assets/javascripts/method-draw-js/extensions/shapelib.svg +10 -0
  215. data/vendor/assets/javascripts/method-draw-js/extensions/shapelib/arrow.json +40 -0
  216. data/vendor/assets/javascripts/method-draw-js/extensions/shapelib/dialog_balloon.json +14 -0
  217. data/vendor/assets/javascripts/method-draw-js/extensions/shapelib/flowchart.json +20 -0
  218. data/vendor/assets/javascripts/method-draw-js/extensions/shapelib/game.json +13 -0
  219. data/vendor/assets/javascripts/method-draw-js/extensions/shapelib/math.json +8 -0
  220. data/vendor/assets/javascripts/method-draw-js/extensions/shapelib/misc.json +6 -0
  221. data/vendor/assets/javascripts/method-draw-js/extensions/shapelib/music.json +21 -0
  222. data/vendor/assets/javascripts/method-draw-js/extensions/shapelib/nature.json +36 -0
  223. data/vendor/assets/javascripts/method-draw-js/extensions/shapelib/object.json +30 -0
  224. data/vendor/assets/javascripts/method-draw-js/extensions/shapelib/raphael.txt +12 -0
  225. data/vendor/assets/javascripts/method-draw-js/extensions/shapelib/raphael_1.json +7 -0
  226. data/vendor/assets/javascripts/method-draw-js/extensions/shapelib/social.json +21 -0
  227. data/vendor/assets/javascripts/method-draw-js/extensions/shapelib/symbol.json +35 -0
  228. data/vendor/assets/javascripts/method-draw-js/extensions/shapelib/ui.json +57 -0
  229. data/vendor/assets/javascripts/method-draw-js/extensions/shapelib/weather.json +26 -0
  230. data/vendor/assets/javascripts/method-draw-js/icons/jquery.svgicons.js +471 -0
  231. data/vendor/assets/javascripts/method-draw-js/images/AlphaBar.png +0 -0
  232. data/vendor/assets/javascripts/method-draw-js/images/Bars.png +0 -0
  233. data/vendor/assets/javascripts/method-draw-js/images/Maps.png +0 -0
  234. data/vendor/assets/javascripts/method-draw-js/images/NoColor.png +0 -0
  235. data/vendor/assets/javascripts/method-draw-js/images/README.txt +61 -0
  236. data/vendor/assets/javascripts/method-draw-js/images/align-bottom.png +0 -0
  237. data/vendor/assets/javascripts/method-draw-js/images/align-bottom.svg +1 -0
  238. data/vendor/assets/javascripts/method-draw-js/images/align-center.png +0 -0
  239. data/vendor/assets/javascripts/method-draw-js/images/align-center.svg +1 -0
  240. data/vendor/assets/javascripts/method-draw-js/images/align-left.png +0 -0
  241. data/vendor/assets/javascripts/method-draw-js/images/align-left.svg +1 -0
  242. data/vendor/assets/javascripts/method-draw-js/images/align-middle.png +0 -0
  243. data/vendor/assets/javascripts/method-draw-js/images/align-middle.svg +1 -0
  244. data/vendor/assets/javascripts/method-draw-js/images/align-right.png +0 -0
  245. data/vendor/assets/javascripts/method-draw-js/images/align-right.svg +1 -0
  246. data/vendor/assets/javascripts/method-draw-js/images/align-top.png +0 -0
  247. data/vendor/assets/javascripts/method-draw-js/images/align-top.svg +1 -0
  248. data/vendor/assets/javascripts/method-draw-js/images/bar-opacity.png +0 -0
  249. data/vendor/assets/javascripts/method-draw-js/images/bold.png +0 -0
  250. data/vendor/assets/javascripts/method-draw-js/images/cancel.png +0 -0
  251. data/vendor/assets/javascripts/method-draw-js/images/circle.png +0 -0
  252. data/vendor/assets/javascripts/method-draw-js/images/clear.png +0 -0
  253. data/vendor/assets/javascripts/method-draw-js/images/clone.png +0 -0
  254. data/vendor/assets/javascripts/method-draw-js/images/conn.svg +29 -0
  255. data/vendor/assets/javascripts/method-draw-js/images/copy.png +0 -0
  256. data/vendor/assets/javascripts/method-draw-js/images/cross.png +0 -0
  257. data/vendor/assets/javascripts/method-draw-js/images/cut.png +0 -0
  258. data/vendor/assets/javascripts/method-draw-js/images/delete.png +0 -0
  259. data/vendor/assets/javascripts/method-draw-js/images/document-properties.png +0 -0
  260. data/vendor/assets/javascripts/method-draw-js/images/drag.png +0 -0
  261. data/vendor/assets/javascripts/method-draw-js/images/dragging.png +0 -0
  262. data/vendor/assets/javascripts/method-draw-js/images/dropdown.gif +0 -0
  263. data/vendor/assets/javascripts/method-draw-js/images/ellipse.png +0 -0
  264. data/vendor/assets/javascripts/method-draw-js/images/ellipse.svg +8 -0
  265. data/vendor/assets/javascripts/method-draw-js/images/eye.png +0 -0
  266. data/vendor/assets/javascripts/method-draw-js/images/eye.svg +1 -0
  267. data/vendor/assets/javascripts/method-draw-js/images/eyedropper.png +0 -0
  268. data/vendor/assets/javascripts/method-draw-js/images/eyedropper_tool.png +0 -0
  269. data/vendor/assets/javascripts/method-draw-js/images/fhpath.png +0 -0
  270. data/vendor/assets/javascripts/method-draw-js/images/flyouth.png +0 -0
  271. data/vendor/assets/javascripts/method-draw-js/images/flyup.gif +0 -0
  272. data/vendor/assets/javascripts/method-draw-js/images/freehand-circle.png +0 -0
  273. data/vendor/assets/javascripts/method-draw-js/images/freehand-square.png +0 -0
  274. data/vendor/assets/javascripts/method-draw-js/images/go-down.png +0 -0
  275. data/vendor/assets/javascripts/method-draw-js/images/go-up.png +0 -0
  276. data/vendor/assets/javascripts/method-draw-js/images/image.png +0 -0
  277. data/vendor/assets/javascripts/method-draw-js/images/image.svg +12 -0
  278. data/vendor/assets/javascripts/method-draw-js/images/italic.png +0 -0
  279. data/vendor/assets/javascripts/method-draw-js/images/italic.svg +1 -0
  280. data/vendor/assets/javascripts/method-draw-js/images/line.png +0 -0
  281. data/vendor/assets/javascripts/method-draw-js/images/link_controls.png +0 -0
  282. data/vendor/assets/javascripts/method-draw-js/images/logo.png +0 -0
  283. data/vendor/assets/javascripts/method-draw-js/images/map-opacity.png +0 -0
  284. data/vendor/assets/javascripts/method-draw-js/images/mappoint.gif +0 -0
  285. data/vendor/assets/javascripts/method-draw-js/images/mappoint_c.png +0 -0
  286. data/vendor/assets/javascripts/method-draw-js/images/mappoint_f.png +0 -0
  287. data/vendor/assets/javascripts/method-draw-js/images/move_bottom.png +0 -0
  288. data/vendor/assets/javascripts/method-draw-js/images/move_top.png +0 -0
  289. data/vendor/assets/javascripts/method-draw-js/images/node_clone.png +0 -0
  290. data/vendor/assets/javascripts/method-draw-js/images/node_delete.png +0 -0
  291. data/vendor/assets/javascripts/method-draw-js/images/none.png +0 -0
  292. data/vendor/assets/javascripts/method-draw-js/images/open.png +0 -0
  293. data/vendor/assets/javascripts/method-draw-js/images/paste.png +0 -0
  294. data/vendor/assets/javascripts/method-draw-js/images/path.png +0 -0
  295. data/vendor/assets/javascripts/method-draw-js/images/path.svg +10 -0
  296. data/vendor/assets/javascripts/method-draw-js/images/pencil.png +0 -0
  297. data/vendor/assets/javascripts/method-draw-js/images/pencil.svg +11 -0
  298. data/vendor/assets/javascripts/method-draw-js/images/pencil_cursor.png +0 -0
  299. data/vendor/assets/javascripts/method-draw-js/images/picker.gif +0 -0
  300. data/vendor/assets/javascripts/method-draw-js/images/placeholder.svg +10 -0
  301. data/vendor/assets/javascripts/method-draw-js/images/polygon.png +0 -0
  302. data/vendor/assets/javascripts/method-draw-js/images/polygon.svg +1 -0
  303. data/vendor/assets/javascripts/method-draw-js/images/preview-opacity.png +0 -0
  304. data/vendor/assets/javascripts/method-draw-js/images/rangearrows.gif +0 -0
  305. data/vendor/assets/javascripts/method-draw-js/images/rangearrows2.gif +0 -0
  306. data/vendor/assets/javascripts/method-draw-js/images/rect.png +0 -0
  307. data/vendor/assets/javascripts/method-draw-js/images/redo.png +0 -0
  308. data/vendor/assets/javascripts/method-draw-js/images/reorient.png +0 -0
  309. data/vendor/assets/javascripts/method-draw-js/images/rotate.png +0 -0
  310. data/vendor/assets/javascripts/method-draw-js/images/save.png +0 -0
  311. data/vendor/assets/javascripts/method-draw-js/images/select.png +0 -0
  312. data/vendor/assets/javascripts/method-draw-js/images/select.svg +10 -0
  313. data/vendor/assets/javascripts/method-draw-js/images/select_node.png +0 -0
  314. data/vendor/assets/javascripts/method-draw-js/images/sep.png +0 -0
  315. data/vendor/assets/javascripts/method-draw-js/images/shape_group.png +0 -0
  316. data/vendor/assets/javascripts/method-draw-js/images/shape_ungroup.png +0 -0
  317. data/vendor/assets/javascripts/method-draw-js/images/source.png +0 -0
  318. data/vendor/assets/javascripts/method-draw-js/images/spinbtn_updn_big.png +0 -0
  319. data/vendor/assets/javascripts/method-draw-js/images/square.png +0 -0
  320. data/vendor/assets/javascripts/method-draw-js/images/svg_edit_icons.svg +455 -0
  321. data/vendor/assets/javascripts/method-draw-js/images/svg_edit_icons.svgz +0 -0
  322. data/vendor/assets/javascripts/method-draw-js/images/text.png +0 -0
  323. data/vendor/assets/javascripts/method-draw-js/images/text.svg +10 -0
  324. data/vendor/assets/javascripts/method-draw-js/images/to_path.png +0 -0
  325. data/vendor/assets/javascripts/method-draw-js/images/undo.png +0 -0
  326. data/vendor/assets/javascripts/method-draw-js/images/view-refresh.png +0 -0
  327. data/vendor/assets/javascripts/method-draw-js/images/wave.png +0 -0
  328. data/vendor/assets/javascripts/method-draw-js/images/wireframe.png +0 -0
  329. data/vendor/assets/javascripts/method-draw-js/images/zoom.png +0 -0
  330. data/vendor/assets/javascripts/method-draw-js/images/zoom.svg +12 -0
  331. data/vendor/assets/javascripts/method-draw-js/index.html +631 -0
  332. data/vendor/assets/javascripts/method-draw-js/lib/canvg/canvg.js +2620 -0
  333. data/vendor/assets/javascripts/method-draw-js/lib/canvg/rgbcolor.js +287 -0
  334. data/vendor/assets/javascripts/method-draw-js/lib/contextmenu.js +68 -0
  335. data/vendor/assets/javascripts/method-draw-js/lib/contextmenu/jquery.contextMenu.js +223 -0
  336. data/vendor/assets/javascripts/method-draw-js/lib/jgraduate/LICENSE +202 -0
  337. data/vendor/assets/javascripts/method-draw-js/lib/jgraduate/README +3 -0
  338. data/vendor/assets/javascripts/method-draw-js/lib/jgraduate/css/jPicker.css +250 -0
  339. data/vendor/assets/javascripts/method-draw-js/lib/jgraduate/css/jgraduate.css +332 -0
  340. data/vendor/assets/javascripts/method-draw-js/lib/jgraduate/images/AlphaBar.png +0 -0
  341. data/vendor/assets/javascripts/method-draw-js/lib/jgraduate/images/Bars.png +0 -0
  342. data/vendor/assets/javascripts/method-draw-js/lib/jgraduate/images/Maps.png +0 -0
  343. data/vendor/assets/javascripts/method-draw-js/lib/jgraduate/images/NoColor.png +0 -0
  344. data/vendor/assets/javascripts/method-draw-js/lib/jgraduate/images/bar-opacity.png +0 -0
  345. data/vendor/assets/javascripts/method-draw-js/lib/jgraduate/images/eyedropper.png +0 -0
  346. data/vendor/assets/javascripts/method-draw-js/lib/jgraduate/images/map-opacity.png +0 -0
  347. data/vendor/assets/javascripts/method-draw-js/lib/jgraduate/images/mappoint.gif +0 -0
  348. data/vendor/assets/javascripts/method-draw-js/lib/jgraduate/images/mappoint_c.png +0 -0
  349. data/vendor/assets/javascripts/method-draw-js/lib/jgraduate/images/mappoint_f.png +0 -0
  350. data/vendor/assets/javascripts/method-draw-js/lib/jgraduate/images/picker.gif +0 -0
  351. data/vendor/assets/javascripts/method-draw-js/lib/jgraduate/images/preview-opacity.png +0 -0
  352. data/vendor/assets/javascripts/method-draw-js/lib/jgraduate/images/rangearrows.gif +0 -0
  353. data/vendor/assets/javascripts/method-draw-js/lib/jgraduate/images/rangearrows2.gif +0 -0
  354. data/vendor/assets/javascripts/method-draw-js/lib/jgraduate/jpicker.min.js +2087 -0
  355. data/vendor/assets/javascripts/method-draw-js/lib/jgraduate/jquery.jgraduate.js +1175 -0
  356. data/vendor/assets/javascripts/method-draw-js/lib/jgraduate/jquery.jgraduate.min.js +37 -0
  357. data/vendor/assets/javascripts/method-draw-js/lib/jquery-draginput.js +181 -0
  358. data/vendor/assets/javascripts/method-draw-js/lib/jquery-ui/jquery-ui-1.8.17.custom.min.js +54 -0
  359. data/vendor/assets/javascripts/method-draw-js/lib/jquery-ui/jquery-ui-1.8.custom.min.js +84 -0
  360. data/vendor/assets/javascripts/method-draw-js/lib/jquery.js +2 -0
  361. data/vendor/assets/javascripts/method-draw-js/lib/jquerybbq/jquery.bbq.min.js +18 -0
  362. data/vendor/assets/javascripts/method-draw-js/lib/js-hotkeys/README.md +45 -0
  363. data/vendor/assets/javascripts/method-draw-js/lib/js-hotkeys/jquery.hotkeys.min.js +15 -0
  364. data/vendor/assets/javascripts/method-draw-js/lib/mousewheel.js +84 -0
  365. data/vendor/assets/javascripts/method-draw-js/lib/requestanimationframe.js +24 -0
  366. data/vendor/assets/javascripts/method-draw-js/lib/taphold.js +136 -0
  367. data/vendor/assets/javascripts/method-draw-js/lib/touch.js +28 -0
  368. data/vendor/assets/javascripts/method-draw-js/method-draw.compiled.css +417 -0
  369. data/vendor/assets/javascripts/method-draw-js/method-draw.compiled.js +692 -0
  370. data/vendor/assets/javascripts/method-draw-js/method-draw.manifest +121 -0
  371. data/vendor/assets/javascripts/method-draw-js/src/browser.js +181 -0
  372. data/vendor/assets/javascripts/method-draw-js/src/dialog.js +49 -0
  373. data/vendor/assets/javascripts/method-draw-js/src/dragupload.js +11 -0
  374. data/vendor/assets/javascripts/method-draw-js/src/draw.js +533 -0
  375. data/vendor/assets/javascripts/method-draw-js/src/embedapi.js +173 -0
  376. data/vendor/assets/javascripts/method-draw-js/src/history.js +601 -0
  377. data/vendor/assets/javascripts/method-draw-js/src/math.js +247 -0
  378. data/vendor/assets/javascripts/method-draw-js/src/method-draw.js +4140 -0
  379. data/vendor/assets/javascripts/method-draw-js/src/path.js +979 -0
  380. data/vendor/assets/javascripts/method-draw-js/src/sanitize.js +273 -0
  381. data/vendor/assets/javascripts/method-draw-js/src/select.js +608 -0
  382. data/vendor/assets/javascripts/method-draw-js/src/svgcanvas.js +9047 -0
  383. data/vendor/assets/javascripts/method-draw-js/src/svgtransformlist.js +291 -0
  384. data/vendor/assets/javascripts/method-draw-js/src/svgutils.js +648 -0
  385. data/vendor/assets/javascripts/method-draw-js/src/units.js +281 -0
  386. data/vendor/assets/javascripts/method-draw-js/svgedit.compiled.css +417 -0
  387. data/vendor/assets/javascripts/method-draw-js/svgedit.compiled.js +691 -0
  388. data/vendor/assets/javascripts/method-draw-js/temp.css +2665 -0
  389. metadata +619 -0
@@ -0,0 +1,1175 @@
1
+ /*
2
+ * jGraduate 0.4
3
+ *
4
+ * jQuery Plugin for a gradient picker
5
+ *
6
+ * Copyright (c) 2010 Jeff Schiller
7
+ * http://blog.codedread.com/
8
+ * Copyright (c) 2010 Alexis Deveria
9
+ * http://a.deveria.com/
10
+ *
11
+ * Apache 2 License
12
+
13
+ jGraduate( options, okCallback, cancelCallback )
14
+
15
+ where options is an object literal:
16
+ {
17
+ window: { title: "Pick the start color and opacity for the gradient" },
18
+ images: { clientPath: "images/" },
19
+ paint: a Paint object,
20
+ newstop: String of value "same", "inverse", "black" or "white"
21
+ OR object with one or both values {color: #Hex color, opac: number 0-1}
22
+ }
23
+
24
+ - the Paint object is:
25
+ Paint {
26
+ type: String, // one of "none", "solidColor", "linearGradient", "radialGradient"
27
+ alpha: Number representing opacity (0-100),
28
+ solidColor: String representing #RRGGBB hex of color,
29
+ linearGradient: object of interface SVGLinearGradientElement,
30
+ radialGradient: object of interface SVGRadialGradientElement,
31
+ }
32
+
33
+ $.jGraduate.Paint() -> constructs a 'none' color
34
+ $.jGraduate.Paint({copy: o}) -> creates a copy of the paint o
35
+ $.jGraduate.Paint({hex: "#rrggbb"}) -> creates a solid color paint with hex = "#rrggbb"
36
+ $.jGraduate.Paint({linearGradient: o, a: 50}) -> creates a linear gradient paint with opacity=0.5
37
+ $.jGraduate.Paint({radialGradient: o, a: 7}) -> creates a radial gradient paint with opacity=0.07
38
+ $.jGraduate.Paint({hex: "#rrggbb", linearGradient: o}) -> throws an exception?
39
+
40
+ - picker accepts the following object as input:
41
+ {
42
+ okCallback: function to call when Ok is pressed
43
+ cancelCallback: function to call when Cancel is pressed
44
+ paint: object describing the paint to display initially, if not set, then default to opaque white
45
+ }
46
+
47
+ - okCallback receives a Paint object
48
+
49
+ *
50
+ */
51
+
52
+ (function() {
53
+
54
+ var ns = { svg: 'http://www.w3.org/2000/svg', xlink: 'http://www.w3.org/1999/xlink' };
55
+ if(!window.console) {
56
+ window.console = new function() {
57
+ this.log = function(str) {};
58
+ this.dir = function(str) {};
59
+ };
60
+ }
61
+
62
+ $.jGraduate = {
63
+ Paint:
64
+ function(opt) {
65
+ var options = opt || {};
66
+ this.alpha = isNaN(options.alpha) ? 100 : options.alpha;
67
+ // copy paint object
68
+ if (options.copy) {
69
+ this.type = options.copy.type;
70
+ this.alpha = options.copy.alpha;
71
+ this.solidColor = null;
72
+ this.linearGradient = null;
73
+ this.radialGradient = null;
74
+
75
+ switch(this.type) {
76
+ case "none":
77
+ break;
78
+ case "solidColor":
79
+ this.solidColor = options.copy.solidColor;
80
+ break;
81
+ case "linearGradient":
82
+ this.linearGradient = options.copy.linearGradient.cloneNode(true);
83
+ break;
84
+ case "radialGradient":
85
+ this.radialGradient = options.copy.radialGradient.cloneNode(true);
86
+ break;
87
+ }
88
+ }
89
+ // create linear gradient paint
90
+ else if (options.linearGradient) {
91
+ this.type = "linearGradient";
92
+ this.solidColor = null;
93
+ this.radialGradient = null;
94
+ this.linearGradient = options.linearGradient.cloneNode(true);
95
+ }
96
+ // create linear gradient paint
97
+ else if (options.radialGradient) {
98
+ this.type = "radialGradient";
99
+ this.solidColor = null;
100
+ this.linearGradient = null;
101
+ this.radialGradient = options.radialGradient.cloneNode(true);
102
+ }
103
+ // create solid color paint
104
+ else if (options.solidColor) {
105
+ this.type = "solidColor";
106
+ this.solidColor = options.solidColor;
107
+ }
108
+ // create empty paint
109
+ else {
110
+ this.type = "none";
111
+ this.solidColor = null;
112
+ this.linearGradient = null;
113
+ this.radialGradient = null;
114
+ }
115
+ }
116
+ };
117
+
118
+ jQuery.fn.jGraduateDefaults = {
119
+ paint: new $.jGraduate.Paint(),
120
+ window: {
121
+ pickerTitle: "Drag markers to pick a paint"
122
+ },
123
+ images: {
124
+ clientPath: "images/"
125
+ },
126
+ newstop: 'inverse' // same, inverse, black, white
127
+ };
128
+
129
+ var isGecko = navigator.userAgent.indexOf('Gecko/') >= 0;
130
+
131
+ function setAttrs(elem, attrs) {
132
+ if(isGecko) {
133
+ for (var aname in attrs) elem.setAttribute(aname, attrs[aname]);
134
+ } else {
135
+ for (var aname in attrs) {
136
+ var val = attrs[aname], prop = elem[aname];
137
+ if(prop && prop.constructor === 'SVGLength') {
138
+ prop.baseVal.value = val;
139
+ } else {
140
+ elem.setAttribute(aname, val);
141
+ }
142
+ }
143
+ }
144
+ }
145
+
146
+ function mkElem(name, attrs, newparent) {
147
+ var elem = document.createElementNS(ns.svg, name);
148
+ setAttrs(elem, attrs);
149
+ if(newparent) newparent.appendChild(elem);
150
+ return elem;
151
+ }
152
+
153
+ jQuery.fn.jGraduate =
154
+ function(options) {
155
+ var $arguments = arguments;
156
+ return this.each( function() {
157
+ var $this = $(this), $settings = $.extend(true, {}, jQuery.fn.jGraduateDefaults, options),
158
+ id = $this.attr('id'),
159
+ idref = '#'+$this.attr('id')+' ';
160
+
161
+ if (!idref)
162
+ {
163
+ alert('Container element must have an id attribute to maintain unique id strings for sub-elements.');
164
+ return;
165
+ }
166
+
167
+ var okClicked = function() {
168
+ switch ( $this.paint.type ) {
169
+ case "radialGradient":
170
+ $this.paint.linearGradient = null;
171
+ break;
172
+ case "linearGradient":
173
+ $this.paint.radialGradient = null;
174
+ break;
175
+ case "solidColor":
176
+ $this.paint.radialGradient = $this.paint.linearGradient = null;
177
+ break;
178
+ }
179
+ $.isFunction($this.okCallback) && $this.okCallback($this.paint);
180
+ $this.hide();
181
+ },
182
+ cancelClicked = function() {
183
+ $.isFunction($this.cancelCallback) && $this.cancelCallback();
184
+ $this.hide();
185
+ };
186
+
187
+ $.extend(true, $this, // public properties, methods, and callbacks
188
+ {
189
+ // make a copy of the incoming paint
190
+ paint: new $.jGraduate.Paint({copy: $settings.paint}),
191
+ okCallback: $.isFunction($arguments[1]) && $arguments[1] || null,
192
+ cancelCallback: $.isFunction($arguments[2]) && $arguments[2] || null
193
+ });
194
+
195
+ var pos = $this.position(),
196
+ color = null;
197
+ var $win = $(window);
198
+
199
+ if ($this.paint.type == "none") {
200
+ $this.paint = $.jGraduate.Paint({solidColor: 'ffffff'});
201
+ }
202
+
203
+ $this.addClass('jGraduate_Picker');
204
+ $this.html('<ul class="jGraduate_tabs">' +
205
+ '<li class="jGraduate_tab_color jGraduate_tab_current" data-type="col">Solid Color</li>' +
206
+ '<li class="jGraduate_tab_lingrad" data-type="lg">Linear Gradient</li>' +
207
+ '<li class="jGraduate_tab_radgrad" data-type="rg">Radial Gradient</li>' +
208
+ '</ul>' +
209
+ '<div class="jGraduate_colPick"></div>' +
210
+ '<div class="jGraduate_gradPick"></div>' +
211
+ '<div class="jGraduate_LightBox"></div>' +
212
+ '<div id="' + id + '_jGraduate_stopPicker" class="jGraduate_stopPicker"></div>'
213
+
214
+
215
+ );
216
+ var colPicker = $(idref + '> .jGraduate_colPick');
217
+ var gradPicker = $(idref + '> .jGraduate_gradPick');
218
+
219
+ gradPicker.html(
220
+ '<div id="' + id + '_jGraduate_Swatch" class="jGraduate_Swatch">' +
221
+ '<h2 class="jGraduate_Title">' + $settings.window.pickerTitle + '</h2>' +
222
+ '<div id="' + id + '_jGraduate_GradContainer" class="jGraduate_GradContainer"></div>' +
223
+ '<div id="' + id + '_jGraduate_StopSlider" class="jGraduate_StopSlider"></div>' +
224
+ '</div>' +
225
+ '<div class="jGraduate_Form jGraduate_Points jGraduate_lg_field">' +
226
+ '<div class="jGraduate_StopSection">' +
227
+ '<label class="jGraduate_Form_Heading">Begin Point</label>' +
228
+ '<div class="jGraduate_Form_Section">' +
229
+ '<label>x:</label>' +
230
+ '<input type="text" id="' + id + '_jGraduate_x1" size="3" title="Enter starting x value between 0.0 and 1.0"/>' +
231
+ '<label> y:</label>' +
232
+ '<input type="text" id="' + id + '_jGraduate_y1" size="3" title="Enter starting y value between 0.0 and 1.0"/>' +
233
+ '</div>' +
234
+ '</div>' +
235
+ '<div class="jGraduate_StopSection">' +
236
+ '<label class="jGraduate_Form_Heading">End Point</label>' +
237
+ '<div class="jGraduate_Form_Section">' +
238
+ '<label>x:</label>' +
239
+ '<input type="text" id="' + id + '_jGraduate_x2" size="3" title="Enter ending x value between 0.0 and 1.0"/>' +
240
+ '<label> y:</label>' +
241
+ '<input type="text" id="' + id + '_jGraduate_y2" size="3" title="Enter ending y value between 0.0 and 1.0"/>' +
242
+ '</div>' +
243
+ '</div>' +
244
+ '</div>' +
245
+ '<div class="jGraduate_Form jGraduate_Points jGraduate_rg_field">' +
246
+ '<div class="jGraduate_StopSection">' +
247
+ '<label class="jGraduate_Form_Heading">Center Point</label>' +
248
+ '<div class="jGraduate_Form_Section">' +
249
+ '<label>x:</label>' +
250
+ '<input type="text" id="' + id + '_jGraduate_cx" size="3" title="Enter x value between 0.0 and 1.0"/>' +
251
+ '<label> y:</label>' +
252
+ '<input type="text" id="' + id + '_jGraduate_cy" size="3" title="Enter y value between 0.0 and 1.0"/>' +
253
+ '</div>' +
254
+ '</div>' +
255
+ '<div class="jGraduate_StopSection">' +
256
+ '<label class="jGraduate_Form_Heading">Focal Point</label>' +
257
+ '<div class="jGraduate_Form_Section">' +
258
+ '<label>Match center: <input type="checkbox" checked="checked" id="' + id + '_jGraduate_match_ctr"/></label><br/>' +
259
+ '<label>x:</label>' +
260
+ '<input type="text" id="' + id + '_jGraduate_fx" size="3" title="Enter x value between 0.0 and 1.0"/>' +
261
+ '<label> y:</label>' +
262
+ '<input type="text" id="' + id + '_jGraduate_fy" size="3" title="Enter y value between 0.0 and 1.0"/>' +
263
+ '</div>' +
264
+ '</div>' +
265
+ '</div>' +
266
+ '<div class="jGraduate_StopSection jGraduate_SpreadMethod">' +
267
+ '<label class="jGraduate_Form_Heading">Spread method</label>' +
268
+ '<div class="jGraduate_Form_Section">' +
269
+ '<select class="jGraduate_spreadMethod">' +
270
+ '<option value=pad selected>Pad</option>' +
271
+ '<option value=reflect>Reflect</option>' +
272
+ '<option value=repeat>Repeat</option>' +
273
+ '</select>' +
274
+ '</div>' +
275
+ '</div>' +
276
+ '<div class="jGraduate_Form">' +
277
+ '<div class="jGraduate_Slider jGraduate_RadiusField jGraduate_rg_field">' +
278
+ '<label class="prelabel">Radius:</label>' +
279
+ '<div id="' + id + '_jGraduate_Radius" class="jGraduate_SliderBar jGraduate_Radius" title="Click to set radius">' +
280
+ '<img id="' + id + '_jGraduate_RadiusArrows" class="jGraduate_RadiusArrows" src="' + $settings.images.clientPath + 'rangearrows2.gif">' +
281
+ '</div>' +
282
+ '<label><input type="text" id="' + id + '_jGraduate_RadiusInput" size="3" value="100"/>%</label>' +
283
+ '</div>' +
284
+ '<div class="jGraduate_Slider jGraduate_EllipField jGraduate_rg_field">' +
285
+ '<label class="prelabel">Ellip:</label>' +
286
+ '<div id="' + id + '_jGraduate_Ellip" class="jGraduate_SliderBar jGraduate_Ellip" title="Click to set Ellip">' +
287
+ '<img id="' + id + '_jGraduate_EllipArrows" class="jGraduate_EllipArrows" src="' + $settings.images.clientPath + 'rangearrows2.gif">' +
288
+ '</div>' +
289
+ '<label><input type="text" id="' + id + '_jGraduate_EllipInput" size="3" value="0"/>%</label>' +
290
+ '</div>' +
291
+ '<div class="jGraduate_Slider jGraduate_AngleField jGraduate_rg_field">' +
292
+ '<label class="prelabel">Angle:</label>' +
293
+ '<div id="' + id + '_jGraduate_Angle" class="jGraduate_SliderBar jGraduate_Angle" title="Click to set Angle">' +
294
+ '<img id="' + id + '_jGraduate_AngleArrows" class="jGraduate_AngleArrows" src="' + $settings.images.clientPath + 'rangearrows2.gif">' +
295
+ '</div>' +
296
+ '<label><input type="text" id="' + id + '_jGraduate_AngleInput" size="3" value="0"/>º&nbsp;</label>' +
297
+ '</div>' +
298
+ '<div class="jGraduate_Slider jGraduate_OpacField">' +
299
+ '<label class="prelabel">Opac:</label>' +
300
+ '<div id="' + id + '_jGraduate_Opac" class="jGraduate_SliderBar jGraduate_Opac" title="Click to set Opac">' +
301
+ '<img id="' + id + '_jGraduate_OpacArrows" class="jGraduate_OpacArrows" src="' + $settings.images.clientPath + 'rangearrows2.gif">' +
302
+ '</div>' +
303
+ '<label><input type="text" id="' + id + '_jGraduate_OpacInput" size="3" value="100"/>%</label>' +
304
+ '</div>' +
305
+ '</div>' +
306
+ '<div class="jGraduate_OkCancel">' +
307
+ '<input type="button" id="' + id + '_jGraduate_Ok" class="jGraduate_Ok" value="OK"/>' +
308
+ '<input type="button" id="' + id + '_jGraduate_Cancel" class="jGraduate_Cancel" value="Cancel"/>' +
309
+ '</div>');
310
+
311
+ // --------------
312
+ // Set up all the SVG elements (the gradient, stops and rectangle)
313
+ var MAX = 256, MARGINX = 0, MARGINY = 0, STOP_RADIUS = 15/2,
314
+ SIZEX = MAX - 2*MARGINX, SIZEY = MAX - 2*MARGINY;
315
+
316
+ var curType, curGradient, previewRect;
317
+
318
+ var attr_input = {};
319
+
320
+ var SLIDERW = 145;
321
+ $('.jGraduate_SliderBar').width(SLIDERW);
322
+
323
+ var container = $('#' + id+'_jGraduate_GradContainer')[0];
324
+
325
+ var svg = mkElem('svg', {
326
+ id: id + '_jgraduate_svg',
327
+ width: MAX,
328
+ height: MAX,
329
+ xmlns: ns.svg
330
+ }, container);
331
+
332
+ // if we are sent a gradient, import it
333
+
334
+ curType = curType || $this.paint.type;
335
+
336
+ var grad = curGradient = $this.paint[curType];
337
+
338
+ var gradalpha = $this.paint.alpha;
339
+
340
+ var isSolid = curType === 'solidColor';
341
+
342
+ // Make any missing gradients
343
+ switch ( curType ) {
344
+ case "solidColor":
345
+ // fall through
346
+ case "linearGradient":
347
+ if(!isSolid) {
348
+ curGradient.id = id+'_lg_jgraduate_grad';
349
+ grad = curGradient = svg.appendChild(curGradient);//.cloneNode(true));
350
+ }
351
+ mkElem('radialGradient', {
352
+ id: id + '_rg_jgraduate_grad'
353
+ }, svg);
354
+ if(curType === "linearGradient") break;
355
+ case "radialGradient":
356
+ if(!isSolid) {
357
+ curGradient.id = id+'_rg_jgraduate_grad';
358
+ grad = curGradient = svg.appendChild(curGradient);//.cloneNode(true));
359
+ }
360
+ mkElem('linearGradient', {
361
+ id: id + '_lg_jgraduate_grad'
362
+ }, svg);
363
+ }
364
+
365
+ if(isSolid) {
366
+ grad = curGradient = $('#' + id + '_lg_jgraduate_grad')[0];
367
+ var color = $this.paint[curType];
368
+ mkStop(0, '#' + color, 1);
369
+
370
+ var type = typeof $settings.newstop;
371
+
372
+ if(type === 'string') {
373
+ switch ( $settings.newstop ) {
374
+ case 'same':
375
+ mkStop(1, '#' + color, 1);
376
+ break;
377
+
378
+ case 'inverse':
379
+ // Invert current color for second stop
380
+ var inverted = '';
381
+
382
+ for(var i = 0; i < 6; i += 2) {
383
+ var ch = color.substr(i, 2);
384
+ var inv = (255 - parseInt(color.substr(i, 2), 16)).toString(16);
385
+ if(inv.length < 2) inv = 0 + inv;
386
+ inverted += inv;
387
+ }
388
+ mkStop(1, '#' + inverted, 1);
389
+ break;
390
+
391
+ case 'white':
392
+ mkStop(1, '#ffffff', 1);
393
+ break;
394
+
395
+ case 'black':
396
+ mkStop(1, '#000000', 1);
397
+ break;
398
+ }
399
+ } else if(type === 'object'){
400
+ var opac = ('opac' in $settings.newstop) ? $settings.newstop.opac : 1;
401
+ mkStop(1, ($settings.newstop.color || '#' + color), opac);
402
+ }
403
+ }
404
+
405
+
406
+ var x1 = parseFloat(grad.getAttribute('x1')||0.0),
407
+ y1 = parseFloat(grad.getAttribute('y1')||0.0),
408
+ x2 = parseFloat(grad.getAttribute('x2')||1.0),
409
+ y2 = parseFloat(grad.getAttribute('y2')||0.0);
410
+
411
+ var cx = parseFloat(grad.getAttribute('cx')||0.5),
412
+ cy = parseFloat(grad.getAttribute('cy')||0.5),
413
+ fx = parseFloat(grad.getAttribute('fx')|| cx),
414
+ fy = parseFloat(grad.getAttribute('fy')|| cy);
415
+
416
+
417
+ var previewRect = mkElem('rect', {
418
+ id: id + '_jgraduate_rect',
419
+ x: MARGINX,
420
+ y: MARGINY,
421
+ width: SIZEX,
422
+ height: SIZEY,
423
+ fill: 'url(#'+id+'_jgraduate_grad)',
424
+ 'fill-opacity': gradalpha/100
425
+ }, svg);
426
+
427
+ // stop visuals created here
428
+ var beginCoord = $('<div/>').attr({
429
+ 'class': 'grad_coord jGraduate_lg_field',
430
+ title: 'Begin Stop'
431
+ }).text(1).css({
432
+ top: y1 * MAX,
433
+ left: x1 * MAX
434
+ }).data('coord', 'start').appendTo(container);
435
+
436
+ var endCoord = beginCoord.clone().text(2).css({
437
+ top: y2 * MAX,
438
+ left: x2 * MAX
439
+ }).attr('title', 'End stop').data('coord', 'end').appendTo(container);
440
+
441
+ var centerCoord = $('<div/>').attr({
442
+ 'class': 'grad_coord jGraduate_rg_field',
443
+ title: 'Center stop'
444
+ }).text('C').css({
445
+ top: cy * MAX,
446
+ left: cx * MAX
447
+ }).data('coord', 'center').appendTo(container);
448
+
449
+ var focusCoord = centerCoord.clone().text('F').css({
450
+ top: fy * MAX,
451
+ left: fx * MAX,
452
+ display: 'none'
453
+ }).attr('title', 'Focus point').data('coord', 'focus').appendTo(container);
454
+
455
+ focusCoord[0].id = id + '_jGraduate_focusCoord';
456
+
457
+ var coords = $(idref + ' .grad_coord');
458
+
459
+ // $(container).hover(function() {
460
+ // coords.animate({
461
+ // opacity: 1
462
+ // }, 500);
463
+ // }, function() {
464
+ // coords.animate({
465
+ // opacity: .2
466
+ // }, 500);
467
+ // });
468
+
469
+ $.each(['x1', 'y1', 'x2', 'y2', 'cx', 'cy', 'fx', 'fy'], function(i, attr) {
470
+ var attrval = curGradient.getAttribute(attr);
471
+
472
+ var isRadial = isNaN(attr[1]);
473
+
474
+ if(!attrval) {
475
+ // Set defaults
476
+ if(isRadial) {
477
+ // For radial points
478
+ attrval = "0.5";
479
+ } else {
480
+ // Only x2 is 1
481
+ attrval = attr === 'x2' ? "1.0" : "0.0";
482
+ }
483
+ }
484
+
485
+ attr_input[attr] = $('#'+id+'_jGraduate_' + attr)
486
+ .val(attrval)
487
+ .change(function() {
488
+ // TODO: Support values < 0 and > 1 (zoomable preview?)
489
+ if (isNaN(parseFloat(this.value)) || this.value < 0) {
490
+ this.value = 0.0;
491
+ } else if(this.value > 1) {
492
+ this.value = 1.0;
493
+ }
494
+
495
+ if(!(attr[0] === 'f' && !showFocus)) {
496
+ if(isRadial && curType === 'radialGradient' || !isRadial && curType === 'linearGradient') {
497
+ curGradient.setAttribute(attr, this.value);
498
+ }
499
+ }
500
+
501
+ if(isRadial) {
502
+ var $elem = attr[0] === "c" ? centerCoord : focusCoord;
503
+ } else {
504
+ var $elem = attr[1] === "1" ? beginCoord : endCoord;
505
+ }
506
+
507
+ var cssName = attr.indexOf('x') >= 0 ? 'left' : 'top';
508
+
509
+ $elem.css(cssName, this.value * MAX);
510
+ }).change();
511
+ });
512
+
513
+
514
+
515
+ function mkStop(n, color, opac, sel, stop_elem) {
516
+ var stop = stop_elem || mkElem('stop',{'stop-color':color,'stop-opacity':opac,offset:n}, curGradient);
517
+ if(stop_elem) {
518
+ color = stop_elem.getAttribute('stop-color');
519
+ opac = stop_elem.getAttribute('stop-opacity');
520
+ n = stop_elem.getAttribute('offset');
521
+ } else {
522
+ curGradient.appendChild(stop);
523
+ }
524
+ if(opac === null) opac = 1;
525
+
526
+ var picker_d = 'M-6.2,0.9c3.6-4,6.7-4.3,6.7-12.4c-0.2,7.9,3.1,8.8,6.5,12.4c3.5,3.8,2.9,9.6,0,12.3c-3.1,2.8-10.4,2.7-13.2,0C-9.6,9.9-9.4,4.4-6.2,0.9z';
527
+
528
+ var pathbg = mkElem('path',{
529
+ d: picker_d,
530
+ fill: 'url(#jGraduate_trans)',
531
+ transform: 'translate(' + (10 + n * MAX) + ', 26)'
532
+ }, stopGroup);
533
+
534
+ var path = mkElem('path',{
535
+ d: picker_d,
536
+ fill: color,
537
+ 'fill-opacity': opac,
538
+ transform: 'translate(' + (10 + n * MAX) + ', 26)',
539
+ stroke: '#000',
540
+ 'stroke-width': 1.5
541
+ }, stopGroup);
542
+
543
+ $(path).mousedown(function(e) {
544
+ selectStop(this);
545
+ drag = cur_stop;
546
+ $win.mousemove(dragColor).mouseup(remDrags);
547
+ stop_offset = stopMakerDiv.offset();
548
+ e.preventDefault();
549
+ return false;
550
+ }).data('stop', stop).data('bg', pathbg).dblclick(function() {
551
+ $('div.jGraduate_LightBox').show();
552
+ var colorhandle = this;
553
+ var stopOpacity = +stop.getAttribute('stop-opacity') || 1;
554
+ var stopColor = stop.getAttribute('stop-color') || 1;
555
+ var thisAlpha = (parseFloat(stopOpacity)*255).toString(16);
556
+ while (thisAlpha.length < 2) { thisAlpha = "0" + thisAlpha; }
557
+ color = stopColor.substr(1) + thisAlpha;
558
+ $('#'+id+'_jGraduate_stopPicker').css({'left': 100, 'bottom': 15}).jPicker({
559
+ window: { title: "Pick the start color and opacity for the gradient" },
560
+ images: { clientPath: $settings.images.clientPath },
561
+ color: { active: color, alphaSupport: true }
562
+ }, function(color, arg2){
563
+ stopColor = color.val('hex') ? ('#'+color.val('hex')) : "none";
564
+ stopOpacity = color.val('a') !== null ? color.val('a')/256 : 1;
565
+ colorhandle.setAttribute('fill', stopColor);
566
+ colorhandle.setAttribute('fill-opacity', stopOpacity);
567
+ stop.setAttribute('stop-color', stopColor);
568
+ stop.setAttribute('stop-opacity', stopOpacity);
569
+ $('div.jGraduate_LightBox').hide();
570
+ $('#'+id+'_jGraduate_stopPicker').hide();
571
+ }, null, function() {
572
+ $('div.jGraduate_LightBox').hide();
573
+ $('#'+id+'_jGraduate_stopPicker').hide();
574
+ });
575
+ });
576
+
577
+ $(curGradient).find('stop').each(function() {
578
+ var cur_s = $(this);
579
+ if(+this.getAttribute('offset') > n) {
580
+ if(!color) {
581
+ var newcolor = this.getAttribute('stop-color');
582
+ var newopac = this.getAttribute('stop-opacity');
583
+ stop.setAttribute('stop-color', newcolor);
584
+ path.setAttribute('fill', newcolor);
585
+ stop.setAttribute('stop-opacity', newopac === null ? 1 : newopac);
586
+ path.setAttribute('fill-opacity', newopac === null ? 1 : newopac);
587
+ }
588
+ cur_s.before(stop);
589
+ return false;
590
+ }
591
+ });
592
+ if(sel) selectStop(path);
593
+ return stop;
594
+ }
595
+
596
+ function remStop() {
597
+ delStop.setAttribute('display', 'none');
598
+ var path = $(cur_stop);
599
+ var stop = path.data('stop');
600
+ var bg = path.data('bg');
601
+ $([cur_stop, stop, bg]).remove();
602
+ }
603
+
604
+
605
+ var stops, stopGroup;
606
+
607
+ var stopMakerDiv = $('#' + id + '_jGraduate_StopSlider');
608
+
609
+ var cur_stop, stopGroup, stopMakerSVG, drag;
610
+
611
+ var delStop = mkElem('path',{
612
+ d:'m9.75,-6l-19.5,19.5m0,-19.5l19.5,19.5',
613
+ fill:'none',
614
+ stroke:'#D00',
615
+ 'stroke-width':5,
616
+ display:'none'
617
+ }, stopMakerSVG);
618
+
619
+
620
+ function selectStop(item) {
621
+ if(cur_stop) cur_stop.setAttribute('stroke', '#000');
622
+ item.setAttribute('stroke', 'blue');
623
+ cur_stop = item;
624
+ cur_stop.parentNode.appendChild(cur_stop);
625
+ // stops = $('stop');
626
+ // opac_select.val(cur_stop.attr('fill-opacity') || 1);
627
+ // root.append(delStop);
628
+ }
629
+
630
+ var stop_offset;
631
+
632
+ function remDrags() {
633
+ $win.unbind('mousemove', dragColor);
634
+ if(delStop.getAttribute('display') !== 'none') {
635
+ remStop();
636
+ }
637
+ drag = null;
638
+ }
639
+
640
+ var scale_x = 1, scale_y = 1, angle = 0;
641
+ var c_x = cx;
642
+ var c_y = cy;
643
+
644
+ function xform() {
645
+ var rot = angle?'rotate(' + angle + ',' + c_x + ',' + c_y + ') ':'';
646
+ if(scale_x === 1 && scale_y === 1) {
647
+ curGradient.removeAttribute('gradientTransform');
648
+ // $('#ang').addClass('dis');
649
+ } else {
650
+ var x = -c_x * (scale_x-1);
651
+ var y = -c_y * (scale_y-1);
652
+ curGradient.setAttribute('gradientTransform', rot + 'translate(' + x + ',' + y + ') scale(' + scale_x + ',' + scale_y + ')');
653
+ // $('#ang').removeClass('dis');
654
+ }
655
+ }
656
+
657
+ function dragColor(evt) {
658
+
659
+ var x = evt.pageX - stop_offset.left;
660
+ var y = evt.pageY - stop_offset.top;
661
+ x = x < 10 ? 10 : x > MAX + 10 ? MAX + 10: x;
662
+
663
+ var xf_str = 'translate(' + x + ', 26)';
664
+ if(y < -60 || y > 130) {
665
+ delStop.setAttribute('display', 'block');
666
+ delStop.setAttribute('transform', xf_str);
667
+ } else {
668
+ delStop.setAttribute('display', 'none');
669
+ }
670
+
671
+ drag.setAttribute('transform', xf_str);
672
+ $.data(drag, 'bg').setAttribute('transform', xf_str);
673
+ var stop = $.data(drag, 'stop');
674
+ var s_x = (x - 10) / MAX;
675
+
676
+ stop.setAttribute('offset', s_x);
677
+ var last = 0;
678
+
679
+ $(curGradient).find('stop').each(function(i) {
680
+ var cur = this.getAttribute('offset');
681
+ var t = $(this);
682
+ if(cur < last) {
683
+ t.prev().before(t);
684
+ stops = $(curGradient).find('stop');
685
+ }
686
+ last = cur;
687
+ });
688
+
689
+ }
690
+
691
+ stopMakerSVG = mkElem('svg', {
692
+ width: '100%',
693
+ height: 45
694
+ }, stopMakerDiv[0]);
695
+
696
+ var trans_pattern = mkElem('pattern', {
697
+ width: 16,
698
+ height: 16,
699
+ patternUnits: 'userSpaceOnUse',
700
+ id: 'jGraduate_trans'
701
+ }, stopMakerSVG);
702
+
703
+ var trans_img = mkElem('image', {
704
+ width: 16,
705
+ height: 16
706
+ }, trans_pattern);
707
+
708
+ var bg_image = $settings.images.clientPath + 'map-opacity.png';
709
+
710
+ trans_img.setAttributeNS(ns.xlink, 'xlink:href', bg_image);
711
+
712
+ $(stopMakerSVG).on("click touchstart", function(evt) {
713
+ stop_offset = stopMakerDiv.offset();
714
+ var target = evt.target;
715
+ if(target.tagName === 'path') return;
716
+ var x = evt.pageX - stop_offset.left - 8;
717
+ x = x < 10 ? 10 : x > MAX + 10 ? MAX + 10: x;
718
+ mkStop(x / MAX, 0, 0, true);
719
+ evt.stopPropagation();
720
+ });
721
+
722
+ $(stopMakerSVG).mouseover(function() {
723
+ stopMakerSVG.appendChild(delStop);
724
+ });
725
+
726
+ stopGroup = mkElem('g', {}, stopMakerSVG);
727
+
728
+ mkElem('line', {
729
+ x1: 10,
730
+ y1: 15,
731
+ x2: MAX + 10,
732
+ y2: 15,
733
+ 'stroke-width': 2,
734
+ stroke: '#000'
735
+ }, stopMakerSVG);
736
+
737
+
738
+ var spreadMethodOpt = gradPicker.find('.jGraduate_spreadMethod').change(function() {
739
+ curGradient.setAttribute('spreadMethod', $(this).val());
740
+ });
741
+
742
+
743
+ // handle dragging the stop around the swatch
744
+ var draggingCoord = null;
745
+
746
+ var onCoordDrag = function(evt) {
747
+ var x = evt.pageX - offset.left;
748
+ var y = evt.pageY - offset.top;
749
+
750
+ // clamp stop to the swatch
751
+ x = x < 0 ? 0 : x > MAX ? MAX : x;
752
+ y = y < 0 ? 0 : y > MAX ? MAX : y;
753
+
754
+ draggingCoord.css('left', x).css('top', y);
755
+
756
+ // calculate stop offset
757
+ var fracx = x / SIZEX;
758
+ var fracy = y / SIZEY;
759
+
760
+ var type = draggingCoord.data('coord');
761
+ var grad = curGradient;
762
+
763
+ switch ( type ) {
764
+ case 'start':
765
+ attr_input.x1.val(fracx);
766
+ attr_input.y1.val(fracy);
767
+ grad.setAttribute('x1', fracx);
768
+ grad.setAttribute('y1', fracy);
769
+ break;
770
+ case 'end':
771
+ attr_input.x2.val(fracx);
772
+ attr_input.y2.val(fracy);
773
+ grad.setAttribute('x2', fracx);
774
+ grad.setAttribute('y2', fracy);
775
+ break;
776
+ case 'center':
777
+ attr_input.cx.val(fracx);
778
+ attr_input.cy.val(fracy);
779
+ grad.setAttribute('cx', fracx);
780
+ grad.setAttribute('cy', fracy);
781
+ c_x = fracx;
782
+ c_y = fracy;
783
+ xform();
784
+ break;
785
+ case 'focus':
786
+ attr_input.fx.val(fracx);
787
+ attr_input.fy.val(fracy);
788
+ grad.setAttribute('fx', fracx);
789
+ grad.setAttribute('fy', fracy);
790
+ xform();
791
+ }
792
+
793
+ evt.preventDefault();
794
+ }
795
+
796
+ var onCoordUp = function() {
797
+ draggingCoord = null;
798
+ $win.unbind('mousemove', onCoordDrag).unbind('mouseup', onCoordUp);
799
+ }
800
+
801
+ // Linear gradient
802
+ // (function() {
803
+
804
+
805
+ stops = curGradient.getElementsByTagNameNS(ns.svg, 'stop');
806
+
807
+ // if there are not at least two stops, then
808
+ if (numstops < 2) {
809
+ while (numstops < 2) {
810
+ curGradient.appendChild( document.createElementNS(ns.svg, 'stop') );
811
+ ++numstops;
812
+ }
813
+ stops = curGradient.getElementsByTagNameNS(ns.svg, 'stop');
814
+ }
815
+
816
+ var numstops = stops.length;
817
+ for(var i = 0; i < numstops; i++) {
818
+ mkStop(0, 0, 0, 0, stops[i]);
819
+ }
820
+
821
+ spreadMethodOpt.val(curGradient.getAttribute('spreadMethod') || 'pad');
822
+
823
+ var offset;
824
+
825
+ // No match, so show focus point
826
+ var showFocus = false;
827
+
828
+ previewRect.setAttribute('fill-opacity', gradalpha/100);
829
+
830
+
831
+ $('#' + id + ' div.grad_coord').mousedown(function(evt) {
832
+ evt.preventDefault();
833
+ draggingCoord = $(this);
834
+ var s_pos = draggingCoord.offset();
835
+ offset = draggingCoord.parent().offset();
836
+ $win.mousemove(onCoordDrag).mouseup(onCoordUp);
837
+ });
838
+
839
+ // bind GUI elements
840
+ $('#'+id+'_jGraduate_Ok').bind('click touchstart', function() {
841
+ $this.paint.type = curType;
842
+ $this.paint[curType] = curGradient.cloneNode(true);;
843
+ $this.paint.solidColor = null;
844
+ okClicked();
845
+ });
846
+ $('#'+id+'_jGraduate_Cancel').bind('click touchstart', function(paint) {
847
+ cancelClicked();
848
+ });
849
+
850
+ if(curType === 'radialGradient') {
851
+ if(showFocus) {
852
+ focusCoord.show();
853
+ } else {
854
+ focusCoord.hide();
855
+ attr_input.fx.val("");
856
+ attr_input.fy.val("");
857
+ }
858
+ }
859
+
860
+ $("#" + id + "_jGraduate_match_ctr")[0].checked = !showFocus;
861
+
862
+ var lastfx, lastfy;
863
+
864
+ $("#" + id + "_jGraduate_match_ctr").change(function() {
865
+ showFocus = !this.checked;
866
+ focusCoord.toggle(showFocus);
867
+ attr_input.fx.val('');
868
+ attr_input.fy.val('');
869
+ var grad = curGradient;
870
+ if(!showFocus) {
871
+ lastfx = grad.getAttribute('fx');
872
+ lastfy = grad.getAttribute('fy');
873
+ grad.removeAttribute('fx');
874
+ grad.removeAttribute('fy');
875
+ } else {
876
+ var fx = lastfx || .5;
877
+ var fy = lastfy || .5;
878
+ grad.setAttribute('fx', fx);
879
+ grad.setAttribute('fy', fy);
880
+ attr_input.fx.val(fx);
881
+ attr_input.fy.val(fy);
882
+ }
883
+ });
884
+
885
+ var stops = curGradient.getElementsByTagNameNS(ns.svg, 'stop');
886
+ var numstops = stops.length;
887
+ // if there are not at least two stops, then
888
+ if (numstops < 2) {
889
+ while (numstops < 2) {
890
+ curGradient.appendChild( document.createElementNS(ns.svg, 'stop') );
891
+ ++numstops;
892
+ }
893
+ stops = curGradient.getElementsByTagNameNS(ns.svg, 'stop');
894
+ }
895
+
896
+ var slider;
897
+
898
+ var setSlider = function(e) {
899
+ var offset = slider.offset;
900
+ var div = slider.parent;
901
+ var x = (e.pageX - offset.left - parseInt(div.css('border-left-width')));
902
+ if (x > SLIDERW) x = SLIDERW;
903
+ if (x <= 0) x = 0;
904
+ var posx = x - 5;
905
+ x /= SLIDERW;
906
+
907
+ switch ( slider.type ) {
908
+ case 'radius':
909
+ x = Math.pow(x * 2, 2.5);
910
+ if(x > .98 && x < 1.02) x = 1;
911
+ if (x <= .01) x = .01;
912
+ curGradient.setAttribute('r', x);
913
+ break;
914
+ case 'opacity':
915
+ $this.paint.alpha = parseInt(x*100);
916
+ previewRect.setAttribute('fill-opacity', x);
917
+ break;
918
+ case 'ellip':
919
+ scale_x = 1, scale_y = 1;
920
+ if(x < .5) {
921
+ x /= .5; // 0.001
922
+ scale_x = x <= 0 ? .01 : x;
923
+ } else if(x > .5) {
924
+ x /= .5; // 2
925
+ x = 2 - x;
926
+ scale_y = x <= 0 ? .01 : x;
927
+ }
928
+ xform();
929
+ x -= 1;
930
+ if(scale_y === x + 1) {
931
+ x = Math.abs(x);
932
+ }
933
+ break;
934
+ case 'angle':
935
+ x = x - .5;
936
+ angle = x *= 180;
937
+ xform();
938
+ x /= 100;
939
+ break;
940
+ }
941
+ slider.elem.css({'margin-left':posx});
942
+ x = Math.round(x*100);
943
+ slider.input.val(x);
944
+ };
945
+
946
+ var ellip_val = 0, angle_val = 0;
947
+
948
+ if(curType === 'radialGradient') {
949
+ var tlist = curGradient.gradientTransform.baseVal;
950
+ if(tlist.numberOfItems === 2) {
951
+ var t = tlist.getItem(0);
952
+ var s = tlist.getItem(1);
953
+ if(t.type === 2 && s.type === 3) {
954
+ var m = s.matrix;
955
+ if(m.a !== 1) {
956
+ ellip_val = Math.round(-(1 - m.a) * 100);
957
+ } else if(m.d !== 1) {
958
+ ellip_val = Math.round((1 - m.d) * 100);
959
+ }
960
+ }
961
+ } else if(tlist.numberOfItems === 3) {
962
+ // Assume [R][T][S]
963
+ var r = tlist.getItem(0);
964
+ var t = tlist.getItem(1);
965
+ var s = tlist.getItem(2);
966
+
967
+ if(r.type === 4
968
+ && t.type === 2
969
+ && s.type === 3) {
970
+
971
+ angle_val = Math.round(r.angle);
972
+ var m = s.matrix;
973
+ if(m.a !== 1) {
974
+ ellip_val = Math.round(-(1 - m.a) * 100);
975
+ } else if(m.d !== 1) {
976
+ ellip_val = Math.round((1 - m.d) * 100);
977
+ }
978
+
979
+ }
980
+ }
981
+ }
982
+
983
+ var sliders = {
984
+ radius: {
985
+ handle: '#' + id + '_jGraduate_RadiusArrows',
986
+ input: '#' + id + '_jGraduate_RadiusInput',
987
+ val: (curGradient.getAttribute('r') || .5) * 100
988
+ },
989
+ opacity: {
990
+ handle: '#' + id + '_jGraduate_OpacArrows',
991
+ input: '#' + id + '_jGraduate_OpacInput',
992
+ val: $this.paint.alpha || 100
993
+ },
994
+ ellip: {
995
+ handle: '#' + id + '_jGraduate_EllipArrows',
996
+ input: '#' + id + '_jGraduate_EllipInput',
997
+ val: ellip_val
998
+ },
999
+ angle: {
1000
+ handle: '#' + id + '_jGraduate_AngleArrows',
1001
+ input: '#' + id + '_jGraduate_AngleInput',
1002
+ val: angle_val
1003
+ }
1004
+ }
1005
+
1006
+ $.each(sliders, function(type, data) {
1007
+ var handle = $(data.handle);
1008
+ handle.mousedown(function(evt) {
1009
+ var parent = handle.parent();
1010
+ slider = {
1011
+ type: type,
1012
+ elem: handle,
1013
+ input: $(data.input),
1014
+ parent: parent,
1015
+ offset: parent.offset()
1016
+ };
1017
+ $win.mousemove(dragSlider).mouseup(stopSlider);
1018
+ evt.preventDefault();
1019
+ });
1020
+
1021
+ $(data.input).val(data.val).change(function() {
1022
+ var val = +this.value;
1023
+ var xpos = 0;
1024
+ var isRad = curType === 'radialGradient';
1025
+ switch ( type ) {
1026
+ case 'radius':
1027
+ if(isRad) curGradient.setAttribute('r', val / 100);
1028
+ xpos = (Math.pow(val / 100, 1 / 2.5) / 2) * SLIDERW;
1029
+ break;
1030
+
1031
+ case 'opacity':
1032
+ $this.paint.alpha = val;
1033
+ previewRect.setAttribute('fill-opacity', val / 100);
1034
+ xpos = val * (SLIDERW / 100);
1035
+ break;
1036
+
1037
+ case 'ellip':
1038
+ scale_x = scale_y = 1;
1039
+ if(val === 0) {
1040
+ xpos = SLIDERW * .5;
1041
+ break;
1042
+ }
1043
+ if(val > 99.5) val = 99.5;
1044
+ if(val > 0) {
1045
+ scale_y = 1 - (val / 100);
1046
+ } else {
1047
+ scale_x = - (val / 100) - 1;
1048
+ }
1049
+
1050
+ xpos = SLIDERW * ((val + 100) / 2) / 100;
1051
+ if(isRad) xform();
1052
+ break;
1053
+
1054
+ case 'angle':
1055
+ angle = val;
1056
+ xpos = angle / 180;
1057
+ xpos += .5;
1058
+ xpos *= SLIDERW;
1059
+ if(isRad) xform();
1060
+ }
1061
+ if(xpos > SLIDERW) {
1062
+ xpos = SLIDERW;
1063
+ } else if(xpos < 0) {
1064
+ xpos = 0;
1065
+ }
1066
+ handle.css({'margin-left': xpos - 5});
1067
+ }).change();
1068
+ });
1069
+
1070
+ var dragSlider = function(evt) {
1071
+ setSlider(evt);
1072
+ evt.preventDefault();
1073
+ };
1074
+
1075
+ var stopSlider = function(evt) {
1076
+ $win.unbind('mousemove', dragSlider).unbind('mouseup', stopSlider);
1077
+ slider = null;
1078
+ };
1079
+
1080
+
1081
+ // --------------
1082
+ var thisAlpha = ($this.paint.alpha*255/100).toString(16);
1083
+ while (thisAlpha.length < 2) { thisAlpha = "0" + thisAlpha; }
1084
+ thisAlpha = thisAlpha.split(".")[0];
1085
+ color = $this.paint.solidColor == "none" ? "" : $this.paint.solidColor + thisAlpha;
1086
+
1087
+ if(!isSolid) {
1088
+ color = stops[0].getAttribute('stop-color');
1089
+ }
1090
+
1091
+ // This should be done somewhere else, probably
1092
+ $.extend($.fn.jPicker.defaults.window, {
1093
+ alphaSupport: true, effects: {type: 'show',speed: 0}
1094
+ });
1095
+
1096
+ colPicker.jPicker(
1097
+ {
1098
+ window: { title: $settings.window.pickerTitle },
1099
+ images: { clientPath: $settings.images.clientPath },
1100
+ color: { active: color, alphaSupport: true }
1101
+ },
1102
+ function(color) {
1103
+ $this.paint.type = "solidColor";
1104
+ $this.paint.alpha = color.val('ahex') ? Math.round((color.val('a') / 255) * 100) : 100;
1105
+ $this.paint.solidColor = color.val('hex') ? color.val('hex') : "none";
1106
+ $this.paint.radialGradient = null;
1107
+ okClicked();
1108
+ },
1109
+ null,
1110
+ function(){ cancelClicked(); }
1111
+ );
1112
+
1113
+
1114
+ var tabs = $(idref + ' .jGraduate_tabs li');
1115
+ tabs.on("click touchstart", function() {
1116
+ tabs.removeClass('jGraduate_tab_current');
1117
+ $(this).addClass('jGraduate_tab_current');
1118
+ $(idref + " > div").hide();
1119
+ var type = $(this).attr('data-type');
1120
+ var container = $(idref + ' .jGraduate_gradPick').show();
1121
+ if(type === 'rg' || type === 'lg') {
1122
+ // Show/hide appropriate fields
1123
+ $('.jGraduate_' + type + '_field').show();
1124
+ $('.jGraduate_' + (type === 'lg' ? 'rg' : 'lg') + '_field').hide();
1125
+
1126
+ $('#' + id + '_jgraduate_rect')[0].setAttribute('fill', 'url(#' + id + '_' + type + '_jgraduate_grad)');
1127
+
1128
+ // Copy stops
1129
+
1130
+ curType = type === 'lg' ? 'linearGradient' : 'radialGradient';
1131
+
1132
+ $('#' + id + '_jGraduate_OpacInput').val($this.paint.alpha).change();
1133
+
1134
+ var newGrad = $('#' + id + '_' + type + '_jgraduate_grad')[0];
1135
+
1136
+ if(curGradient !== newGrad) {
1137
+ var cur_stops = $(curGradient).find('stop');
1138
+ $(newGrad).empty().append(cur_stops);
1139
+ curGradient = newGrad;
1140
+ var sm = spreadMethodOpt.val();
1141
+ curGradient.setAttribute('spreadMethod', sm);
1142
+ }
1143
+ showFocus = type === 'rg' && curGradient.getAttribute('fx') != null && !(cx == fx && cy == fy);
1144
+ $('#' + id + '_jGraduate_focusCoord').toggle(showFocus);
1145
+ if(showFocus) {
1146
+ $('#' + id + '_jGraduate_match_ctr')[0].checked = false;
1147
+ }
1148
+ } else {
1149
+ $(idref + ' .jGraduate_gradPick').hide();
1150
+ $(idref + ' .jGraduate_colPick').show();
1151
+ }
1152
+ });
1153
+ $(idref + " > div").hide();
1154
+ tabs.removeClass('jGraduate_tab_current');
1155
+ var tab;
1156
+ switch ( $this.paint.type ) {
1157
+ case 'linearGradient':
1158
+ tab = $(idref + ' .jGraduate_tab_lingrad');
1159
+ break;
1160
+ case 'radialGradient':
1161
+ tab = $(idref + ' .jGraduate_tab_radgrad');
1162
+ break;
1163
+ default:
1164
+ tab = $(idref + ' .jGraduate_tab_color');
1165
+ break;
1166
+ }
1167
+ $this.show();
1168
+
1169
+ // jPicker will try to show after a 0ms timeout, so need to fire this after that
1170
+ setTimeout(function() {
1171
+ tab.addClass('jGraduate_tab_current').click();
1172
+ }, 10);
1173
+ });
1174
+ };
1175
+ })();