rbbt-rest 1.4.12 → 1.4.13

Sign up to get free protection for your applications and to get access to all the features.
Files changed (722) hide show
  1. checksums.yaml +4 -4
  2. data/lib/rbbt/rest/common/cache.rb +1 -2
  3. data/lib/rbbt/rest/common/forms.rb +1 -1
  4. data/lib/rbbt/rest/common/misc.rb +1 -1
  5. data/lib/rbbt/rest/common/render.rb +29 -7
  6. data/lib/rbbt/rest/common/table.rb +17 -3
  7. data/lib/rbbt/rest/entity.rb +1 -0
  8. data/lib/rbbt/rest/entity/rest.rb +1 -0
  9. data/lib/rbbt/rest/main.rb +36 -14
  10. data/lib/rbbt/rest/web_tool.rb +19 -1
  11. data/lib/rbbt/rest/workflow.rb +4 -10
  12. data/lib/rbbt/rest/workflow/render.rb +1 -1
  13. data/share/views/compass/app.sass +3 -1
  14. data/share/views/compass/base/backgrounds.sass +41 -0
  15. data/share/views/compass/base/blocks.sass +92 -0
  16. data/share/views/compass/base/colors.sass +65 -0
  17. data/share/views/compass/base/font-scale.sass +20 -0
  18. data/share/views/compass/base/fonts.sass +56 -0
  19. data/share/views/compass/base/hide.sass +95 -0
  20. data/share/views/compass/base/icon_content.scss +569 -0
  21. data/share/views/compass/base/icons.sass +75 -0
  22. data/share/views/compass/base/material.sass +223 -0
  23. data/share/views/compass/base/misc.sass +2 -0
  24. data/share/views/compass/base/screen_sizes.sass +16 -0
  25. data/share/views/compass/base/text.sass +70 -0
  26. data/share/views/compass/base/util.sass +6 -0
  27. data/share/views/compass/base/variables.sass +68 -0
  28. data/share/views/compass/base/variables/color.sass +27 -0
  29. data/share/views/compass/cards.sass +131 -0
  30. data/share/views/compass/color.sass +10 -0
  31. data/share/views/compass/color/blocks.sass +0 -0
  32. data/share/views/compass/color/buttons.sass +36 -0
  33. data/share/views/compass/color/elements.sass +2 -0
  34. data/share/views/compass/color/font.sass +13 -0
  35. data/share/views/compass/color/top_bar.sass +18 -0
  36. data/share/views/compass/elements.sass +218 -0
  37. data/share/views/compass/elements/buttons.sass +18 -0
  38. data/share/views/compass/elements/forms.sass +197 -0
  39. data/share/views/compass/elements/lists.sass +14 -0
  40. data/share/views/compass/elements/materials.sass +1 -0
  41. data/share/views/compass/elements/movement.sass +84 -0
  42. data/share/views/compass/elements/positions.sass +18 -0
  43. data/share/views/compass/elements/table.sass +176 -0
  44. data/share/views/compass/elements/tool.sass +60 -0
  45. data/share/views/compass/grid.sass +3 -0
  46. data/share/views/compass/init.sass +9 -0
  47. data/share/views/compass/layout.sass +5 -221
  48. data/share/views/compass/layout/body.sass +23 -0
  49. data/share/views/compass/layout/footer.sass +44 -0
  50. data/share/views/compass/layout/result.sass +6 -0
  51. data/share/views/compass/{rbbt → layout}/reveal.sass +21 -19
  52. data/share/views/compass/layout/top_bar.sass +99 -0
  53. data/share/views/compass/layout/top_menu.sass +87 -0
  54. data/share/views/compass/menu.sass +42 -0
  55. data/share/views/compass/menu/accordion_menu.sass +30 -0
  56. data/share/views/compass/menu/actionable.sass +1 -0
  57. data/share/views/compass/menu/dropdown_menu.sass +31 -0
  58. data/share/views/compass/menu/hide.sass +14 -0
  59. data/share/views/compass/menu/menu.sass +98 -0
  60. data/share/views/compass/menu/tab_menu.sass +14 -0
  61. data/share/views/compass/menu/top_bar.sass +105 -0
  62. data/share/views/compass/menu/vertical_menu.sass +21 -0
  63. data/share/views/compass/mixins/_all.sass +24 -0
  64. data/share/views/compass/mixins/_blocks.sass +83 -0
  65. data/share/views/compass/mixins/_deps.sass +5 -0
  66. data/share/views/compass/mixins/_hide.sass +1 -0
  67. data/share/views/compass/mixins/_keyframes.scss +4 -0
  68. data/share/views/compass/mixins/_semantic-ui.sass +2 -0
  69. data/share/views/compass/new.sass +1 -0
  70. data/share/views/compass/offcanvas.sass +52 -0
  71. data/share/views/compass/position/basic.sass +0 -0
  72. data/share/views/compass/responsive.sass +53 -0
  73. data/share/views/compass/screen_sizes.sass +1 -16
  74. data/share/views/compass/semantic-ui.css +19776 -0
  75. data/share/views/compass/semantic-ui/semantic-ui.css +19776 -0
  76. data/share/views/compass/space/button.sass +74 -0
  77. data/share/views/compass/text.sass +48 -0
  78. data/share/views/entity_partials/action_controller.haml +7 -7
  79. data/share/views/error.haml +11 -9
  80. data/share/views/job_result.haml +1 -1
  81. data/share/views/job_result/integer.haml +1 -1
  82. data/share/views/knowledge_base_partials/association.haml +7 -4
  83. data/share/views/layout.haml +17 -13
  84. data/share/views/layout/coda.haml +2 -2
  85. data/share/views/layout/footer.haml +10 -0
  86. data/share/views/layout/top_menu.haml +38 -14
  87. data/share/views/partials/table.haml +4 -3
  88. data/share/views/public/fonts/font-awesome/fontawesome-webfont.eot +0 -0
  89. data/share/views/public/fonts/font-awesome/fontawesome-webfont.svg +520 -0
  90. data/share/views/public/fonts/font-awesome/fontawesome-webfont.ttf +0 -0
  91. data/share/views/public/fonts/font-awesome/fontawesome-webfont.woff +0 -0
  92. data/share/views/public/js/_ajax_replace.js +10 -6
  93. data/share/views/public/js/app.js +3 -0
  94. data/share/views/public/js/defer.js +1 -1
  95. data/share/views/public/js/helpers.js +1 -0
  96. data/share/views/public/js/rbbt/modal.js +3 -3
  97. data/share/views/public/js/rbbt/table.js +2 -1
  98. data/share/views/public/plugins/angular/angular.js +250 -0
  99. data/share/views/public/plugins/cytoscapejs/arbor.js +67 -0
  100. data/share/views/public/plugins/cytoscapejs/cytoscape.js +23018 -0
  101. data/share/views/public/plugins/d3js/d3js.min.js +5 -0
  102. data/share/views/public/plugins/semantic-ui/CONTRIBUTING.md +31 -0
  103. data/share/views/public/plugins/semantic-ui/GETTING-STARTED.md +96 -0
  104. data/share/views/public/plugins/semantic-ui/LICENSE.md +7 -0
  105. data/share/views/public/plugins/semantic-ui/README.md +98 -0
  106. data/share/views/public/plugins/semantic-ui/RELEASE-NOTES.md +938 -0
  107. data/share/views/public/plugins/semantic-ui/bower.json +31 -0
  108. data/share/views/public/plugins/semantic-ui/composer.json +21 -0
  109. data/share/views/public/plugins/semantic-ui/dist/components/accordion.css +249 -0
  110. data/share/views/public/plugins/semantic-ui/dist/components/accordion.js +504 -0
  111. data/share/views/public/plugins/semantic-ui/dist/components/accordion.min.css +11 -0
  112. data/share/views/public/plugins/semantic-ui/dist/components/accordion.min.js +11 -0
  113. data/share/views/public/plugins/semantic-ui/dist/components/ad.css +265 -0
  114. data/share/views/public/plugins/semantic-ui/dist/components/ad.min.css +11 -0
  115. data/share/views/public/plugins/semantic-ui/dist/components/api.js +839 -0
  116. data/share/views/public/plugins/semantic-ui/dist/components/api.min.js +11 -0
  117. data/share/views/public/plugins/semantic-ui/dist/components/breadcrumb.css +125 -0
  118. data/share/views/public/plugins/semantic-ui/dist/components/breadcrumb.min.css +11 -0
  119. data/share/views/public/plugins/semantic-ui/dist/components/button.css +2375 -0
  120. data/share/views/public/plugins/semantic-ui/dist/components/button.min.css +11 -0
  121. data/share/views/public/plugins/semantic-ui/dist/components/card.css +758 -0
  122. data/share/views/public/plugins/semantic-ui/dist/components/card.min.css +11 -0
  123. data/share/views/public/plugins/semantic-ui/dist/components/checkbox.css +485 -0
  124. data/share/views/public/plugins/semantic-ui/dist/components/checkbox.js +469 -0
  125. data/share/views/public/plugins/semantic-ui/dist/components/checkbox.min.css +11 -0
  126. data/share/views/public/plugins/semantic-ui/dist/components/checkbox.min.js +11 -0
  127. data/share/views/public/plugins/semantic-ui/dist/components/colorize.js +272 -0
  128. data/share/views/public/plugins/semantic-ui/dist/components/colorize.min.js +11 -0
  129. data/share/views/public/plugins/semantic-ui/dist/components/comment.css +260 -0
  130. data/share/views/public/plugins/semantic-ui/dist/components/comment.min.css +11 -0
  131. data/share/views/public/plugins/semantic-ui/dist/components/dimmer.css +187 -0
  132. data/share/views/public/plugins/semantic-ui/dist/components/dimmer.js +626 -0
  133. data/share/views/public/plugins/semantic-ui/dist/components/dimmer.min.css +11 -0
  134. data/share/views/public/plugins/semantic-ui/dist/components/dimmer.min.js +11 -0
  135. data/share/views/public/plugins/semantic-ui/dist/components/divider.css +244 -0
  136. data/share/views/public/plugins/semantic-ui/dist/components/divider.min.css +11 -0
  137. data/share/views/public/plugins/semantic-ui/dist/components/dropdown.css +967 -0
  138. data/share/views/public/plugins/semantic-ui/dist/components/dropdown.js +1496 -0
  139. data/share/views/public/plugins/semantic-ui/dist/components/dropdown.min.css +11 -0
  140. data/share/views/public/plugins/semantic-ui/dist/components/dropdown.min.js +11 -0
  141. data/share/views/public/plugins/semantic-ui/dist/components/feed.css +277 -0
  142. data/share/views/public/plugins/semantic-ui/dist/components/feed.min.css +11 -0
  143. data/share/views/public/plugins/semantic-ui/dist/components/flag.css +1018 -0
  144. data/share/views/public/plugins/semantic-ui/dist/components/flag.min.css +11 -0
  145. data/share/views/public/plugins/semantic-ui/dist/components/form.css +833 -0
  146. data/share/views/public/plugins/semantic-ui/dist/components/form.js +795 -0
  147. data/share/views/public/plugins/semantic-ui/dist/components/form.min.css +11 -0
  148. data/share/views/public/plugins/semantic-ui/dist/components/form.min.js +11 -0
  149. data/share/views/public/plugins/semantic-ui/dist/components/grid.css +1685 -0
  150. data/share/views/public/plugins/semantic-ui/dist/components/grid.min.css +11 -0
  151. data/share/views/public/plugins/semantic-ui/dist/components/header.css +533 -0
  152. data/share/views/public/plugins/semantic-ui/dist/components/header.min.css +11 -0
  153. data/share/views/public/plugins/semantic-ui/dist/components/icon.css +2125 -0
  154. data/share/views/public/plugins/semantic-ui/dist/components/icon.min.css +11 -0
  155. data/share/views/public/plugins/semantic-ui/dist/components/image.css +252 -0
  156. data/share/views/public/plugins/semantic-ui/dist/components/image.min.css +11 -0
  157. data/share/views/public/plugins/semantic-ui/dist/components/input.css +446 -0
  158. data/share/views/public/plugins/semantic-ui/dist/components/input.min.css +11 -0
  159. data/share/views/public/plugins/semantic-ui/dist/components/item.css +458 -0
  160. data/share/views/public/plugins/semantic-ui/dist/components/item.min.css +11 -0
  161. data/share/views/public/plugins/semantic-ui/dist/components/label.css +936 -0
  162. data/share/views/public/plugins/semantic-ui/dist/components/label.min.css +11 -0
  163. data/share/views/public/plugins/semantic-ui/dist/components/list.css +888 -0
  164. data/share/views/public/plugins/semantic-ui/dist/components/list.min.css +11 -0
  165. data/share/views/public/plugins/semantic-ui/dist/components/loader.css +279 -0
  166. data/share/views/public/plugins/semantic-ui/dist/components/loader.min.css +11 -0
  167. data/share/views/public/plugins/semantic-ui/dist/components/menu.css +1579 -0
  168. data/share/views/public/plugins/semantic-ui/dist/components/menu.min.css +11 -0
  169. data/share/views/public/plugins/semantic-ui/dist/components/message.css +422 -0
  170. data/share/views/public/plugins/semantic-ui/dist/components/message.min.css +11 -0
  171. data/share/views/public/plugins/semantic-ui/dist/components/modal.css +436 -0
  172. data/share/views/public/plugins/semantic-ui/dist/components/modal.js +809 -0
  173. data/share/views/public/plugins/semantic-ui/dist/components/modal.min.css +11 -0
  174. data/share/views/public/plugins/semantic-ui/dist/components/modal.min.js +11 -0
  175. data/share/views/public/plugins/semantic-ui/dist/components/nag.css +149 -0
  176. data/share/views/public/plugins/semantic-ui/dist/components/nag.js +477 -0
  177. data/share/views/public/plugins/semantic-ui/dist/components/nag.min.css +11 -0
  178. data/share/views/public/plugins/semantic-ui/dist/components/nag.min.js +11 -0
  179. data/share/views/public/plugins/semantic-ui/dist/components/popup.css +293 -0
  180. data/share/views/public/plugins/semantic-ui/dist/components/popup.js +1113 -0
  181. data/share/views/public/plugins/semantic-ui/dist/components/popup.min.css +11 -0
  182. data/share/views/public/plugins/semantic-ui/dist/components/popup.min.js +11 -0
  183. data/share/views/public/plugins/semantic-ui/dist/components/progress.css +427 -0
  184. data/share/views/public/plugins/semantic-ui/dist/components/progress.js +652 -0
  185. data/share/views/public/plugins/semantic-ui/dist/components/progress.min.css +11 -0
  186. data/share/views/public/plugins/semantic-ui/dist/components/progress.min.js +11 -0
  187. data/share/views/public/plugins/semantic-ui/dist/components/rail.css +125 -0
  188. data/share/views/public/plugins/semantic-ui/dist/components/rail.min.css +11 -0
  189. data/share/views/public/plugins/semantic-ui/dist/components/rating.css +262 -0
  190. data/share/views/public/plugins/semantic-ui/dist/components/rating.js +451 -0
  191. data/share/views/public/plugins/semantic-ui/dist/components/rating.min.css +11 -0
  192. data/share/views/public/plugins/semantic-ui/dist/components/rating.min.js +11 -0
  193. data/share/views/public/plugins/semantic-ui/dist/components/reset.css +427 -0
  194. data/share/views/public/plugins/semantic-ui/dist/components/reset.min.css +11 -0
  195. data/share/views/public/plugins/semantic-ui/dist/components/reveal.css +282 -0
  196. data/share/views/public/plugins/semantic-ui/dist/components/reveal.min.css +11 -0
  197. data/share/views/public/plugins/semantic-ui/dist/components/search.css +330 -0
  198. data/share/views/public/plugins/semantic-ui/dist/components/search.js +886 -0
  199. data/share/views/public/plugins/semantic-ui/dist/components/search.min.css +11 -0
  200. data/share/views/public/plugins/semantic-ui/dist/components/search.min.js +11 -0
  201. data/share/views/public/plugins/semantic-ui/dist/components/segment.css +598 -0
  202. data/share/views/public/plugins/semantic-ui/dist/components/segment.min.css +11 -0
  203. data/share/views/public/plugins/semantic-ui/dist/components/shape.css +155 -0
  204. data/share/views/public/plugins/semantic-ui/dist/components/shape.js +830 -0
  205. data/share/views/public/plugins/semantic-ui/dist/components/shape.min.css +11 -0
  206. data/share/views/public/plugins/semantic-ui/dist/components/shape.min.js +11 -0
  207. data/share/views/public/plugins/semantic-ui/dist/components/sidebar.css +500 -0
  208. data/share/views/public/plugins/semantic-ui/dist/components/sidebar.js +976 -0
  209. data/share/views/public/plugins/semantic-ui/dist/components/sidebar.min.css +11 -0
  210. data/share/views/public/plugins/semantic-ui/dist/components/sidebar.min.js +11 -0
  211. data/share/views/public/plugins/semantic-ui/dist/components/site.css +135 -0
  212. data/share/views/public/plugins/semantic-ui/dist/components/site.js +487 -0
  213. data/share/views/public/plugins/semantic-ui/dist/components/site.min.css +11 -0
  214. data/share/views/public/plugins/semantic-ui/dist/components/site.min.js +11 -0
  215. data/share/views/public/plugins/semantic-ui/dist/components/state.js +690 -0
  216. data/share/views/public/plugins/semantic-ui/dist/components/state.min.js +11 -0
  217. data/share/views/public/plugins/semantic-ui/dist/components/statistic.css +410 -0
  218. data/share/views/public/plugins/semantic-ui/dist/components/statistic.min.css +11 -0
  219. data/share/views/public/plugins/semantic-ui/dist/components/step.css +360 -0
  220. data/share/views/public/plugins/semantic-ui/dist/components/step.min.css +11 -0
  221. data/share/views/public/plugins/semantic-ui/dist/components/sticky.css +80 -0
  222. data/share/views/public/plugins/semantic-ui/dist/components/sticky.js +768 -0
  223. data/share/views/public/plugins/semantic-ui/dist/components/sticky.min.css +11 -0
  224. data/share/views/public/plugins/semantic-ui/dist/components/sticky.min.js +11 -0
  225. data/share/views/public/plugins/semantic-ui/dist/components/tab.css +93 -0
  226. data/share/views/public/plugins/semantic-ui/dist/components/tab.js +801 -0
  227. data/share/views/public/plugins/semantic-ui/dist/components/tab.min.css +11 -0
  228. data/share/views/public/plugins/semantic-ui/dist/components/tab.min.js +11 -0
  229. data/share/views/public/plugins/semantic-ui/dist/components/table.css +878 -0
  230. data/share/views/public/plugins/semantic-ui/dist/components/table.min.css +11 -0
  231. data/share/views/public/plugins/semantic-ui/dist/components/transition.css +993 -0
  232. data/share/views/public/plugins/semantic-ui/dist/components/transition.js +924 -0
  233. data/share/views/public/plugins/semantic-ui/dist/components/transition.min.css +11 -0
  234. data/share/views/public/plugins/semantic-ui/dist/components/transition.min.js +11 -0
  235. data/share/views/public/plugins/semantic-ui/dist/components/video.css +126 -0
  236. data/share/views/public/plugins/semantic-ui/dist/components/video.js +539 -0
  237. data/share/views/public/plugins/semantic-ui/dist/components/video.min.css +11 -0
  238. data/share/views/public/plugins/semantic-ui/dist/components/video.min.js +11 -0
  239. data/share/views/public/plugins/semantic-ui/dist/components/visibility.js +951 -0
  240. data/share/views/public/plugins/semantic-ui/dist/components/visibility.min.js +11 -0
  241. data/share/views/public/plugins/semantic-ui/dist/components/visit.js +513 -0
  242. data/share/views/public/plugins/semantic-ui/dist/components/visit.min.js +11 -0
  243. data/share/views/public/plugins/semantic-ui/dist/semantic.css +27664 -0
  244. data/share/views/public/plugins/semantic-ui/dist/semantic.js +16893 -0
  245. data/share/views/public/plugins/semantic-ui/dist/semantic.min.css +11 -0
  246. data/share/views/public/plugins/semantic-ui/dist/semantic.min.js +17 -0
  247. data/share/views/public/plugins/semantic-ui/dist/themes/basic/assets/fonts/icons.eot +0 -0
  248. data/share/views/public/plugins/semantic-ui/dist/themes/basic/assets/fonts/icons.svg +450 -0
  249. data/share/views/public/plugins/semantic-ui/dist/themes/basic/assets/fonts/icons.ttf +0 -0
  250. data/share/views/public/plugins/semantic-ui/dist/themes/basic/assets/fonts/icons.woff +0 -0
  251. data/share/views/public/plugins/semantic-ui/dist/themes/default/assets/fonts/icons.eot +0 -0
  252. data/share/views/public/plugins/semantic-ui/dist/themes/default/assets/fonts/icons.otf +0 -0
  253. data/share/views/public/plugins/semantic-ui/dist/themes/default/assets/fonts/icons.svg +504 -0
  254. data/share/views/public/plugins/semantic-ui/dist/themes/default/assets/fonts/icons.ttf +0 -0
  255. data/share/views/public/plugins/semantic-ui/dist/themes/default/assets/fonts/icons.woff +0 -0
  256. data/share/views/public/plugins/semantic-ui/dist/themes/default/assets/images/flags.png +0 -0
  257. data/share/views/public/plugins/semantic-ui/examples/feed.css +93 -0
  258. data/share/views/public/plugins/semantic-ui/examples/feed.html +174 -0
  259. data/share/views/public/plugins/semantic-ui/examples/feed.js +23 -0
  260. data/share/views/public/plugins/semantic-ui/examples/grid.css +102 -0
  261. data/share/views/public/plugins/semantic-ui/examples/grid.html +1439 -0
  262. data/share/views/public/plugins/semantic-ui/examples/homepage.css +134 -0
  263. data/share/views/public/plugins/semantic-ui/examples/homepage.html +315 -0
  264. data/share/views/public/plugins/semantic-ui/examples/homepage.js +57 -0
  265. data/share/views/public/plugins/semantic-ui/examples/images/bg.jpg +0 -0
  266. data/share/views/public/plugins/semantic-ui/examples/images/cat.png +0 -0
  267. data/share/views/public/plugins/semantic-ui/examples/images/wireframe/centered-paragraph.png +0 -0
  268. data/share/views/public/plugins/semantic-ui/examples/images/wireframe/image-square.png +0 -0
  269. data/share/views/public/plugins/semantic-ui/examples/images/wireframe/image-text.png +0 -0
  270. data/share/views/public/plugins/semantic-ui/examples/images/wireframe/image.png +0 -0
  271. data/share/views/public/plugins/semantic-ui/examples/images/wireframe/media-paragraph-alt.png +0 -0
  272. data/share/views/public/plugins/semantic-ui/examples/images/wireframe/media-paragraph.png +0 -0
  273. data/share/views/public/plugins/semantic-ui/examples/images/wireframe/paragraph.png +0 -0
  274. data/share/views/public/plugins/semantic-ui/examples/images/wireframe/short-paragraph.png +0 -0
  275. data/share/views/public/plugins/semantic-ui/examples/images/wireframe/square-image.png +0 -0
  276. data/share/views/public/plugins/semantic-ui/examples/images/wireframe/text-image.png +0 -0
  277. data/share/views/public/plugins/semantic-ui/examples/images/wireframe/white-image.png +0 -0
  278. data/share/views/public/plugins/semantic-ui/examples/kitchensink.css +49 -0
  279. data/share/views/public/plugins/semantic-ui/examples/kitchensink.html +5454 -0
  280. data/share/views/public/plugins/semantic-ui/gulpfile.js +1119 -0
  281. data/share/views/public/plugins/semantic-ui/karma.conf.js +85 -0
  282. data/share/views/public/plugins/semantic-ui/logo.png +0 -0
  283. data/share/views/public/plugins/semantic-ui/package.json +59 -0
  284. data/share/views/public/plugins/semantic-ui/semantic.json.example +20 -0
  285. data/share/views/public/plugins/semantic-ui/src/_site/collections/breadcrumb.overrides +3 -0
  286. data/share/views/public/plugins/semantic-ui/src/_site/collections/breadcrumb.variables +3 -0
  287. data/share/views/public/plugins/semantic-ui/src/_site/collections/form.overrides +3 -0
  288. data/share/views/public/plugins/semantic-ui/src/_site/collections/form.variables +3 -0
  289. data/share/views/public/plugins/semantic-ui/src/_site/collections/grid.overrides +3 -0
  290. data/share/views/public/plugins/semantic-ui/src/_site/collections/grid.variables +3 -0
  291. data/share/views/public/plugins/semantic-ui/src/_site/collections/menu.overrides +3 -0
  292. data/share/views/public/plugins/semantic-ui/src/_site/collections/menu.variables +3 -0
  293. data/share/views/public/plugins/semantic-ui/src/_site/collections/message.overrides +3 -0
  294. data/share/views/public/plugins/semantic-ui/src/_site/collections/message.variables +3 -0
  295. data/share/views/public/plugins/semantic-ui/src/_site/collections/table.overrides +3 -0
  296. data/share/views/public/plugins/semantic-ui/src/_site/collections/table.variables +3 -0
  297. data/share/views/public/plugins/semantic-ui/src/_site/elements/button.overrides +3 -0
  298. data/share/views/public/plugins/semantic-ui/src/_site/elements/button.variables +3 -0
  299. data/share/views/public/plugins/semantic-ui/src/_site/elements/divider.overrides +3 -0
  300. data/share/views/public/plugins/semantic-ui/src/_site/elements/divider.variables +3 -0
  301. data/share/views/public/plugins/semantic-ui/src/_site/elements/flag.overrides +3 -0
  302. data/share/views/public/plugins/semantic-ui/src/_site/elements/flag.variables +3 -0
  303. data/share/views/public/plugins/semantic-ui/src/_site/elements/header.overrides +3 -0
  304. data/share/views/public/plugins/semantic-ui/src/_site/elements/header.variables +3 -0
  305. data/share/views/public/plugins/semantic-ui/src/_site/elements/icon.overrides +3 -0
  306. data/share/views/public/plugins/semantic-ui/src/_site/elements/icon.variables +3 -0
  307. data/share/views/public/plugins/semantic-ui/src/_site/elements/image.overrides +3 -0
  308. data/share/views/public/plugins/semantic-ui/src/_site/elements/image.variables +3 -0
  309. data/share/views/public/plugins/semantic-ui/src/_site/elements/input.overrides +3 -0
  310. data/share/views/public/plugins/semantic-ui/src/_site/elements/input.variables +3 -0
  311. data/share/views/public/plugins/semantic-ui/src/_site/elements/label.overrides +3 -0
  312. data/share/views/public/plugins/semantic-ui/src/_site/elements/label.variables +3 -0
  313. data/share/views/public/plugins/semantic-ui/src/_site/elements/list.overrides +3 -0
  314. data/share/views/public/plugins/semantic-ui/src/_site/elements/list.variables +3 -0
  315. data/share/views/public/plugins/semantic-ui/src/_site/elements/loader.overrides +3 -0
  316. data/share/views/public/plugins/semantic-ui/src/_site/elements/loader.variables +3 -0
  317. data/share/views/public/plugins/semantic-ui/src/_site/elements/rail.overrides +3 -0
  318. data/share/views/public/plugins/semantic-ui/src/_site/elements/rail.variables +3 -0
  319. data/share/views/public/plugins/semantic-ui/src/_site/elements/reveal.overrides +3 -0
  320. data/share/views/public/plugins/semantic-ui/src/_site/elements/reveal.variables +3 -0
  321. data/share/views/public/plugins/semantic-ui/src/_site/elements/segment.overrides +3 -0
  322. data/share/views/public/plugins/semantic-ui/src/_site/elements/segment.variables +3 -0
  323. data/share/views/public/plugins/semantic-ui/src/_site/elements/step.overrides +3 -0
  324. data/share/views/public/plugins/semantic-ui/src/_site/elements/step.variables +3 -0
  325. data/share/views/public/plugins/semantic-ui/src/_site/globals/reset.overrides +3 -0
  326. data/share/views/public/plugins/semantic-ui/src/_site/globals/reset.variables +3 -0
  327. data/share/views/public/plugins/semantic-ui/src/_site/globals/site.overrides +3 -0
  328. data/share/views/public/plugins/semantic-ui/src/_site/globals/site.variables +3 -0
  329. data/share/views/public/plugins/semantic-ui/src/_site/modules/accordion.overrides +3 -0
  330. data/share/views/public/plugins/semantic-ui/src/_site/modules/accordion.variables +3 -0
  331. data/share/views/public/plugins/semantic-ui/src/_site/modules/chatroom.overrides +3 -0
  332. data/share/views/public/plugins/semantic-ui/src/_site/modules/chatroom.variables +3 -0
  333. data/share/views/public/plugins/semantic-ui/src/_site/modules/checkbox.overrides +3 -0
  334. data/share/views/public/plugins/semantic-ui/src/_site/modules/checkbox.variables +3 -0
  335. data/share/views/public/plugins/semantic-ui/src/_site/modules/dimmer.overrides +3 -0
  336. data/share/views/public/plugins/semantic-ui/src/_site/modules/dimmer.variables +3 -0
  337. data/share/views/public/plugins/semantic-ui/src/_site/modules/dropdown.overrides +3 -0
  338. data/share/views/public/plugins/semantic-ui/src/_site/modules/dropdown.variables +3 -0
  339. data/share/views/public/plugins/semantic-ui/src/_site/modules/modal.overrides +3 -0
  340. data/share/views/public/plugins/semantic-ui/src/_site/modules/modal.variables +3 -0
  341. data/share/views/public/plugins/semantic-ui/src/_site/modules/nag.overrides +3 -0
  342. data/share/views/public/plugins/semantic-ui/src/_site/modules/nag.variables +3 -0
  343. data/share/views/public/plugins/semantic-ui/src/_site/modules/popup.overrides +3 -0
  344. data/share/views/public/plugins/semantic-ui/src/_site/modules/popup.variables +3 -0
  345. data/share/views/public/plugins/semantic-ui/src/_site/modules/progress.overrides +3 -0
  346. data/share/views/public/plugins/semantic-ui/src/_site/modules/progress.variables +3 -0
  347. data/share/views/public/plugins/semantic-ui/src/_site/modules/rating.overrides +3 -0
  348. data/share/views/public/plugins/semantic-ui/src/_site/modules/rating.variables +3 -0
  349. data/share/views/public/plugins/semantic-ui/src/_site/modules/search.overrides +3 -0
  350. data/share/views/public/plugins/semantic-ui/src/_site/modules/search.variables +3 -0
  351. data/share/views/public/plugins/semantic-ui/src/_site/modules/shape.overrides +3 -0
  352. data/share/views/public/plugins/semantic-ui/src/_site/modules/shape.variables +3 -0
  353. data/share/views/public/plugins/semantic-ui/src/_site/modules/sidebar.overrides +3 -0
  354. data/share/views/public/plugins/semantic-ui/src/_site/modules/sidebar.variables +3 -0
  355. data/share/views/public/plugins/semantic-ui/src/_site/modules/sticky.overrides +3 -0
  356. data/share/views/public/plugins/semantic-ui/src/_site/modules/sticky.variables +3 -0
  357. data/share/views/public/plugins/semantic-ui/src/_site/modules/tab.overrides +3 -0
  358. data/share/views/public/plugins/semantic-ui/src/_site/modules/tab.variables +3 -0
  359. data/share/views/public/plugins/semantic-ui/src/_site/modules/transition.overrides +3 -0
  360. data/share/views/public/plugins/semantic-ui/src/_site/modules/transition.variables +3 -0
  361. data/share/views/public/plugins/semantic-ui/src/_site/modules/video.overrides +3 -0
  362. data/share/views/public/plugins/semantic-ui/src/_site/modules/video.variables +0 -0
  363. data/share/views/public/plugins/semantic-ui/src/_site/views/ad.overrides +3 -0
  364. data/share/views/public/plugins/semantic-ui/src/_site/views/ad.variables +3 -0
  365. data/share/views/public/plugins/semantic-ui/src/_site/views/card.overrides +3 -0
  366. data/share/views/public/plugins/semantic-ui/src/_site/views/card.variables +3 -0
  367. data/share/views/public/plugins/semantic-ui/src/_site/views/comment.overrides +3 -0
  368. data/share/views/public/plugins/semantic-ui/src/_site/views/comment.variables +3 -0
  369. data/share/views/public/plugins/semantic-ui/src/_site/views/feed.overrides +3 -0
  370. data/share/views/public/plugins/semantic-ui/src/_site/views/feed.variables +3 -0
  371. data/share/views/public/plugins/semantic-ui/src/_site/views/item.overrides +3 -0
  372. data/share/views/public/plugins/semantic-ui/src/_site/views/item.variables +3 -0
  373. data/share/views/public/plugins/semantic-ui/src/_site/views/statistic.overrides +3 -0
  374. data/share/views/public/plugins/semantic-ui/src/_site/views/statistic.variables +3 -0
  375. data/share/views/public/plugins/semantic-ui/src/definitions/behaviors/api.js +839 -0
  376. data/share/views/public/plugins/semantic-ui/src/definitions/behaviors/colorize.js +272 -0
  377. data/share/views/public/plugins/semantic-ui/src/definitions/behaviors/form.js +795 -0
  378. data/share/views/public/plugins/semantic-ui/src/definitions/behaviors/state.js +690 -0
  379. data/share/views/public/plugins/semantic-ui/src/definitions/behaviors/visibility.js +951 -0
  380. data/share/views/public/plugins/semantic-ui/src/definitions/behaviors/visit.js +513 -0
  381. data/share/views/public/plugins/semantic-ui/src/definitions/collections/breadcrumb.less +122 -0
  382. data/share/views/public/plugins/semantic-ui/src/definitions/collections/form.less +833 -0
  383. data/share/views/public/plugins/semantic-ui/src/definitions/collections/grid.less +1698 -0
  384. data/share/views/public/plugins/semantic-ui/src/definitions/collections/menu.less +1597 -0
  385. data/share/views/public/plugins/semantic-ui/src/definitions/collections/message.less +442 -0
  386. data/share/views/public/plugins/semantic-ui/src/definitions/collections/table.less +871 -0
  387. data/share/views/public/plugins/semantic-ui/src/definitions/elements/button.less +2390 -0
  388. data/share/views/public/plugins/semantic-ui/src/definitions/elements/divider.less +256 -0
  389. data/share/views/public/plugins/semantic-ui/src/definitions/elements/flag.less +46 -0
  390. data/share/views/public/plugins/semantic-ui/src/definitions/elements/header.less +558 -0
  391. data/share/views/public/plugins/semantic-ui/src/definitions/elements/icon.less +345 -0
  392. data/share/views/public/plugins/semantic-ui/src/definitions/elements/image.less +261 -0
  393. data/share/views/public/plugins/semantic-ui/src/definitions/elements/input.less +453 -0
  394. data/share/views/public/plugins/semantic-ui/src/definitions/elements/label.less +953 -0
  395. data/share/views/public/plugins/semantic-ui/src/definitions/elements/list.less +890 -0
  396. data/share/views/public/plugins/semantic-ui/src/definitions/elements/loader.less +262 -0
  397. data/share/views/public/plugins/semantic-ui/src/definitions/elements/rail.less +126 -0
  398. data/share/views/public/plugins/semantic-ui/src/definitions/elements/reveal.less +257 -0
  399. data/share/views/public/plugins/semantic-ui/src/definitions/elements/segment.less +592 -0
  400. data/share/views/public/plugins/semantic-ui/src/definitions/elements/step.less +352 -0
  401. data/share/views/public/plugins/semantic-ui/src/definitions/globals/reset.less +39 -0
  402. data/share/views/public/plugins/semantic-ui/src/definitions/globals/site.js +487 -0
  403. data/share/views/public/plugins/semantic-ui/src/definitions/globals/site.less +133 -0
  404. data/share/views/public/plugins/semantic-ui/src/definitions/modules/accordion.js +504 -0
  405. data/share/views/public/plugins/semantic-ui/src/definitions/modules/accordion.less +215 -0
  406. data/share/views/public/plugins/semantic-ui/src/definitions/modules/checkbox.js +469 -0
  407. data/share/views/public/plugins/semantic-ui/src/definitions/modules/checkbox.less +462 -0
  408. data/share/views/public/plugins/semantic-ui/src/definitions/modules/dimmer.js +626 -0
  409. data/share/views/public/plugins/semantic-ui/src/definitions/modules/dimmer.less +180 -0
  410. data/share/views/public/plugins/semantic-ui/src/definitions/modules/dropdown.js +1496 -0
  411. data/share/views/public/plugins/semantic-ui/src/definitions/modules/dropdown.less +914 -0
  412. data/share/views/public/plugins/semantic-ui/src/definitions/modules/modal.js +809 -0
  413. data/share/views/public/plugins/semantic-ui/src/definitions/modules/modal.less +441 -0
  414. data/share/views/public/plugins/semantic-ui/src/definitions/modules/nag.js +477 -0
  415. data/share/views/public/plugins/semantic-ui/src/definitions/modules/nag.less +159 -0
  416. data/share/views/public/plugins/semantic-ui/src/definitions/modules/popup.js +1113 -0
  417. data/share/views/public/plugins/semantic-ui/src/definitions/modules/popup.less +290 -0
  418. data/share/views/public/plugins/semantic-ui/src/definitions/modules/progress.js +652 -0
  419. data/share/views/public/plugins/semantic-ui/src/definitions/modules/progress.less +429 -0
  420. data/share/views/public/plugins/semantic-ui/src/definitions/modules/rating.js +451 -0
  421. data/share/views/public/plugins/semantic-ui/src/definitions/modules/rating.less +198 -0
  422. data/share/views/public/plugins/semantic-ui/src/definitions/modules/search.js +886 -0
  423. data/share/views/public/plugins/semantic-ui/src/definitions/modules/search.less +338 -0
  424. data/share/views/public/plugins/semantic-ui/src/definitions/modules/shape.js +830 -0
  425. data/share/views/public/plugins/semantic-ui/src/definitions/modules/shape.less +152 -0
  426. data/share/views/public/plugins/semantic-ui/src/definitions/modules/sidebar.js +976 -0
  427. data/share/views/public/plugins/semantic-ui/src/definitions/modules/sidebar.less +458 -0
  428. data/share/views/public/plugins/semantic-ui/src/definitions/modules/sticky.js +768 -0
  429. data/share/views/public/plugins/semantic-ui/src/definitions/modules/sticky.less +74 -0
  430. data/share/views/public/plugins/semantic-ui/src/definitions/modules/tab.js +801 -0
  431. data/share/views/public/plugins/semantic-ui/src/definitions/modules/tab.less +94 -0
  432. data/share/views/public/plugins/semantic-ui/src/definitions/modules/transition.js +924 -0
  433. data/share/views/public/plugins/semantic-ui/src/definitions/modules/transition.less +89 -0
  434. data/share/views/public/plugins/semantic-ui/src/definitions/modules/video.js +539 -0
  435. data/share/views/public/plugins/semantic-ui/src/definitions/modules/video.less +125 -0
  436. data/share/views/public/plugins/semantic-ui/src/definitions/views/ad.less +266 -0
  437. data/share/views/public/plugins/semantic-ui/src/definitions/views/card.less +745 -0
  438. data/share/views/public/plugins/semantic-ui/src/definitions/views/comment.less +256 -0
  439. data/share/views/public/plugins/semantic-ui/src/definitions/views/feed.less +272 -0
  440. data/share/views/public/plugins/semantic-ui/src/definitions/views/item.less +466 -0
  441. data/share/views/public/plugins/semantic-ui/src/definitions/views/statistic.less +416 -0
  442. data/share/views/public/plugins/semantic-ui/src/theme.config.example +96 -0
  443. data/share/views/public/plugins/semantic-ui/src/theme.less +48 -0
  444. data/share/views/public/plugins/semantic-ui/src/themes/amazon/elements/button.overrides +46 -0
  445. data/share/views/public/plugins/semantic-ui/src/themes/amazon/elements/button.variables +57 -0
  446. data/share/views/public/plugins/semantic-ui/src/themes/basic/assets/fonts/icons.eot +0 -0
  447. data/share/views/public/plugins/semantic-ui/src/themes/basic/assets/fonts/icons.svg +450 -0
  448. data/share/views/public/plugins/semantic-ui/src/themes/basic/assets/fonts/icons.ttf +0 -0
  449. data/share/views/public/plugins/semantic-ui/src/themes/basic/assets/fonts/icons.woff +0 -0
  450. data/share/views/public/plugins/semantic-ui/src/themes/basic/collections/table.overrides +4 -0
  451. data/share/views/public/plugins/semantic-ui/src/themes/basic/collections/table.variables +10 -0
  452. data/share/views/public/plugins/semantic-ui/src/themes/basic/elements/button.overrides +4 -0
  453. data/share/views/public/plugins/semantic-ui/src/themes/basic/elements/button.variables +44 -0
  454. data/share/views/public/plugins/semantic-ui/src/themes/basic/elements/icon.overrides +189 -0
  455. data/share/views/public/plugins/semantic-ui/src/themes/basic/elements/icon.variables +5 -0
  456. data/share/views/public/plugins/semantic-ui/src/themes/basic/elements/step.overrides +7 -0
  457. data/share/views/public/plugins/semantic-ui/src/themes/basic/elements/step.variables +10 -0
  458. data/share/views/public/plugins/semantic-ui/src/themes/basic/globals/reset.overrides +5 -0
  459. data/share/views/public/plugins/semantic-ui/src/themes/basic/globals/reset.variables +3 -0
  460. data/share/views/public/plugins/semantic-ui/src/themes/basic/modules/progress.overrides +3 -0
  461. data/share/views/public/plugins/semantic-ui/src/themes/basic/modules/progress.variables +15 -0
  462. data/share/views/public/plugins/semantic-ui/src/themes/basic/views/card.overrides +4 -0
  463. data/share/views/public/plugins/semantic-ui/src/themes/basic/views/card.variables +34 -0
  464. data/share/views/public/plugins/semantic-ui/src/themes/bookish/elements/header.overrides +15 -0
  465. data/share/views/public/plugins/semantic-ui/src/themes/bookish/elements/header.variables +37 -0
  466. data/share/views/public/plugins/semantic-ui/src/themes/bootstrap3/elements/button.overrides +0 -0
  467. data/share/views/public/plugins/semantic-ui/src/themes/bootstrap3/elements/button.variables +63 -0
  468. data/share/views/public/plugins/semantic-ui/src/themes/chubby/collections/form.overrides +8 -0
  469. data/share/views/public/plugins/semantic-ui/src/themes/chubby/collections/form.variables +9 -0
  470. data/share/views/public/plugins/semantic-ui/src/themes/chubby/elements/button.overrides +21 -0
  471. data/share/views/public/plugins/semantic-ui/src/themes/chubby/elements/button.variables +57 -0
  472. data/share/views/public/plugins/semantic-ui/src/themes/chubby/elements/header.overrides +5 -0
  473. data/share/views/public/plugins/semantic-ui/src/themes/chubby/elements/header.variables +21 -0
  474. data/share/views/public/plugins/semantic-ui/src/themes/chubby/modules/accordion.overrides +7 -0
  475. data/share/views/public/plugins/semantic-ui/src/themes/chubby/modules/accordion.variables +15 -0
  476. data/share/views/public/plugins/semantic-ui/src/themes/chubby/views/comment.overrides +12 -0
  477. data/share/views/public/plugins/semantic-ui/src/themes/chubby/views/comment.variables +46 -0
  478. data/share/views/public/plugins/semantic-ui/src/themes/classic/collections/table.overrides +3 -0
  479. data/share/views/public/plugins/semantic-ui/src/themes/classic/collections/table.variables +14 -0
  480. data/share/views/public/plugins/semantic-ui/src/themes/classic/elements/button.overrides +3 -0
  481. data/share/views/public/plugins/semantic-ui/src/themes/classic/elements/button.variables +96 -0
  482. data/share/views/public/plugins/semantic-ui/src/themes/classic/elements/header.overrides +3 -0
  483. data/share/views/public/plugins/semantic-ui/src/themes/classic/elements/header.variables +12 -0
  484. data/share/views/public/plugins/semantic-ui/src/themes/classic/modules/progress.overrides +3 -0
  485. data/share/views/public/plugins/semantic-ui/src/themes/classic/modules/progress.variables +8 -0
  486. data/share/views/public/plugins/semantic-ui/src/themes/classic/views/card.overrides +98 -0
  487. data/share/views/public/plugins/semantic-ui/src/themes/classic/views/card.variables +22 -0
  488. data/share/views/public/plugins/semantic-ui/src/themes/default/assets/fonts/icons.eot +0 -0
  489. data/share/views/public/plugins/semantic-ui/src/themes/default/assets/fonts/icons.otf +0 -0
  490. data/share/views/public/plugins/semantic-ui/src/themes/default/assets/fonts/icons.svg +504 -0
  491. data/share/views/public/plugins/semantic-ui/src/themes/default/assets/fonts/icons.ttf +0 -0
  492. data/share/views/public/plugins/semantic-ui/src/themes/default/assets/fonts/icons.woff +0 -0
  493. data/share/views/public/plugins/semantic-ui/src/themes/default/assets/images/flags.png +0 -0
  494. data/share/views/public/plugins/semantic-ui/src/themes/default/collections/breadcrumb.overrides +3 -0
  495. data/share/views/public/plugins/semantic-ui/src/themes/default/collections/breadcrumb.variables +43 -0
  496. data/share/views/public/plugins/semantic-ui/src/themes/default/collections/form.overrides +3 -0
  497. data/share/views/public/plugins/semantic-ui/src/themes/default/collections/form.variables +189 -0
  498. data/share/views/public/plugins/semantic-ui/src/themes/default/collections/grid.overrides +4 -0
  499. data/share/views/public/plugins/semantic-ui/src/themes/default/collections/grid.variables +93 -0
  500. data/share/views/public/plugins/semantic-ui/src/themes/default/collections/menu.overrides +3 -0
  501. data/share/views/public/plugins/semantic-ui/src/themes/default/collections/menu.variables +321 -0
  502. data/share/views/public/plugins/semantic-ui/src/themes/default/collections/message.overrides +3 -0
  503. data/share/views/public/plugins/semantic-ui/src/themes/default/collections/message.variables +88 -0
  504. data/share/views/public/plugins/semantic-ui/src/themes/default/collections/table.overrides +3 -0
  505. data/share/views/public/plugins/semantic-ui/src/themes/default/collections/table.variables +228 -0
  506. data/share/views/public/plugins/semantic-ui/src/themes/default/elements/button.overrides +3 -0
  507. data/share/views/public/plugins/semantic-ui/src/themes/default/elements/button.variables +260 -0
  508. data/share/views/public/plugins/semantic-ui/src/themes/default/elements/divider.overrides +3 -0
  509. data/share/views/public/plugins/semantic-ui/src/themes/default/elements/divider.variables +54 -0
  510. data/share/views/public/plugins/semantic-ui/src/themes/default/elements/flag.overrides +979 -0
  511. data/share/views/public/plugins/semantic-ui/src/themes/default/elements/flag.variables +13 -0
  512. data/share/views/public/plugins/semantic-ui/src/themes/default/elements/header.overrides +4 -0
  513. data/share/views/public/plugins/semantic-ui/src/themes/default/elements/header.variables +126 -0
  514. data/share/views/public/plugins/semantic-ui/src/themes/default/elements/icon.overrides +660 -0
  515. data/share/views/public/plugins/semantic-ui/src/themes/default/elements/icon.variables +34 -0
  516. data/share/views/public/plugins/semantic-ui/src/themes/default/elements/image.overrides +3 -0
  517. data/share/views/public/plugins/semantic-ui/src/themes/default/elements/image.variables +42 -0
  518. data/share/views/public/plugins/semantic-ui/src/themes/default/elements/input.overrides +3 -0
  519. data/share/views/public/plugins/semantic-ui/src/themes/default/elements/input.variables +118 -0
  520. data/share/views/public/plugins/semantic-ui/src/themes/default/elements/label.overrides +3 -0
  521. data/share/views/public/plugins/semantic-ui/src/themes/default/elements/label.variables +164 -0
  522. data/share/views/public/plugins/semantic-ui/src/themes/default/elements/list.overrides +3 -0
  523. data/share/views/public/plugins/semantic-ui/src/themes/default/elements/list.variables +204 -0
  524. data/share/views/public/plugins/semantic-ui/src/themes/default/elements/loader.overrides +3 -0
  525. data/share/views/public/plugins/semantic-ui/src/themes/default/elements/loader.variables +61 -0
  526. data/share/views/public/plugins/semantic-ui/src/themes/default/elements/rail.overrides +3 -0
  527. data/share/views/public/plugins/semantic-ui/src/themes/default/elements/rail.variables +24 -0
  528. data/share/views/public/plugins/semantic-ui/src/themes/default/elements/reveal.overrides +3 -0
  529. data/share/views/public/plugins/semantic-ui/src/themes/default/elements/reveal.variables +15 -0
  530. data/share/views/public/plugins/semantic-ui/src/themes/default/elements/segment.overrides +3 -0
  531. data/share/views/public/plugins/semantic-ui/src/themes/default/elements/segment.variables +100 -0
  532. data/share/views/public/plugins/semantic-ui/src/themes/default/elements/step.overrides +16 -0
  533. data/share/views/public/plugins/semantic-ui/src/themes/default/elements/step.variables +93 -0
  534. data/share/views/public/plugins/semantic-ui/src/themes/default/globals/reset.overrides +434 -0
  535. data/share/views/public/plugins/semantic-ui/src/themes/default/globals/reset.variables +3 -0
  536. data/share/views/public/plugins/semantic-ui/src/themes/default/globals/site.overrides +3 -0
  537. data/share/views/public/plugins/semantic-ui/src/themes/default/globals/site.variables +599 -0
  538. data/share/views/public/plugins/semantic-ui/src/themes/default/modules/accordion.overrides +28 -0
  539. data/share/views/public/plugins/semantic-ui/src/themes/default/modules/accordion.variables +101 -0
  540. data/share/views/public/plugins/semantic-ui/src/themes/default/modules/chatroom.overrides +3 -0
  541. data/share/views/public/plugins/semantic-ui/src/themes/default/modules/chatroom.variables +3 -0
  542. data/share/views/public/plugins/semantic-ui/src/themes/default/modules/checkbox.overrides +33 -0
  543. data/share/views/public/plugins/semantic-ui/src/themes/default/modules/checkbox.variables +139 -0
  544. data/share/views/public/plugins/semantic-ui/src/themes/default/modules/dimmer.overrides +3 -0
  545. data/share/views/public/plugins/semantic-ui/src/themes/default/modules/dimmer.variables +51 -0
  546. data/share/views/public/plugins/semantic-ui/src/themes/default/modules/dropdown.overrides +57 -0
  547. data/share/views/public/plugins/semantic-ui/src/themes/default/modules/dropdown.variables +239 -0
  548. data/share/views/public/plugins/semantic-ui/src/themes/default/modules/modal.overrides +3 -0
  549. data/share/views/public/plugins/semantic-ui/src/themes/default/modules/modal.variables +147 -0
  550. data/share/views/public/plugins/semantic-ui/src/themes/default/modules/nag.overrides +3 -0
  551. data/share/views/public/plugins/semantic-ui/src/themes/default/modules/nag.variables +74 -0
  552. data/share/views/public/plugins/semantic-ui/src/themes/default/modules/popup.overrides +3 -0
  553. data/share/views/public/plugins/semantic-ui/src/themes/default/modules/popup.variables +95 -0
  554. data/share/views/public/plugins/semantic-ui/src/themes/default/modules/progress.overrides +3 -0
  555. data/share/views/public/plugins/semantic-ui/src/themes/default/modules/progress.variables +107 -0
  556. data/share/views/public/plugins/semantic-ui/src/themes/default/modules/rating.overrides +69 -0
  557. data/share/views/public/plugins/semantic-ui/src/themes/default/modules/rating.variables +65 -0
  558. data/share/views/public/plugins/semantic-ui/src/themes/default/modules/search.overrides +3 -0
  559. data/share/views/public/plugins/semantic-ui/src/themes/default/modules/search.variables +140 -0
  560. data/share/views/public/plugins/semantic-ui/src/themes/default/modules/shape.overrides +3 -0
  561. data/share/views/public/plugins/semantic-ui/src/themes/default/modules/shape.variables +35 -0
  562. data/share/views/public/plugins/semantic-ui/src/themes/default/modules/sidebar.overrides +3 -0
  563. data/share/views/public/plugins/semantic-ui/src/themes/default/modules/sidebar.variables +39 -0
  564. data/share/views/public/plugins/semantic-ui/src/themes/default/modules/sticky.overrides +3 -0
  565. data/share/views/public/plugins/semantic-ui/src/themes/default/modules/sticky.variables +12 -0
  566. data/share/views/public/plugins/semantic-ui/src/themes/default/modules/tab.overrides +3 -0
  567. data/share/views/public/plugins/semantic-ui/src/themes/default/modules/tab.variables +13 -0
  568. data/share/views/public/plugins/semantic-ui/src/themes/default/modules/transition.overrides +445 -0
  569. data/share/views/public/plugins/semantic-ui/src/themes/default/modules/transition.variables +10 -0
  570. data/share/views/public/plugins/semantic-ui/src/themes/default/modules/video.overrides +3 -0
  571. data/share/views/public/plugins/semantic-ui/src/themes/default/modules/video.variables +16 -0
  572. data/share/views/public/plugins/semantic-ui/src/themes/default/views/ad.overrides +3 -0
  573. data/share/views/public/plugins/semantic-ui/src/themes/default/views/ad.variables +13 -0
  574. data/share/views/public/plugins/semantic-ui/src/themes/default/views/card.overrides +3 -0
  575. data/share/views/public/plugins/semantic-ui/src/themes/default/views/card.variables +185 -0
  576. data/share/views/public/plugins/semantic-ui/src/themes/default/views/comment.overrides +3 -0
  577. data/share/views/public/plugins/semantic-ui/src/themes/default/views/comment.variables +104 -0
  578. data/share/views/public/plugins/semantic-ui/src/themes/default/views/feed.overrides +3 -0
  579. data/share/views/public/plugins/semantic-ui/src/themes/default/views/feed.variables +149 -0
  580. data/share/views/public/plugins/semantic-ui/src/themes/default/views/item.overrides +3 -0
  581. data/share/views/public/plugins/semantic-ui/src/themes/default/views/item.variables +152 -0
  582. data/share/views/public/plugins/semantic-ui/src/themes/default/views/statistic.overrides +3 -0
  583. data/share/views/public/plugins/semantic-ui/src/themes/default/views/statistic.variables +97 -0
  584. data/share/views/public/plugins/semantic-ui/src/themes/duo/elements/loader.overrides +3 -0
  585. data/share/views/public/plugins/semantic-ui/src/themes/duo/elements/loader.variables +6 -0
  586. data/share/views/public/plugins/semantic-ui/src/themes/fixed-width/collections/grid.overrides +3 -0
  587. data/share/views/public/plugins/semantic-ui/src/themes/fixed-width/collections/grid.variables +25 -0
  588. data/share/views/public/plugins/semantic-ui/src/themes/fixed-width/modules/modal.overrides +3 -0
  589. data/share/views/public/plugins/semantic-ui/src/themes/fixed-width/modules/modal.variables +37 -0
  590. data/share/views/public/plugins/semantic-ui/src/themes/flat/collections/form.overrides +24 -0
  591. data/share/views/public/plugins/semantic-ui/src/themes/flat/collections/form.variables +74 -0
  592. data/share/views/public/plugins/semantic-ui/src/themes/flat/globals/site.overrides +3 -0
  593. data/share/views/public/plugins/semantic-ui/src/themes/flat/globals/site.variables +106 -0
  594. data/share/views/public/plugins/semantic-ui/src/themes/github/collections/form.overrides +16 -0
  595. data/share/views/public/plugins/semantic-ui/src/themes/github/collections/form.variables +40 -0
  596. data/share/views/public/plugins/semantic-ui/src/themes/github/collections/menu.overrides +7 -0
  597. data/share/views/public/plugins/semantic-ui/src/themes/github/collections/menu.variables +66 -0
  598. data/share/views/public/plugins/semantic-ui/src/themes/github/collections/message.overrides +11 -0
  599. data/share/views/public/plugins/semantic-ui/src/themes/github/collections/message.variables +29 -0
  600. data/share/views/public/plugins/semantic-ui/src/themes/github/elements/button.overrides +4 -0
  601. data/share/views/public/plugins/semantic-ui/src/themes/github/elements/button.variables +77 -0
  602. data/share/views/public/plugins/semantic-ui/src/themes/github/elements/segment.overrides +3 -0
  603. data/share/views/public/plugins/semantic-ui/src/themes/github/elements/segment.variables +41 -0
  604. data/share/views/public/plugins/semantic-ui/src/themes/github/elements/step.overrides +26 -0
  605. data/share/views/public/plugins/semantic-ui/src/themes/github/elements/step.variables +20 -0
  606. data/share/views/public/plugins/semantic-ui/src/themes/gmail/collections/message.overrides +0 -0
  607. data/share/views/public/plugins/semantic-ui/src/themes/gmail/collections/message.variables +15 -0
  608. data/share/views/public/plugins/semantic-ui/src/themes/material/elements/button.overrides +23 -0
  609. data/share/views/public/plugins/semantic-ui/src/themes/material/elements/button.variables +87 -0
  610. data/share/views/public/plugins/semantic-ui/src/themes/material/elements/header.overrides +15 -0
  611. data/share/views/public/plugins/semantic-ui/src/themes/material/elements/header.variables +21 -0
  612. data/share/views/public/plugins/semantic-ui/src/themes/material/globals/site.overrides +0 -0
  613. data/share/views/public/plugins/semantic-ui/src/themes/material/globals/site.variables +119 -0
  614. data/share/views/public/plugins/semantic-ui/src/themes/material/modules/modal.overrides +6 -0
  615. data/share/views/public/plugins/semantic-ui/src/themes/material/modules/modal.variables +15 -0
  616. data/share/views/public/plugins/semantic-ui/src/themes/pulsar/elements/loader.overrides +70 -0
  617. data/share/views/public/plugins/semantic-ui/src/themes/pulsar/elements/loader.variables +7 -0
  618. data/share/views/public/plugins/semantic-ui/src/themes/raised/elements/button.overrides +3 -0
  619. data/share/views/public/plugins/semantic-ui/src/themes/raised/elements/button.variables +27 -0
  620. data/share/views/public/plugins/semantic-ui/src/themes/resetcss/globals/reset.overrides +52 -0
  621. data/share/views/public/plugins/semantic-ui/src/themes/resetcss/globals/reset.variables +3 -0
  622. data/share/views/public/plugins/semantic-ui/src/themes/round/elements/button.overrides +0 -0
  623. data/share/views/public/plugins/semantic-ui/src/themes/round/elements/button.variables +138 -0
  624. data/share/views/public/plugins/semantic-ui/src/themes/striped/modules/progress.overrides +29 -0
  625. data/share/views/public/plugins/semantic-ui/src/themes/striped/modules/progress.variables +3 -0
  626. data/share/views/public/plugins/semantic-ui/src/themes/timeline/views/feed.overrides +35 -0
  627. data/share/views/public/plugins/semantic-ui/src/themes/timeline/views/feed.variables +40 -0
  628. data/share/views/public/plugins/semantic-ui/src/themes/twitter/elements/button.overrides +13 -0
  629. data/share/views/public/plugins/semantic-ui/src/themes/twitter/elements/button.variables +45 -0
  630. data/share/views/public/plugins/semantic-ui/tasks/admin/docs.json +19 -0
  631. data/share/views/public/plugins/semantic-ui/tasks/admin/oauth.example.js +5 -0
  632. data/share/views/public/plugins/semantic-ui/tasks/admin/questions.js +50 -0
  633. data/share/views/public/plugins/semantic-ui/tasks/admin/release.js +85 -0
  634. data/share/views/public/plugins/semantic-ui/tasks/admin/templates/README.md +23 -0
  635. data/share/views/public/plugins/semantic-ui/tasks/admin/templates/bower.json +29 -0
  636. data/share/views/public/plugins/semantic-ui/tasks/admin/templates/composer.json +20 -0
  637. data/share/views/public/plugins/semantic-ui/tasks/admin/templates/package.json +17 -0
  638. data/share/views/public/plugins/semantic-ui/tasks/banner.js +12 -0
  639. data/share/views/public/plugins/semantic-ui/tasks/comments.js +20 -0
  640. data/share/views/public/plugins/semantic-ui/tasks/defaults.js +69 -0
  641. data/share/views/public/plugins/semantic-ui/tasks/gulp-settings.js +51 -0
  642. data/share/views/public/plugins/semantic-ui/tasks/log.js +8 -0
  643. data/share/views/public/plugins/semantic-ui/tasks/questions.js +425 -0
  644. data/share/views/public/plugins/semantic-ui/test/coverage/PhantomJS 1.9.2 (Linux)/index.html +320 -0
  645. data/share/views/public/plugins/semantic-ui/test/coverage/PhantomJS 1.9.2 (Linux)/prettify.css +1 -0
  646. data/share/views/public/plugins/semantic-ui/test/coverage/PhantomJS 1.9.2 (Linux)/prettify.js +1 -0
  647. data/share/views/public/plugins/semantic-ui/test/coverage/coverage-PhantomJS 1.9.2 (Linux)-20131014_012621.json +1 -0
  648. data/share/views/public/plugins/semantic-ui/test/coverage/coverage-PhantomJS 1.9.2 (Linux)-20131014_012811.json +1 -0
  649. data/share/views/public/plugins/semantic-ui/test/fixtures/accordion.html +24 -0
  650. data/share/views/public/plugins/semantic-ui/test/fixtures/checkbox.html +46 -0
  651. data/share/views/public/plugins/semantic-ui/test/fixtures/dropdown.html +9 -0
  652. data/share/views/public/plugins/semantic-ui/test/fixtures/modal.html +25 -0
  653. data/share/views/public/plugins/semantic-ui/test/fixtures/popup.html +8 -0
  654. data/share/views/public/plugins/semantic-ui/test/fixtures/rating.html +7 -0
  655. data/share/views/public/plugins/semantic-ui/test/fixtures/shape.html +7 -0
  656. data/share/views/public/plugins/semantic-ui/test/fixtures/sidebar.html +25 -0
  657. data/share/views/public/plugins/semantic-ui/test/fixtures/tab.html +8 -0
  658. data/share/views/public/plugins/semantic-ui/test/fixtures/transition.html +1 -0
  659. data/share/views/public/plugins/semantic-ui/test/fixtures/video.html +5 -0
  660. data/share/views/public/plugins/semantic-ui/test/helpers/jasmine-clog.js +17 -0
  661. data/share/views/public/plugins/semantic-ui/test/helpers/jasmine-jquery.js +705 -0
  662. data/share/views/public/plugins/semantic-ui/test/helpers/jasmine-sinon.js +58 -0
  663. data/share/views/public/plugins/semantic-ui/test/helpers/jquery-events.js +28 -0
  664. data/share/views/public/plugins/semantic-ui/test/helpers/sinon.js +4819 -0
  665. data/share/views/public/plugins/semantic-ui/test/modules/accordion.spec.js +10 -0
  666. data/share/views/public/plugins/semantic-ui/test/modules/checkbox.spec.js +8 -0
  667. data/share/views/public/plugins/semantic-ui/test/modules/dropdown.spec.js +8 -0
  668. data/share/views/public/plugins/semantic-ui/test/modules/modal.spec.js +10 -0
  669. data/share/views/public/plugins/semantic-ui/test/modules/module.spec.js +218 -0
  670. data/share/views/public/plugins/semantic-ui/test/modules/popup.spec.js +8 -0
  671. data/share/views/public/plugins/semantic-ui/test/modules/search.spec.js +8 -0
  672. data/share/views/public/plugins/semantic-ui/test/modules/shape.spec.js +8 -0
  673. data/share/views/public/plugins/semantic-ui/test/modules/sidebar.spec.js +8 -0
  674. data/share/views/public/plugins/semantic-ui/test/modules/tab.spec.js +9 -0
  675. data/share/views/public/plugins/semantic-ui/test/modules/transition.spec.js +8 -0
  676. data/share/views/public/plugins/semantic-ui/test/modules/video.spec.js +8 -0
  677. data/share/views/public/plugins/springy/LICENSE +22 -0
  678. data/share/views/public/plugins/springy/README.mkdn +129 -0
  679. data/share/views/public/plugins/springy/bower.json +17 -0
  680. data/share/views/public/plugins/springy/demo-json.html +38 -0
  681. data/share/views/public/plugins/springy/demo-raphael.html +246 -0
  682. data/share/views/public/plugins/springy/demo-simple.html +33 -0
  683. data/share/views/public/plugins/springy/demo.html +46 -0
  684. data/share/views/public/plugins/springy/package.json +21 -0
  685. data/share/views/public/plugins/springy/springy.js +727 -0
  686. data/share/views/public/plugins/springy/springyui.js +394 -0
  687. metadata +657 -38
  688. data/share/views/compass/_app.sass +0 -17
  689. data/share/views/compass/_normalize.scss +0 -680
  690. data/share/views/compass/_rbbt.sass +0 -15
  691. data/share/views/compass/actions.sass +0 -72
  692. data/share/views/compass/colors.sass +0 -5
  693. data/share/views/compass/entity_card.sass +0 -48
  694. data/share/views/compass/favourites.sass +0 -20
  695. data/share/views/compass/figure.sass +0 -27
  696. data/share/views/compass/finder.sass +0 -30
  697. data/share/views/compass/fonts.sass +0 -54
  698. data/share/views/compass/foundation.sass +0 -79
  699. data/share/views/compass/functions.sass +0 -28
  700. data/share/views/compass/grid_system.sass +0 -40
  701. data/share/views/compass/help.sass +0 -21
  702. data/share/views/compass/monitor.sass +0 -8
  703. data/share/views/compass/rbbt/button.sass +0 -14
  704. data/share/views/compass/rbbt/form.sass +0 -98
  705. data/share/views/compass/rbbt/fragment.sass +0 -7
  706. data/share/views/compass/rbbt/menu.sass +0 -196
  707. data/share/views/compass/rbbt/table.sass +0 -174
  708. data/share/views/compass/skeleton.sass +0 -2
  709. data/share/views/compass/skeleton/_dependencies.sass +0 -151
  710. data/share/views/compass/skeleton/_functions.sass +0 -4
  711. data/share/views/compass/skeleton/_mixins.sass +0 -25
  712. data/share/views/compass/skeleton/_vars.sass +0 -72
  713. data/share/views/compass/skeleton/base.sass +0 -333
  714. data/share/views/compass/skeleton/layout.sass +0 -51
  715. data/share/views/compass/skeleton/skeleton.sass +0 -105
  716. data/share/views/compass/solarized.sass +0 -34
  717. data/share/views/compass/style.sass +0 -47
  718. data/share/views/compass/theme.sass +0 -77
  719. data/share/views/compass/top_menu.sass +0 -125
  720. data/share/views/compass/user.sass +0 -17
  721. data/share/views/compass/variables.sass +0 -7
  722. data/share/views/compass/workflow.sass +0 -64
@@ -0,0 +1,17 @@
1
+ {
2
+ "name": "Springy",
3
+ "main": "springy.js",
4
+ "version": "2.7.1",
5
+ "homepage": "https://github.com/dhotson/springy",
6
+ "authors": [
7
+ "Dennis Hotson <dennis@99designs.com>"
8
+ ],
9
+ "description": "A force directed graph layout algorithm",
10
+ "keywords": [
11
+ "graph",
12
+ "layout",
13
+ "visualization",
14
+ "physics"
15
+ ],
16
+ "license": "MIT"
17
+ }
@@ -0,0 +1,38 @@
1
+ <html>
2
+ <body>
3
+ <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
4
+ <script src="springy.js"></script>
5
+ <script src="springyui.js"></script>
6
+
7
+
8
+ <script>
9
+ var graphJSON = {
10
+ "nodes": [
11
+ "Amphitryon",
12
+ "Alcmene",
13
+ "Iphicles",
14
+ "Heracles"
15
+ ],
16
+ "edges": [
17
+ ["Amphitryon", "Alcmene"],
18
+ ["Alcmene", "Amphitryon"],
19
+ ["Amphitryon", "Iphicles"],
20
+ ["Amphitryon", "Heracles"]
21
+ ]
22
+ };
23
+
24
+ jQuery(function(){
25
+ var graph = new Springy.Graph();
26
+ graph.loadJSON(graphJSON);
27
+
28
+ var springy = jQuery('#springydemo').springy({
29
+ graph: graph
30
+ });
31
+ });
32
+ </script>
33
+
34
+ <canvas id="springydemo" width="640" height="480" />
35
+
36
+
37
+ </body>
38
+ </html>
@@ -0,0 +1,246 @@
1
+ <html>
2
+ <body>
3
+ <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
4
+ <script src="http://yandex.st/raphael/2.0/raphael.min.js"></script>
5
+ <script src="springy.js"></script>
6
+ <script>
7
+ /**
8
+ * Originally grabbed from the official RaphaelJS Documentation
9
+ * http://raphaeljs.com/graffle.html
10
+ * Adopted (arrows) and commented by Philipp Strathausen http://blog.ameisenbar.de
11
+ * Licenced under the MIT licence.
12
+ */
13
+
14
+ /**
15
+ * Usage:
16
+ * connect two shapes
17
+ * parameters:
18
+ * source shape [or connection for redrawing],
19
+ * target shape,
20
+ * style with { fg : linecolor, bg : background color, directed: boolean }
21
+ * returns:
22
+ * connection { draw = function() }
23
+ */
24
+ Raphael.fn.connection = function (obj1, obj2, style) {
25
+ var selfRef = this;
26
+ /* create and return new connection */
27
+ var edge = {/*
28
+ from : obj1,
29
+ to : obj2,
30
+ style : style,*/
31
+ draw : function() {
32
+ /* get bounding boxes of target and source */
33
+ var bb1 = obj1.getBBox();
34
+ var bb2 = obj2.getBBox();
35
+ var off1 = 0;
36
+ var off2 = 0;
37
+ /* coordinates for potential connection coordinates from/to the objects */
38
+ var p = [
39
+ {x: bb1.x + bb1.width / 2, y: bb1.y - off1}, /* NORTH 1 */
40
+ {x: bb1.x + bb1.width / 2, y: bb1.y + bb1.height + off1}, /* SOUTH 1 */
41
+ {x: bb1.x - off1, y: bb1.y + bb1.height / 2}, /* WEST 1 */
42
+ {x: bb1.x + bb1.width + off1, y: bb1.y + bb1.height / 2}, /* EAST 1 */
43
+ {x: bb2.x + bb2.width / 2, y: bb2.y - off2}, /* NORTH 2 */
44
+ {x: bb2.x + bb2.width / 2, y: bb2.y + bb2.height + off2}, /* SOUTH 2 */
45
+ {x: bb2.x - off2, y: bb2.y + bb2.height / 2}, /* WEST 2 */
46
+ {x: bb2.x + bb2.width + off2, y: bb2.y + bb2.height / 2} /* EAST 2 */
47
+ ];
48
+
49
+ /* distances between objects and according coordinates connection */
50
+ var d = {}, dis = [];
51
+
52
+ /*
53
+ * find out the best connection coordinates by trying all possible ways
54
+ */
55
+ /* loop the first object's connection coordinates */
56
+ for (var i = 0; i < 4; i++) {
57
+ /* loop the seond object's connection coordinates */
58
+ for (var j = 4; j < 8; j++) {
59
+ var dx = Math.abs(p[i].x - p[j].x),
60
+ dy = Math.abs(p[i].y - p[j].y);
61
+ if ((i == j - 4) || (((i != 3 && j != 6) || p[i].x < p[j].x) && ((i != 2 && j != 7) || p[i].x > p[j].x) && ((i != 0 && j != 5) || p[i].y > p[j].y) && ((i != 1 && j != 4) || p[i].y < p[j].y))) {
62
+ dis.push(dx + dy);
63
+ d[dis[dis.length - 1].toFixed(3)] = [i, j];
64
+ }
65
+ }
66
+ }
67
+ var res = dis.length == 0 ? [0, 4] : d[Math.min.apply(Math, dis).toFixed(3)];
68
+ /* bezier path */
69
+ var x1 = p[res[0]].x,
70
+ y1 = p[res[0]].y,
71
+ x4 = p[res[1]].x,
72
+ y4 = p[res[1]].y,
73
+ dx = Math.max(Math.abs(x1 - x4) / 2, 10),
74
+ dy = Math.max(Math.abs(y1 - y4) / 2, 10),
75
+ x2 = [x1, x1, x1 - dx, x1 + dx][res[0]].toFixed(3),
76
+ y2 = [y1 - dy, y1 + dy, y1, y1][res[0]].toFixed(3),
77
+ x3 = [0, 0, 0, 0, x4, x4, x4 - dx, x4 + dx][res[1]].toFixed(3),
78
+ y3 = [0, 0, 0, 0, y1 + dy, y1 - dy, y4, y4][res[1]].toFixed(3);
79
+ /* assemble path and arrow */
80
+ var path = ["M", x1.toFixed(3), y1.toFixed(3), "C", x2, y2, x3, y3, x4.toFixed(3), y4.toFixed(3)].join(",");
81
+ /* arrow */
82
+ if(style && style.directed) {
83
+ /* magnitude, length of the last path vector */
84
+ var mag = Math.sqrt((y4 - y3) * (y4 - y3) + (x4 - x3) * (x4 - x3));
85
+ /* vector normalisation to specified length */
86
+ var norm = function(x,l){return (-x*(l||5)/mag);};
87
+ /* calculate array coordinates (two lines orthogonal to the path vector) */
88
+ var arr = [
89
+ {x:(norm(x4-x3)+norm(y4-y3)+x4).toFixed(3), y:(norm(y4-y3)+norm(x4-x3)+y4).toFixed(3)},
90
+ {x:(norm(x4-x3)-norm(y4-y3)+x4).toFixed(3), y:(norm(y4-y3)-norm(x4-x3)+y4).toFixed(3)}
91
+ ];
92
+ path = path + ",M"+arr[0].x+","+arr[0].y+",L"+x4+","+y4+",L"+arr[1].x+","+arr[1].y;
93
+ }
94
+ /* function to be used for moving existent path(s), e.g. animate() or attr() */
95
+ var move = "attr";
96
+ /* applying path(s) */
97
+ edge.fg && edge.fg[move]({path:path})
98
+ || (edge.fg = selfRef.path(path).attr({stroke: style && style.stroke || "#000", fill: "none"}).toBack());
99
+ edge.bg && edge.bg[move]({path:path})
100
+ || style && style.fill && (edge.bg = style.fill.split && selfRef.path(path).attr({stroke: style.fill.split("|")[0], fill: "none", "stroke-width": style.fill.split("|")[1] || 3}).toBack());
101
+ /* setting label */
102
+ style && style.label
103
+ && (edge.label && edge.label.attr({x:(x1+x4)/2, y:(y1+y4)/2})
104
+ || (edge.label = selfRef.text((x1+x4)/2, (y1+y4)/2, style.label).attr({fill: "#000", "font-size": style["font-size"] || "12px"})));
105
+ style && style.label && style["label-style"] && edge.label && edge.label.attr(style["label-style"]);
106
+ style && style.callback && style.callback(edge);
107
+ }
108
+ }
109
+ edge.draw();
110
+ return edge;
111
+ };
112
+ </script>
113
+
114
+ <script>
115
+ var graph = new Springy.Graph();
116
+
117
+ var dennis = graph.newNode({label: 'Dennis'});
118
+ var michael = graph.newNode({label: 'Michael'});
119
+ var jessica = graph.newNode({label: 'Jessica'});
120
+ var timothy = graph.newNode({label: 'Timothy'});
121
+ var barbara = graph.newNode({label: 'Barbara'});
122
+ var franklin = graph.newNode({label: 'Franklin'});
123
+ var monty = graph.newNode({label: 'Monty'});
124
+ var james = graph.newNode({label: 'James'});
125
+ var bianca = graph.newNode({label: 'Bianca'});
126
+
127
+ graph.newEdge(dennis, michael, {color: '#00A0B0'});
128
+ graph.newEdge(michael, dennis, {color: '#6A4A3C'});
129
+ graph.newEdge(michael, jessica, {color: '#CC333F'});
130
+ graph.newEdge(jessica, barbara, {color: '#EB6841'});
131
+ graph.newEdge(michael, timothy, {color: '#EDC951'});
132
+ graph.newEdge(franklin, monty, {color: '#7DBE3C'});
133
+ graph.newEdge(dennis, monty, {color: '#000000'});
134
+ graph.newEdge(monty, james, {color: '#00A0B0'});
135
+ graph.newEdge(barbara, timothy, {color: '#6A4A3C'});
136
+ graph.newEdge(dennis, bianca, {color: '#CC333F'});
137
+ graph.newEdge(bianca, monty, {color: '#EB6841'});
138
+
139
+ Raphael.fn.label = function(str) {
140
+
141
+ var color = Raphael.getColor();
142
+
143
+ this.setStart();
144
+
145
+ var shape = this.rect(0, 0, 60, 30, 10);
146
+ shape.attr({fill: color, stroke: color, "fill-opacity": 0, "stroke-width": 2, cursor: "move"}).setOffset();
147
+
148
+ var text = this.text(30, 15, str).attr({'font-size': 15}).setOffset();
149
+
150
+ return this.setFinish();
151
+
152
+ }
153
+
154
+ Raphael.el.setOffset = function() {
155
+ this.offsetx = this.attr('x');
156
+ this.offsety = this.attr('y');
157
+ }
158
+
159
+ function moveSet(set, x, y) {
160
+ set.forEach(function(item) {
161
+ item.attr({
162
+ x: x + item.offsetx,
163
+ y: y + item.offsety
164
+ })
165
+ });
166
+ }
167
+
168
+ function doit() {
169
+ var layout = new Springy.Layout.ForceDirected(graph, 640, 480.0, 0.5);
170
+
171
+ var r = Raphael("holder", 640, 480);
172
+
173
+ // calculate bounding box of graph layout.. with ease-in
174
+ var currentBB = layout.getBoundingBox();
175
+ var targetBB = {bottomleft: new Springy.Vector(-2, -2), topright: new Springy.Vector(2, 2)};
176
+
177
+ // auto adjusting bounding box
178
+ Springy.requestAnimationFrame(function adjust() {
179
+ targetBB = layout.getBoundingBox();
180
+ // current gets 20% closer to target every iteration
181
+ currentBB = {
182
+ bottomleft: currentBB.bottomleft.add( targetBB.bottomleft.subtract(currentBB.bottomleft)
183
+ .divide(10)),
184
+ topright: currentBB.topright.add( targetBB.topright.subtract(currentBB.topright)
185
+ .divide(10))
186
+ };
187
+
188
+ Springy.requestAnimationFrame(adjust);
189
+ });
190
+
191
+ // convert to/from screen coordinates
192
+ toScreen = function(p) {
193
+ var size = currentBB.topright.subtract(currentBB.bottomleft);
194
+ var sx = p.subtract(currentBB.bottomleft).divide(size.x).x * r.width;
195
+ var sy = p.subtract(currentBB.bottomleft).divide(size.y).y * r.height;
196
+ return new Springy.Vector(sx, sy);
197
+ };
198
+
199
+
200
+ var renderer = new Springy.Renderer(layout,
201
+ function clear() {
202
+ // code to clear screen
203
+ },
204
+ function drawEdge(edge, p1, p2) {
205
+ var connection;
206
+
207
+ if (!edge.connection) {
208
+
209
+ if (!edge.source.shape || !edge.target.shape)
210
+ return;
211
+
212
+ connection = r.connection(edge.source.shape, edge.target.shape, {stroke: edge.data['color']});
213
+ edge.connection = connection;
214
+
215
+ } else {
216
+ edge.connection.draw();
217
+ }
218
+
219
+ },
220
+ function drawNode(node, p) {
221
+
222
+ var shape;
223
+
224
+ if (!node.shape) {
225
+ node.shape = r.label(node.data['label']);
226
+ }
227
+ shape = node.shape;
228
+
229
+ s = toScreen(p);
230
+ moveSet(shape, Math.floor(s.x), Math.floor(s.y));
231
+
232
+ });
233
+
234
+ renderer.start();
235
+
236
+ }
237
+
238
+ jQuery(function(){
239
+ doit();
240
+ });
241
+ </script>
242
+
243
+ <div id="holder" width="640" height="480"></div>
244
+
245
+ </body>
246
+ </html>
@@ -0,0 +1,33 @@
1
+ <html>
2
+ <body>
3
+ <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
4
+ <script src="springy.js"></script>
5
+ <script src="springyui.js"></script>
6
+ <script>
7
+ var graph = new Springy.Graph();
8
+ graph.addNodes('Dennis', 'Michael', 'Jessica', 'Timothy', 'Barbara')
9
+ graph.addNodes('Amphitryon', 'Alcmene', 'Iphicles', 'Heracles');
10
+
11
+ graph.addEdges(
12
+ ['Dennis', 'Michael', {color: '#00A0B0', label: 'Foo bar'}],
13
+ ['Michael', 'Dennis', {color: '#6A4A3C'}],
14
+ ['Michael', 'Jessica', {color: '#CC333F'}],
15
+ ['Jessica', 'Barbara', {color: '#EB6841'}],
16
+ ['Michael', 'Timothy', {color: '#EDC951'}],
17
+ ['Amphitryon', 'Alcmene', {color: '#7DBE3C'}],
18
+ ['Alcmene', 'Amphitryon', {color: '#BE7D3C'}],
19
+ ['Amphitryon', 'Iphicles'],
20
+ ['Amphitryon', 'Heracles'],
21
+ ['Barbara', 'Timothy', {color: '#6A4A3C'}]
22
+ );
23
+
24
+ jQuery(function(){
25
+ var springy = jQuery('#springydemo').springy({
26
+ graph: graph
27
+ });
28
+ });
29
+ </script>
30
+
31
+ <canvas id="springydemo" width="640" height="480" />
32
+ </body>
33
+ </html>
@@ -0,0 +1,46 @@
1
+ <html>
2
+ <body>
3
+ <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
4
+ <script src="springy.js"></script>
5
+ <script src="springyui.js"></script>
6
+ <script>
7
+ var graph = new Springy.Graph();
8
+
9
+ var dennis = graph.newNode({
10
+ label: 'Dennis',
11
+ ondoubleclick: function() { console.log("Hello!"); }
12
+ });
13
+ var michael = graph.newNode({label: 'Michael'});
14
+ var jessica = graph.newNode({label: 'Jessica'});
15
+ var timothy = graph.newNode({label: 'Timothy'});
16
+ var barbara = graph.newNode({label: 'Barbara'});
17
+ var franklin = graph.newNode({label: 'Franklin'});
18
+ var monty = graph.newNode({label: 'Monty'});
19
+ var james = graph.newNode({label: 'James'});
20
+ var bianca = graph.newNode({label: 'Bianca'});
21
+
22
+ graph.newEdge(dennis, michael, {color: '#00A0B0'});
23
+ graph.newEdge(michael, dennis, {color: '#6A4A3C'});
24
+ graph.newEdge(michael, jessica, {color: '#CC333F'});
25
+ graph.newEdge(jessica, barbara, {color: '#EB6841'});
26
+ graph.newEdge(michael, timothy, {color: '#EDC951'});
27
+ graph.newEdge(franklin, monty, {color: '#7DBE3C'});
28
+ graph.newEdge(dennis, monty, {color: '#000000'});
29
+ graph.newEdge(monty, james, {color: '#00A0B0'});
30
+ graph.newEdge(barbara, timothy, {color: '#6A4A3C'});
31
+ graph.newEdge(dennis, bianca, {color: '#CC333F'});
32
+ graph.newEdge(bianca, monty, {color: '#EB6841'});
33
+
34
+ jQuery(function(){
35
+ var springy = window.springy = jQuery('#springydemo').springy({
36
+ graph: graph,
37
+ nodeSelected: function(node){
38
+ console.log('Node selected: ' + JSON.stringify(node.data));
39
+ }
40
+ });
41
+ });
42
+ </script>
43
+
44
+ <canvas id="springydemo" width="640" height="480" />
45
+ </body>
46
+ </html>
@@ -0,0 +1,21 @@
1
+ {
2
+ "name": "springy",
3
+ "version": "2.7.1",
4
+ "description": "A force directed graph layout algorithm in JavaScript.",
5
+ "main": "springy.js",
6
+ "scripts": {
7
+ "test": "echo \"Error: no test specified\" && exit 1"
8
+ },
9
+ "repository": {
10
+ "type": "git",
11
+ "url": "git://github.com/dhotson/springy.git"
12
+ },
13
+ "keywords": [
14
+ "graph",
15
+ "layout",
16
+ "visualization"
17
+ ],
18
+ "author": "Dennis Hotson <dennis.hotson@gmail.com>",
19
+ "license": "MIT",
20
+ "readmeFilename": "README.mkdn"
21
+ }
@@ -0,0 +1,727 @@
1
+ /**
2
+ * Springy v2.7.1
3
+ *
4
+ * Copyright (c) 2010-2013 Dennis Hotson
5
+ *
6
+ * Permission is hereby granted, free of charge, to any person
7
+ * obtaining a copy of this software and associated documentation
8
+ * files (the "Software"), to deal in the Software without
9
+ * restriction, including without limitation the rights to use,
10
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
11
+ * copies of the Software, and to permit persons to whom the
12
+ * Software is furnished to do so, subject to the following
13
+ * conditions:
14
+ *
15
+ * The above copyright notice and this permission notice shall be
16
+ * included in all copies or substantial portions of the Software.
17
+ *
18
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
19
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
20
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
21
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
22
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
23
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
24
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
25
+ * OTHER DEALINGS IN THE SOFTWARE.
26
+ */
27
+ (function (root, factory) {
28
+ if (typeof define === 'function' && define.amd) {
29
+ // AMD. Register as an anonymous module.
30
+ define(function () {
31
+ return (root.returnExportsGlobal = factory());
32
+ });
33
+ } else if (typeof exports === 'object') {
34
+ // Node. Does not work with strict CommonJS, but
35
+ // only CommonJS-like enviroments that support module.exports,
36
+ // like Node.
37
+ module.exports = factory();
38
+ } else {
39
+ // Browser globals
40
+ root.Springy = factory();
41
+ }
42
+ }(this, function() {
43
+
44
+ var Springy = {};
45
+
46
+ var Graph = Springy.Graph = function() {
47
+ this.nodeSet = {};
48
+ this.nodes = [];
49
+ this.edges = [];
50
+ this.adjacency = {};
51
+
52
+ this.nextNodeId = 0;
53
+ this.nextEdgeId = 0;
54
+ this.eventListeners = [];
55
+ };
56
+
57
+ var Node = Springy.Node = function(id, data) {
58
+ this.id = id;
59
+ this.data = (data !== undefined) ? data : {};
60
+
61
+ // Data fields used by layout algorithm in this file:
62
+ // this.data.mass
63
+ // Data used by default renderer in springyui.js
64
+ // this.data.label
65
+ };
66
+
67
+ var Edge = Springy.Edge = function(id, source, target, data) {
68
+ this.id = id;
69
+ this.source = source;
70
+ this.target = target;
71
+ this.data = (data !== undefined) ? data : {};
72
+
73
+ // Edge data field used by layout alorithm
74
+ // this.data.length
75
+ // this.data.type
76
+ };
77
+
78
+ Graph.prototype.addNode = function(node) {
79
+ if (!(node.id in this.nodeSet)) {
80
+ this.nodes.push(node);
81
+ }
82
+
83
+ this.nodeSet[node.id] = node;
84
+
85
+ this.notify();
86
+ return node;
87
+ };
88
+
89
+ Graph.prototype.addNodes = function() {
90
+ // accepts variable number of arguments, where each argument
91
+ // is a string that becomes both node identifier and label
92
+ for (var i = 0; i < arguments.length; i++) {
93
+ var name = arguments[i];
94
+ var node = new Node(name, {label:name});
95
+ this.addNode(node);
96
+ }
97
+ };
98
+
99
+ Graph.prototype.addEdge = function(edge) {
100
+ var exists = false;
101
+ this.edges.forEach(function(e) {
102
+ if (edge.id === e.id) { exists = true; }
103
+ });
104
+
105
+ if (!exists) {
106
+ this.edges.push(edge);
107
+ }
108
+
109
+ if (!(edge.source.id in this.adjacency)) {
110
+ this.adjacency[edge.source.id] = {};
111
+ }
112
+ if (!(edge.target.id in this.adjacency[edge.source.id])) {
113
+ this.adjacency[edge.source.id][edge.target.id] = [];
114
+ }
115
+
116
+ exists = false;
117
+ this.adjacency[edge.source.id][edge.target.id].forEach(function(e) {
118
+ if (edge.id === e.id) { exists = true; }
119
+ });
120
+
121
+ if (!exists) {
122
+ this.adjacency[edge.source.id][edge.target.id].push(edge);
123
+ }
124
+
125
+ this.notify();
126
+ return edge;
127
+ };
128
+
129
+ Graph.prototype.addEdges = function() {
130
+ // accepts variable number of arguments, where each argument
131
+ // is a triple [nodeid1, nodeid2, attributes]
132
+ for (var i = 0; i < arguments.length; i++) {
133
+ var e = arguments[i];
134
+ var node1 = this.nodeSet[e[0]];
135
+ if (node1 == undefined) {
136
+ throw new TypeError("invalid node name: " + e[0]);
137
+ }
138
+ var node2 = this.nodeSet[e[1]];
139
+ if (node2 == undefined) {
140
+ throw new TypeError("invalid node name: " + e[1]);
141
+ }
142
+ var attr = e[2];
143
+
144
+ this.newEdge(node1, node2, attr);
145
+ }
146
+ };
147
+
148
+ Graph.prototype.newNode = function(data) {
149
+ var node = new Node(this.nextNodeId++, data);
150
+ this.addNode(node);
151
+ return node;
152
+ };
153
+
154
+ Graph.prototype.newEdge = function(source, target, data) {
155
+ var edge = new Edge(this.nextEdgeId++, source, target, data);
156
+ this.addEdge(edge);
157
+ return edge;
158
+ };
159
+
160
+
161
+ // add nodes and edges from JSON object
162
+ Graph.prototype.loadJSON = function(json) {
163
+ /**
164
+ Springy's simple JSON format for graphs.
165
+
166
+ historically, Springy uses separate lists
167
+ of nodes and edges:
168
+
169
+ {
170
+ "nodes": [
171
+ "center",
172
+ "left",
173
+ "right",
174
+ "up",
175
+ "satellite"
176
+ ],
177
+ "edges": [
178
+ ["center", "left"],
179
+ ["center", "right"],
180
+ ["center", "up"]
181
+ ]
182
+ }
183
+
184
+ **/
185
+ // parse if a string is passed (EC5+ browsers)
186
+ if (typeof json == 'string' || json instanceof String) {
187
+ json = JSON.parse( json );
188
+ }
189
+
190
+ if ('nodes' in json || 'edges' in json) {
191
+ this.addNodes.apply(this, json['nodes']);
192
+ this.addEdges.apply(this, json['edges']);
193
+ }
194
+ }
195
+
196
+
197
+ // find the edges from node1 to node2
198
+ Graph.prototype.getEdges = function(node1, node2) {
199
+ if (node1.id in this.adjacency
200
+ && node2.id in this.adjacency[node1.id]) {
201
+ return this.adjacency[node1.id][node2.id];
202
+ }
203
+
204
+ return [];
205
+ };
206
+
207
+ // remove a node and it's associated edges from the graph
208
+ Graph.prototype.removeNode = function(node) {
209
+ if (node.id in this.nodeSet) {
210
+ delete this.nodeSet[node.id];
211
+ }
212
+
213
+ for (var i = this.nodes.length - 1; i >= 0; i--) {
214
+ if (this.nodes[i].id === node.id) {
215
+ this.nodes.splice(i, 1);
216
+ }
217
+ }
218
+
219
+ this.detachNode(node);
220
+ };
221
+
222
+ // removes edges associated with a given node
223
+ Graph.prototype.detachNode = function(node) {
224
+ var tmpEdges = this.edges.slice();
225
+ tmpEdges.forEach(function(e) {
226
+ if (e.source.id === node.id || e.target.id === node.id) {
227
+ this.removeEdge(e);
228
+ }
229
+ }, this);
230
+
231
+ this.notify();
232
+ };
233
+
234
+ // remove a node and it's associated edges from the graph
235
+ Graph.prototype.removeEdge = function(edge) {
236
+ for (var i = this.edges.length - 1; i >= 0; i--) {
237
+ if (this.edges[i].id === edge.id) {
238
+ this.edges.splice(i, 1);
239
+ }
240
+ }
241
+
242
+ for (var x in this.adjacency) {
243
+ for (var y in this.adjacency[x]) {
244
+ var edges = this.adjacency[x][y];
245
+
246
+ for (var j=edges.length - 1; j>=0; j--) {
247
+ if (this.adjacency[x][y][j].id === edge.id) {
248
+ this.adjacency[x][y].splice(j, 1);
249
+ }
250
+ }
251
+
252
+ // Clean up empty edge arrays
253
+ if (this.adjacency[x][y].length == 0) {
254
+ delete this.adjacency[x][y];
255
+ }
256
+ }
257
+
258
+ // Clean up empty objects
259
+ if (isEmpty(this.adjacency[x])) {
260
+ delete this.adjacency[x];
261
+ }
262
+ }
263
+
264
+ this.notify();
265
+ };
266
+
267
+ /* Merge a list of nodes and edges into the current graph. eg.
268
+ var o = {
269
+ nodes: [
270
+ {id: 123, data: {type: 'user', userid: 123, displayname: 'aaa'}},
271
+ {id: 234, data: {type: 'user', userid: 234, displayname: 'bbb'}}
272
+ ],
273
+ edges: [
274
+ {from: 0, to: 1, type: 'submitted_design', directed: true, data: {weight: }}
275
+ ]
276
+ }
277
+ */
278
+ Graph.prototype.merge = function(data) {
279
+ var nodes = [];
280
+ data.nodes.forEach(function(n) {
281
+ nodes.push(this.addNode(new Node(n.id, n.data)));
282
+ }, this);
283
+
284
+ data.edges.forEach(function(e) {
285
+ var from = nodes[e.from];
286
+ var to = nodes[e.to];
287
+
288
+ var id = (e.directed)
289
+ ? (id = e.type + "-" + from.id + "-" + to.id)
290
+ : (from.id < to.id) // normalise id for non-directed edges
291
+ ? e.type + "-" + from.id + "-" + to.id
292
+ : e.type + "-" + to.id + "-" + from.id;
293
+
294
+ var edge = this.addEdge(new Edge(id, from, to, e.data));
295
+ edge.data.type = e.type;
296
+ }, this);
297
+ };
298
+
299
+ Graph.prototype.filterNodes = function(fn) {
300
+ var tmpNodes = this.nodes.slice();
301
+ tmpNodes.forEach(function(n) {
302
+ if (!fn(n)) {
303
+ this.removeNode(n);
304
+ }
305
+ }, this);
306
+ };
307
+
308
+ Graph.prototype.filterEdges = function(fn) {
309
+ var tmpEdges = this.edges.slice();
310
+ tmpEdges.forEach(function(e) {
311
+ if (!fn(e)) {
312
+ this.removeEdge(e);
313
+ }
314
+ }, this);
315
+ };
316
+
317
+
318
+ Graph.prototype.addGraphListener = function(obj) {
319
+ this.eventListeners.push(obj);
320
+ };
321
+
322
+ Graph.prototype.notify = function() {
323
+ this.eventListeners.forEach(function(obj){
324
+ obj.graphChanged();
325
+ });
326
+ };
327
+
328
+ // -----------
329
+ var Layout = Springy.Layout = {};
330
+ Layout.ForceDirected = function(graph, stiffness, repulsion, damping, minEnergyThreshold) {
331
+ this.graph = graph;
332
+ this.stiffness = stiffness; // spring stiffness constant
333
+ this.repulsion = repulsion; // repulsion constant
334
+ this.damping = damping; // velocity damping factor
335
+ this.minEnergyThreshold = minEnergyThreshold || 0.01; //threshold used to determine render stop
336
+
337
+ this.nodePoints = {}; // keep track of points associated with nodes
338
+ this.edgeSprings = {}; // keep track of springs associated with edges
339
+ };
340
+
341
+ Layout.ForceDirected.prototype.point = function(node) {
342
+ if (!(node.id in this.nodePoints)) {
343
+ var mass = (node.data.mass !== undefined) ? node.data.mass : 1.0;
344
+ this.nodePoints[node.id] = new Layout.ForceDirected.Point(Vector.random(), mass);
345
+ }
346
+
347
+ return this.nodePoints[node.id];
348
+ };
349
+
350
+ Layout.ForceDirected.prototype.spring = function(edge) {
351
+ if (!(edge.id in this.edgeSprings)) {
352
+ var length = (edge.data.length !== undefined) ? edge.data.length : 1.0;
353
+
354
+ var existingSpring = false;
355
+
356
+ var from = this.graph.getEdges(edge.source, edge.target);
357
+ from.forEach(function(e) {
358
+ if (existingSpring === false && e.id in this.edgeSprings) {
359
+ existingSpring = this.edgeSprings[e.id];
360
+ }
361
+ }, this);
362
+
363
+ if (existingSpring !== false) {
364
+ return new Layout.ForceDirected.Spring(existingSpring.point1, existingSpring.point2, 0.0, 0.0);
365
+ }
366
+
367
+ var to = this.graph.getEdges(edge.target, edge.source);
368
+ from.forEach(function(e){
369
+ if (existingSpring === false && e.id in this.edgeSprings) {
370
+ existingSpring = this.edgeSprings[e.id];
371
+ }
372
+ }, this);
373
+
374
+ if (existingSpring !== false) {
375
+ return new Layout.ForceDirected.Spring(existingSpring.point2, existingSpring.point1, 0.0, 0.0);
376
+ }
377
+
378
+ this.edgeSprings[edge.id] = new Layout.ForceDirected.Spring(
379
+ this.point(edge.source), this.point(edge.target), length, this.stiffness
380
+ );
381
+ }
382
+
383
+ return this.edgeSprings[edge.id];
384
+ };
385
+
386
+ // callback should accept two arguments: Node, Point
387
+ Layout.ForceDirected.prototype.eachNode = function(callback) {
388
+ var t = this;
389
+ this.graph.nodes.forEach(function(n){
390
+ callback.call(t, n, t.point(n));
391
+ });
392
+ };
393
+
394
+ // callback should accept two arguments: Edge, Spring
395
+ Layout.ForceDirected.prototype.eachEdge = function(callback) {
396
+ var t = this;
397
+ this.graph.edges.forEach(function(e){
398
+ callback.call(t, e, t.spring(e));
399
+ });
400
+ };
401
+
402
+ // callback should accept one argument: Spring
403
+ Layout.ForceDirected.prototype.eachSpring = function(callback) {
404
+ var t = this;
405
+ this.graph.edges.forEach(function(e){
406
+ callback.call(t, t.spring(e));
407
+ });
408
+ };
409
+
410
+
411
+ // Physics stuff
412
+ Layout.ForceDirected.prototype.applyCoulombsLaw = function() {
413
+ this.eachNode(function(n1, point1) {
414
+ this.eachNode(function(n2, point2) {
415
+ if (point1 !== point2)
416
+ {
417
+ var d = point1.p.subtract(point2.p);
418
+ var distance = d.magnitude() + 0.1; // avoid massive forces at small distances (and divide by zero)
419
+ var direction = d.normalise();
420
+
421
+ // apply force to each end point
422
+ point1.applyForce(direction.multiply(this.repulsion).divide(distance * distance * 0.5));
423
+ point2.applyForce(direction.multiply(this.repulsion).divide(distance * distance * -0.5));
424
+ }
425
+ });
426
+ });
427
+ };
428
+
429
+ Layout.ForceDirected.prototype.applyHookesLaw = function() {
430
+ this.eachSpring(function(spring){
431
+ var d = spring.point2.p.subtract(spring.point1.p); // the direction of the spring
432
+ var displacement = spring.length - d.magnitude();
433
+ var direction = d.normalise();
434
+
435
+ // apply force to each end point
436
+ spring.point1.applyForce(direction.multiply(spring.k * displacement * -0.5));
437
+ spring.point2.applyForce(direction.multiply(spring.k * displacement * 0.5));
438
+ });
439
+ };
440
+
441
+ Layout.ForceDirected.prototype.attractToCentre = function() {
442
+ this.eachNode(function(node, point) {
443
+ var direction = point.p.multiply(-1.0);
444
+ point.applyForce(direction.multiply(this.repulsion / 50.0));
445
+ });
446
+ };
447
+
448
+
449
+ Layout.ForceDirected.prototype.updateVelocity = function(timestep) {
450
+ this.eachNode(function(node, point) {
451
+ // Is this, along with updatePosition below, the only places that your
452
+ // integration code exist?
453
+ point.v = point.v.add(point.a.multiply(timestep)).multiply(this.damping);
454
+ point.a = new Vector(0,0);
455
+ });
456
+ };
457
+
458
+ Layout.ForceDirected.prototype.updatePosition = function(timestep) {
459
+ this.eachNode(function(node, point) {
460
+ // Same question as above; along with updateVelocity, is this all of
461
+ // your integration code?
462
+ point.p = point.p.add(point.v.multiply(timestep));
463
+ });
464
+ };
465
+
466
+ // Calculate the total kinetic energy of the system
467
+ Layout.ForceDirected.prototype.totalEnergy = function(timestep) {
468
+ var energy = 0.0;
469
+ this.eachNode(function(node, point) {
470
+ var speed = point.v.magnitude();
471
+ energy += 0.5 * point.m * speed * speed;
472
+ });
473
+
474
+ return energy;
475
+ };
476
+
477
+ var __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }; // stolen from coffeescript, thanks jashkenas! ;-)
478
+
479
+ Springy.requestAnimationFrame = __bind(this.requestAnimationFrame ||
480
+ this.webkitRequestAnimationFrame ||
481
+ this.mozRequestAnimationFrame ||
482
+ this.oRequestAnimationFrame ||
483
+ this.msRequestAnimationFrame ||
484
+ (function(callback, element) {
485
+ this.setTimeout(callback, 10);
486
+ }), this);
487
+
488
+
489
+ /**
490
+ * Start simulation if it's not running already.
491
+ * In case it's running then the call is ignored, and none of the callbacks passed is ever executed.
492
+ */
493
+ Layout.ForceDirected.prototype.start = function(render, onRenderStop, onRenderStart) {
494
+ var t = this;
495
+
496
+ if (this._started) return;
497
+ this._started = true;
498
+ this._stop = false;
499
+
500
+ if (onRenderStart !== undefined) { onRenderStart(); }
501
+
502
+ Springy.requestAnimationFrame(function step() {
503
+ t.tick(0.03);
504
+
505
+ if (render !== undefined) {
506
+ render();
507
+ }
508
+
509
+ // stop simulation when energy of the system goes below a threshold
510
+ if (t._stop || t.totalEnergy() < t.minEnergyThreshold) {
511
+ t._started = false;
512
+ if (onRenderStop !== undefined) { onRenderStop(); }
513
+ } else {
514
+ Springy.requestAnimationFrame(step);
515
+ }
516
+ });
517
+ };
518
+
519
+ Layout.ForceDirected.prototype.stop = function() {
520
+ this._stop = true;
521
+ }
522
+
523
+ Layout.ForceDirected.prototype.tick = function(timestep) {
524
+ this.applyCoulombsLaw();
525
+ this.applyHookesLaw();
526
+ this.attractToCentre();
527
+ this.updateVelocity(timestep);
528
+ this.updatePosition(timestep);
529
+ };
530
+
531
+ // Find the nearest point to a particular position
532
+ Layout.ForceDirected.prototype.nearest = function(pos) {
533
+ var min = {node: null, point: null, distance: null};
534
+ var t = this;
535
+ this.graph.nodes.forEach(function(n){
536
+ var point = t.point(n);
537
+ var distance = point.p.subtract(pos).magnitude();
538
+
539
+ if (min.distance === null || distance < min.distance) {
540
+ min = {node: n, point: point, distance: distance};
541
+ }
542
+ });
543
+
544
+ return min;
545
+ };
546
+
547
+ // returns [bottomleft, topright]
548
+ Layout.ForceDirected.prototype.getBoundingBox = function() {
549
+ var bottomleft = new Vector(-2,-2);
550
+ var topright = new Vector(2,2);
551
+
552
+ this.eachNode(function(n, point) {
553
+ if (point.p.x < bottomleft.x) {
554
+ bottomleft.x = point.p.x;
555
+ }
556
+ if (point.p.y < bottomleft.y) {
557
+ bottomleft.y = point.p.y;
558
+ }
559
+ if (point.p.x > topright.x) {
560
+ topright.x = point.p.x;
561
+ }
562
+ if (point.p.y > topright.y) {
563
+ topright.y = point.p.y;
564
+ }
565
+ });
566
+
567
+ var padding = topright.subtract(bottomleft).multiply(0.07); // ~5% padding
568
+
569
+ return {bottomleft: bottomleft.subtract(padding), topright: topright.add(padding)};
570
+ };
571
+
572
+
573
+ // Vector
574
+ var Vector = Springy.Vector = function(x, y) {
575
+ this.x = x;
576
+ this.y = y;
577
+ };
578
+
579
+ Vector.random = function() {
580
+ return new Vector(10.0 * (Math.random() - 0.5), 10.0 * (Math.random() - 0.5));
581
+ };
582
+
583
+ Vector.prototype.add = function(v2) {
584
+ return new Vector(this.x + v2.x, this.y + v2.y);
585
+ };
586
+
587
+ Vector.prototype.subtract = function(v2) {
588
+ return new Vector(this.x - v2.x, this.y - v2.y);
589
+ };
590
+
591
+ Vector.prototype.multiply = function(n) {
592
+ return new Vector(this.x * n, this.y * n);
593
+ };
594
+
595
+ Vector.prototype.divide = function(n) {
596
+ return new Vector((this.x / n) || 0, (this.y / n) || 0); // Avoid divide by zero errors..
597
+ };
598
+
599
+ Vector.prototype.magnitude = function() {
600
+ return Math.sqrt(this.x*this.x + this.y*this.y);
601
+ };
602
+
603
+ Vector.prototype.normal = function() {
604
+ return new Vector(-this.y, this.x);
605
+ };
606
+
607
+ Vector.prototype.normalise = function() {
608
+ return this.divide(this.magnitude());
609
+ };
610
+
611
+ // Point
612
+ Layout.ForceDirected.Point = function(position, mass) {
613
+ this.p = position; // position
614
+ this.m = mass; // mass
615
+ this.v = new Vector(0, 0); // velocity
616
+ this.a = new Vector(0, 0); // acceleration
617
+ };
618
+
619
+ Layout.ForceDirected.Point.prototype.applyForce = function(force) {
620
+ this.a = this.a.add(force.divide(this.m));
621
+ };
622
+
623
+ // Spring
624
+ Layout.ForceDirected.Spring = function(point1, point2, length, k) {
625
+ this.point1 = point1;
626
+ this.point2 = point2;
627
+ this.length = length; // spring length at rest
628
+ this.k = k; // spring constant (See Hooke's law) .. how stiff the spring is
629
+ };
630
+
631
+ // Layout.ForceDirected.Spring.prototype.distanceToPoint = function(point)
632
+ // {
633
+ // // hardcore vector arithmetic.. ohh yeah!
634
+ // // .. see http://stackoverflow.com/questions/849211/shortest-distance-between-a-point-and-a-line-segment/865080#865080
635
+ // var n = this.point2.p.subtract(this.point1.p).normalise().normal();
636
+ // var ac = point.p.subtract(this.point1.p);
637
+ // return Math.abs(ac.x * n.x + ac.y * n.y);
638
+ // };
639
+
640
+ /**
641
+ * Renderer handles the layout rendering loop
642
+ * @param onRenderStop optional callback function that gets executed whenever rendering stops.
643
+ * @param onRenderStart optional callback function that gets executed whenever rendering starts.
644
+ */
645
+ var Renderer = Springy.Renderer = function(layout, clear, drawEdge, drawNode, onRenderStop, onRenderStart) {
646
+ this.layout = layout;
647
+ this.clear = clear;
648
+ this.drawEdge = drawEdge;
649
+ this.drawNode = drawNode;
650
+ this.onRenderStop = onRenderStop;
651
+ this.onRenderStart = onRenderStart;
652
+
653
+ this.layout.graph.addGraphListener(this);
654
+ }
655
+
656
+ Renderer.prototype.graphChanged = function(e) {
657
+ this.start();
658
+ };
659
+
660
+ /**
661
+ * Starts the simulation of the layout in use.
662
+ *
663
+ * Note that in case the algorithm is still or already running then the layout that's in use
664
+ * might silently ignore the call, and your optional <code>done</code> callback is never executed.
665
+ * At least the built-in ForceDirected layout behaves in this way.
666
+ *
667
+ * @param done An optional callback function that gets executed when the springy algorithm stops,
668
+ * either because it ended or because stop() was called.
669
+ */
670
+ Renderer.prototype.start = function(done) {
671
+ var t = this;
672
+ this.layout.start(function render() {
673
+ t.clear();
674
+
675
+ t.layout.eachEdge(function(edge, spring) {
676
+ t.drawEdge(edge, spring.point1.p, spring.point2.p);
677
+ });
678
+
679
+ t.layout.eachNode(function(node, point) {
680
+ t.drawNode(node, point.p);
681
+ });
682
+ }, this.onRenderStop, this.onRenderStart);
683
+ };
684
+
685
+ Renderer.prototype.stop = function() {
686
+ this.layout.stop();
687
+ };
688
+
689
+ // Array.forEach implementation for IE support..
690
+ //https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/forEach
691
+ if ( !Array.prototype.forEach ) {
692
+ Array.prototype.forEach = function( callback, thisArg ) {
693
+ var T, k;
694
+ if ( this == null ) {
695
+ throw new TypeError( " this is null or not defined" );
696
+ }
697
+ var O = Object(this);
698
+ var len = O.length >>> 0; // Hack to convert O.length to a UInt32
699
+ if ( {}.toString.call(callback) != "[object Function]" ) {
700
+ throw new TypeError( callback + " is not a function" );
701
+ }
702
+ if ( thisArg ) {
703
+ T = thisArg;
704
+ }
705
+ k = 0;
706
+ while( k < len ) {
707
+ var kValue;
708
+ if ( k in O ) {
709
+ kValue = O[ k ];
710
+ callback.call( T, kValue, k, O );
711
+ }
712
+ k++;
713
+ }
714
+ };
715
+ }
716
+
717
+ var isEmpty = function(obj) {
718
+ for (var k in obj) {
719
+ if (obj.hasOwnProperty(k)) {
720
+ return false;
721
+ }
722
+ }
723
+ return true;
724
+ };
725
+
726
+ return Springy;
727
+ }));