iqvoc 3.4.0 → 3.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (220) hide show
  1. data/CHANGELOG.md +5 -0
  2. data/Gemfile +5 -4
  3. data/Gemfile.lock +54 -27
  4. data/app/assets/javascripts/framework.js +0 -1
  5. data/app/assets/stylesheets/iqvoc/forms.css.erb +5 -1
  6. data/app/controllers/application_controller.rb +4 -107
  7. data/app/controllers/concepts/hierarchical_controller.rb +11 -12
  8. data/app/controllers/concepts/untranslated_controller.rb +1 -1
  9. data/app/controllers/instance_configuration_controller.rb +103 -0
  10. data/app/controllers/search_results_controller.rb +4 -3
  11. data/app/helpers/application_helper.rb +1 -1
  12. data/app/helpers/concepts_helper.rb +1 -1
  13. data/app/models/configuration_setting.rb +22 -0
  14. data/app/views/instance_configuration/index.html.erb +15 -0
  15. data/app/views/layouts/_controls.html.erb +3 -3
  16. data/app/views/layouts/_header.html.erb +1 -1
  17. data/app/views/layouts/_navigation.html.erb +6 -1
  18. data/app/views/layouts/application.html.erb +11 -4
  19. data/config/blazing.rb +36 -0
  20. data/config/database.yml +3 -16
  21. data/config/deploy.rb +1 -1
  22. data/config/engine.rb +8 -0
  23. data/config/environments/development.rb +2 -60
  24. data/config/environments/heroku.rb +1 -1
  25. data/config/environments/production.rb +2 -60
  26. data/config/environments/test.rb +2 -45
  27. data/config/initializers/iqvoc.rb +2 -12
  28. data/config/initializers/secret_token.rb +3 -1
  29. data/config/locales/de.yml +8 -0
  30. data/config/locales/en.yml +8 -0
  31. data/config/routes.rb +7 -1
  32. data/db/migrate/20120119000000_create_configuration_settings.rb +14 -0
  33. data/lib/debug.rb +4 -4
  34. data/lib/iqvoc.rb +11 -219
  35. data/lib/iqvoc/ability.rb +2 -1
  36. data/lib/iqvoc/configuration/collection.rb +22 -0
  37. data/lib/iqvoc/configuration/concept.rb +152 -0
  38. data/lib/iqvoc/configuration/core.rb +135 -0
  39. data/lib/iqvoc/configuration/label.rb +23 -0
  40. data/lib/iqvoc/controller_extensions.rb +115 -0
  41. data/lib/iqvoc/environments/development.rb +66 -0
  42. data/lib/iqvoc/environments/production.rb +64 -0
  43. data/lib/iqvoc/environments/test.rb +52 -0
  44. data/lib/iqvoc/instance_configuration.rb +122 -0
  45. data/lib/iqvoc/version.rb +1 -1
  46. data/public/assets/ajax-loader-5c1bf2208bffabddfb583013023b2b11.gif +0 -0
  47. data/public/assets/ajax-loader.gif +0 -0
  48. data/public/assets/arrow_down-e1f4aacd91274ce8d4db40d8b4ad781f.gif +0 -0
  49. data/public/assets/arrow_down.gif +0 -0
  50. data/public/assets/arrow_up-a48d7a55002e97f1b70e0e957edf3964.gif +0 -0
  51. data/public/assets/arrow_up.gif +0 -0
  52. data/public/assets/back-ffd41b7924770324ead91a4eb51604f6.png +0 -0
  53. data/public/assets/back.png +0 -0
  54. data/public/assets/blueprint/ie-d2ff4b1cc209dc6b08716b5e0098e106.css +36 -0
  55. data/public/assets/blueprint/ie-d2ff4b1cc209dc6b08716b5e0098e106.css.gz +0 -0
  56. data/public/assets/blueprint/ie.css +36 -0
  57. data/public/assets/blueprint/ie.css.gz +0 -0
  58. data/public/assets/blueprint/print-799a53ff649d9f14baf5f5fe643d04c4.css +30 -0
  59. data/public/assets/blueprint/print-799a53ff649d9f14baf5f5fe643d04c4.css.gz +0 -0
  60. data/public/assets/blueprint/print.css +30 -0
  61. data/public/assets/blueprint/print.css.gz +0 -0
  62. data/public/assets/blueprint/screen-d721f98ceac371a9294fc6f091ca1cb5.css +259 -0
  63. data/public/assets/blueprint/screen-d721f98ceac371a9294fc6f091ca1cb5.css.gz +0 -0
  64. data/public/assets/blueprint/screen.css +259 -0
  65. data/public/assets/blueprint/screen.css.gz +0 -0
  66. data/public/assets/branch-c950c8ac69ee2f753f86a75d944aa976.png +0 -0
  67. data/public/assets/branch.png +0 -0
  68. data/public/assets/categ-e1e1a5958017a5586456895785298c89.png +0 -0
  69. data/public/assets/categ.png +0 -0
  70. data/public/assets/categ_open-de616238db93a0645b4c4a2cdd4eece4.png +0 -0
  71. data/public/assets/categ_open.png +0 -0
  72. data/public/assets/excanvas-1f8c36f3578409126862b5c17e59b9bd.js +14 -0
  73. data/public/assets/excanvas-1f8c36f3578409126862b5c17e59b9bd.js.gz +0 -0
  74. data/public/assets/excanvas.js +14 -0
  75. data/public/assets/excanvas.js.gz +0 -0
  76. data/public/assets/file-48364459f087292aafa11168442bde71.gif +0 -0
  77. data/public/assets/file.gif +0 -0
  78. data/public/assets/folder-7e0f370ab3fcca5deab89784db42da4a.gif +0 -0
  79. data/public/assets/folder-closed-cb6c847cac4dea2cb59c98ecfc76b8ae.gif +0 -0
  80. data/public/assets/folder-closed.gif +0 -0
  81. data/public/assets/folder.gif +0 -0
  82. data/public/assets/footer-ea48e7e96122c8ab345da8ff67f29838.png +0 -0
  83. data/public/assets/footer.png +0 -0
  84. data/public/assets/go_there-ee7df641e73ef83e43180dbc07c40540.png +0 -0
  85. data/public/assets/go_there.png +0 -0
  86. data/public/assets/header_long-5c7970b5911f94433a696ae87918ecb0.png +0 -0
  87. data/public/assets/header_long.png +0 -0
  88. data/public/assets/iqvoc-ff2c5252d9877c38297164984d4a7a55.png +0 -0
  89. data/public/assets/iqvoc.png +0 -0
  90. data/public/assets/iqvoc/ie_fixes-7797396e9cd2f32961f56af18bacd33a.css +7 -0
  91. data/public/assets/iqvoc/ie_fixes-7797396e9cd2f32961f56af18bacd33a.css.gz +0 -0
  92. data/public/assets/iqvoc/ie_fixes.css +7 -0
  93. data/public/assets/iqvoc/ie_fixes.css.gz +0 -0
  94. data/public/assets/iqvoc/visualization-49b198ac7d8bc15fa13eafc528e96081.js +4 -0
  95. data/public/assets/iqvoc/visualization-49b198ac7d8bc15fa13eafc528e96081.js.gz +0 -0
  96. data/public/assets/iqvoc/visualization.js +4 -0
  97. data/public/assets/iqvoc/visualization.js.gz +0 -0
  98. data/public/assets/jit_rgraph-63bc6fa01820d73bb4076f2f62493e66.js +25 -0
  99. data/public/assets/jit_rgraph-63bc6fa01820d73bb4076f2f62493e66.js.gz +0 -0
  100. data/public/assets/jit_rgraph.js +25 -0
  101. data/public/assets/jit_rgraph.js.gz +0 -0
  102. data/public/assets/jquery-ui/ui-bg_flat_0_aaaaaa_40x100-951e2a65945b93d3f69c1994e5672f39.png +0 -0
  103. data/public/assets/jquery-ui/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  104. data/public/assets/jquery-ui/ui-bg_flat_55_fbec88_40x100-befbc2de63b9556a093c0a5bb2e08a95.png +0 -0
  105. data/public/assets/jquery-ui/ui-bg_flat_55_fbec88_40x100.png +0 -0
  106. data/public/assets/jquery-ui/ui-bg_glass_75_d0e5f5_1x400-faa3341c6543985d2c94bd65e36bd6d8.png +0 -0
  107. data/public/assets/jquery-ui/ui-bg_glass_75_d0e5f5_1x400.png +0 -0
  108. data/public/assets/jquery-ui/ui-bg_glass_85_dfeffc_1x400-df1d30b336ee1530edc334458abd2417.png +0 -0
  109. data/public/assets/jquery-ui/ui-bg_glass_85_dfeffc_1x400.png +0 -0
  110. data/public/assets/jquery-ui/ui-bg_glass_95_fef1ec_1x400-5767880afddd9b98f4b4cfd43a09947b.png +0 -0
  111. data/public/assets/jquery-ui/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  112. data/public/assets/jquery-ui/ui-bg_gloss-wave_55_5c9ccc_500x100-c563cdeeac0f1479b69e36b21d785ac4.png +0 -0
  113. data/public/assets/jquery-ui/ui-bg_gloss-wave_55_5c9ccc_500x100.png +0 -0
  114. data/public/assets/jquery-ui/ui-bg_inset-hard_100_f5f8f9_1x100-b837a3b8315a7ff270664ce469f2e6d7.png +0 -0
  115. data/public/assets/jquery-ui/ui-bg_inset-hard_100_f5f8f9_1x100.png +0 -0
  116. data/public/assets/jquery-ui/ui-bg_inset-hard_100_fcfdfd_1x100-b5d3cda0e6142534937f71cf4438e28a.png +0 -0
  117. data/public/assets/jquery-ui/ui-bg_inset-hard_100_fcfdfd_1x100.png +0 -0
  118. data/public/assets/jquery-ui/ui-icons_217bc0_256x240-14e62c24f88d00f227d88e5b16406eec.png +0 -0
  119. data/public/assets/jquery-ui/ui-icons_217bc0_256x240.png +0 -0
  120. data/public/assets/jquery-ui/ui-icons_2e83ff_256x240-c15e521f58d397c2fa31f4214f92a399.png +0 -0
  121. data/public/assets/jquery-ui/ui-icons_2e83ff_256x240.png +0 -0
  122. data/public/assets/jquery-ui/ui-icons_469bdd_256x240-aceccf3311e1b369e71a4ac629953d61.png +0 -0
  123. data/public/assets/jquery-ui/ui-icons_469bdd_256x240.png +0 -0
  124. data/public/assets/jquery-ui/ui-icons_6da8d5_256x240-18148340aba4ce354c9d52c5aa2f5c0c.png +0 -0
  125. data/public/assets/jquery-ui/ui-icons_6da8d5_256x240.png +0 -0
  126. data/public/assets/jquery-ui/ui-icons_cd0a0a_256x240-279edbd373e73b1ecd1ea7a6ba19750d.png +0 -0
  127. data/public/assets/jquery-ui/ui-icons_cd0a0a_256x240.png +0 -0
  128. data/public/assets/jquery-ui/ui-icons_d8e7f3_256x240-732b446e2e1d4f4fec4277e2632a9adf.png +0 -0
  129. data/public/assets/jquery-ui/ui-icons_d8e7f3_256x240.png +0 -0
  130. data/public/assets/jquery-ui/ui-icons_f9bd01_256x240-1ee933e5956743f5607f2075ed21fac5.png +0 -0
  131. data/public/assets/jquery-ui/ui-icons_f9bd01_256x240.png +0 -0
  132. data/public/assets/json2-fdda51ffce29dd4cb684dc7bd0aede01.js +157 -0
  133. data/public/assets/json2-fdda51ffce29dd4cb684dc7bd0aede01.js.gz +0 -0
  134. data/public/assets/json2.js +157 -0
  135. data/public/assets/json2.js.gz +0 -0
  136. data/public/assets/leaf_end-2ac151e8d7b4928bacb557f96cb5b517.png +0 -0
  137. data/public/assets/leaf_end.png +0 -0
  138. data/public/assets/leaf_end_filled-cdb0eb9ce60425bf0a1fd12226e502eb.png +0 -0
  139. data/public/assets/leaf_end_filled.png +0 -0
  140. data/public/assets/leaf_mid-966f99acaeaddfaedb6b602eb1eed7e0.png +0 -0
  141. data/public/assets/leaf_mid.png +0 -0
  142. data/public/assets/leaf_mid_filled-fecf059c72a649fe77052a886fb030d5.png +0 -0
  143. data/public/assets/leaf_mid_filled.png +0 -0
  144. data/public/assets/leaf_nothing-e8b5532117e55a184d93e8bf66afa20a.png +0 -0
  145. data/public/assets/leaf_nothing.png +0 -0
  146. data/public/assets/leaf_only-e4fe523e451ad9dea6bba08b44cf8039.png +0 -0
  147. data/public/assets/leaf_only.png +0 -0
  148. data/public/assets/leaf_only_filled-7b9a97903759b89facd5fb2e03ba14d1.png +0 -0
  149. data/public/assets/leaf_only_filled.png +0 -0
  150. data/public/assets/leaf_top-61fbce4d3adf2235964e828647a52149.png +0 -0
  151. data/public/assets/leaf_top.png +0 -0
  152. data/public/assets/leaf_top_filled-003d96425167d3b74e63eb75e12d163e.png +0 -0
  153. data/public/assets/leaf_top_filled.png +0 -0
  154. data/public/assets/manifest-c08ebf92c2ea89fbce8705f984a7c604.css +1139 -0
  155. data/public/assets/manifest-c08ebf92c2ea89fbce8705f984a7c604.css.gz +0 -0
  156. data/public/assets/manifest-c6d880245ce63929a5842e48cb7c65f2.js +21 -0
  157. data/public/assets/manifest-c6d880245ce63929a5842e48cb7c65f2.js.gz +0 -0
  158. data/public/assets/manifest.css +1139 -0
  159. data/public/assets/manifest.css.gz +0 -0
  160. data/public/assets/manifest.js +21 -0
  161. data/public/assets/manifest.js.gz +0 -0
  162. data/public/assets/manifest.yml +73 -0
  163. data/public/assets/minus-633f45b71e7552c36214c9d81fce94b0.gif +0 -0
  164. data/public/assets/minus.gif +0 -0
  165. data/public/assets/nothing-19b9650c540a8776b047d6dde27687b0.png +0 -0
  166. data/public/assets/nothing.png +0 -0
  167. data/public/assets/ok-96195c6d50075a63cbdfa11818301f56.png +0 -0
  168. data/public/assets/ok.png +0 -0
  169. data/public/assets/plus-dd3920a86d5ea72497854d875c6afc00.gif +0 -0
  170. data/public/assets/plus.gif +0 -0
  171. data/public/assets/rdf_flyer-b2cc2d8b2a537a9c74b39450f8e6b16f.gif +0 -0
  172. data/public/assets/rdf_flyer.gif +0 -0
  173. data/public/assets/red_arrow-875d1bca1c4b97ec82635af86032a024.png +0 -0
  174. data/public/assets/red_arrow.png +0 -0
  175. data/public/assets/shadow-2975795dc944082531617a0c3ad2da70.png +0 -0
  176. data/public/assets/shadow.png +0 -0
  177. data/public/assets/spinner-0b76e32ff4e68b1e8789b4d0fe991cd7.gif +0 -0
  178. data/public/assets/spinner.gif +0 -0
  179. data/public/assets/tokenizer_delete-94c9b41ce566e499de2090b552e0d167.png +0 -0
  180. data/public/assets/tokenizer_delete.png +0 -0
  181. data/public/assets/tokenizer_pencile-b508830af36466f05620d83c544b22ff.png +0 -0
  182. data/public/assets/tokenizer_pencile.png +0 -0
  183. data/public/assets/tokenizer_show-152443b9a6c0b058cfb51c51f567116f.png +0 -0
  184. data/public/assets/tokenizer_show.png +0 -0
  185. data/public/assets/top_01-fab0825c0529e87fddf883074490dc19.png +0 -0
  186. data/public/assets/top_01.png +0 -0
  187. data/public/assets/treeview-black-116394dbf5afda75949a9925de790795.gif +0 -0
  188. data/public/assets/treeview-black-line-142d898d1f095b3cec1a5dd204daae0d.gif +0 -0
  189. data/public/assets/treeview-black-line.gif +0 -0
  190. data/public/assets/treeview-black.gif +0 -0
  191. data/public/assets/treeview-default-01747815c9007458fc391092548255f8.gif +0 -0
  192. data/public/assets/treeview-default-line-9aecef4278b9e684f18f3c52e3607f80.gif +0 -0
  193. data/public/assets/treeview-default-line.gif +0 -0
  194. data/public/assets/treeview-default.gif +0 -0
  195. data/public/assets/treeview-famfamfam-c5f86a8a52aa48e87b4bd58878c81ad8.gif +0 -0
  196. data/public/assets/treeview-famfamfam-line-897ce097b7d84700985608f22e2403c3.gif +0 -0
  197. data/public/assets/treeview-famfamfam-line.gif +0 -0
  198. data/public/assets/treeview-famfamfam.gif +0 -0
  199. data/public/assets/treeview-gray-56089927c44332a8375be41ab13130c8.gif +0 -0
  200. data/public/assets/treeview-gray-line-d4be395725623b1f39a0964fa479774e.gif +0 -0
  201. data/public/assets/treeview-gray-line.gif +0 -0
  202. data/public/assets/treeview-gray.gif +0 -0
  203. data/public/assets/treeview-red-cb4ed4e5654d76aef755e5c55b63e91c.gif +0 -0
  204. data/public/assets/treeview-red-line-fdf843bbfba11d00897c7971dff7e806.gif +0 -0
  205. data/public/assets/treeview-red-line.gif +0 -0
  206. data/public/assets/treeview-red.gif +0 -0
  207. data/public/assets/trunk-5686782333e8b4c7e4468c452fb52cec.png +0 -0
  208. data/public/assets/trunk.png +0 -0
  209. data/public/assets/unfinished-1cb6bae22a5b855f4b51cb03a1cce928.png +0 -0
  210. data/public/assets/unfinished.png +0 -0
  211. data/test/integration/client_edit_concept_test.rb +0 -1
  212. data/test/integration/instance_configuration_test.rb +74 -0
  213. data/test/integration/untranslated_test.rb +1 -1
  214. data/test/integration_test_helper.rb +2 -0
  215. data/test/unit/concept_test.rb +1 -1
  216. data/test/unit/instance_configuration_test.rb +42 -0
  217. data/test/unit/skos_import_test.rb +4 -3
  218. data/vendor/assets/javascripts/json2.js +27 -25
  219. metadata +201 -19
  220. data/db/iqvoc_test.sqlite3 +0 -0
@@ -0,0 +1,259 @@
1
+ /* -----------------------------------------------------------------------
2
+
3
+
4
+ Blueprint CSS Framework 0.9
5
+ http://blueprintcss.org
6
+
7
+ * Copyright (c) 2007-Present. See LICENSE for more info.
8
+ * See README for instructions on how to use Blueprint.
9
+ * For credits and origins, see AUTHORS.
10
+ * This is a compressed file. See the sources in the 'src' directory.
11
+
12
+ ----------------------------------------------------------------------- */
13
+
14
+ /* reset.css */
15
+
16
+ html, body, div, span, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, code, del, dfn, em, img, q, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, dialog, figure, footer, header, hgroup, nav, section {margin:0;padding:0;border:0;font-weight:inherit;font-style:inherit;font-size:100%;font-family:inherit;vertical-align:baseline;}
17
+ article, aside, dialog, figure, footer, header, hgroup, nav, section {display:block;}
18
+ body {line-height:1.5;}
19
+ table {border-collapse:separate;border-spacing:0;}
20
+ caption, th, td {text-align:left;font-weight:normal;}
21
+ table, td, th {vertical-align:middle;}
22
+ blockquote:before, blockquote:after, q:before, q:after {content:"";}
23
+ blockquote, q {quotes:"" "";}
24
+ a img {border:none;}
25
+
26
+ /* typography.css */
27
+ html {font-size:100.01%;}
28
+ body {font-size:75%;color:#222;background:#fff;font-family:"Helvetica Neue", Arial, Helvetica, sans-serif;}
29
+ h1, h2, h3, h4, h5, h6 {font-weight:normal;color:#111;}
30
+ h1 {font-size:3em;line-height:1;margin-bottom:0.5em;}
31
+ h2 {font-size:2em;margin-bottom:0.75em;}
32
+ h3 {font-size:1.5em;line-height:1;margin-bottom:0.5em;}
33
+ h4 {font-size:1.2em;line-height:1.25;margin-bottom:0.1em;}
34
+ h5 {font-size:1em;font-weight:bold;margin-bottom:0.1em;}
35
+ h6 {font-size:1em;font-weight:bold;}
36
+ h1 img, h2 img, h3 img, h4 img, h5 img, h6 img {margin:0;}
37
+ p {margin:0 0 1.5em;}
38
+ p img.left {float:left;margin:1.5em 1.5em 1.5em 0;padding:0;}
39
+ p img.right {float:right;margin:1.5em 0 1.5em 1.5em;}
40
+ a:focus, a:hover {color:#000;}
41
+ a {color:#009;text-decoration:underline;}
42
+ blockquote {margin:1.5em;color:#666;font-style:italic;}
43
+ strong {font-weight:bold;}
44
+ em, dfn {font-style:italic;}
45
+ dfn {font-weight:bold;}
46
+ sup, sub {line-height:0;}
47
+ abbr, acronym {border-bottom:1px dotted #666;}
48
+ address {margin:0 0 1.5em;font-style:italic;}
49
+ del {color:#666;}
50
+ pre {margin:1.5em 0;white-space:pre;}
51
+ pre, code, tt {font:1em 'andale mono', 'lucida console', monospace;line-height:1.5;}
52
+ li ul, li ol {margin:0;}
53
+ ul, ol {margin:0 1.5em 1.5em 0;padding-left:3.333em;}
54
+ ul {list-style-type:disc;}
55
+ ol {list-style-type:decimal;}
56
+ dl {margin:0 0 1.5em 0;}
57
+ dl dt {font-weight:bold;}
58
+ dd {margin-left:1.5em;}
59
+ table {margin-bottom:1.4em;width:100%;}
60
+ th {font-weight:bold;}
61
+ thead th {background:#c3d9ff;}
62
+ th, td, caption {padding:4px 10px 4px 5px;}
63
+ tr.even td {background:#e5ecf9;}
64
+ tfoot {font-style:italic;}
65
+ caption {background:#eee;}
66
+ .small {font-size:.8em;margin-bottom:1.875em;line-height:1.875em;}
67
+ .large {font-size:1.2em;line-height:2.5em;margin-bottom:1.25em;}
68
+ .hide {display:none;}
69
+ .quiet {color:#666;}
70
+ .loud {color:#000;}
71
+ .highlight {background:#ff0;}
72
+ .added {background:#060;color:#fff;}
73
+ .removed {background:#900;color:#fff;}
74
+ .first {margin-left:0;padding-left:0;}
75
+ .last {margin-right:0;padding-right:0;}
76
+ .top {margin-top:0;padding-top:0;}
77
+ .bottom {margin-bottom:0;padding-bottom:0;}
78
+
79
+ /* forms.css */
80
+ label {font-weight:bold;}
81
+ fieldset {padding:1.4em;margin:0 0 1.5em 0;border:1px solid #ccc;}
82
+ legend {font-weight:bold;font-size:1.2em;}
83
+ input[type=text], input[type=password], input.text, input.title, textarea, select {background-color:#fff;border:1px solid #bbb;}
84
+ input[type=text]:focus, input[type=password]:focus, input.text:focus, input.title:focus, textarea:focus, select:focus {border-color:#666;}
85
+ input[type=text], input[type=password], input.text, input.title, textarea, select {margin:0.5em 0;}
86
+ input.text, input.title {width:300px;padding:5px;}
87
+ input.title {font-size:1.5em;}
88
+ textarea {width:390px;height:250px;padding:5px;}
89
+ input[type=checkbox], input[type=radio], input.checkbox, input.radio {position:relative;top:.25em;}
90
+ form.inline {line-height:3;}
91
+ form.inline p {margin-bottom:0;}
92
+ .error, .notice, .success {padding:.8em;margin-bottom:1em;border:2px solid #ddd;}
93
+ .error {background:#FBE3E4;color:#8a1f11;border-color:#FBC2C4;}
94
+ .notice {background:#FFF6BF;color:#514721;border-color:#FFD324;}
95
+ .success {background:#E6EFC2;color:#264409;border-color:#C6D880;}
96
+ .error a {color:#8a1f11;}
97
+ .notice a {color:#514721;}
98
+ .success a {color:#264409;}
99
+
100
+ /* grid.css */
101
+ .container {width:950px;margin:0 auto;}
102
+ .showgrid {background:url(src/grid.png);}
103
+ .column, .span-1, .span-2, .span-3, .span-4, .span-5, .span-6, .span-7, .span-8, .span-9, .span-10, .span-11, .span-12, .span-13, .span-14, .span-15, .span-16, .span-17, .span-18, .span-19, .span-20, .span-21, .span-22, .span-23, .span-24 {float:left;margin-right:10px;}
104
+ .last {margin-right:0;}
105
+ .span-1 {width:30px;}
106
+ .span-2 {width:70px;}
107
+ .span-3 {width:110px;}
108
+ .span-4 {width:150px;}
109
+ .span-5 {width:190px;}
110
+ .span-6 {width:230px;}
111
+ .span-7 {width:270px;}
112
+ .span-8 {width:310px;}
113
+ .span-9 {width:350px;}
114
+ .span-10 {width:390px;}
115
+ .span-11 {width:430px;}
116
+ .span-12 {width:470px;}
117
+ .span-13 {width:510px;}
118
+ .span-14 {width:550px;}
119
+ .span-15 {width:590px;}
120
+ .span-16 {width:630px;}
121
+ .span-17 {width:670px;}
122
+ .span-18 {width:710px;}
123
+ .span-19 {width:750px;}
124
+ .span-20 {width:790px;}
125
+ .span-21 {width:830px;}
126
+ .span-22 {width:870px;}
127
+ .span-23 {width:910px;}
128
+ .span-24 {width:950px;margin-right:0;}
129
+ input.span-1, textarea.span-1, input.span-2, textarea.span-2, input.span-3, textarea.span-3, input.span-4, textarea.span-4, input.span-5, textarea.span-5, input.span-6, textarea.span-6, input.span-7, textarea.span-7, input.span-8, textarea.span-8, input.span-9, textarea.span-9, input.span-10, textarea.span-10, input.span-11, textarea.span-11, input.span-12, textarea.span-12, input.span-13, textarea.span-13, input.span-14, textarea.span-14, input.span-15, textarea.span-15, input.span-16, textarea.span-16, input.span-17, textarea.span-17, input.span-18, textarea.span-18, input.span-19, textarea.span-19, input.span-20, textarea.span-20, input.span-21, textarea.span-21, input.span-22, textarea.span-22, input.span-23, textarea.span-23, input.span-24, textarea.span-24 {border-left-width:1px!important;border-right-width:1px!important;padding-left:5px!important;padding-right:5px!important;}
130
+ input.span-1, textarea.span-1 {width:18px!important;}
131
+ input.span-2, textarea.span-2 {width:58px!important;}
132
+ input.span-3, textarea.span-3 {width:98px!important;}
133
+ input.span-4, textarea.span-4 {width:138px!important;}
134
+ input.span-5, textarea.span-5 {width:178px!important;}
135
+ input.span-6, textarea.span-6 {width:218px!important;}
136
+ input.span-7, textarea.span-7 {width:258px!important;}
137
+ input.span-8, textarea.span-8 {width:298px!important;}
138
+ input.span-9, textarea.span-9 {width:338px!important;}
139
+ input.span-10, textarea.span-10 {width:378px!important;}
140
+ input.span-11, textarea.span-11 {width:418px!important;}
141
+ input.span-12, textarea.span-12 {width:458px!important;}
142
+ input.span-13, textarea.span-13 {width:498px!important;}
143
+ input.span-14, textarea.span-14 {width:538px!important;}
144
+ input.span-15, textarea.span-15 {width:578px!important;}
145
+ input.span-16, textarea.span-16 {width:618px!important;}
146
+ input.span-17, textarea.span-17 {width:658px!important;}
147
+ input.span-18, textarea.span-18 {width:698px!important;}
148
+ input.span-19, textarea.span-19 {width:738px!important;}
149
+ input.span-20, textarea.span-20 {width:778px!important;}
150
+ input.span-21, textarea.span-21 {width:818px!important;}
151
+ input.span-22, textarea.span-22 {width:858px!important;}
152
+ input.span-23, textarea.span-23 {width:898px!important;}
153
+ input.span-24, textarea.span-24 {width:938px!important;}
154
+ .append-1 {padding-right:40px;}
155
+ .append-2 {padding-right:80px;}
156
+ .append-3 {padding-right:120px;}
157
+ .append-4 {padding-right:160px;}
158
+ .append-5 {padding-right:200px;}
159
+ .append-6 {padding-right:240px;}
160
+ .append-7 {padding-right:280px;}
161
+ .append-8 {padding-right:320px;}
162
+ .append-9 {padding-right:360px;}
163
+ .append-10 {padding-right:400px;}
164
+ .append-11 {padding-right:440px;}
165
+ .append-12 {padding-right:480px;}
166
+ .append-13 {padding-right:520px;}
167
+ .append-14 {padding-right:560px;}
168
+ .append-15 {padding-right:600px;}
169
+ .append-16 {padding-right:640px;}
170
+ .append-17 {padding-right:680px;}
171
+ .append-18 {padding-right:720px;}
172
+ .append-19 {padding-right:760px;}
173
+ .append-20 {padding-right:800px;}
174
+ .append-21 {padding-right:840px;}
175
+ .append-22 {padding-right:880px;}
176
+ .append-23 {padding-right:920px;}
177
+ .prepend-1 {padding-left:40px;}
178
+ .prepend-2 {padding-left:80px;}
179
+ .prepend-3 {padding-left:120px;}
180
+ .prepend-4 {padding-left:160px;}
181
+ .prepend-5 {padding-left:200px;}
182
+ .prepend-6 {padding-left:240px;}
183
+ .prepend-7 {padding-left:280px;}
184
+ .prepend-8 {padding-left:320px;}
185
+ .prepend-9 {padding-left:360px;}
186
+ .prepend-10 {padding-left:400px;}
187
+ .prepend-11 {padding-left:440px;}
188
+ .prepend-12 {padding-left:480px;}
189
+ .prepend-13 {padding-left:520px;}
190
+ .prepend-14 {padding-left:560px;}
191
+ .prepend-15 {padding-left:600px;}
192
+ .prepend-16 {padding-left:640px;}
193
+ .prepend-17 {padding-left:680px;}
194
+ .prepend-18 {padding-left:720px;}
195
+ .prepend-19 {padding-left:760px;}
196
+ .prepend-20 {padding-left:800px;}
197
+ .prepend-21 {padding-left:840px;}
198
+ .prepend-22 {padding-left:880px;}
199
+ .prepend-23 {padding-left:920px;}
200
+ .border {padding-right:4px;margin-right:5px;border-right:1px solid #eee;}
201
+ .colborder {padding-right:24px;margin-right:25px;border-right:1px solid #eee;}
202
+ .pull-1 {margin-left:-40px;}
203
+ .pull-2 {margin-left:-80px;}
204
+ .pull-3 {margin-left:-120px;}
205
+ .pull-4 {margin-left:-160px;}
206
+ .pull-5 {margin-left:-200px;}
207
+ .pull-6 {margin-left:-240px;}
208
+ .pull-7 {margin-left:-280px;}
209
+ .pull-8 {margin-left:-320px;}
210
+ .pull-9 {margin-left:-360px;}
211
+ .pull-10 {margin-left:-400px;}
212
+ .pull-11 {margin-left:-440px;}
213
+ .pull-12 {margin-left:-480px;}
214
+ .pull-13 {margin-left:-520px;}
215
+ .pull-14 {margin-left:-560px;}
216
+ .pull-15 {margin-left:-600px;}
217
+ .pull-16 {margin-left:-640px;}
218
+ .pull-17 {margin-left:-680px;}
219
+ .pull-18 {margin-left:-720px;}
220
+ .pull-19 {margin-left:-760px;}
221
+ .pull-20 {margin-left:-800px;}
222
+ .pull-21 {margin-left:-840px;}
223
+ .pull-22 {margin-left:-880px;}
224
+ .pull-23 {margin-left:-920px;}
225
+ .pull-24 {margin-left:-960px;}
226
+ .pull-1, .pull-2, .pull-3, .pull-4, .pull-5, .pull-6, .pull-7, .pull-8, .pull-9, .pull-10, .pull-11, .pull-12, .pull-13, .pull-14, .pull-15, .pull-16, .pull-17, .pull-18, .pull-19, .pull-20, .pull-21, .pull-22, .pull-23, .pull-24 {float:left;position:relative;}
227
+ .push-1 {margin:0 -40px 1.5em 40px;}
228
+ .push-2 {margin:0 -80px 1.5em 80px;}
229
+ .push-3 {margin:0 -120px 1.5em 120px;}
230
+ .push-4 {margin:0 -160px 1.5em 160px;}
231
+ .push-5 {margin:0 -200px 1.5em 200px;}
232
+ .push-6 {margin:0 -240px 1.5em 240px;}
233
+ .push-7 {margin:0 -280px 1.5em 280px;}
234
+ .push-8 {margin:0 -320px 1.5em 320px;}
235
+ .push-9 {margin:0 -360px 1.5em 360px;}
236
+ .push-10 {margin:0 -400px 1.5em 400px;}
237
+ .push-11 {margin:0 -440px 1.5em 440px;}
238
+ .push-12 {margin:0 -480px 1.5em 480px;}
239
+ .push-13 {margin:0 -520px 1.5em 520px;}
240
+ .push-14 {margin:0 -560px 1.5em 560px;}
241
+ .push-15 {margin:0 -600px 1.5em 600px;}
242
+ .push-16 {margin:0 -640px 1.5em 640px;}
243
+ .push-17 {margin:0 -680px 1.5em 680px;}
244
+ .push-18 {margin:0 -720px 1.5em 720px;}
245
+ .push-19 {margin:0 -760px 1.5em 760px;}
246
+ .push-20 {margin:0 -800px 1.5em 800px;}
247
+ .push-21 {margin:0 -840px 1.5em 840px;}
248
+ .push-22 {margin:0 -880px 1.5em 880px;}
249
+ .push-23 {margin:0 -920px 1.5em 920px;}
250
+ .push-24 {margin:0 -960px 1.5em 960px;}
251
+ .push-1, .push-2, .push-3, .push-4, .push-5, .push-6, .push-7, .push-8, .push-9, .push-10, .push-11, .push-12, .push-13, .push-14, .push-15, .push-16, .push-17, .push-18, .push-19, .push-20, .push-21, .push-22, .push-23, .push-24 {float:right;position:relative;}
252
+ .prepend-top {margin-top:1.5em;}
253
+ .append-bottom {margin-bottom:1.5em;}
254
+ .box {padding:1.5em;margin-bottom:1.5em;background:#E5ECF9;}
255
+ hr {background:#ddd;color:#ddd;clear:both;float:none;width:100%;height:.1em;margin:0 0 1.45em;border:none;}
256
+ hr.space {background:#fff;color:#fff;visibility:hidden;}
257
+ .clearfix:after, .container:after {content:"\0020";display:block;height:0;clear:both;visibility:hidden;overflow:hidden;}
258
+ .clearfix, .container {display:block;}
259
+ .clear {clear:both;}
Binary file
Binary file
Binary file
@@ -0,0 +1,14 @@
1
+ // Copyright 2006 Google Inc.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+ document.createElement("canvas").getContext||function(){function i(){return this.context_||(this.context_=new w(this))}function k(a,b){var c=j.call(arguments,2);return function(){return a.apply(b,c.concat(j.call(arguments)))}}function m(a){var b=a.srcElement;switch(a.propertyName){case"width":b.style.width=b.attributes.width.nodeValue+"px",b.getContext().clearRect();break;case"height":b.style.height=b.attributes.height.nodeValue+"px",b.getContext().clearRect()}}function n(a){var b=a.srcElement;b.firstChild&&(b.firstChild.style.width=b.clientWidth+"px",b.firstChild.style.height=b.clientHeight+"px")}function r(){return[[1,0,0],[0,1,0],[0,0,1]]}function s(a,b){var c=r(),d=0;for(;d<3;d++){var e=0;for(;e<3;e++){var f=0,g=0;for(;g<3;g++)f+=a[d][g]*b[g][e];c[d][e]=f}}return c}function t(a,b){b.fillStyle=a.fillStyle,b.lineCap=a.lineCap,b.lineJoin=a.lineJoin,b.lineWidth=a.lineWidth,b.miterLimit=a.miterLimit,b.shadowBlur=a.shadowBlur,b.shadowColor=a.shadowColor,b.shadowOffsetX=a.shadowOffsetX,b.shadowOffsetY=a.shadowOffsetY,b.strokeStyle=a.strokeStyle,b.globalAlpha=a.globalAlpha,b.arcScaleX_=a.arcScaleX_,b.arcScaleY_=a.arcScaleY_,b.lineScale_=a.lineScale_}function u(a){var b,c=1;a=String(a);if(a.substring(0,3)=="rgb"){var d=a.indexOf("(",3),e=a.indexOf(")",d+1),f=a.substring(d+1,e).split(",");b="#";var g=0;for(;g<3;g++)b+=o[Number(f[g])];f.length==4&&a.substr(3,1)=="a"&&(c=f[3])}else b=a;return{color:b,alpha:c}}function v(a){switch(a){case"butt":return"flat";case"round":return"round";case"square":default:return"square"}}function w(a){this.m_=r(),this.mStack_=[],this.aStack_=[],this.currentPath_=[],this.fillStyle=this.strokeStyle="#000",this.lineWidth=1,this.lineJoin="miter",this.lineCap="butt",this.miterLimit=g*1,this.globalAlpha=1,this.canvas=a;var b=a.ownerDocument.createElement("div");b.style.width=a.clientWidth+"px",b.style.height=a.clientHeight+"px",b.style.overflow="hidden",b.style.position="absolute",a.appendChild(b),this.element_=b,this.lineScale_=this.arcScaleY_=this.arcScaleX_=1}function y(a,b,c,d){a.currentPath_.push({type:"bezierCurveTo",cp1x:b.x,cp1y:b.y,cp2x:c.x,cp2y:c.y,x:d.x,y:d.y}),a.currentX_=d.x,a.currentY_=d.y}function z(a){var b=0;for(;b<3;b++){var c=0;for(;c<2;c++)if(!isFinite(a[b][c])||isNaN(a[b][c]))return!1}return!0}function A(a,b,c){!z(b)||(a.m_=b,c&&(a.lineScale_=f(e(b[0][0]*b[1][1]-b[0][1]*b[1][0]))))}function B(a){this.type_=a,this.r1_=this.y1_=this.x1_=this.r0_=this.y0_=this.x0_=0,this.colors_=[]}function C(){}var a=Math,b=a.round,c=a.sin,d=a.cos,e=a.abs,f=a.sqrt,g=10,h=g/2,j=Array.prototype.slice,l={init:function(a){if(/MSIE/.test(navigator.userAgent)&&!window.opera){var b=a||document;b.createElement("canvas"),b.attachEvent("onreadystatechange",k(this.init_,this,b))}},init_:function(a){a.namespaces.g_vml_||a.namespaces.add("g_vml_","urn:schemas-microsoft-com:vml","#default#VML"),a.namespaces.g_o_||a.namespaces.add("g_o_","urn:schemas-microsoft-com:office:office","#default#VML");if(!a.styleSheets.ex_canvas_){var b=a.createStyleSheet();b.owningElement.id="ex_canvas_",b.cssText="canvas{display:inline-block;overflow:hidden;text-align:left;width:300px;height:150px}g_vml_\\:*{behavior:url(#default#VML)}g_o_\\:*{behavior:url(#default#VML)}"}var c=a.getElementsByTagName("canvas"),d=0;for(;d<c.length;d++)this.initElement(c[d])},initElement:function(a){if(!a.getContext){a.getContext=i,a.innerHTML="",a.attachEvent("onpropertychange",m),a.attachEvent("onresize",n);var b=a.attributes;b.width&&b.width.specified?a.style.width=b.width.nodeValue+"px":a.width=a.clientWidth,b.height&&b.height.specified?a.style.height=b.height.nodeValue+"px":a.height=a.clientHeight}return a}};l.init();var o=[],p=0;for(;p<16;p++){var q=0;for(;q<16;q++)o[p*16+q]=p.toString(16)+q.toString(16)}var x=w.prototype;x.clearRect=function(){this.element_.innerHTML=""},x.beginPath=function(){this.currentPath_=[]},x.moveTo=function(a,b){var c=this.getCoords_(a,b);this.currentPath_.push({type:"moveTo",x:c.x,y:c.y}),this.currentX_=c.x,this.currentY_=c.y},x.lineTo=function(a,b){var c=this.getCoords_(a,b);this.currentPath_.push({type:"lineTo",x:c.x,y:c.y}),this.currentX_=c.x,this.currentY_=c.y},x.bezierCurveTo=function(a,b,c,d,e,f){var g=this.getCoords_(e,f),h=this.getCoords_(a,b),i=this.getCoords_(c,d);y(this,h,i,g)},x.quadraticCurveTo=function(a,b,c,d){var e=this.getCoords_(a,b),f=this.getCoords_(c,d),g={x:this.currentX_+.6666666666666666*(e.x-this.currentX_),y:this.currentY_+.6666666666666666*(e.y-this.currentY_)};y(this,g,{x:g.x+(f.x-this.currentX_)/3,y:g.y+(f.y-this.currentY_)/3},f)},x.arc=function(a,b,e,f,i,j){e*=g;var k=j?"at":"wa",l=a+d(f)*e-h,m=b+c(f)*e-h,n=a+d(i)*e-h,o=b+c(i)*e-h;l==n&&!j&&(l+=.125);var p=this.getCoords_(a,b),q=this.getCoords_(l,m),r=this.getCoords_(n,o);this.currentPath_.push({type:k,x:p.x,y:p.y,radius:e,xStart:q.x,yStart:q.y,xEnd:r.x,yEnd:r.y})},x.rect=function(a,b,c,d){this.moveTo(a,b),this.lineTo(a+c,b),this.lineTo(a+c,b+d),this.lineTo(a,b+d),this.closePath()},x.strokeRect=function(a,b,c,d){var e=this.currentPath_;this.beginPath(),this.moveTo(a,b),this.lineTo(a+c,b),this.lineTo(a+c,b+d),this.lineTo(a,b+d),this.closePath(),this.stroke(),this.currentPath_=e},x.fillRect=function(a,b,c,d){var e=this.currentPath_;this.beginPath(),this.moveTo(a,b),this.lineTo(a+c,b),this.lineTo(a+c,b+d),this.lineTo(a,b+d),this.closePath(),this.fill(),this.currentPath_=e},x.createLinearGradient=function(a,b,c,d){var e=new B("gradient");return e.x0_=a,e.y0_=b,e.x1_=c,e.y1_=d,e},x.createRadialGradient=function(a,b,c,d,e,f){var g=new B("gradientradial");return g.x0_=a,g.y0_=b,g.r0_=c,g.x1_=d,g.y1_=e,g.r1_=f,g},x.drawImage=function(c){var d,e,f,h,i,j,k,l,m=c.runtimeStyle.width,n=c.runtimeStyle.height;c.runtimeStyle.width="auto",c.runtimeStyle.height="auto";var o=c.width,p=c.height;c.runtimeStyle.width=m,c.runtimeStyle.height=n;if(arguments.length==3)d=arguments[1],e=arguments[2],i=j=0,k=f=o,l=h=p;else if(arguments.length==5)d=arguments[1],e=arguments[2],f=arguments[3],h=arguments[4],i=j=0,k=o,l=p;else{if(arguments.length!=9)throw Error("Invalid number of arguments");i=arguments[1],j=arguments[2],k=arguments[3],l=arguments[4],d=arguments[5],e=arguments[6],f=arguments[7],h=arguments[8]}var q=this.getCoords_(d,e),r=[];r.push(" <g_vml_:group",' coordsize="',g*10,",",g*10,'"',' coordorigin="0,0"',' style="width:',10,"px;height:",10,"px;position:absolute;");if(this.m_[0][0]!=1||this.m_[0][1]){var s=[];s.push("M11=",this.m_[0][0],",","M12=",this.m_[1][0],",","M21=",this.m_[0][1],",","M22=",this.m_[1][1],",","Dx=",b(q.x/g),",","Dy=",b(q.y/g),"");var t=q,u=this.getCoords_(d+f,e),v=this.getCoords_(d,e+h),w=this.getCoords_(d+f,e+h);t.x=a.max(t.x,u.x,v.x,w.x),t.y=a.max(t.y,u.y,v.y,w.y),r.push("padding:0 ",b(t.x/g),"px ",b(t.y/g),"px 0;filter:progid:DXImageTransform.Microsoft.Matrix(",s.join(""),", sizingmethod='clip');")}else r.push("top:",b(q.y/g),"px;left:",b(q.x/g),"px;");r.push(' ">','<g_vml_:image src="',c.src,'"',' style="width:',g*f,"px;"," height:",g*h,'px;"',' cropleft="',i/o,'"',' croptop="',j/p,'"',' cropright="',(o-i-k)/o,'"',' cropbottom="',(p-j-l)/p,'"'," />","</g_vml_:group>"),this.element_.insertAdjacentHTML("BeforeEnd",r.join(""))},x.stroke=function(c){var d=[],e=u(c?this.fillStyle:this.strokeStyle),f=e.color,h=e.alpha*this.globalAlpha;d.push("<g_vml_:shape",' filled="',!!c,'"',' style="position:absolute;width:',10,"px;height:",10,'px;"',' coordorigin="0 0" coordsize="',g*10," ",g*10,'"',' stroked="',!c,'"',' path="');var i={x:null,y:null},j={x:null,y:null},k=0;for(;k<this.currentPath_.length;k++){var l=this.currentPath_[k];switch(l.type){case"moveTo":d.push(" m ",b(l.x),",",b(l.y));break;case"lineTo":d.push(" l ",b(l.x),",",b(l.y));break;case"close":d.push(" x "),l=null;break;case"bezierCurveTo":d.push(" c ",b(l.cp1x),",",b(l.cp1y),",",b(l.cp2x),",",b(l.cp2y),",",b(l.x),",",b(l.y));break;case"at":case"wa":d.push(" ",l.type," ",b(l.x-this.arcScaleX_*l.radius),",",b(l.y-this.arcScaleY_*l.radius)," ",b(l.x+this.arcScaleX_*l.radius),",",b(l.y+this.arcScaleY_*l.radius)," ",b(l.xStart),",",b(l.yStart)," ",b(l.xEnd),",",b(l.yEnd))}if(l){if(i.x==null||l.x<i.x)i.x=l.x;if(j.x==null||l.x>j.x)j.x=l.x;if(i.y==null||l.y<i.y)i.y=l.y;if(j.y==null||l.y>j.y)j.y=l.y}}d.push(' ">');if(c)if(typeof this.fillStyle=="object"){var m=this.fillStyle,n=0,o={x:0,y:0},p=0,q=1;if(m.type_=="gradient"){var r=m.x1_/this.arcScaleX_,s=m.y1_/this.arcScaleY_,t=this.getCoords_(m.x0_/this.arcScaleX_,m.y0_/this.arcScaleY_),w=this.getCoords_(r,s);n=Math.atan2(w.x-t.x,w.y-t.y)*180/Math.PI,n<0&&(n+=360),n<1e-6&&(n=0)}else{var t=this.getCoords_(m.x0_,m.y0_),x=j.x-i.x,y=j.y-i.y;o={x:(t.x-i.x)/x,y:(t.y-i.y)/y},x/=this.arcScaleX_*g,y/=this.arcScaleY_*g;var z=a.max(x,y);p=2*m.r0_/z,q=2*m.r1_/z-p}var A=m.colors_;A.sort(function(a,b){return a.offset-b.offset});var B=A.length,C=A[0].color,D=A[B-1].color,E=A[0].alpha*this.globalAlpha,F=A[B-1].alpha*this.globalAlpha,G=[],k=0;for(;k<B;k++){var H=A[k];G.push(H.offset*q+p+" "+H.color)}d.push('<g_vml_:fill type="',m.type_,'"',' method="none" focus="100%"',' color="',C,'"',' color2="',D,'"',' colors="',G.join(","),'"',' opacity="',F,'"',' g_o_:opacity2="',E,'"',' angle="',n,'"',' focusposition="',o.x,",",o.y,'" />')}else d.push('<g_vml_:fill color="',f,'" opacity="',h,'" />');else{var I=this.lineScale_*this.lineWidth;I<1&&(h*=I),d.push("<g_vml_:stroke",' opacity="',h,'"',' joinstyle="',this.lineJoin,'"',' miterlimit="',this.miterLimit,'"',' endcap="',v(this.lineCap),'"',' weight="',I,'px"',' color="',f,'" />')}d.push("</g_vml_:shape>"),this.element_.insertAdjacentHTML("beforeEnd",d.join(""))},x.fill=function(){this.stroke(!0)},x.closePath=function(){this.currentPath_.push({type:"close"})},x.getCoords_=function(a,b){var c=this.m_;return{x:g*(a*c[0][0]+b*c[1][0]+c[2][0])-h,y:g*(a*c[0][1]+b*c[1][1]+c[2][1])-h}},x.save=function(){var a={};t(this,a),this.aStack_.push(a),this.mStack_.push(this.m_),this.m_=s(r(),this.m_)},x.restore=function(){t(this.aStack_.pop(),this),this.m_=this.mStack_.pop()},x.translate=function(a,b){A(this,s([[1,0,0],[0,1,0],[a,b,1]],this.m_),!1)},x.rotate=function(a){var b=d(a),e=c(a);A(this,s([[b,e,0],[-e,b,0],[0,0,1]],this.m_),!1)},x.scale=function(a,b){this.arcScaleX_*=a,this.arcScaleY_*=b,A(this,s([[a,0,0],[0,b,0],[0,0,1]],this.m_),!0)},x.transform=function(a,b,c,d,e,f){A(this,s([[a,b,0],[c,d,0],[e,f,1]],this.m_),!0)},x.setTransform=function(a,b,c,d,e,f){A(this,[[a,b,0],[c,d,0],[e,f,1]],!0)},x.clip=function(){},x.arcTo=function(){},x.createPattern=function(){return new C},B.prototype.addColorStop=function(a,b){b=u(b),this.colors_.push({offset:a,color:b.color,alpha:b.alpha})},G_vmlCanvasManager=l,CanvasRenderingContext2D=w,CanvasGradient=B,CanvasPattern=C}()
@@ -0,0 +1,14 @@
1
+ // Copyright 2006 Google Inc.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+ document.createElement("canvas").getContext||function(){function i(){return this.context_||(this.context_=new w(this))}function k(a,b){var c=j.call(arguments,2);return function(){return a.apply(b,c.concat(j.call(arguments)))}}function m(a){var b=a.srcElement;switch(a.propertyName){case"width":b.style.width=b.attributes.width.nodeValue+"px",b.getContext().clearRect();break;case"height":b.style.height=b.attributes.height.nodeValue+"px",b.getContext().clearRect()}}function n(a){var b=a.srcElement;b.firstChild&&(b.firstChild.style.width=b.clientWidth+"px",b.firstChild.style.height=b.clientHeight+"px")}function r(){return[[1,0,0],[0,1,0],[0,0,1]]}function s(a,b){var c=r(),d=0;for(;d<3;d++){var e=0;for(;e<3;e++){var f=0,g=0;for(;g<3;g++)f+=a[d][g]*b[g][e];c[d][e]=f}}return c}function t(a,b){b.fillStyle=a.fillStyle,b.lineCap=a.lineCap,b.lineJoin=a.lineJoin,b.lineWidth=a.lineWidth,b.miterLimit=a.miterLimit,b.shadowBlur=a.shadowBlur,b.shadowColor=a.shadowColor,b.shadowOffsetX=a.shadowOffsetX,b.shadowOffsetY=a.shadowOffsetY,b.strokeStyle=a.strokeStyle,b.globalAlpha=a.globalAlpha,b.arcScaleX_=a.arcScaleX_,b.arcScaleY_=a.arcScaleY_,b.lineScale_=a.lineScale_}function u(a){var b,c=1;a=String(a);if(a.substring(0,3)=="rgb"){var d=a.indexOf("(",3),e=a.indexOf(")",d+1),f=a.substring(d+1,e).split(",");b="#";var g=0;for(;g<3;g++)b+=o[Number(f[g])];f.length==4&&a.substr(3,1)=="a"&&(c=f[3])}else b=a;return{color:b,alpha:c}}function v(a){switch(a){case"butt":return"flat";case"round":return"round";case"square":default:return"square"}}function w(a){this.m_=r(),this.mStack_=[],this.aStack_=[],this.currentPath_=[],this.fillStyle=this.strokeStyle="#000",this.lineWidth=1,this.lineJoin="miter",this.lineCap="butt",this.miterLimit=g*1,this.globalAlpha=1,this.canvas=a;var b=a.ownerDocument.createElement("div");b.style.width=a.clientWidth+"px",b.style.height=a.clientHeight+"px",b.style.overflow="hidden",b.style.position="absolute",a.appendChild(b),this.element_=b,this.lineScale_=this.arcScaleY_=this.arcScaleX_=1}function y(a,b,c,d){a.currentPath_.push({type:"bezierCurveTo",cp1x:b.x,cp1y:b.y,cp2x:c.x,cp2y:c.y,x:d.x,y:d.y}),a.currentX_=d.x,a.currentY_=d.y}function z(a){var b=0;for(;b<3;b++){var c=0;for(;c<2;c++)if(!isFinite(a[b][c])||isNaN(a[b][c]))return!1}return!0}function A(a,b,c){!z(b)||(a.m_=b,c&&(a.lineScale_=f(e(b[0][0]*b[1][1]-b[0][1]*b[1][0]))))}function B(a){this.type_=a,this.r1_=this.y1_=this.x1_=this.r0_=this.y0_=this.x0_=0,this.colors_=[]}function C(){}var a=Math,b=a.round,c=a.sin,d=a.cos,e=a.abs,f=a.sqrt,g=10,h=g/2,j=Array.prototype.slice,l={init:function(a){if(/MSIE/.test(navigator.userAgent)&&!window.opera){var b=a||document;b.createElement("canvas"),b.attachEvent("onreadystatechange",k(this.init_,this,b))}},init_:function(a){a.namespaces.g_vml_||a.namespaces.add("g_vml_","urn:schemas-microsoft-com:vml","#default#VML"),a.namespaces.g_o_||a.namespaces.add("g_o_","urn:schemas-microsoft-com:office:office","#default#VML");if(!a.styleSheets.ex_canvas_){var b=a.createStyleSheet();b.owningElement.id="ex_canvas_",b.cssText="canvas{display:inline-block;overflow:hidden;text-align:left;width:300px;height:150px}g_vml_\\:*{behavior:url(#default#VML)}g_o_\\:*{behavior:url(#default#VML)}"}var c=a.getElementsByTagName("canvas"),d=0;for(;d<c.length;d++)this.initElement(c[d])},initElement:function(a){if(!a.getContext){a.getContext=i,a.innerHTML="",a.attachEvent("onpropertychange",m),a.attachEvent("onresize",n);var b=a.attributes;b.width&&b.width.specified?a.style.width=b.width.nodeValue+"px":a.width=a.clientWidth,b.height&&b.height.specified?a.style.height=b.height.nodeValue+"px":a.height=a.clientHeight}return a}};l.init();var o=[],p=0;for(;p<16;p++){var q=0;for(;q<16;q++)o[p*16+q]=p.toString(16)+q.toString(16)}var x=w.prototype;x.clearRect=function(){this.element_.innerHTML=""},x.beginPath=function(){this.currentPath_=[]},x.moveTo=function(a,b){var c=this.getCoords_(a,b);this.currentPath_.push({type:"moveTo",x:c.x,y:c.y}),this.currentX_=c.x,this.currentY_=c.y},x.lineTo=function(a,b){var c=this.getCoords_(a,b);this.currentPath_.push({type:"lineTo",x:c.x,y:c.y}),this.currentX_=c.x,this.currentY_=c.y},x.bezierCurveTo=function(a,b,c,d,e,f){var g=this.getCoords_(e,f),h=this.getCoords_(a,b),i=this.getCoords_(c,d);y(this,h,i,g)},x.quadraticCurveTo=function(a,b,c,d){var e=this.getCoords_(a,b),f=this.getCoords_(c,d),g={x:this.currentX_+.6666666666666666*(e.x-this.currentX_),y:this.currentY_+.6666666666666666*(e.y-this.currentY_)};y(this,g,{x:g.x+(f.x-this.currentX_)/3,y:g.y+(f.y-this.currentY_)/3},f)},x.arc=function(a,b,e,f,i,j){e*=g;var k=j?"at":"wa",l=a+d(f)*e-h,m=b+c(f)*e-h,n=a+d(i)*e-h,o=b+c(i)*e-h;l==n&&!j&&(l+=.125);var p=this.getCoords_(a,b),q=this.getCoords_(l,m),r=this.getCoords_(n,o);this.currentPath_.push({type:k,x:p.x,y:p.y,radius:e,xStart:q.x,yStart:q.y,xEnd:r.x,yEnd:r.y})},x.rect=function(a,b,c,d){this.moveTo(a,b),this.lineTo(a+c,b),this.lineTo(a+c,b+d),this.lineTo(a,b+d),this.closePath()},x.strokeRect=function(a,b,c,d){var e=this.currentPath_;this.beginPath(),this.moveTo(a,b),this.lineTo(a+c,b),this.lineTo(a+c,b+d),this.lineTo(a,b+d),this.closePath(),this.stroke(),this.currentPath_=e},x.fillRect=function(a,b,c,d){var e=this.currentPath_;this.beginPath(),this.moveTo(a,b),this.lineTo(a+c,b),this.lineTo(a+c,b+d),this.lineTo(a,b+d),this.closePath(),this.fill(),this.currentPath_=e},x.createLinearGradient=function(a,b,c,d){var e=new B("gradient");return e.x0_=a,e.y0_=b,e.x1_=c,e.y1_=d,e},x.createRadialGradient=function(a,b,c,d,e,f){var g=new B("gradientradial");return g.x0_=a,g.y0_=b,g.r0_=c,g.x1_=d,g.y1_=e,g.r1_=f,g},x.drawImage=function(c){var d,e,f,h,i,j,k,l,m=c.runtimeStyle.width,n=c.runtimeStyle.height;c.runtimeStyle.width="auto",c.runtimeStyle.height="auto";var o=c.width,p=c.height;c.runtimeStyle.width=m,c.runtimeStyle.height=n;if(arguments.length==3)d=arguments[1],e=arguments[2],i=j=0,k=f=o,l=h=p;else if(arguments.length==5)d=arguments[1],e=arguments[2],f=arguments[3],h=arguments[4],i=j=0,k=o,l=p;else{if(arguments.length!=9)throw Error("Invalid number of arguments");i=arguments[1],j=arguments[2],k=arguments[3],l=arguments[4],d=arguments[5],e=arguments[6],f=arguments[7],h=arguments[8]}var q=this.getCoords_(d,e),r=[];r.push(" <g_vml_:group",' coordsize="',g*10,",",g*10,'"',' coordorigin="0,0"',' style="width:',10,"px;height:",10,"px;position:absolute;");if(this.m_[0][0]!=1||this.m_[0][1]){var s=[];s.push("M11=",this.m_[0][0],",","M12=",this.m_[1][0],",","M21=",this.m_[0][1],",","M22=",this.m_[1][1],",","Dx=",b(q.x/g),",","Dy=",b(q.y/g),"");var t=q,u=this.getCoords_(d+f,e),v=this.getCoords_(d,e+h),w=this.getCoords_(d+f,e+h);t.x=a.max(t.x,u.x,v.x,w.x),t.y=a.max(t.y,u.y,v.y,w.y),r.push("padding:0 ",b(t.x/g),"px ",b(t.y/g),"px 0;filter:progid:DXImageTransform.Microsoft.Matrix(",s.join(""),", sizingmethod='clip');")}else r.push("top:",b(q.y/g),"px;left:",b(q.x/g),"px;");r.push(' ">','<g_vml_:image src="',c.src,'"',' style="width:',g*f,"px;"," height:",g*h,'px;"',' cropleft="',i/o,'"',' croptop="',j/p,'"',' cropright="',(o-i-k)/o,'"',' cropbottom="',(p-j-l)/p,'"'," />","</g_vml_:group>"),this.element_.insertAdjacentHTML("BeforeEnd",r.join(""))},x.stroke=function(c){var d=[],e=u(c?this.fillStyle:this.strokeStyle),f=e.color,h=e.alpha*this.globalAlpha;d.push("<g_vml_:shape",' filled="',!!c,'"',' style="position:absolute;width:',10,"px;height:",10,'px;"',' coordorigin="0 0" coordsize="',g*10," ",g*10,'"',' stroked="',!c,'"',' path="');var i={x:null,y:null},j={x:null,y:null},k=0;for(;k<this.currentPath_.length;k++){var l=this.currentPath_[k];switch(l.type){case"moveTo":d.push(" m ",b(l.x),",",b(l.y));break;case"lineTo":d.push(" l ",b(l.x),",",b(l.y));break;case"close":d.push(" x "),l=null;break;case"bezierCurveTo":d.push(" c ",b(l.cp1x),",",b(l.cp1y),",",b(l.cp2x),",",b(l.cp2y),",",b(l.x),",",b(l.y));break;case"at":case"wa":d.push(" ",l.type," ",b(l.x-this.arcScaleX_*l.radius),",",b(l.y-this.arcScaleY_*l.radius)," ",b(l.x+this.arcScaleX_*l.radius),",",b(l.y+this.arcScaleY_*l.radius)," ",b(l.xStart),",",b(l.yStart)," ",b(l.xEnd),",",b(l.yEnd))}if(l){if(i.x==null||l.x<i.x)i.x=l.x;if(j.x==null||l.x>j.x)j.x=l.x;if(i.y==null||l.y<i.y)i.y=l.y;if(j.y==null||l.y>j.y)j.y=l.y}}d.push(' ">');if(c)if(typeof this.fillStyle=="object"){var m=this.fillStyle,n=0,o={x:0,y:0},p=0,q=1;if(m.type_=="gradient"){var r=m.x1_/this.arcScaleX_,s=m.y1_/this.arcScaleY_,t=this.getCoords_(m.x0_/this.arcScaleX_,m.y0_/this.arcScaleY_),w=this.getCoords_(r,s);n=Math.atan2(w.x-t.x,w.y-t.y)*180/Math.PI,n<0&&(n+=360),n<1e-6&&(n=0)}else{var t=this.getCoords_(m.x0_,m.y0_),x=j.x-i.x,y=j.y-i.y;o={x:(t.x-i.x)/x,y:(t.y-i.y)/y},x/=this.arcScaleX_*g,y/=this.arcScaleY_*g;var z=a.max(x,y);p=2*m.r0_/z,q=2*m.r1_/z-p}var A=m.colors_;A.sort(function(a,b){return a.offset-b.offset});var B=A.length,C=A[0].color,D=A[B-1].color,E=A[0].alpha*this.globalAlpha,F=A[B-1].alpha*this.globalAlpha,G=[],k=0;for(;k<B;k++){var H=A[k];G.push(H.offset*q+p+" "+H.color)}d.push('<g_vml_:fill type="',m.type_,'"',' method="none" focus="100%"',' color="',C,'"',' color2="',D,'"',' colors="',G.join(","),'"',' opacity="',F,'"',' g_o_:opacity2="',E,'"',' angle="',n,'"',' focusposition="',o.x,",",o.y,'" />')}else d.push('<g_vml_:fill color="',f,'" opacity="',h,'" />');else{var I=this.lineScale_*this.lineWidth;I<1&&(h*=I),d.push("<g_vml_:stroke",' opacity="',h,'"',' joinstyle="',this.lineJoin,'"',' miterlimit="',this.miterLimit,'"',' endcap="',v(this.lineCap),'"',' weight="',I,'px"',' color="',f,'" />')}d.push("</g_vml_:shape>"),this.element_.insertAdjacentHTML("beforeEnd",d.join(""))},x.fill=function(){this.stroke(!0)},x.closePath=function(){this.currentPath_.push({type:"close"})},x.getCoords_=function(a,b){var c=this.m_;return{x:g*(a*c[0][0]+b*c[1][0]+c[2][0])-h,y:g*(a*c[0][1]+b*c[1][1]+c[2][1])-h}},x.save=function(){var a={};t(this,a),this.aStack_.push(a),this.mStack_.push(this.m_),this.m_=s(r(),this.m_)},x.restore=function(){t(this.aStack_.pop(),this),this.m_=this.mStack_.pop()},x.translate=function(a,b){A(this,s([[1,0,0],[0,1,0],[a,b,1]],this.m_),!1)},x.rotate=function(a){var b=d(a),e=c(a);A(this,s([[b,e,0],[-e,b,0],[0,0,1]],this.m_),!1)},x.scale=function(a,b){this.arcScaleX_*=a,this.arcScaleY_*=b,A(this,s([[a,0,0],[0,b,0],[0,0,1]],this.m_),!0)},x.transform=function(a,b,c,d,e,f){A(this,s([[a,b,0],[c,d,0],[e,f,1]],this.m_),!0)},x.setTransform=function(a,b,c,d,e,f){A(this,[[a,b,0],[c,d,0],[e,f,1]],!0)},x.clip=function(){},x.arcTo=function(){},x.createPattern=function(){return new C},B.prototype.addColorStop=function(a,b){b=u(b),this.colors_.push({offset:a,color:b.color,alpha:b.alpha})},G_vmlCanvasManager=l,CanvasRenderingContext2D=w,CanvasGradient=B,CanvasPattern=C}()
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -0,0 +1,7 @@
1
+ /* Internet Explorer Bugfixes */
2
+
3
+
4
+ .sections .entity_list li.last-child:after,
5
+ .relation-body .entity_list li.last-child:after {
6
+ content: "";
7
+ }
@@ -0,0 +1,7 @@
1
+ /* Internet Explorer Bugfixes */
2
+
3
+
4
+ .sections .entity_list li.last-child:after,
5
+ .relation-body .entity_list li.last-child:after {
6
+ content: "";
7
+ }
Binary file
@@ -0,0 +1,4 @@
1
+ /*jslint vars: true, unparam: true, nomen: true, browser: true */
2
+ /*global jQuery, $jit, IQVOC, HTMLCanvasElement */
3
+ // basic settings -- XXX: cargo-culted from JIT examples
4
+ var labelType,nativeTextSupport,useGradients,animate;(function(){"use strict";var a=navigator.userAgent,b=a.match(/iPhone/i)||a.match(/iPad/i),c=typeof HTMLCanvasElement,d=c==="object"||c==="function",e=d&&typeof document.createElement("canvas").getContext("2d").fillText=="function";labelType=!d||e&&!b?"Native":"HTML",nativeTextSupport=labelType==="Native",useGradients=d,animate=!b&&!!d})(),IQVOC.visualization=function(a){"use strict";var b=100,c,d=10,e,f,g,h,i,j,k,l,m,n,o,p,q=function(b,d){c=a("head link[type='application/json']").attr("href"),a.getJSON(c,function(a,c,g){a=j(a),b=f(b,a),e=b.data("widget"),d&&d(b)})};f=function(c,d){c=c.nodeType?c:document.getElementById(c),a.each(["+","-"],function(b,d){a('<input type="button" class="button" />').val(d).click(function(a){var b=e.config.Navigation.zooming/1e3;b=d==="-"?1-b:1+b,e.canvas.scale(b,b)}).appendTo(c)}),a.each(["label","relation"],function(b,d){var e=a('<input type="checkbox" name="entities" checked="checked">').val(d);a("<label />").text(d+"s").prepend(e).appendTo(c)}),a("input[type=checkbox]",c).live("change",h);var f,j=a.map(["▢","_"],function(b,d){return a('<input type="button" class="button" />').val(b).click(function(a){f(d===0)}).prependTo(c)[0]});j=a(j),j.eq(1).hide(),f=function(b){b=a(b);var c=b.width(),d=b.height();return function(a){var e=b.data("widget"),f=a?c*2:c,g=a?d*2:d;e.canvas.resize(f,g),b.css({width:String(f)+"px",height:String(g)+"px"}),IQVOC.visualization.redraw(e),j.toggle(),IQVOC.Storage.setItem("visualization",a?"enlarged":"")}}(c);var k=i(c,{levelDistance:b});return k.filters=[],k.data=d,k.toggleSize=f,g(k),a(c).addClass("infovis").data("widget",k)},g=function(a){a.graph.empty(),a.labels.clearLabels(),a.loadJSON(a.data),a.refresh()},h=function(b){var c=a(this),d=c.attr("checked"),f=c.val();if(d){var g=a.inArray(f,e.filters);e.filters.splice(g,1)}else e.filters.push(f);c.closest(".infovis").toggleClass("filtered",e.filters.length>0),e.loadJSON(e.data),e.refresh()},i=function(d,f){return f=a.extend(f,{injectInto:d,Navigation:{enable:!0,panning:"avoid nodes",zooming:100},width:d.offsetWidth,height:d.offsetHeight,levelDistance:f.levelDistance||b,background:{CanvasStyles:{strokeStyle:"#AAA",shadowBlur:50}},Node:{overridable:!0,dim:5,color:"#B0EAA4"},Edge:{overridable:!0,lineWidth:2,color:"#888"},onCreateLabel:function(b,d){var e=p(d.name);if(d.data.nodes)a(b).html(d.name).attr("title",String(d.data.nodes.length)+" nodes hidden");else if(d.data.etype==="label")a(b).html(e);else{var f="/concepts/",g=c.split(f)[0],h=d.name.length<=5?e:p(d.name.substr(0,5))+"&hellip;";a("<a />").attr("href",g+f+d.id).attr("title",e).html(h).appendTo(b)}},onPlaceLabel:function(b,c){var d={},e=a(b),f=["level"+String(c._depth),c.data.etype||"concept"];d.height=d.lineHeight=String(c.Node.height)+"px",e.addClass(f.join(" ")).css(d);var g=b.style,h=parseInt(g.left,10),i=parseInt(g.top,10);g.top=String(i-b.offsetHeight/2)+"px",g.left=String(h-b.offsetWidth/2)+"px"},onBeforePlotLine:function(b){if(b.nodeTo.data.etype==="label")b.nodeTo.data.$type="square",b.nodeTo.data.$color="#EEE",b.data.$lineWidth=b.Edge.lineWidth/2,b.data.$color="#00A",b.data.$alpha=.5;else{var c=b.nodeTo,d=o(c._depth);d&&(c.setData("alpha",d),b.setData("alpha",d))}a.each([b.nodeFrom,b.nodeTo],function(c,d){var f=d.data?d.data.etype:null;if(e){var g=a.inArray("relation",e.filters)!==-1,h=d._depth===1&&f==="label";if(g&&d._depth>0&&!h||f&&a.inArray(f,e.filters)!==-1)b.data.$alpha=0,d.data.$alpha=0}})}}),new $jit.RGraph(f)},j=function(a){return k(a)},k=function(b){typeof b.relations=="number"&&(b.relations=m(b.relations));var c=a.map(b.labels||[],l);n(c,"label");var d=a.map(b.relations||[],k);n(d);var e=a.map(c,function(a,b){return d.length?[a,d.pop()]:a}).concat(d);return{id:b.origin,name:c.length?c[0].name:"",children:e}},l=function(a){return{id:a.origin||Math.random(),name:a.value,data:{etype:"label"}}},m=function(b){return a.map(new Array(b),function(a,b){return{origin:Math.random()}})},n=function(a,b){if(a.length>d){var c=a.splice(d-1),e={id:Math.random(),name:"&hellip;",data:{nodes:c}};b&&(e.data.etype=b),a.push(e)}},o=function(a){if(a===2)return.6;if(a>2)return.3};var r=$jit.Graph.Node.prototype.setPos;return $jit.Graph.Node.prototype.setPos=function(a,c){return this.data.etype==="label"&&(a.rho=a.rho-b*.5),r.apply(this,arguments)},p=function(a){return a.replace(/&/mg,"&amp;").replace(/</mg,"&lt;").replace(/>/mg,"&gt;").replace(/\"/mg,"&quot;")},{init:q,redraw:g}}(jQuery)
@@ -0,0 +1,4 @@
1
+ /*jslint vars: true, unparam: true, nomen: true, browser: true */
2
+ /*global jQuery, $jit, IQVOC, HTMLCanvasElement */
3
+ // basic settings -- XXX: cargo-culted from JIT examples
4
+ var labelType,nativeTextSupport,useGradients,animate;(function(){"use strict";var a=navigator.userAgent,b=a.match(/iPhone/i)||a.match(/iPad/i),c=typeof HTMLCanvasElement,d=c==="object"||c==="function",e=d&&typeof document.createElement("canvas").getContext("2d").fillText=="function";labelType=!d||e&&!b?"Native":"HTML",nativeTextSupport=labelType==="Native",useGradients=d,animate=!b&&!!d})(),IQVOC.visualization=function(a){"use strict";var b=100,c,d=10,e,f,g,h,i,j,k,l,m,n,o,p,q=function(b,d){c=a("head link[type='application/json']").attr("href"),a.getJSON(c,function(a,c,g){a=j(a),b=f(b,a),e=b.data("widget"),d&&d(b)})};f=function(c,d){c=c.nodeType?c:document.getElementById(c),a.each(["+","-"],function(b,d){a('<input type="button" class="button" />').val(d).click(function(a){var b=e.config.Navigation.zooming/1e3;b=d==="-"?1-b:1+b,e.canvas.scale(b,b)}).appendTo(c)}),a.each(["label","relation"],function(b,d){var e=a('<input type="checkbox" name="entities" checked="checked">').val(d);a("<label />").text(d+"s").prepend(e).appendTo(c)}),a("input[type=checkbox]",c).live("change",h);var f,j=a.map(["▢","_"],function(b,d){return a('<input type="button" class="button" />').val(b).click(function(a){f(d===0)}).prependTo(c)[0]});j=a(j),j.eq(1).hide(),f=function(b){b=a(b);var c=b.width(),d=b.height();return function(a){var e=b.data("widget"),f=a?c*2:c,g=a?d*2:d;e.canvas.resize(f,g),b.css({width:String(f)+"px",height:String(g)+"px"}),IQVOC.visualization.redraw(e),j.toggle(),IQVOC.Storage.setItem("visualization",a?"enlarged":"")}}(c);var k=i(c,{levelDistance:b});return k.filters=[],k.data=d,k.toggleSize=f,g(k),a(c).addClass("infovis").data("widget",k)},g=function(a){a.graph.empty(),a.labels.clearLabels(),a.loadJSON(a.data),a.refresh()},h=function(b){var c=a(this),d=c.attr("checked"),f=c.val();if(d){var g=a.inArray(f,e.filters);e.filters.splice(g,1)}else e.filters.push(f);c.closest(".infovis").toggleClass("filtered",e.filters.length>0),e.loadJSON(e.data),e.refresh()},i=function(d,f){return f=a.extend(f,{injectInto:d,Navigation:{enable:!0,panning:"avoid nodes",zooming:100},width:d.offsetWidth,height:d.offsetHeight,levelDistance:f.levelDistance||b,background:{CanvasStyles:{strokeStyle:"#AAA",shadowBlur:50}},Node:{overridable:!0,dim:5,color:"#B0EAA4"},Edge:{overridable:!0,lineWidth:2,color:"#888"},onCreateLabel:function(b,d){var e=p(d.name);if(d.data.nodes)a(b).html(d.name).attr("title",String(d.data.nodes.length)+" nodes hidden");else if(d.data.etype==="label")a(b).html(e);else{var f="/concepts/",g=c.split(f)[0],h=d.name.length<=5?e:p(d.name.substr(0,5))+"&hellip;";a("<a />").attr("href",g+f+d.id).attr("title",e).html(h).appendTo(b)}},onPlaceLabel:function(b,c){var d={},e=a(b),f=["level"+String(c._depth),c.data.etype||"concept"];d.height=d.lineHeight=String(c.Node.height)+"px",e.addClass(f.join(" ")).css(d);var g=b.style,h=parseInt(g.left,10),i=parseInt(g.top,10);g.top=String(i-b.offsetHeight/2)+"px",g.left=String(h-b.offsetWidth/2)+"px"},onBeforePlotLine:function(b){if(b.nodeTo.data.etype==="label")b.nodeTo.data.$type="square",b.nodeTo.data.$color="#EEE",b.data.$lineWidth=b.Edge.lineWidth/2,b.data.$color="#00A",b.data.$alpha=.5;else{var c=b.nodeTo,d=o(c._depth);d&&(c.setData("alpha",d),b.setData("alpha",d))}a.each([b.nodeFrom,b.nodeTo],function(c,d){var f=d.data?d.data.etype:null;if(e){var g=a.inArray("relation",e.filters)!==-1,h=d._depth===1&&f==="label";if(g&&d._depth>0&&!h||f&&a.inArray(f,e.filters)!==-1)b.data.$alpha=0,d.data.$alpha=0}})}}),new $jit.RGraph(f)},j=function(a){return k(a)},k=function(b){typeof b.relations=="number"&&(b.relations=m(b.relations));var c=a.map(b.labels||[],l);n(c,"label");var d=a.map(b.relations||[],k);n(d);var e=a.map(c,function(a,b){return d.length?[a,d.pop()]:a}).concat(d);return{id:b.origin,name:c.length?c[0].name:"",children:e}},l=function(a){return{id:a.origin||Math.random(),name:a.value,data:{etype:"label"}}},m=function(b){return a.map(new Array(b),function(a,b){return{origin:Math.random()}})},n=function(a,b){if(a.length>d){var c=a.splice(d-1),e={id:Math.random(),name:"&hellip;",data:{nodes:c}};b&&(e.data.etype=b),a.push(e)}},o=function(a){if(a===2)return.6;if(a>2)return.3};var r=$jit.Graph.Node.prototype.setPos;return $jit.Graph.Node.prototype.setPos=function(a,c){return this.data.etype==="label"&&(a.rho=a.rho-b*.5),r.apply(this,arguments)},p=function(a){return a.replace(/&/mg,"&amp;").replace(/</mg,"&lt;").replace(/>/mg,"&gt;").replace(/\"/mg,"&quot;")},{init:q,redraw:g}}(jQuery)
@@ -0,0 +1,25 @@
1
+ /*
2
+ Copyright (c) 2011 Sencha Inc. - Author: Nicolas Garcia Belmonte (http://philogb.github.com/)
3
+
4
+ Permission is hereby granted, free of charge, to any person obtaining a copy
5
+ of this software and associated documentation files (the "Software"), to deal
6
+ in the Software without restriction, including without limitation the rights
7
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ copies of the Software, and to permit persons to whom the Software is
9
+ furnished to do so, subject to the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be included in
12
+ all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20
+ THE SOFTWARE.
21
+
22
+ */
23
+ (function(){window.$jit=function(a){var a=a||window,b;for(b in $jit)$jit[b].$extend&&(a[b]=$jit[b])},$jit.version="2.0.1";var a=function(a){return document.getElementById(a)};a.empty=function(){},a.extend=function(a,b){for(var c in b||{})a[c]=b[c];return a},a.lambda=function(a){return typeof a=="function"?a:function(){return a}},a.time=Date.now||function(){return+(new Date)},a.splat=function(b){var c=a.type(b);return c?c!="array"?[b]:b:[]},a.type=function(b){var c=a.type.s.call(b).match(/^\[object\s(.*)\]$/)[1].toLowerCase();return c!="object"?c:b&&b.$$family?b.$$family:b&&b.nodeName&&b.nodeType==1?"element":c},a.type.s=Object.prototype.toString,a.each=function(b,c){if(a.type(b)=="object")for(var d in b)c(b[d],d);else{d=0;for(var e=b.length;d<e;d++)c(b[d],d)}},a.indexOf=function(a,b){if(Array.indexOf)return a.indexOf(b);for(var c=0,d=a.length;c<d;c++)if(a[c]===b)return c;return-1},a.map=function(b,c){var d=[];return a.each(b,function(a,b){d.push(c(a,b))}),d},a.reduce=function(a,b,c){var d=a.length;if(d==0)return c;for(var e=arguments.length==3?c:a[--d];d--;)e=b(e,a[d]);return e},a.merge=function(){for(var b={},c=0,d=arguments.length;c<d;c++){var e=arguments[c];if(a.type(e)=="object")for(var f in e){var g=e[f],h=b[f];b[f]=h&&a.type(g)=="object"&&a.type(h)=="object"?a.merge(h,g):a.unlink(g)}}return b},a.unlink=function(b){var c;switch(a.type(b)){case"object":c={};for(var d in b)c[d]=a.unlink(b[d]);break;case"array":c=[],d=0;for(var e=b.length;d<e;d++)c[d]=a.unlink(b[d]);break;default:return b}return c},a.zip=function(){if(arguments.length===0)return[];for(var a=0,b=[],c=arguments.length,d=arguments[0].length;a<d;a++){for(var e=0,f=[];e<c;e++)f.push(arguments[e][a]);b.push(f)}return b},a.rgbToHex=function(a,b){if(a.length<3)return null;if(a.length==4&&a[3]==0&&!b)return"transparent";for(var c=[],d=0;d<3;d++){var e=(a[d]-0).toString(16);c.push(e.length==1?"0"+e:e)}return b?c:"#"+c.join("")},a.hexToRgb=function(a){if(a.length!=7){a=a.match(/^#?(\w{1,2})(\w{1,2})(\w{1,2})$/),a.shift();if(a.length!=3)return null;for(var b=[],c=0;c<3;c++){var d=a[c];d.length==1&&(d+=d),b.push(parseInt(d,16))}return b}return a=parseInt(a.slice(1),16),[a>>16,a>>8&255,a&255]},a.destroy=function(b){a.clean(b),b.parentNode&&b.parentNode.removeChild(b),b.clearAttributes&&b.clearAttributes()},a.clean=function(b){for(var b=b.childNodes,c=0,d=b.length;c<d;c++)a.destroy(b[c])},a.addEvent=function(a,b,c){a.addEventListener?a.addEventListener(b,c,!1):a.attachEvent("on"+b,c)},a.addEvents=function(b,c){for(var d in c)a.addEvent(b,d,c[d])},a.hasClass=function(a,b){return(" "+a.className+" ").indexOf(" "+b+" ")>-1},a.addClass=function(b,c){a.hasClass(b,c)||(b.className=b.className+" "+c)},a.removeClass=function(a,b){a.className=a.className.replace(RegExp("(^|\\s)"+b+"(?:\\s|$)"),"$1")},a.getPos=function(a){var b=function(a){for(var b={x:0,y:0};a&&!/^(?:body|html)$/i.test(a.tagName);)b.x+=a.offsetLeft,b.y+=a.offsetTop,a=a.offsetParent;return b}(a),a=function(a){for(var b={x:0,y:0};a&&!/^(?:body|html)$/i.test(a.tagName);)b.x+=a.scrollLeft,b.y+=a.scrollTop,a=a.parentNode;return b}(a);return{x:b.x-a.x,y:b.y-a.y}},a.event={get:function(a,b){return a||(b||window).event},getWheel:function(a){return a.wheelDelta?a.wheelDelta/120:-(a.detail||0)/3},isRightClick:function(a){return a.which==3||a.button==2},getPos:function(a,b){var b=b||window,a=a||b.event,c=b.document,c=c.documentElement||c.body;return a.touches&&a.touches.length&&(a=a.touches[0]),{x:a.pageX||a.clientX+c.scrollLeft,y:a.pageY||a.clientY+c.scrollTop}},stop:function(a){a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0,a.preventDefault?a.preventDefault():a.returnValue=!1}},$jit.util=$jit.id=a;var b=function(c){var c=c||{},d=function(){for(var c in this)typeof this[c]!="function"&&(this[c]=a.unlink(this[c]));return this.constructor=d,b.prototyping?this:(c=this.initialize?this.initialize.apply(this,arguments):this,this.$$family="class",c)},e;for(e in b.Mutators)c[e]&&(c=b.Mutators[e](c,c[e]),delete c[e]);return a.extend(d,this),d.constructor=b,d.prototype=c,d};b.Mutators={Implements:function(c,d){return a.each(a.splat(d),function(a){b.prototyping=a;var a=typeof a=="function"?new a:a,d;for(d in a)d in c||(c[d]=a[d]);delete b.prototyping}),c}},a.extend(b,{inherit:function(c,d){for(var e in d){var f=d[e],g=c[e],h=a.type(f);g&&h=="function"?f!=g&&b.override(c,e,f):c[e]=h=="object"?a.merge(g,f):f}return c},override:function(a,c,d){var e=b.prototyping;e&&a[c]!=e[c]&&(e=null),a[c]=function(){var b=this.parent;this.parent=e?e[c]:a[c];var f=d.apply(this,arguments);return this.parent=b,f}}}),b.prototype.implement=function(){var c=this.prototype;return a.each(Array.prototype.slice.call(arguments||[]),function(a){b.inherit(c,a)}),this},$jit.Class=b,$jit.json={prune:function(a,b){this.each(a,function(a,c){c==b&&a.children&&(delete a.children,a.children=[])})},getParent:function(a,b){if(a.id==b)return!1;var c=a.children;if(c&&c.length>0)for(var d=0;d<c.length;d++){if(c[d].id==b)return a;var e=this.getParent(c[d],b);if(e)return e}return!1},getSubtree:function(a,b){if(a.id==b)return a;for(var c=0,d=a.children;d&&c<d.length;c++){var e=this.getSubtree(d[c],b);if(e!=null)return e}return null},eachLevel:function(a,b,c,d){if(b<=c&&(d(a,b),a.children))for(var e=0,a=a.children;e<a.length;e++)this.eachLevel(a[e],b+1,c,d)},each:function(a,b){this.eachLevel(a,0,Number.MAX_VALUE,b)}},$jit.Trans={$extend:!0,linear:function(a){return a}};var c=$jit.Trans;(function(){var b=function(b,c){return c=a.splat(c),a.extend(b,{easeIn:function(a){return b(a,c)},easeOut:function(a){return 1-b(1-a,c)},easeInOut:function(a){return a<=.5?b(2*a,c)/2:(2-b(2*(1-a),c))/2}})};a.each({Pow:function(a,b){return Math.pow(a,b[0]||6)},Expo:function(a){return Math.pow(2,8*(a-1))},Circ:function(a){return 1-Math.sin(Math.acos(a))},Sine:function(a){return 1-Math.sin((1-a)*Math.PI/2)},Back:function(a,b){return b=b[0]||1.618,Math.pow(a,2)*((b+1)*a-b)},Bounce:function(a){for(var b,c=0,d=1;;c+=d,d/=2)if(a>=(7-4*c)/11){b=d*d-Math.pow((11-6*c-11*a)/4,2);break}return b},Elastic:function(a,b){return Math.pow(2,10*--a)*Math.cos(20*a*Math.PI*(b[0]||1)/3)}},function(a,d){c[d]=b(a)}),a.each(["Quad","Cubic","Quart","Quint"],function(a,d){c[a]=b(function(a){return Math.pow(a,[d+2])})})})();var d=new b({initialize:function(a){this.setOptions(a)},setOptions:function(b){return this.opt=a.merge({duration:2500,fps:40,transition:c.Quart.easeInOut,compute:a.empty,complete:a.empty,link:"ignore"},b||{}),this},step:function(){var b=a.time(),c=this.opt;b<this.time+c.duration?(b=c.transition((b-this.time)/c.duration),c.compute(b)):(this.timer=clearInterval(this.timer),c.compute(1),c.complete())},start:function(){return this.check()?(this.time=0,this.startTimer(),this):this},startTimer:function(){var b=this,c=this.opt.fps;return this.timer?!1:(this.time=a.time()-this.time,this.timer=setInterval(function(){b.step()},Math.round(1e3/c)),!0)},pause:function(){return this.stopTimer(),this},resume:function(){return this.startTimer(),this},stopTimer:function(){return this.timer?(this.time=a.time()-this.time,this.timer=clearInterval(this.timer),!0):!1},check:function(){return this.timer?this.opt.link=="cancel"?(this.stopTimer(),!0):!1:!0}}),e=function(){for(var b=arguments,c=0,d=b.length,f={};c<d;c++){var g=e[b[c]];g.$extend?a.extend(f,g):f[b[c]]=g}return f};e.Canvas={$extend:!0,injectInto:"id",type:"2D",width:!1,height:!1,useCanvas:!1,withLabels:!0,background:!1,Scene:{Lighting:{enable:!1,ambient:[1,1,1],directional:{direction:{x:-100,y:-100,z:-100},color:[.5,.3,.1]}}}},e.Node={$extend:!1,overridable:!1,type:"circle",color:"#ccb",alpha:1,dim:3,height:20,width:90,autoHeight:!1,autoWidth:!1,lineWidth:1,transform:!0,align:"center",angularWidth:1,span:1,CanvasStyles:{}},e.Edge={$extend:!1,overridable:!1,type:"line",color:"#ccb",lineWidth:1,dim:15,alpha:1,epsilon:7,CanvasStyles:{}},e.Fx={$extend:!0,fps:40,duration:2500,transition:$jit.Trans.Quart.easeInOut,clearCanvas:!0},e.Label={$extend:!1,overridable:!1,type:"HTML",style:" ",size:10,family:"sans-serif",textAlign:"center",textBaseline:"alphabetic",color:"#fff"},e.Tips={$extend:!1,enable:!1,type:"auto",offsetX:20,offsetY:20,force:!1,onShow:a.empty,onHide:a.empty},e.NodeStyles={$extend:!1,enable:!1,type:"auto",stylesHover:!1,stylesClick:!1},e.Events={$extend:!1,enable:!1,enableForEdges:!1,type:"auto",onClick:a.empty,onRightClick:a.empty,onMouseMove:a.empty,onMouseEnter:a.empty,onMouseLeave:a.empty,onDragStart:a.empty,onDragMove:a.empty,onDragCancel:a.empty,onDragEnd:a.empty,onTouchStart:a.empty,onTouchMove:a.empty,onTouchEnd:a.empty,onMouseWheel:a.empty},e.Navigation={$extend:!1,enable:!1,type:"auto",panning:!1,zooming:!1},e.Controller={$extend:!0,onBeforeCompute:a.empty,onAfterCompute:a.empty,onCreateLabel:a.empty,onPlaceLabel:a.empty,onComplete:a.empty,onBeforePlotLine:a.empty,onAfterPlotLine:a.empty,onBeforePlotNode:a.empty,onAfterPlotNode:a.empty,request:!1};var f={initialize:function(a,b){this.viz=b,this.canvas=b.canvas,this.config=b.config[a],this.nodeTypes=b.fx.nodeTypes;var c=this.config.type;this.labelContainer=(this.dom=c=="auto"?b.config.Label.type!="Native":c!="Native")&&b.labels.getLabelContainer(),this.isEnabled()&&this.initializePost()},initializePost:a.empty,setAsProperty:a.lambda(!1),isEnabled:function(){return this.config.enable},isLabel:function(b,c,d){var b=a.event.get(b,c),c=this.labelContainer,e=b.target||b.srcElement,b=b.relatedTarget;return d?b&&b==this.viz.canvas.getCtx().canvas&&!!e&&this.isDescendantOf(e,c):this.isDescendantOf(e,c)},isDescendantOf:function(a,b){for(;a&&a.parentNode;){if(a.parentNode==b)return a;a=a.parentNode}return!1}},g={onMouseUp:a.empty,onMouseDown:a.empty,onMouseMove:a.empty,onMouseOver:a.empty,onMouseOut:a.empty,onMouseWheel:a.empty,onTouchStart:a.empty,onTouchMove:a.empty,onTouchEnd:a.empty,onTouchCancel:a.empty},h=new b({initialize:function(a){this.viz=a,this.canvas=a.canvas,this.edge=this.node=!1,this.registeredObjects=[],this.attachEvents()},attachEvents:function(){var b=this.canvas.getElement(),c=this;b.oncontextmenu=a.lambda(!1),a.addEvents(b,{mouseup:function(b,d){var e=a.event.get(b,d);c.handleEvent("MouseUp",b,d,c.makeEventObject(b,d),a.event.isRightClick(e))},mousedown:function(b,d){var e=a.event.get(b,d);c.handleEvent("MouseDown",b,d,c.makeEventObject(b,d),a.event.isRightClick(e))},mousemove:function(a,b){c.handleEvent("MouseMove",a,b,c.makeEventObject(a,b))},mouseover:function(a,b){c.handleEvent("MouseOver",a,b,c.makeEventObject(a,b))},mouseout:function(a,b){c.handleEvent("MouseOut",a,b,c.makeEventObject(a,b))},touchstart:function(a,b){c.handleEvent("TouchStart",a,b,c.makeEventObject(a,b))},touchmove:function(a,b){c.handleEvent("TouchMove",a,b,c.makeEventObject(a,b))},touchend:function(a,b){c.handleEvent("TouchEnd",a,b,c.makeEventObject(a,b))}});var d=function(b,d){var e=a.event.get(b,d),e=a.event.getWheel(e);c.handleEvent("MouseWheel",b,d,e)};!document.getBoxObjectFor&&window.mozInnerScreenX==null?a.addEvent(b,"mousewheel",d):b.addEventListener("DOMMouseScroll",d,!1)},register:function(a){this.registeredObjects.push(a)},handleEvent:function(){for(var a=Array.prototype.slice.call(arguments),b=a.shift(),c=0,d=this.registeredObjects,e=d.length;c<e;c++)d[c]["on"+b].apply(d[c],a)},makeEventObject:function(b,c){var d=this,e=this.viz.graph,f=this.viz.fx,g=f.nodeTypes,h=f.edgeTypes;return{pos:!1,node:!1,edge:!1,contains:!1,getNodeCalled:!1,getEdgeCalled:!1,getPos:function(){var e=d.viz.canvas,f=e.getSize(),g=e.getPos(),h=e.translateOffsetX,i=e.translateOffsetY,j=e.scaleOffsetX,e=e.scaleOffsetY,k=a.event.getPos(b,c);return this.pos={x:(k.x-g.x-f.width/2-h)*1/j,y:(k.y-g.y-f.height/2-i)*1/e}},getNode:function(){if(this.getNodeCalled)return this.node;this.getNodeCalled=!0;for(var a in e.nodes){var b=e.nodes[a],c=b&&g[b.getData("type")];if(c=c&&c.contains&&c.contains.call(f,b,this.getPos()))return this.contains=c,d.node=this.node=b}return d.node=this.node=!1},getEdge:function(){if(this.getEdgeCalled)return this.edge;this.getEdgeCalled=!0;var a={},b;for(b in e.edges){var c=e.edges[b];a[b]=!0;for(var g in c)if(!(g in a)){var i=c[g],j=i&&h[i.getData("type")];if(j=j&&j.contains&&j.contains.call(f,i,this.getPos()))return this.contains=j,d.edge=this.edge=i}}return d.edge=this.edge=!1},getContains:function(){return this.getNodeCalled?this.contains:(this.getNode(),this.contains)}}}}),i={initializeExtras:function(){var b=new h(this),c=this;a.each(["NodeStyles","Tips","Navigation","Events"],function(a){var d=new i.Classes[a](a,c);d.isEnabled()&&b.register(d),d.setAsProperty()&&(c[a.toLowerCase()]=d)})},Classes:{}};i.Classes.Events=new b({Implements:[f,g],initializePost:function(){this.fx=this.viz.fx,this.ntypes=this.viz.fx.nodeTypes,this.etypes=this.viz.fx.edgeTypes,this.moved=this.touchMoved=this.touched=this.pressed=this.hovered=!1},setAsProperty:a.lambda(!0),onMouseUp:function(b,c,d,e){b=a.event.get(b,c),this.moved||(e?this.config.onRightClick(this.hovered,d,b):this.config.onClick(this.pressed,d,b)),this.pressed&&(this.moved?this.config.onDragEnd(this.pressed,d,b):this.config.onDragCancel(this.pressed,d,b),this.pressed=this.moved=!1)},onMouseOut:function(b,c,d){var e=a.event.get(b,c),f;if(this.dom&&(f=this.isLabel(b,c,!0)))this.config.onMouseLeave(this.viz.graph.getNode(f.id),d,e),this.hovered=!1;else{b=e.relatedTarget;for(c=this.canvas.getElement();b&&b.parentNode;){if(c==b.parentNode)return;b=b.parentNode}this.hovered&&(this.config.onMouseLeave(this.hovered,d,e),this.hovered=!1)}},onMouseOver:function(b,c,d){var e=a.event.get(b,c),f;this.dom&&(f=this.isLabel(b,c,!0))&&(this.hovered=this.viz.graph.getNode(f.id),this.config.onMouseEnter(this.hovered,d,e))},onMouseMove:function(b,c,d){b=a.event.get(b,c);if(this.pressed)this.moved=!0,this.config.onDragMove(this.pressed,d,b);else if(this.dom)this.config.onMouseMove(this.hovered,d,b);else{if(this.hovered){var c=this.hovered,e=c.nodeFrom?this.etypes[c.getData("type")]:this.ntypes[c.getData("type")];if(e&&e.contains&&e.contains.call(this.fx,c,d.getPos())){this.config.onMouseMove(c,d,b);return}this.config.onMouseLeave(c,d,b),this.hovered=!1}(this.hovered=d.getNode()||this.config.enableForEdges&&d.getEdge())?this.config.onMouseEnter(this.hovered,d,b):this.config.onMouseMove(!1,d,b)}},onMouseWheel:function(b,c,d){this.config.onMouseWheel(d,a.event.get(b,c))},onMouseDown:function(b,c,d){var e=a.event.get(b,c);if(this.dom){if(b=this.isLabel(b,c))this.pressed=this.viz.graph.getNode(b.id)}else this.pressed=d.getNode()||this.config.enableForEdges&&d.getEdge();this.pressed&&this.config.onDragStart(this.pressed,d,e)},onTouchStart:function(b,c,d){var e=a.event.get(b,c),f;(this.touched=this.dom&&(f=this.isLabel(b,c))?this.viz.graph.getNode(f.id):d.getNode()||this.config.enableForEdges&&d.getEdge())&&this.config.onTouchStart(this.touched,d,e)},onTouchMove:function(b,c,d){b=a.event.get(b,c),this.touched&&(this.touchMoved=!0,this.config.onTouchMove(this.touched,d,b))},onTouchEnd:function(b,c,d){b=a.event.get(b,c),this.touched&&(this.touchMoved?this.config.onTouchEnd(this.touched,d,b):this.config.onTouchCancel(this.touched,d,b),this.touched=this.touchMoved=!1)}}),i.Classes.Tips=new b({Implements:[f,g],initializePost:function(){if(document.body){var b=a("_tooltip")||document.createElement("div");b.id="_tooltip",b.className="tip",a.extend(b.style,{position:"absolute",display:"none",zIndex:13e3}),document.body.appendChild(b),this.tip=b,this.node=!1}},setAsProperty:a.lambda(!0),onMouseOut:function(b,c){a.event.get(b,c);if(this.dom&&this.isLabel(b,c,!0))this.hide(!0);else{for(var d=b.relatedTarget,e=this.canvas.getElement();d&&d.parentNode;){if(e==d.parentNode)return;d=d.parentNode}this.hide(!1)}},onMouseOver:function(a,b){var c;this.dom&&(c=this.isLabel(a,b,!1))&&(this.node=this.viz.graph.getNode(c.id),this.config.onShow(this.tip,this.node,c))},onMouseMove:function(b,c,d){this.dom&&this.isLabel(b,c)&&this.setTooltipPosition(a.event.getPos(b,c));if(!this.dom){var e=d.getNode();if(e){if(this.config.force||!this.node||this.node.id!=e.id)this.node=e,this.config.onShow(this.tip,e,d.getContains());this.setTooltipPosition(a.event.getPos(b,c))}else this.hide(!0)}},setTooltipPosition:function(a){var b=this.tip,c=b.style,d=this.config;c.display="";var e={height:document.body.clientHeight,width:document.body.clientWidth},b={width:b.offsetWidth,height:b.offsetHeight},f=d.offsetX,d=d.offsetY;c.top=(a.y+d+b.height>e.height?a.y-b.height-d:a.y+d)+"px",c.left=(a.x+b.width+f>e.width?a.x-b.width-f:a.x+f)+"px"},hide:function(a){this.tip.style.display="none",a&&this.config.onHide()}}),i.Classes.NodeStyles=new b({Implements:[f,g],initializePost:function(){this.fx=this.viz.fx,this.types=this.viz.fx.nodeTypes,this.nStyles=this.config,this.nodeStylesOnHover=this.nStyles.stylesHover,this.nodeStylesOnClick=this.nStyles.stylesClick,this.hoveredNode=!1,this.fx.nodeFxAnimation=new d,this.move=this.down=!1},onMouseOut:function(a,b){this.down=this.move=!1;if(this.hoveredNode){this.dom&&this.isLabel(a,b,!0)&&this.toggleStylesOnHover(this.hoveredNode,!1);for(var c=a.relatedTarget,d=this.canvas.getElement();c&&c.parentNode;){if(d==c.parentNode)return;c=c.parentNode}this.toggleStylesOnHover(this.hoveredNode,!1),this.hoveredNode=!1}},onMouseOver:function(a,b){var c;this.dom&&(c=this.isLabel(a,b,!0))&&(c=this.viz.graph.getNode(c.id),!c.selected)&&(this.hoveredNode=c,this.toggleStylesOnHover(this.hoveredNode,!0))},onMouseDown:function(a,b,c,d){if(!d){var e;this.dom&&(e=this.isLabel(a,b))?this.down=this.viz.graph.getNode(e.id):this.dom||(this.down=c.getNode()),this.move=!1}},onMouseUp:function(a,b,c,d){d||(this.move||this.onClick(c.getNode()),this.down=this.move=!1)},getRestoredStyles:function(a,b){var c={},d=this["nodeStylesOn"+b],e;for(e in d)c[e]=a.styles["$"+e];return c},toggleStylesOnHover:function(a,b){this.nodeStylesOnHover&&this.toggleStylesOn("Hover",a,b)},toggleStylesOnClick:function(a,b){this.nodeStylesOnClick&&this.toggleStylesOn("Click",a,b)},toggleStylesOn:function(b,d,e){var f=this.viz;if(e){d.styles||(d.styles=a.merge(d.data,{}));for(var g in this["nodeStylesOn"+b])e="$"+g,e in d.styles||(d.styles[e]=d.getData(g));f.fx.nodeFx(a.extend({elements:{id:d.id,properties:this["nodeStylesOn"+b]},transition:c.Quart.easeOut,duration:300,fps:40},this.config))}else b=this.getRestoredStyles(d,b),f.fx.nodeFx(a.extend({elements:{id:d.id,properties:b},transition:c.Quart.easeOut,duration:300,fps:40},this.config))},onClick:function(a){if(a){var b=this.nodeStylesOnClick;b&&(a.selected?(this.toggleStylesOnClick(a,!1),delete a.selected):(this.viz.graph.eachNode(function(a){if(a.selected){for(var c in b)a.setData(c,a.styles["$"+c],"end");delete a.selected}}),this.toggleStylesOnClick(a,!0),a.selected=!0,delete a.hovered,this.hoveredNode=!1))}},onMouseMove:function(a,b,c){this.down&&(this.move=!0);if(!this.dom||!this.isLabel(a,b)){var d=this.nodeStylesOnHover;if(d&&!this.dom){if(this.hoveredNode&&(a=this.types[this.hoveredNode.getData("type")])&&a.contains&&a.contains.call(this.fx,this.hoveredNode,c.getPos()))return;c=c.getNode(),(this.hoveredNode||c)&&!c.hovered&&(c&&!c.selected?(this.fx.nodeFxAnimation.stopTimer(),this.viz.graph.eachNode(function(a){if(a.hovered&&!a.selected){for(var b in d)a.setData(b,a.styles["$"+b],"end");delete a.hovered}}),c.hovered=!0,this.hoveredNode=c,this.toggleStylesOnHover(c,!0)):this.hoveredNode&&!this.hoveredNode.selected&&(this.fx.nodeFxAnimation.stopTimer(),this.toggleStylesOnHover(this.hoveredNode,!1),delete this.hoveredNode.hovered,this.hoveredNode=!1))}}}}),i.Classes.Navigation=new b({Implements:[f,g],initializePost:function(){this.pressed=this.pos=!1},onMouseWheel:function(b,c,d){this.config.zooming&&(a.event.stop(a.event.get(b,c)),b=1+d*(this.config.zooming/1e3),this.canvas.scale(b,b))},onMouseDown:function(a,b,c){if(this.config.panning&&(this.config.panning!="avoid nodes"||(this.dom?!this.isLabel(a,b):!c.getNode()))){this.pressed=!0,this.pos=c.getPos();var a=this.canvas,b=a.translateOffsetX,c=a.translateOffsetY,d=a.scaleOffsetY;this.pos.x*=a.scaleOffsetX,this.pos.x+=b,this.pos.y*=d,this.pos.y+=c}},onMouseMove:function(a,b,c){if(this.config.panning&&this.pressed&&(this.config.panning!="avoid nodes"||(this.dom?!this.isLabel(a,b):!c.getNode()))){var a=this.pos,c=c.getPos(),d=this.canvas,e=d.translateOffsetX,f=d.translateOffsetY,b=d.scaleOffsetX,d=d.scaleOffsetY;c.x*=b,c.y*=d,c.x+=e,c.y+=f,e=c.x-a.x,a=c.y-a.y,this.pos=c,this.canvas.translate(e*1/b,a*1/d)}},onMouseUp:function(){this.config.panning&&(this.pressed=!1)}});var j;(function(){function c(b,c){var d=document.createElement(b),f;for(f in c)typeof c[f]=="object"?a.extend(d[f],c[f]):d[f]=c[f];return b=="canvas"&&!e&&G_vmlCanvasManager&&(d=G_vmlCanvasManager.initElement(document.body.appendChild(d))),d}var d=typeof HTMLCanvasElement,e=d=="object"||d=="function";$jit.Canvas=j=new b({canvases:[],pos:!1,element:!1,labelContainer:!1,translateOffsetX:0,translateOffsetY:0,scaleOffsetX:1,scaleOffsetY:1,initialize:function(b,d){this.viz=b,this.opt=this.config=d;var e=a.type(d.injectInto)=="string"?d.injectInto:d.injectInto.id,f=d.type,g=e+"-label",h=a(e),i=d.width||h.offsetWidth,k=d.height||h.offsetHeight;this.id=e;var l={injectInto:e,width:i,height:k};this.element=c("div",{id:e+"-canvaswidget",style:{position:"relative",width:i+"px",height:k+"px"}}),this.labelContainer=this.createLabelContainer(d.Label.type,g,l),this.canvases.push(new j.Base[f]({config:a.extend({idSuffix:"-canvas"},l),plot:function(){b.fx.plot()},resize:function(){b.refresh()}}));if(e=d.background)l=new j.Background[e.type](b,a.extend(e,l)),this.canvases.push(new j.Base[f](l));for(f=this.canvases.length;f--;)this.element.appendChild(this.canvases[f].canvas),f>0&&this.canvases[f].plot();this.element.appendChild(this.labelContainer),h.appendChild(this.element);var m=null,n=this;a.addEvent(window,"scroll",function(){clearTimeout(m),m=setTimeout(function(){n.getPos(!0)},500)})},getCtx:function(a){return this.canvases[a||0].getCtx()},getConfig:function(){return this.opt},getElement:function(){return this.element},getSize:function(a){return this.canvases[a||0].getSize()},resize:function(a,b){this.getPos(!0),this.translateOffsetX=this.translateOffsetY=0,this.scaleOffsetX=this.scaleOffsetY=1;for(var c=0,d=this.canvases.length;c<d;c++)this.canvases[c].resize(a,b);c=this.element.style,c.width=a+"px",c.height=b+"px",this.labelContainer&&(this.labelContainer.style.width=a+"px")},translate:function(a,b,c){this.translateOffsetX+=a*this.scaleOffsetX,this.translateOffsetY+=b*this.scaleOffsetY;for(var d=0,e=this.canvases.length;d<e;d++)this.canvases[d].translate(a,b,c)},scale:function(a,b){var c=this.scaleOffsetX*a,d=this.scaleOffsetY*b,e=this.translateOffsetX*(a-1)/c,f=this.translateOffsetY*(b-1)/d;this.scaleOffsetX=c,this.scaleOffsetY=d,c=0;for(d=this.canvases.length;c<d;c++)this.canvases[c].scale(a,b,!0);this.translate(e,f,!1)},getPos:function(b){return b||!this.pos?this.pos=a.getPos(this.getElement()):this.pos},clear:function(a){this.canvases[a||0].clear()},path:function(a,b){var c=this.canvases[0].getCtx();c.beginPath(),b(c),c[a](),c.closePath()},createLabelContainer:function(a,b,d){if(a=="HTML"||a=="Native")return c("div",{id:b,style:{overflow:"visible",position:"absolute",top:0,left:0,width:d.width+"px",height:0}});if(a=="SVG"){a=document.createElementNS("http://www.w3.org/2000/svg","svg:svg"),a.setAttribute("width",d.width),a.setAttribute("height",d.height);var e=a.style;return e.position="absolute",e.left=e.top="0px",e=document.createElementNS("http://www.w3.org/2000/svg","svg:g"),e.setAttribute("width",d.width),e.setAttribute("height",d.height),e.setAttribute("x",0),e.setAttribute("y",0),e.setAttribute("id",b),a.appendChild(e),a}}}),j.Base={},j.Base["2D"]=new b({translateOffsetX:0,translateOffsetY:0,scaleOffsetX:1,scaleOffsetY:1,initialize:function(a){this.viz=a,this.opt=a.config,this.size=!1,this.createCanvas(),this.translateToCenter()},createCanvas:function(){var a=this.opt,b=a.width,d=a.height;this.canvas=c("canvas",{id:a.injectInto+a.idSuffix,width:b,height:d,style:{position:"absolute",top:0,left:0,width:b+"px",height:d+"px"}})},getCtx:function(){return this.ctx?this.ctx:this.ctx=this.canvas.getContext("2d")},getSize:function(){if(this.size)return this.size;var a=this.canvas;return this.size={width:a.width,height:a.height}},translateToCenter:function(a){var b=this.getSize(),c=a?b.width-a.width-this.translateOffsetX*2:b.width;height=a?b.height-a.height-this.translateOffsetY*2:b.height,b=this.getCtx(),a&&b.scale(1/this.scaleOffsetX,1/this.scaleOffsetY),b.translate(c/2,height/2)},resize:function(a,b){var c=this.getSize(),d=this.canvas,f=d.style;this.size=!1,d.width=a,d.height=b,f.width=a+"px",f.height=b+"px",e?this.translateToCenter():this.translateToCenter(c),this.translateOffsetX=this.translateOffsetY=0,this.scaleOffsetX=this.scaleOffsetY=1,this.clear(),this.viz.resize(a,b,this)},translate:function(a,b,c){var d=this.scaleOffsetY;this.translateOffsetX+=a*this.scaleOffsetX,this.translateOffsetY+=b*d,this.getCtx().translate(a,b),!c&&this.plot()},scale:function(a,b,c){this.scaleOffsetX*=a,this.scaleOffsetY*=b,this.getCtx().scale(a,b),!c&&this.plot()},clear:function(){var a=this.getSize(),b=this.translateOffsetX,c=this.translateOffsetY,d=this.scaleOffsetX,e=this.scaleOffsetY;this.getCtx().clearRect((-a.width/2-b)*1/d,(-a.height/2-c)*1/e,a.width*1/d,a.height*1/e)},plot:function(){this.clear(),this.viz.plot(this)}}),j.Background={},j.Background.Circles=new b({initialize:function(b,c){this.viz=b,this.config=a.merge({idSuffix:"-bkcanvas",levelDistance:100,numberOfCircles:6,CanvasStyles:{},offset:0},c)},resize:function(a,b,c){this.plot(c)},plot:function(a){var a=a.getCtx(),b=this.config,c=b.CanvasStyles,d;for(d in c)a[d]=c[d];d=b.numberOfCircles,b=b.levelDistance;for(c=1;c<=d;c++)a.beginPath(),a.arc(0,0,b*c,0,2*Math.PI,!1),a.stroke(),a.closePath()}})})();var k=function(a,b){this.theta=a||0,this.rho=b||0};$jit.Polar=k,k.prototype={getc:function(a){return this.toComplex(a)},getp:function(){return this},set:function(a){a=a.getp(),this.theta=a.theta,this.rho=a.rho},setc:function(a,b){this.rho=Math.sqrt(a*a+b*b),this.theta=Math.atan2(b,a),this.theta<0&&(this.theta+=Math.PI*2)},setp:function(a,b){this.theta=a,this.rho=b},clone:function(){return new k(this.theta,this.rho)},toComplex:function(a){var b=Math.cos(this.theta)*this.rho,c=Math.sin(this.theta)*this.rho;return a?{x:b,y:c}:new l(b,c)},add:function(a){return new k(this.theta+a.theta,this.rho+a.rho)},scale:function(a){return new k(this.theta,this.rho*a)},equals:function(a){return this.theta==a.theta&&this.rho==a.rho},$add:function(a){return this.theta+=a.theta,this.rho+=a.rho,this},$madd:function(a){return this.theta=(this.theta+a.theta)%(Math.PI*2),this.rho+=a.rho,this},$scale:function(a){return this.rho*=a,this},isZero:function(){var a=Math.abs;return a(this.theta)<1e-4&&a(this.rho)<1e-4},interpolate:function(a,b){var c=Math.PI,d=c*2,e=function(a){return a<0?a%d+d:a%d},f=this.theta,g=a.theta,h=Math.abs(f-g);return{theta:h==c?f>g?e(g+(f-d-g)*b):e(g-d+(f-g)*b):h>=c?f>g?e(g+(f-d-g)*b):e(g-d+(f-(g-d))*b):e(g+(f-g)*b),rho:(this.rho-a.rho)*b+a.rho}}},k.KER=new k(0,0);var l=function(a,b){this.x=a||0,this.y=b||0};$jit.Complex=l,l.prototype={getc:function(){return this},getp:function(a){return this.toPolar(a)},set:function(a){a=a.getc(!0),this.x=a.x,this.y=a.y},setc:function(a,b){this.x=a,this.y=b},setp:function(a,b){this.x=Math.cos(a)*b,this.y=Math.sin(a)*b},clone:function(){return new l(this.x,this.y)},toPolar:function(a){var b=this.norm(),c=Math.atan2(this.y,this.x);return c<0&&(c+=Math.PI*2),a?{theta:c,rho:b}:new k(c,b)},norm:function(){return Math.sqrt(this.squaredNorm())},squaredNorm:function(){return this.x*this.x+this.y*this.y},add:function(a){return new l(this.x+a.x,this.y+a.y)},prod:function(a){return new l(this.x*a.x-this.y*a.y,this.y*a.x+this.x*a.y)},conjugate:function(){return new l(this.x,-this.y)},scale:function(a){return new l(this.x*a,this.y*a)},equals:function(a){return this.x==a.x&&this.y==a.y},$add:function(a){return this.x+=a.x,this.y+=a.y,this},$prod:function(a){var b=this.x,c=this.y;return this.x=b*a.x-c*a.y,this.y=c*a.x+b*a.y,this},$conjugate:function(){return this.y=-this.y,this},$scale:function(a){return this.x*=a,this.y*=a,this},$div:function(a){var b=this.x,c=this.y,d=a.squaredNorm();return this.x=b*a.x+c*a.y,this.y=c*a.x-b*a.y,this.$scale(1/d)},isZero:function(){var a=Math.abs;return a(this.x)<1e-4&&a(this.y)<1e-4}},l.KER=new l(0,0),$jit.Graph=new b({initialize:function(b,c,d,e){var f={klass:l,Node:{}};this.Node=c,this.Edge=d,this.Label=e,this.opt=a.merge(f,b||{}),this.nodes={},this.edges={};var g=this;this.nodeList={};for(var h in n)g.nodeList[h]=function(a){return function(){var b=Array.prototype.slice.call(arguments);g.eachNode(function(c){c[a].apply(c,b)})}}(h)},getNode:function(a){return this.hasNode(a)?this.nodes[a]:!1},get:function(a){return this.getNode(a)},getByName:function(a){for(var b in this.nodes){var c=this.nodes[b];if(c.name==a)return c}return!1},getAdjacence:function(a,b){return a in this.edges?this.edges[a][b]:!1},addNode:function(b){if(!this.nodes[b.id]){var c=this.edges[b.id]={};this.nodes[b.id]=new m.Node(a.extend({id:b.id,name:b.name,data:a.merge(b.data||{},{}),adjacencies:c},this.opt.Node),this.opt.klass,this.Node,this.Edge,this.Label)}return this.nodes[b.id]},addAdjacence:function(a,b,c){this.hasNode(a.id)||this.addNode(a),this.hasNode(b.id)||this.addNode(b),a=this.nodes[a.id],b=this.nodes[b.id];if(!a.adjacentTo(b)){var d=this.edges[a.id]=this.edges[a.id]||{},e=this.edges[b.id]=this.edges[b.id]||{};return d[b.id]=e[a.id]=new m.Adjacence(a,b,c,this.Edge,this.Label),d[b.id]}return this.edges[a.id][b.id]},removeNode:function(a){if(this.hasNode(a)){delete this.nodes[a];var b=this.edges[a],c;for(c in b)delete this.edges[c][a];delete this.edges[a]}},removeAdjacence:function(a,b){delete this.edges[a][b],delete this.edges[b][a]},hasNode:function(a){return a in this.nodes},empty:function(){this.nodes={},this.edges={}}});var m=$jit.Graph,n;(function(){var b=function(a,b,c,d,e){var f,c=c||"current";return c=="current"?f=this.data:c=="start"?f=this.startData:c=="end"&&(f=this.endData),a="$"+(a?a+"-":"")+b,d?f[a]:this.Config.overridable?a in f?f[a]:a in this.data?this.data[a]:e[b]||0:e[b]||0},c=function(a,b,c,d){var d=d||"current",e;d=="current"?e=this.data:d=="start"?e=this.startData:d=="end"&&(e=this.endData),e["$"+(a?a+"-":"")+b]=c},d=function(b,c){var b="$"+(b?b+"-":""),d=this;a.each(c,function(a){a=b+a,delete d.data[a],delete d.endData[a],delete d.startData[a]})};n={getData:function(a,c,d){return b.call(this,"",a,c,d,this.Config)},setData:function(a,b,d){c.call(this,"",a,b,d)},setDataset:function(b,c){var b=a.splat(b),d;for(d in c)for(var e=0,f=a.splat(c[d]),g=b.length;e<g;e++)this.setData(d,f[e],b[e])},removeData:function(){d.call(this,"",Array.prototype.slice.call(arguments))},getCanvasStyle:function(a,c,d){return b.call(this,"canvas",a,c,d,this.Config.CanvasStyles)},setCanvasStyle:function(a,b,d){c.call(this,"canvas",a,b,d)},setCanvasStyles:function(b,c){var b=a.splat(b),d;for(d in c)for(var e=0,f=a.splat(c[d]),g=b.length;e<g;e++)this.setCanvasStyle(d,f[e],b[e])},removeCanvasStyle:function(){d.call(this,"canvas",Array.prototype.slice.call(arguments))},getLabelData:function(a,c,d){return b.call(this,"label",a,c,d,this.Label)},setLabelData:function(a,b,d){c.call(this,"label",a,b,d)},setLabelDataset:function(b,c){var b=a.splat(b),d;for(d in c)for(var e=0,f=a.splat(c[d]),g=b.length;e<g;e++)this.setLabelData(d,f[e],b[e])},removeLabelData:function(){d.call(this,"label",Array.prototype.slice.call(arguments))}}})(),m.Node=new b({initialize:function(b,c,d,e,f){c={id:"",name:"",data:{},startData:{},endData:{},adjacencies:{},selected
24
+ :!1,drawn:!1,exist:!1,angleSpan:{begin:0,end:0},pos:new c,startPos:new c,endPos:new c},a.extend(this,a.extend(c,b)),this.Config=this.Node=d,this.Edge=e,this.Label=f},adjacentTo:function(a){return a.id in this.adjacencies},getAdjacency:function(a){return this.adjacencies[a]},getPos:function(a){a=a||"current";if(a=="current")return this.pos;if(a=="end")return this.endPos;if(a=="start")return this.startPos},setPos:function(a,b){var b=b||"current",c;b=="current"?c=this.pos:b=="end"?c=this.endPos:b=="start"&&(c=this.startPos),c.set(a)}}),m.Node.implement(n),m.Adjacence=new b({initialize:function(a,b,c,d,e){this.nodeFrom=a,this.nodeTo=b,this.data=c||{},this.startData={},this.endData={},this.Config=this.Edge=d,this.Label=e}}),m.Adjacence.implement(n),m.Util={filter:function(b){if(!b||a.type(b)!="string")return function(){return!0};var c=b.split(" ");return function(a){for(var b=0;b<c.length;b++)if(a[c[b]])return!1;return!0}},getNode:function(a,b){return a.nodes[b]},eachNode:function(a,b,c){var c=this.filter(c),d;for(d in a.nodes)c(a.nodes[d])&&b(a.nodes[d])},each:function(a,b,c){this.eachNode(a,b,c)},eachAdjacency:function(a,b,c){var d=a.adjacencies,c=this.filter(c),e;for(e in d){var f=d[e];if(c(f)){if(f.nodeFrom!=a){var g=f.nodeFrom;f.nodeFrom=f.nodeTo,f.nodeTo=g}b(f,e)}}},computeLevels:function(a,b,c,d){var c=c||0,e=this.filter(d);this.eachNode(a,function(a){a._flag=!1,a._depth=-1},d),a=a.getNode(b),a._depth=c;for(var f=[a];f.length!=0;){var g=f.pop();g._flag=!0,this.eachAdjacency(g,function(a){a=a.nodeTo,a._flag==0&&e(a)&&(a._depth<0&&(a._depth=g._depth+1+c),f.unshift(a))},d)}},eachBFS:function(a,b,c,d){var e=this.filter(d);this.clean(a);for(var f=[a.getNode(b)];f.length!=0;)a=f.pop(),a._flag=!0,c(a,a._depth),this.eachAdjacency(a,function(a){a=a.nodeTo,a._flag==0&&e(a)&&(a._flag=!0,f.unshift(a))},d)},eachLevel:function(a,b,c,d,e){var f=a._depth,g=this.filter(e),h=this,c=c===!1?Number.MAX_VALUE-f:c;(function i(a,b,c){var e=a._depth;e>=b&&e<=c&&g(a)&&d(a,e),e<c&&h.eachAdjacency(a,function(a){a=a.nodeTo,a._depth>e&&i(a,b,c)})})(a,b+f,c+f)},eachSubgraph:function(a,b,c){this.eachLevel(a,0,!1,b,c)},eachSubnode:function(a,b,c){this.eachLevel(a,1,1,b,c)},anySubnode:function(b,c,d){var e=!1,c=c||a.lambda(!0),f=a.type(c)=="string"?function(a){return a[c]}:c;return this.eachSubnode(b,function(a){f(a)&&(e=!0)},d),e},getSubnodes:function(b,c,d){var e=[],c=c||0,f;return a.type(c)=="array"?(f=c[0],c=c[1]):(f=c,c=Number.MAX_VALUE-b._depth),this.eachLevel(b,f,c,function(a){e.push(a)},d),e},getParents:function(a){var b=[];return this.eachAdjacency(a,function(c){c=c.nodeTo,c._depth<a._depth&&b.push(c)}),b},isDescendantOf:function(a,b){if(a.id==b)return!0;for(var c=this.getParents(a),d=!1,e=0;!d&&e<c.length;e++)d=d||this.isDescendantOf(c[e],b);return d},clean:function(a){this.eachNode(a,function(a){a._flag=!1})},getClosestNodeToOrigin:function(a,b,c){return this.getClosestNodeToPos(a,k.KER,b,c)},getClosestNodeToPos:function(a,b,c,d){var e=null,c=c||"current",b=b&&b.getc(!0)||l.KER,f=function(a,b){var c=a.x-b.x,d=a.y-b.y;return c*c+d*d};return this.eachNode(a,function(a){e=e==null||f(a.getPos(c).getc(!0),b)<f(e.getPos(c).getc(!0),b)?a:e},d),e}},a.each(["get","getNode","each","eachNode","computeLevels","eachBFS","clean","getClosestNodeToPos","getClosestNodeToOrigin"],function(a){m.prototype[a]=function(){return m.Util[a].apply(m.Util,[this].concat(Array.prototype.slice.call(arguments)))}}),a.each(["eachAdjacency","eachLevel","eachSubgraph","eachSubnode","anySubnode","getSubnodes","getParents","isDescendantOf"],function(a){m.Node.prototype[a]=function(){return m.Util[a].apply(m.Util,[this].concat(Array.prototype.slice.call(arguments)))}}),m.Op={options:{type:"nothing",duration:2e3,hideLabels:!0,fps:30},initialize:function(a){this.viz=a},removeNode:function(b,c){var d=this.viz,e=a.merge(this.options,d.controller,c),f=a.splat(b),g,h,i;switch(e.type){case"nothing":for(g=0;g<f.length;g++)d.graph.removeNode(f[g]);break;case"replot":this.removeNode(f,{type:"nothing"}),d.labels.clearLabels(),d.refresh(!0);break;case"fade:seq":case"fade":h=this;for(g=0;g<f.length;g++)i=d.graph.getNode(f[g]),i.setData("alpha",0,"end");d.fx.animate(a.merge(e,{modes:["node-property:alpha"],onComplete:function(){h.removeNode(f,{type:"nothing"}),d.labels.clearLabels(),d.reposition(),d.fx.animate(a.merge(e,{modes:["linear"]}))}}));break;case"fade:con":h=this;for(g=0;g<f.length;g++)i=d.graph.getNode(f[g]),i.setData("alpha",0,"end"),i.ignore=!0;d.reposition(),d.fx.animate(a.merge(e,{modes:["node-property:alpha","linear"],onComplete:function(){h.removeNode(f,{type:"nothing"}),e.onComplete&&e.onComplete()}}));break;case"iter":h=this,d.fx.sequence({condition:function(){return f.length!=0},step:function(){h.removeNode(f.shift(),{type:"nothing"}),d.labels.clearLabels()},onComplete:function(){e.onComplete&&e.onComplete()},duration:Math.ceil(e.duration/f.length)});break;default:this.doError()}},removeEdge:function(b,c){var d=this.viz,e=a.merge(this.options,d.controller,c),f=a.type(b[0])=="string"?[b]:b,g,h,i;switch(e.type){case"nothing":for(g=0;g<f.length;g++)d.graph.removeAdjacence(f[g][0],f[g][1]);break;case"replot":this.removeEdge(f,{type:"nothing"}),d.refresh(!0);break;case"fade:seq":case"fade":h=this;for(g=0;g<f.length;g++)(i=d.graph.getAdjacence(f[g][0],f[g][1]))&&i.setData("alpha",0,"end");d.fx.animate(a.merge(e,{modes:["edge-property:alpha"],onComplete:function(){h.removeEdge(f,{type:"nothing"}),d.reposition(),d.fx.animate(a.merge(e,{modes:["linear"]}))}}));break;case"fade:con":h=this;for(g=0;g<f.length;g++)if(i=d.graph.getAdjacence(f[g][0],f[g][1]))i.setData("alpha",0,"end"),i.ignore=!0;d.reposition(),d.fx.animate(a.merge(e,{modes:["edge-property:alpha","linear"],onComplete:function(){h.removeEdge(f,{type:"nothing"}),e.onComplete&&e.onComplete()}}));break;case"iter":h=this,d.fx.sequence({condition:function(){return f.length!=0},step:function(){h.removeEdge(f.shift(),{type:"nothing"}),d.labels.clearLabels()},onComplete:function(){e.onComplete()},duration:Math.ceil(e.duration/f.length)});break;default:this.doError()}},sum:function(b,c){var d=this.viz,e=a.merge(this.options,d.controller,c),f=d.root,g;d.root=c.id||d.root;switch(e.type){case"nothing":g=d.construct(b),g.eachNode(function(a){a.eachAdjacency(function(a){d.graph.addAdjacence(a.nodeFrom,a.nodeTo,a.data)})});break;case"replot":d.refresh(!0),this.sum(b,{type:"nothing"}),d.refresh(!0);break;case"fade:seq":case"fade":case"fade:con":that=this,g=d.construct(b);var h=this.preprocessSum(g)?["node-property:alpha","edge-property:alpha"]:["node-property:alpha"];d.reposition(),e.type!="fade:con"?d.fx.animate(a.merge(e,{modes:["linear"],onComplete:function(){d.fx.animate(a.merge(e,{modes:h,onComplete:function(){e.onComplete()}}))}})):(d.graph.eachNode(function(a){a.id!=f&&a.pos.isZero()&&(a.pos.set(a.endPos),a.startPos.set(a.endPos))}),d.fx.animate(a.merge(e,{modes:["linear"].concat(h)})));break;default:this.doError()}},morph:function(b,c,d){var d=d||{},e=this.viz,f=a.merge(this.options,e.controller,c),g=e.root,h;e.root=c.id||e.root;switch(f.type){case"nothing":h=e.construct(b),h.eachNode(function(a){var b=e.graph.hasNode(a.id);a.eachAdjacency(function(a){var b=!!e.graph.getAdjacence(a.nodeFrom.id,a.nodeTo.id);e.graph.addAdjacence(a.nodeFrom,a.nodeTo,a.data);if(b){var b=e.graph.getAdjacence(a.nodeFrom.id,a.nodeTo.id),c;for(c in a.data||{})b.data[c]=a.data[c]}});if(b){var b=e.graph.getNode(a.id),c;for(c in a.data||{})b.data[c]=a.data[c]}}),e.graph.eachNode(function(a){a.eachAdjacency(function(a){h.getAdjacence(a.nodeFrom.id,a.nodeTo.id)||e.graph.removeAdjacence(a.nodeFrom.id,a.nodeTo.id)}),h.hasNode(a.id)||e.graph.removeNode(a.id)});break;case"replot":e.labels.clearLabels(!0),this.morph(b,{type:"nothing"}),e.refresh(!0),e.refresh(!0);break;case"fade:seq":case"fade":case"fade:con":that=this,h=e.construct(b);var i="node-property"in d&&a.map(a.splat(d["node-property"]),function(a){return"$"+a});e.graph.eachNode(function(b){var c=h.getNode(b.id);if(c){var c=c.data,d;for(d in c)i&&a.indexOf(i,d)>-1?b.endData[d]=c[d]:b.data[d]=c[d]}else b.setData("alpha",1),b.setData("alpha",1,"start"),b.setData("alpha",0,"end"),b.ignore=!0}),e.graph.eachNode(function(a){a.ignore||a.eachAdjacency(function(a){if(!a.nodeFrom.ignore&&!a.nodeTo.ignore){var b=h.getNode(a.nodeFrom.id),a=h.getNode(a.nodeTo.id);b.adjacentTo(a)||(a=e.graph.getAdjacence(b.id,a.id),j=!0,a.setData("alpha",1),a.setData("alpha",1,"start"),a.setData("alpha",0,"end"))}})});var j=this.preprocessSum(h),b=j?["node-property:alpha","edge-property:alpha"]:["node-property:alpha"];b[0]+="node-property"in d?":"+a.splat(d["node-property"]).join(":"):"",b[1]=(b[1]||"edge-property:alpha")+("edge-property"in d?":"+a.splat(d["edge-property"]).join(":"):""),"label-property"in d&&b.push("label-property:"+a.splat(d["label-property"]).join(":")),e.reposition?e.reposition():e.compute("end"),e.graph.eachNode(function(a){a.id!=g&&a.pos.getp().equals(k.KER)&&(a.pos.set(a.endPos),a.startPos.set(a.endPos))}),e.fx.animate(a.merge(f,{modes:[d.position||"polar"].concat(b),onComplete:function(){e.graph.eachNode(function(a){a.ignore&&e.graph.removeNode(a.id)}),e.graph.eachNode(function(a){a.eachAdjacency(function(a){a.ignore&&e.graph.removeAdjacence(a.nodeFrom.id,a.nodeTo.id)})}),f.onComplete()}}))}},contract:function(b,c){var d=this.viz;!b.collapsed&&b.anySubnode(a.lambda(!0))&&(c=a.merge(this.options,d.config,c||{},{modes:["node-property:alpha:span","linear"]}),b.collapsed=!0,function e(a){a.eachSubnode(function(a){a.ignore=!0,a.setData("alpha",0,c.type=="animate"?"end":"current"),e(a)})}(b),c.type=="animate"?(d.compute("end"),d.rotated&&d.rotate(d.rotated,"none",{property:"end"}),function f(a){a.eachSubnode(function(a){a.setPos(b.getPos("end"),"end"),f(a)})}(b),d.fx.animate(c)):c.type=="replot"&&d.refresh())},expand:function(b,c){if("collapsed"in b){var d=this.viz,c=a.merge(this.options,d.config,c||{},{modes:["node-property:alpha:span","linear"]});delete b.collapsed,function e(a){a.eachSubnode(function(a){delete a.ignore,a.setData("alpha",1,c.type=="animate"?"end":"current"),e(a)})}(b),c.type=="animate"?(d.compute("end"),d.rotated&&d.rotate(d.rotated,"none",{property:"end"}),d.fx.animate(c)):c.type=="replot"&&d.refresh()}},preprocessSum:function(a){var b=this.viz;a.eachNode(function(a){b.graph.hasNode(a.id)||(b.graph.addNode(a),a=b.graph.getNode(a.id),a.setData("alpha",0),a.setData("alpha",0,"start"),a.setData("alpha",1,"end"))});var c=!1;return a.eachNode(function(a){a.eachAdjacency(function(a){var d=b.graph.getNode(a.nodeFrom.id),e=b.graph.getNode(a.nodeTo.id);d.adjacentTo(e)||(a=b.graph.addAdjacence(d,e,a.data),d.startAlpha==d.endAlpha&&e.startAlpha==e.endAlpha&&(c=!0,a.setData("alpha",0),a.setData("alpha",0,"start"),a.setData("alpha",1,"end")))})}),c}};var o={none:{render:a.empty,contains:a.lambda(!1)},circle:{render:function(a,b,c,d){d=d.getCtx(),d.beginPath(),d.arc(b.x,b.y,c,0,Math.PI*2,!0),d.closePath(),d[a]()},contains:function(a,b,c){var d=a.x-b.x,a=a.y-b.y;return d*d+a*a<=c*c}},ellipse:{render:function(a,b,c,d,e){var e=e.getCtx(),f=1,g=1,h=1,i=1,j=0;c>d?(j=c/2,g=d/c,i=c/d):(j=d/2,f=c/d,h=d/c),e.save(),e.scale(f,g),e.beginPath(),e.arc(b.x*h,b.y*i,j,0,Math.PI*2,!0),e.closePath(),e[a](),e.restore()},contains:function(a,b,c,d){var e=0,f=1,g=1,h=0,i=0,e=0;return c>d?(e=c/2,g=d/c):(e=d/2,f=c/d),h=(a.x-b.x)*(1/f),i=(a.y-b.y)*(1/g),h*h+i*i<=e*e}},square:{render:function(a,b,c,d){d.getCtx()[a+"Rect"](b.x-c,b.y-c,2*c,2*c)},contains:function(a,b,c){return Math.abs(b.x-a.x)<=c&&Math.abs(b.y-a.y)<=c}},rectangle:{render:function(a,b,c,d,e){e.getCtx()[a+"Rect"](b.x-c/2,b.y-d/2,c,d)},contains:function(a,b,c,d){return Math.abs(b.x-a.x)<=c/2&&Math.abs(b.y-a.y)<=d/2}},triangle:{render:function(a,b,c,d){var d=d.getCtx(),e=b.x,f=b.y-c,g=e-c,b=b.y+c,c=e+c;d.beginPath(),d.moveTo(e,f),d.lineTo(g,b),d.lineTo(c,b),d.closePath(),d[a]()},contains:function(a,b,c){return o.circle.contains(a,b,c)}},star:{render:function(a,b,c,d){var d=d.getCtx(),e=Math.PI/5;d.save(),d.translate(b.x,b.y),d.beginPath(),d.moveTo(c,0);for(b=0;b<9;b++)d.rotate(e),b%2==0?d.lineTo(c/.525731*.200811,0):d.lineTo(c,0);d.closePath(),d[a](),d.restore()},contains:function(a,b,c){return o.circle.contains(a,b,c)}}},p={line:{render:function(a,b,c){c=c.getCtx(),c.beginPath(),c.moveTo(a.x,a.y),c.lineTo(b.x,b.y),c.stroke()},contains:function(a,b,c,d){var e=Math.min,f=Math.max,g=e(a.x,b.x),h=f(a.x,b.x),e=e(a.y,b.y),f=f(a.y,b.y);return c.x>=g&&c.x<=h&&c.y>=e&&c.y<=f?Math.abs(b.x-a.x)<=d?!0:Math.abs((b.y-a.y)/(b.x-a.x)*(c.x-a.x)+a.y-c.y)<=d:!1}},arrow:{render:function(a,b,c,d,e){e=e.getCtx(),d&&(d=a,a=b,b=d),d=new l(b.x-a.x,b.y-a.y),d.$scale(c/d.norm());var c=new l(b.x-d.x,b.y-d.y),f=new l(-d.y/2,d.x/2),d=c.add(f),c=c.$add(f.$scale(-1));e.beginPath(),e.moveTo(a.x,a.y),e.lineTo(b.x,b.y),e.stroke(),e.beginPath(),e.moveTo(d.x,d.y),e.lineTo(c.x,c.y),e.lineTo(b.x,b.y),e.closePath(),e.fill()},contains:function(a,b,c,d){return p.line.contains(a,b,c,d)}},hyperline:{render:function(a,b,c,d){function e(a,b){return a<b?a+Math.PI>b?!1:!0:b+Math.PI>a?!0:!1}var d=d.getCtx(),f=function(a,b){var c=a.x*b.y-a.y*b.x,d=a.squaredNorm(),e=b.squaredNorm();if(c==0)return{x:0,y:0,ratio:-1};var f=(a.y*e-b.y*d+a.y-b.y)/c,c=(b.x*d-a.x*e+b.x-a.x)/c,d=(f*f+c*c)/4-1;return d<0?{x:0,y:0,ratio:-1}:(d=Math.sqrt(d),{x:-f/2,y:-c/2,ratio:d>1e3?-1:d,a:f,b:c})}(a,b);f.a>1e3||f.b>1e3||f.ratio<0?(d.beginPath(),d.moveTo(a.x*c,a.y*c),d.lineTo(b.x*c,b.y*c)):(b=Math.atan2(b.y-f.y,b.x-f.x),a=Math.atan2(a.y-f.y,a.x-f.x),e=e(b,a),d.beginPath(),d.arc(f.x*c,f.y*c,f.ratio*c,b,a,e)),d.stroke()},contains:a.lambda(!1)}};m.Plot={initialize:function(a,b){this.viz=a,this.config=a.config,this.node=a.config.Node,this.edge=a.config.Edge,this.animation=new d,this.nodeTypes=new b.Plot.NodeTypes,this.edgeTypes=new b.Plot.EdgeTypes,this.labels=a.labels},nodeHelper:o,edgeHelper:p,Interpolator:{map:{border:"color",color:"color",width:"number",height:"number",dim:"number",alpha:"number",lineWidth:"number",angularWidth:"number",span:"number",valueArray:"array-number",dimArray:"array-number"},canvas:{globalAlpha:"number",fillStyle:"color",strokeStyle:"color",lineWidth:"number",shadowBlur:"number",shadowColor:"color",shadowOffsetX:"number",shadowOffsetY:"number",miterLimit:"number"},label:{size:"number",color:"color"},compute:function(a,b,c){return a+(b-a)*c},moebius:function(a,b,c,d){b=d.scale(-c);if(b.norm()<1){var c=b.x,d=b.y,e=a.startPos.getc().moebiusTransformation(b);a.pos.setc(e.x,e.y),b.x=c,b.y=d}},linear:function(a,b,c){var b=a.startPos.getc(!0),d=a.endPos.getc(!0);a.pos.setc(this.compute(b.x,d.x,c),this.compute(b.y,d.y,c))},polar:function(a,b,c){b=a.startPos.getp(!0),c=a.endPos.getp().interpolate(b,c),a.pos.setp(c.theta,c.rho)},number:function(a,b,c,d,e){var f=a[d](b,"start"),d=a[d](b,"end");a[e](b,this.compute(f,d,c))},color:function(b,c,d,e,f){var g=a.hexToRgb(b[e](c,"start")),e=a.hexToRgb(b[e](c,"end")),h=this.compute,d=a.rgbToHex([parseInt(h(g[0],e[0],d)),parseInt(h(g[1],e[1],d)),parseInt(h(g[2],e[2],d))]);b[f](c,d)},"array-number":function(a,b,c,d,e){for(var f=a[d](b,"start"),d=a[d](b,"end"),g=[],h=0,i=f.length;h<i;h++){var j=f[h],k=d[h];if(j.length){for(var l=0,m=j.length,n=[];l<m;l++)n.push(this.compute(j[l],k[l],c));g.push(n)}else g.push(this.compute(j,k,c))}a[e](b,g)},node:function(a,b,c,d,e,f){d=this[d];if(b)for(var g=b.length,h=0;h<g;h++){var i=b[h];this[d[i]](a,i,c,e,f)}else for(i in d)this[d[i]](a,i,c,e,f)},edge:function(a,b,c,d,e,f){var a=a.adjacencies,g;for(g in a)this.node(a[g],b,c,d,e,f)},"node-property":function(a,b,c){this.node(a,b,c,"map","getData","setData")},"edge-property":function(a,b,c){this.edge(a,b,c,"map","getData","setData")},"label-property":function(a,b,c){this.node(a,b,c,"label","getLabelData","setLabelData")},"node-style":function(a,b,c){this.node(a,b,c,"canvas","getCanvasStyle","setCanvasStyle")},"edge-style":function(a,b,c){this.edge(a,b,c,"canvas","getCanvasStyle","setCanvasStyle")}},sequence:function(b){var c=this,b=a.merge({condition:a.lambda(!1),step:a.empty,onComplete:a.empty,duration:200},b||{}),d=setInterval(function(){b.condition()?b.step():(clearInterval(d),b.onComplete()),c.viz.refresh(!0)},b.duration)},prepare:function(b){var c=this.viz.graph,d={"node-property":{getter:"getData",setter:"setData"},"edge-property":{getter:"getData",setter:"setData"},"node-style":{getter:"getCanvasStyle",setter:"setCanvasStyle"},"edge-style":{getter:"getCanvasStyle",setter:"setCanvasStyle"}},e={};if(a.type(b)=="array")for(var f=0,g=b.length;f<g;f++){var h=b[f].split(":");e[h.shift()]=h}else for(f in b)f=="position"?e[b.position]=[]:e[f]=a.splat(b[f]);return c.eachNode(function(b){b.startPos.set(b.pos),a.each(["node-property","node-style"],function(a){if(a in e)for(var c=e[a],f=0,g=c.length;f<g;f++)b[d[a].setter](c[f],b[d[a].getter](c[f]),"start")}),a.each(["edge-property","edge-style"],function(a){if(a in e){var c=e[a];b.eachAdjacency(function(b){for(var e=0,f=c.length;e<f;e++)b[d[a].setter](c[e],b[d[a].getter](c[e]),"start")})}})}),e},animate:function(b,c){var b=a.merge(this.viz.config,b||{}),d=this,e=this.viz.graph,f=this.Interpolator,g=b.type==="nodefx"?this.nodeFxAnimation:this.animation,h=this.prepare(b.modes);b.hideLabels&&this.labels.hideLabels(!0),g.setOptions(a.extend(b,{$animating:!1,compute:function(a){e.eachNode(function(b){for(var d in h)f[d](b,h[d],a,c)}),d.plot(b,this.$animating,a),this.$animating=!0},complete:function(){b.hideLabels&&d.labels.hideLabels(!1),d.plot(b),b.onComplete()}})).start()},nodeFx:function(b){var c=this.viz,d=c.graph,e=this.nodeFxAnimation,f=a.merge(this.viz.config,{elements:{id:!1,properties:{}},reposition:!1}),b=a.merge(f,b||{},{onBeforeCompute:a.empty,onAfterCompute:a.empty});e.stopTimer();var g=b.elements.properties;b.elements.id?(e=a.splat(b.elements.id),a.each(e,function(a){if(a=d.getNode(a))for(var b in g)a.setData(b,g[b],"end")})):d.eachNode(function(a){for(var b in g)a.setData(b,g[b],"end")});var e=[],h;for(h in g)e.push(h);h=["node-property:"+e.join(":")],b.reposition&&(h.push("linear"),c.compute("end")),this.animate(a.merge(b,{modes:h,type:"nodefx"}))},plot:function(a,b){var c=this.viz,d=c.graph,e=c.canvas,c=c.root,f=this;e.getCtx(),a=a||this.viz.controller,a.clearCanvas&&e.clear();if(c=d.getNode(c)){var g=!!c.visited;d.eachNode(function(c){var d=c.getData("alpha");c.eachAdjacency(function(d){var h=d.nodeTo;!!h.visited===g&&c.drawn&&h.drawn&&(!b&&a.onBeforePlotLine(d),f.plotLine(d,e,b),!b&&a.onAfterPlotLine(d))}),c.drawn&&(!b&&a.onBeforePlotNode(c),f.plotNode(c,e,b),!b&&a.onAfterPlotNode(c)),!f.labelsHidden&&a.withLabels&&(c.drawn&&d>=.95?f.labels.plotLabel(e,c,a):f.labels.hideLabel(c,!1)),c.visited=!g})}},plotTree:function(a,b,c){var d=this,e=this.viz.canvas;e.getCtx();var f=a.getData("alpha");a.eachSubnode(function(f){if(b.plotSubtree(a,f)&&f.exist&&f.drawn){var g=a.getAdjacency(f.id);!c&&b.onBeforePlotLine(g),d.plotLine(g,e,c),!c&&b.onAfterPlotLine(g),d.plotTree(f,b,c)}}),a.drawn?(!c&&b.onBeforePlotNode(a),this.plotNode(a,e,c),!c&&b.onAfterPlotNode(a),!b.hideLabels&&b.withLabels&&f>=.95?this.labels.plotLabel(e,a,b):this.labels.hideLabel(a,!1)):this.labels.hideLabel(a,!0)},plotNode:function(a,b,c){var d=a.getData("type"),e=this.node.CanvasStyles;if(d!="none"){var f=a.getData("lineWidth"),g=a.getData("color"),h=a.getData("alpha"),i=b.getCtx();i.save(),i.lineWidth=f,i.fillStyle=i.strokeStyle=g,i.globalAlpha=h;for(var j in e)i[j]=a.getCanvasStyle(j);this.nodeTypes[d].render.call(this,a,b,c),i.restore()}},plotLine:function(a,b,c){var d=a.getData("type"),e=this.edge.CanvasStyles;if(d!="none"){var f=a.getData("lineWidth"),g=a.getData("color"),h=b.getCtx(),i=a.nodeFrom,j=a.nodeTo;h.save(),h.lineWidth=f,h.fillStyle=h.strokeStyle=g,h.globalAlpha=Math.min(i.getData("alpha"),j.getData("alpha"),a.getData("alpha"));for(var k in e)h[k]=a.getCanvasStyle(k);this.edgeTypes[d].render.call(this,a,b,c),h.restore()}}},m.Plot3D=a.merge(m.Plot,{Interpolator:{linear:function(a,b,c){var b=a.startPos.getc(!0),d=a.endPos.getc(!0);a.pos.setc(this.compute(b.x,d.x,c),this.compute(b.y,d.y,c),this.compute(b.z,d.z,c))}},plotNode:function(a,b){a.getData("type")!="none"&&this.plotElement(a,b,{getAlpha:function(){return a.getData("alpha")}})},plotLine:function(a,b){a.getData("type")!="none"&&this.plotElement(a,b,{getAlpha:function(){return Math.min(a.nodeFrom.getData("alpha"),a.nodeTo.getData("alpha"),a.getData("alpha"))}})},plotElement:function(b,c,d){var e=c.getCtx(),f=new Matrix4,g=c.config.Scene.Lighting,h=c.canvases[0],c=h.program,h=h.camera;b.geometry||(b.geometry=new(O3D[b.getData("type")])),b.geometry.update(b);if(!b.webGLVertexBuffer){for(var i=[],j=[],k=[],l=0,m=b.geometry,n=0,o=m.vertices,m=m.faces,p=m.length;n<p;n++){var q=m[n],r=o[q.a],s=o[q.b],t=o[q.c],u=q.d?o[q.d]:!1,q=q.normal;i.push(r.x,r.y,r.z),i.push(s.x,s.y,s.z),i.push(t.x,t.y,t.z),u&&i.push(u.x,u.y,u.z),k.push(q.x,q.y,q.z),k.push(q.x,q.y,q.z),k.push(q.x,q.y,q.z),u&&k.push(q.x,q.y,q.z),j.push(l,l+1,l+2),u?(j.push(l,l+2,l+3),l+=4):l+=3}b.webGLVertexBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,b.webGLVertexBuffer),e.bufferData(e.ARRAY_BUFFER,new Float32Array(i),e.STATIC_DRAW),b.webGLFaceBuffer=e.createBuffer(),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,b.webGLFaceBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,new Uint16Array(j),e.STATIC_DRAW),b.webGLFaceCount=j.length,b.webGLNormalBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,b.webGLNormalBuffer),e.bufferData(e.ARRAY_BUFFER,new Float32Array(k),e.STATIC_DRAW)}f.multiply(h.matrix,b.geometry.matrix),e.uniformMatrix4fv(c.viewMatrix,!1,f.flatten()),e.uniformMatrix4fv(c.projectionMatrix,!1,h.projectionMatrix.flatten()),f=Matrix4.makeInvert(f),f.$transpose(),e.uniformMatrix4fv(c.normalMatrix,!1,f.flatten()),f=a.hexToRgb(b.getData("color")),f.push(d.getAlpha()),e.uniform4f(c.color,f[0]/255,f[1]/255,f[2]/255,f[3]),e.uniform1i(c.enableLighting,g.enable),g.enable&&(g.ambient&&(d=g.ambient,e.uniform3f(c.ambientColor,d[0],d[1],d[2])),g.directional&&(g=g.directional,f=g.color,g=g.direction,g=(new Vector3(g.x,g.y,g.z)).normalize().$scale(-1),e.uniform3f(c.lightingDirection,g.x,g.y,g.z),e.uniform3f(c.directionalColor,f[0],f[1],f[2]))),e.bindBuffer(e.ARRAY_BUFFER,b.webGLVertexBuffer),e.vertexAttribPointer(c.position,3,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,b.webGLNormalBuffer),e.vertexAttribPointer(c.normal,3,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,b.webGLFaceBuffer),e.drawElements(e.TRIANGLES,b.webGLFaceCount,e.UNSIGNED_SHORT,0)}}),m.Label={},m.Label.Native=new b({initialize:function(a){this.viz=a},plotLabel:function(a,b,c){var d=a.getCtx();b.pos.getc(!0),d.font=b.getLabelData("style")+" "+b.getLabelData("size")+"px "+b.getLabelData("family"),d.textAlign=b.getLabelData("textAlign"),d.fillStyle=d.strokeStyle=b.getLabelData("color"),d.textBaseline=b.getLabelData("textBaseline"),this.renderLabel(a,b,c)},renderLabel:function(a,b){var c=a.getCtx(),d=b.pos.getc(!0);c.fillText(b.name,d.x,d.y+b.getData("height")/2)},hideLabel:a.empty,hideLabels:a.empty}),m.Label.DOM=new b({labelsHidden:!1,labelContainer:!1,labels:{},getLabelContainer:function(){return this.labelContainer?this.labelContainer:this.labelContainer=document.getElementById(this.viz.config.labelContainer)},getLabel:function(a){return a in this.labels&&this.labels[a]!=null?this.labels[a]:this.labels[a]=document.getElementById(a)},hideLabels:function(a){this.getLabelContainer().style.display=a?"none":"",this.labelsHidden=a},clearLabels:function(a){for(var b in this.labels)if(a||!this.viz.graph.hasNode(b))this.disposeLabel(b),delete this.labels[b]},disposeLabel:function(a){(a=this.getLabel(a))&&a.parentNode&&a.parentNode.removeChild(a)},hideLabel:function(b,c){var b=a.splat(b),d=c?"":"none",e=this;a.each(b,function(a){if(a=e.getLabel(a.id))a.style.display=d})},fitsInCanvas:function(a,b){var c=b.getSize();return a.x>=c.width||a.x<0||a.y>=c.height||a.y<0?!1:!0}}),m.Label.HTML=new b({Implements:m.Label.DOM,plotLabel:function(a,b,c){var a=b.id,d=this.getLabel(a);if(!d&&!(d=document.getElementById(a))){var d=document.createElement("div"),e=this.getLabelContainer();d.id=a,d.className="node",d.style.position="absolute",c.onCreateLabel(d,b),e.appendChild(d),this.labels[b.id]=d}this.placeLabel(d,b,c)}}),m.Label.SVG=new b({Implements:m.Label.DOM,plotLabel:function(a,b,c){var a=b.id,d=this.getLabel(a);if(!d&&!(d=document.getElementById(a))){var d=document.createElementNS("http://www.w3.org/2000/svg","svg:text"),e=document.createElementNS("http://www.w3.org/2000/svg","svg:tspan");d.appendChild(e),e=this.getLabelContainer(),d.setAttribute("id",a),d.setAttribute("class","node"),e.appendChild(d),c.onCreateLabel(d,b),this.labels[b.id]=d}this.placeLabel(d,b,c)}});var f=$jit.Layouts={},q={label:null,compute:function(b,c,d){this.initializeLabel(d);var e=this.label,f=e.style;b.eachNode(function(b){var c=b.getData("autoWidth"),d=b.getData("autoHeight");if(c||d){delete b.data.$width,delete b.data.$height,delete b.data.$dim;var g=b.getData("width"),h=b.getData("height");f.width=c?"auto":g+"px",f.height=d?"auto":h+"px",e.innerHTML=b.name,c=e.offsetWidth,d=e.offsetHeight,g=b.getData("type"),a.indexOf(["circle","square","triangle","star"],g)===-1?(b.setData("width",c),b.setData("height",d)):(c=c>d?c:d,b.setData("width",c),b.setData("height",c),b.setData("dim",c))}})},initializeLabel:function(a){this.label||(this.label=document.createElement("div"),document.body.appendChild(this.label)),this.setLabelStyles(a)},setLabelStyles:function(){a.extend(this.label.style,{visibility:"hidden",position:"absolute",width:"auto",height:"auto"}),this.label.className="jit-autoadjust-label"}};f.Radial=new b({compute:function(b){b=a.splat(b||["current","start","end"]),q.compute(this.graph,b,this.config),this.graph.computeLevels(this.root,0,"ignore");var c=this.createLevelDistanceFunc();this.computeAngularWidths(b),this.computePositions(b,c)},computePositions:function(a,b){for(var c=this.graph,d=c.getNode(this.root),e=this.parent,f=0,g=a.length;f<g;f++){var h=a[f];d.setPos(new k(0,0),h),d.setData("span",Math.PI*2,h)}d.angleSpan={begin:0,end:2*Math.PI},c.eachBFS(this.root,function(c){var d=c.angleSpan.end-c.angleSpan.begin,f=c.angleSpan.begin,g=b(c),h=0,i=[],j={};c.eachSubnode(function(b){h+=b._treeAngularWidth;for(var c=0,d=a.length;c<d;c++){var e=a[c],f=b.getData("dim",e);j[e]=e in j?f>j[e]?f:j[e]:f}i.push(b)},"ignore"),e&&e.id==c.id&&i.length>0&&i[0].dist&&i.sort(function(a,b){return(a.dist>=b.dist)-(a.dist<=b.dist)});for(var c=0,l=i.length;c<l;c++){var m=i[c];if(!m._flag){for(var n=m._treeAngularWidth/h*d,o=f+n/2,p=0,q=a.length;p<q;p++){var r=a[p];m.setPos(new k(o,g),r),m.setData("span",n,r),m.setData("dim-quotient",m.getData("dim",r)/j[r],r)}m.angleSpan={begin:f,end:f+n},f+=n}}},"ignore")},setAngularWidthForNodes:function(a){this.graph.eachBFS(this.root,function(b,c){var d=b.getData("angularWidth",a[0])||5;b._angularWidth=d/c},"ignore")},setSubtreesAngularWidth:function(){var a=this;this.graph.eachNode(function(b){a.setSubtreeAngularWidth(b)},"ignore")},setSubtreeAngularWidth:function(a){var b=this,c=a._angularWidth,d=0;a.eachSubnode(function(a){b.setSubtreeAngularWidth(a),d+=a._treeAngularWidth},"ignore"),a._treeAngularWidth=Math.max(c,d)},computeAngularWidths:function(a){this.setAngularWidthForNodes(a),this.setSubtreesAngularWidth()}}),$jit.RGraph=new b({Implements:[{construct:function(b){var c=a.type(b)=="array",d=new m(this.graphOptions,this.config.Node,this.config.Edge,this.config.Label);return c?function(b,c){for(var d=function(a){for(var d=0,e=c.length;d<e;d++)if(c[d].id==a)return c[d];return b.addNode({id:a,name:a})},e=0,f=c.length;e<f;e++){b.addNode(c[e]);var g=c[e].adjacencies;if(g)for(var h=0,i=g.length;h<i;h++){var j=g[h],k={};typeof g[h]!="string"&&(k=a.merge(j.data,{}),j=j.nodeTo),b.addAdjacence(c[e],d(j),k)}}}(d,b):function(a,b){a.addNode(b);if(b.children)for(var c=0,d=b.children;c<d.length;c++)a.addAdjacence(b,d[c]),arguments.callee(a,d[c])}(d,b),d},loadJSON:function(b,c){this.json=b,this.labels&&this.labels.clearLabels&&this.labels.clearLabels(!0),this.graph=this.construct(b),this.root=a.type(b)!="array"?b.id:b[c?c:0].id},toJSON:function(a){if((a||"tree")=="tree")var b={},b=function d(a){var b={};b.id=a.id,b.name=a.name,b.data=a.data;var c=[];return a.eachSubnode(function(a){c.push(d(a))}),b.children=c,b}(this.graph.getNode(this.root));else{var b=[],c=!!this.graph.getNode(this.root).visited;this.graph.eachNode(function(a){var d={};d.id=a.id,d.name=a.name,d.data=a.data;var e=[];a.eachAdjacency(function(a){var b=a.nodeTo;if(!!b.visited===c){var d={};d.nodeTo=b.id,d.data=a.data,e.push(d)}}),d.adjacencies=e,b.push(d),a.visited=!c})}return b}},i,f.Radial],initialize:function(b){var c=$jit.RGraph,b=this.controller=this.config=a.merge(e("Canvas","Node","Edge","Fx","Controller","Tips","NodeStyles","Events","Navigation","Label"),{interpolation:"linear",levelDistance:100},b);b.useCanvas?(this.canvas=b.useCanvas,this.config.labelContainer=this.canvas.id+"-label"):(b.background&&(b.background=a.merge({type:"Circles"},b.background)),this.canvas=new j(this,b),this.config.labelContainer=(typeof b.injectInto=="string"?b.injectInto:b.injectInto.id)+"-label"),this.graphOptions={klass:k,Node:{selected:!1,exist:!0,drawn:!0}},this.graph=new m(this.graphOptions,this.config.Node,this.config.Edge),this.labels=new c.Label[b.Label.type](this),this.fx=new c.Plot(this,c),this.op=new c.Op(this),this.root=this.json=null,this.parent=this.busy=!1,this.initializeExtras()},createLevelDistanceFunc:function(){var a=this.config.levelDistance;return function(b){return(b._depth+1)*a}},refresh:function(){this.compute(),this.plot()},reposition:function(){this.compute("end")},plot:function(){this.fx.plot()},getNodeAndParentAngle:function(a){var b=!1,c=this.graph.getNode(a),a=c.getParents();if(a=a.length>0?a[0]:!1)b=a.pos.getc(),c=c.pos.getc(),b=b.add(c.scale(-1)),b=Math.atan2(b.y,b.x),b<0&&(b+=2*Math.PI);return{parent:a,theta:b}},tagChildren:function(a,b){if(a.angleSpan){var c=[];a.eachAdjacency(function(a){c.push(a.nodeTo)},"ignore");for(var d=c.length,e=0;e<d&&b!=c[e].id;e++);for(var e=(e+1)%d,f=0;b!=c[e].id;e=(e+1)%d)c[e].dist=f++}},onClick:function(b,c){if(this.root!=b&&!this.busy){this.busy=!0,this.root=b;var d=this;this.controller.onBeforeCompute(this.graph.getNode(b));var e=this.getNodeAndParentAngle(b);this.tagChildren(e.parent,b),this.parent=e.parent,this.compute("end");var f=e.theta-e.parent.endPos.theta;this.graph.eachNode(function(a){a.endPos.set(a.endPos.getp().add(new k(f,0)))}),e=this.config.interpolation,c=a.merge({onComplete:a.empty},c||{}),this.fx.animate(a.merge({hideLabels:!0,modes:[e]},c,{onComplete:function(){d.busy=!1,c.onComplete()}}))}}}),$jit.RGraph.$extend=!0,function(c){c.Op=new b({Implements:m.Op}),c.Plot=new b({Implements:m.Plot}),c.Label={},c.Label.Native=new b({Implements:m.Label.Native}),c.Label.SVG=new b({Implements:m.Label.SVG,initialize:function(a){this.viz=a},placeLabel:function(a,b,c){var d=b.pos.getc(!0),e=this.viz.canvas,f=e.translateOffsetX,g=e.translateOffsetY,h=e.scaleOffsetX,i=e.scaleOffsetY,e=e.getSize(),d={x:Math.round(d.x*h+f+e.width/2),y:Math.round(d.y*i+g+e.height/2)};a.setAttribute("x",d.x),a.setAttribute("y",d.y),c.onPlaceLabel(a,b)}}),c.Label.HTML=new b({Implements:m.Label.HTML,initialize:function(a){this.viz=a},placeLabel:function(a,b,c){var d=b.pos.getc(!0),e=this.viz.canvas,f=e.translateOffsetX,g=e.translateOffsetY,h=e.scaleOffsetX,i=e.scaleOffsetY,j=e.getSize(),d={x:Math.round(d.x*h+f+j.width/2),y:Math.round(d.y*i+g+j.height/2)},f=a.style;f.left=d.x+"px",f.top=d.y+"px",f.display=this.fitsInCanvas(d,e)?"":"none",c.onPlaceLabel(a,b)}}),c.Plot.NodeTypes=new b({none:{render:a.empty,contains:a.lambda(!1)},circle:{render:function(a,b){var c=a.pos.getc(!0),d=a.getData("dim");this.nodeHelper.circle.render("fill",c,d,b)},contains:function(a,b){var c=a.pos.getc(!0),d=a.getData("dim");return this.nodeHelper.circle.contains(c,b,d)}},ellipse:{render:function(a,b){var c=a.pos.getc(!0),d=a.getData("width"),e=a.getData("height");this.nodeHelper.ellipse.render("fill",c,d,e,b)},contains:function(a,b){var c=a.pos.getc(!0),d=a.getData("width"),e=a.getData("height");return this.nodeHelper.ellipse.contains(c,b,d,e)}},square:{render:function(a,b){var c=a.pos.getc(!0),d=a.getData("dim");this.nodeHelper.square.render("fill",c,d,b)},contains:function(a,b){var c=a.pos.getc(!0),d=a.getData("dim");return this.nodeHelper.square.contains(c,b,d)}},rectangle:{render:function(a,b){var c=a.pos.getc(!0),d=a.getData("width"),e=a.getData("height");this.nodeHelper.rectangle.render("fill",c,d,e,b)},contains:function(a,b){var c=a.pos.getc(!0),d=a.getData("width"),e=a.getData("height");return this.nodeHelper.rectangle.contains(c,b,d,e)}},triangle:{render:function(a,b){var c=a.pos.getc(!0),d=a.getData("dim");this.nodeHelper.triangle.render("fill",c,d,b)},contains:function(a,b){var c=a.pos
25
+ .getc(!0),d=a.getData("dim");return this.nodeHelper.triangle.contains(c,b,d)}},star:{render:function(a,b){var c=a.pos.getc(!0),d=a.getData("dim");this.nodeHelper.star.render("fill",c,d,b)},contains:function(a,b){var c=a.pos.getc(!0),d=a.getData("dim");return this.nodeHelper.star.contains(c,b,d)}}}),c.Plot.EdgeTypes=new b({none:a.empty,line:{render:function(a,b){var c=a.nodeFrom.pos.getc(!0),d=a.nodeTo.pos.getc(!0);this.edgeHelper.line.render(c,d,b)},contains:function(a,b){var c=a.nodeFrom.pos.getc(!0),d=a.nodeTo.pos.getc(!0);return this.edgeHelper.line.contains(c,d,b,this.edge.epsilon)}},arrow:{render:function(a,b){var c=a.nodeFrom.pos.getc(!0),d=a.nodeTo.pos.getc(!0),e=a.getData("dim"),f=a.data.$direction;this.edgeHelper.arrow.render(c,d,e,f&&f.length>1&&f[0]!=a.nodeFrom.id,b)},contains:function(a,b){var c=a.nodeFrom.pos.getc(!0),d=a.nodeTo.pos.getc(!0);return this.edgeHelper.arrow.contains(c,d,b,this.edge.epsilon)}}})}($jit.RGraph)})()
@@ -0,0 +1,25 @@
1
+ /*
2
+ Copyright (c) 2011 Sencha Inc. - Author: Nicolas Garcia Belmonte (http://philogb.github.com/)
3
+
4
+ Permission is hereby granted, free of charge, to any person obtaining a copy
5
+ of this software and associated documentation files (the "Software"), to deal
6
+ in the Software without restriction, including without limitation the rights
7
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ copies of the Software, and to permit persons to whom the Software is
9
+ furnished to do so, subject to the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be included in
12
+ all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20
+ THE SOFTWARE.
21
+
22
+ */
23
+ (function(){window.$jit=function(a){var a=a||window,b;for(b in $jit)$jit[b].$extend&&(a[b]=$jit[b])},$jit.version="2.0.1";var a=function(a){return document.getElementById(a)};a.empty=function(){},a.extend=function(a,b){for(var c in b||{})a[c]=b[c];return a},a.lambda=function(a){return typeof a=="function"?a:function(){return a}},a.time=Date.now||function(){return+(new Date)},a.splat=function(b){var c=a.type(b);return c?c!="array"?[b]:b:[]},a.type=function(b){var c=a.type.s.call(b).match(/^\[object\s(.*)\]$/)[1].toLowerCase();return c!="object"?c:b&&b.$$family?b.$$family:b&&b.nodeName&&b.nodeType==1?"element":c},a.type.s=Object.prototype.toString,a.each=function(b,c){if(a.type(b)=="object")for(var d in b)c(b[d],d);else{d=0;for(var e=b.length;d<e;d++)c(b[d],d)}},a.indexOf=function(a,b){if(Array.indexOf)return a.indexOf(b);for(var c=0,d=a.length;c<d;c++)if(a[c]===b)return c;return-1},a.map=function(b,c){var d=[];return a.each(b,function(a,b){d.push(c(a,b))}),d},a.reduce=function(a,b,c){var d=a.length;if(d==0)return c;for(var e=arguments.length==3?c:a[--d];d--;)e=b(e,a[d]);return e},a.merge=function(){for(var b={},c=0,d=arguments.length;c<d;c++){var e=arguments[c];if(a.type(e)=="object")for(var f in e){var g=e[f],h=b[f];b[f]=h&&a.type(g)=="object"&&a.type(h)=="object"?a.merge(h,g):a.unlink(g)}}return b},a.unlink=function(b){var c;switch(a.type(b)){case"object":c={};for(var d in b)c[d]=a.unlink(b[d]);break;case"array":c=[],d=0;for(var e=b.length;d<e;d++)c[d]=a.unlink(b[d]);break;default:return b}return c},a.zip=function(){if(arguments.length===0)return[];for(var a=0,b=[],c=arguments.length,d=arguments[0].length;a<d;a++){for(var e=0,f=[];e<c;e++)f.push(arguments[e][a]);b.push(f)}return b},a.rgbToHex=function(a,b){if(a.length<3)return null;if(a.length==4&&a[3]==0&&!b)return"transparent";for(var c=[],d=0;d<3;d++){var e=(a[d]-0).toString(16);c.push(e.length==1?"0"+e:e)}return b?c:"#"+c.join("")},a.hexToRgb=function(a){if(a.length!=7){a=a.match(/^#?(\w{1,2})(\w{1,2})(\w{1,2})$/),a.shift();if(a.length!=3)return null;for(var b=[],c=0;c<3;c++){var d=a[c];d.length==1&&(d+=d),b.push(parseInt(d,16))}return b}return a=parseInt(a.slice(1),16),[a>>16,a>>8&255,a&255]},a.destroy=function(b){a.clean(b),b.parentNode&&b.parentNode.removeChild(b),b.clearAttributes&&b.clearAttributes()},a.clean=function(b){for(var b=b.childNodes,c=0,d=b.length;c<d;c++)a.destroy(b[c])},a.addEvent=function(a,b,c){a.addEventListener?a.addEventListener(b,c,!1):a.attachEvent("on"+b,c)},a.addEvents=function(b,c){for(var d in c)a.addEvent(b,d,c[d])},a.hasClass=function(a,b){return(" "+a.className+" ").indexOf(" "+b+" ")>-1},a.addClass=function(b,c){a.hasClass(b,c)||(b.className=b.className+" "+c)},a.removeClass=function(a,b){a.className=a.className.replace(RegExp("(^|\\s)"+b+"(?:\\s|$)"),"$1")},a.getPos=function(a){var b=function(a){for(var b={x:0,y:0};a&&!/^(?:body|html)$/i.test(a.tagName);)b.x+=a.offsetLeft,b.y+=a.offsetTop,a=a.offsetParent;return b}(a),a=function(a){for(var b={x:0,y:0};a&&!/^(?:body|html)$/i.test(a.tagName);)b.x+=a.scrollLeft,b.y+=a.scrollTop,a=a.parentNode;return b}(a);return{x:b.x-a.x,y:b.y-a.y}},a.event={get:function(a,b){return a||(b||window).event},getWheel:function(a){return a.wheelDelta?a.wheelDelta/120:-(a.detail||0)/3},isRightClick:function(a){return a.which==3||a.button==2},getPos:function(a,b){var b=b||window,a=a||b.event,c=b.document,c=c.documentElement||c.body;return a.touches&&a.touches.length&&(a=a.touches[0]),{x:a.pageX||a.clientX+c.scrollLeft,y:a.pageY||a.clientY+c.scrollTop}},stop:function(a){a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0,a.preventDefault?a.preventDefault():a.returnValue=!1}},$jit.util=$jit.id=a;var b=function(c){var c=c||{},d=function(){for(var c in this)typeof this[c]!="function"&&(this[c]=a.unlink(this[c]));return this.constructor=d,b.prototyping?this:(c=this.initialize?this.initialize.apply(this,arguments):this,this.$$family="class",c)},e;for(e in b.Mutators)c[e]&&(c=b.Mutators[e](c,c[e]),delete c[e]);return a.extend(d,this),d.constructor=b,d.prototype=c,d};b.Mutators={Implements:function(c,d){return a.each(a.splat(d),function(a){b.prototyping=a;var a=typeof a=="function"?new a:a,d;for(d in a)d in c||(c[d]=a[d]);delete b.prototyping}),c}},a.extend(b,{inherit:function(c,d){for(var e in d){var f=d[e],g=c[e],h=a.type(f);g&&h=="function"?f!=g&&b.override(c,e,f):c[e]=h=="object"?a.merge(g,f):f}return c},override:function(a,c,d){var e=b.prototyping;e&&a[c]!=e[c]&&(e=null),a[c]=function(){var b=this.parent;this.parent=e?e[c]:a[c];var f=d.apply(this,arguments);return this.parent=b,f}}}),b.prototype.implement=function(){var c=this.prototype;return a.each(Array.prototype.slice.call(arguments||[]),function(a){b.inherit(c,a)}),this},$jit.Class=b,$jit.json={prune:function(a,b){this.each(a,function(a,c){c==b&&a.children&&(delete a.children,a.children=[])})},getParent:function(a,b){if(a.id==b)return!1;var c=a.children;if(c&&c.length>0)for(var d=0;d<c.length;d++){if(c[d].id==b)return a;var e=this.getParent(c[d],b);if(e)return e}return!1},getSubtree:function(a,b){if(a.id==b)return a;for(var c=0,d=a.children;d&&c<d.length;c++){var e=this.getSubtree(d[c],b);if(e!=null)return e}return null},eachLevel:function(a,b,c,d){if(b<=c&&(d(a,b),a.children))for(var e=0,a=a.children;e<a.length;e++)this.eachLevel(a[e],b+1,c,d)},each:function(a,b){this.eachLevel(a,0,Number.MAX_VALUE,b)}},$jit.Trans={$extend:!0,linear:function(a){return a}};var c=$jit.Trans;(function(){var b=function(b,c){return c=a.splat(c),a.extend(b,{easeIn:function(a){return b(a,c)},easeOut:function(a){return 1-b(1-a,c)},easeInOut:function(a){return a<=.5?b(2*a,c)/2:(2-b(2*(1-a),c))/2}})};a.each({Pow:function(a,b){return Math.pow(a,b[0]||6)},Expo:function(a){return Math.pow(2,8*(a-1))},Circ:function(a){return 1-Math.sin(Math.acos(a))},Sine:function(a){return 1-Math.sin((1-a)*Math.PI/2)},Back:function(a,b){return b=b[0]||1.618,Math.pow(a,2)*((b+1)*a-b)},Bounce:function(a){for(var b,c=0,d=1;;c+=d,d/=2)if(a>=(7-4*c)/11){b=d*d-Math.pow((11-6*c-11*a)/4,2);break}return b},Elastic:function(a,b){return Math.pow(2,10*--a)*Math.cos(20*a*Math.PI*(b[0]||1)/3)}},function(a,d){c[d]=b(a)}),a.each(["Quad","Cubic","Quart","Quint"],function(a,d){c[a]=b(function(a){return Math.pow(a,[d+2])})})})();var d=new b({initialize:function(a){this.setOptions(a)},setOptions:function(b){return this.opt=a.merge({duration:2500,fps:40,transition:c.Quart.easeInOut,compute:a.empty,complete:a.empty,link:"ignore"},b||{}),this},step:function(){var b=a.time(),c=this.opt;b<this.time+c.duration?(b=c.transition((b-this.time)/c.duration),c.compute(b)):(this.timer=clearInterval(this.timer),c.compute(1),c.complete())},start:function(){return this.check()?(this.time=0,this.startTimer(),this):this},startTimer:function(){var b=this,c=this.opt.fps;return this.timer?!1:(this.time=a.time()-this.time,this.timer=setInterval(function(){b.step()},Math.round(1e3/c)),!0)},pause:function(){return this.stopTimer(),this},resume:function(){return this.startTimer(),this},stopTimer:function(){return this.timer?(this.time=a.time()-this.time,this.timer=clearInterval(this.timer),!0):!1},check:function(){return this.timer?this.opt.link=="cancel"?(this.stopTimer(),!0):!1:!0}}),e=function(){for(var b=arguments,c=0,d=b.length,f={};c<d;c++){var g=e[b[c]];g.$extend?a.extend(f,g):f[b[c]]=g}return f};e.Canvas={$extend:!0,injectInto:"id",type:"2D",width:!1,height:!1,useCanvas:!1,withLabels:!0,background:!1,Scene:{Lighting:{enable:!1,ambient:[1,1,1],directional:{direction:{x:-100,y:-100,z:-100},color:[.5,.3,.1]}}}},e.Node={$extend:!1,overridable:!1,type:"circle",color:"#ccb",alpha:1,dim:3,height:20,width:90,autoHeight:!1,autoWidth:!1,lineWidth:1,transform:!0,align:"center",angularWidth:1,span:1,CanvasStyles:{}},e.Edge={$extend:!1,overridable:!1,type:"line",color:"#ccb",lineWidth:1,dim:15,alpha:1,epsilon:7,CanvasStyles:{}},e.Fx={$extend:!0,fps:40,duration:2500,transition:$jit.Trans.Quart.easeInOut,clearCanvas:!0},e.Label={$extend:!1,overridable:!1,type:"HTML",style:" ",size:10,family:"sans-serif",textAlign:"center",textBaseline:"alphabetic",color:"#fff"},e.Tips={$extend:!1,enable:!1,type:"auto",offsetX:20,offsetY:20,force:!1,onShow:a.empty,onHide:a.empty},e.NodeStyles={$extend:!1,enable:!1,type:"auto",stylesHover:!1,stylesClick:!1},e.Events={$extend:!1,enable:!1,enableForEdges:!1,type:"auto",onClick:a.empty,onRightClick:a.empty,onMouseMove:a.empty,onMouseEnter:a.empty,onMouseLeave:a.empty,onDragStart:a.empty,onDragMove:a.empty,onDragCancel:a.empty,onDragEnd:a.empty,onTouchStart:a.empty,onTouchMove:a.empty,onTouchEnd:a.empty,onMouseWheel:a.empty},e.Navigation={$extend:!1,enable:!1,type:"auto",panning:!1,zooming:!1},e.Controller={$extend:!0,onBeforeCompute:a.empty,onAfterCompute:a.empty,onCreateLabel:a.empty,onPlaceLabel:a.empty,onComplete:a.empty,onBeforePlotLine:a.empty,onAfterPlotLine:a.empty,onBeforePlotNode:a.empty,onAfterPlotNode:a.empty,request:!1};var f={initialize:function(a,b){this.viz=b,this.canvas=b.canvas,this.config=b.config[a],this.nodeTypes=b.fx.nodeTypes;var c=this.config.type;this.labelContainer=(this.dom=c=="auto"?b.config.Label.type!="Native":c!="Native")&&b.labels.getLabelContainer(),this.isEnabled()&&this.initializePost()},initializePost:a.empty,setAsProperty:a.lambda(!1),isEnabled:function(){return this.config.enable},isLabel:function(b,c,d){var b=a.event.get(b,c),c=this.labelContainer,e=b.target||b.srcElement,b=b.relatedTarget;return d?b&&b==this.viz.canvas.getCtx().canvas&&!!e&&this.isDescendantOf(e,c):this.isDescendantOf(e,c)},isDescendantOf:function(a,b){for(;a&&a.parentNode;){if(a.parentNode==b)return a;a=a.parentNode}return!1}},g={onMouseUp:a.empty,onMouseDown:a.empty,onMouseMove:a.empty,onMouseOver:a.empty,onMouseOut:a.empty,onMouseWheel:a.empty,onTouchStart:a.empty,onTouchMove:a.empty,onTouchEnd:a.empty,onTouchCancel:a.empty},h=new b({initialize:function(a){this.viz=a,this.canvas=a.canvas,this.edge=this.node=!1,this.registeredObjects=[],this.attachEvents()},attachEvents:function(){var b=this.canvas.getElement(),c=this;b.oncontextmenu=a.lambda(!1),a.addEvents(b,{mouseup:function(b,d){var e=a.event.get(b,d);c.handleEvent("MouseUp",b,d,c.makeEventObject(b,d),a.event.isRightClick(e))},mousedown:function(b,d){var e=a.event.get(b,d);c.handleEvent("MouseDown",b,d,c.makeEventObject(b,d),a.event.isRightClick(e))},mousemove:function(a,b){c.handleEvent("MouseMove",a,b,c.makeEventObject(a,b))},mouseover:function(a,b){c.handleEvent("MouseOver",a,b,c.makeEventObject(a,b))},mouseout:function(a,b){c.handleEvent("MouseOut",a,b,c.makeEventObject(a,b))},touchstart:function(a,b){c.handleEvent("TouchStart",a,b,c.makeEventObject(a,b))},touchmove:function(a,b){c.handleEvent("TouchMove",a,b,c.makeEventObject(a,b))},touchend:function(a,b){c.handleEvent("TouchEnd",a,b,c.makeEventObject(a,b))}});var d=function(b,d){var e=a.event.get(b,d),e=a.event.getWheel(e);c.handleEvent("MouseWheel",b,d,e)};!document.getBoxObjectFor&&window.mozInnerScreenX==null?a.addEvent(b,"mousewheel",d):b.addEventListener("DOMMouseScroll",d,!1)},register:function(a){this.registeredObjects.push(a)},handleEvent:function(){for(var a=Array.prototype.slice.call(arguments),b=a.shift(),c=0,d=this.registeredObjects,e=d.length;c<e;c++)d[c]["on"+b].apply(d[c],a)},makeEventObject:function(b,c){var d=this,e=this.viz.graph,f=this.viz.fx,g=f.nodeTypes,h=f.edgeTypes;return{pos:!1,node:!1,edge:!1,contains:!1,getNodeCalled:!1,getEdgeCalled:!1,getPos:function(){var e=d.viz.canvas,f=e.getSize(),g=e.getPos(),h=e.translateOffsetX,i=e.translateOffsetY,j=e.scaleOffsetX,e=e.scaleOffsetY,k=a.event.getPos(b,c);return this.pos={x:(k.x-g.x-f.width/2-h)*1/j,y:(k.y-g.y-f.height/2-i)*1/e}},getNode:function(){if(this.getNodeCalled)return this.node;this.getNodeCalled=!0;for(var a in e.nodes){var b=e.nodes[a],c=b&&g[b.getData("type")];if(c=c&&c.contains&&c.contains.call(f,b,this.getPos()))return this.contains=c,d.node=this.node=b}return d.node=this.node=!1},getEdge:function(){if(this.getEdgeCalled)return this.edge;this.getEdgeCalled=!0;var a={},b;for(b in e.edges){var c=e.edges[b];a[b]=!0;for(var g in c)if(!(g in a)){var i=c[g],j=i&&h[i.getData("type")];if(j=j&&j.contains&&j.contains.call(f,i,this.getPos()))return this.contains=j,d.edge=this.edge=i}}return d.edge=this.edge=!1},getContains:function(){return this.getNodeCalled?this.contains:(this.getNode(),this.contains)}}}}),i={initializeExtras:function(){var b=new h(this),c=this;a.each(["NodeStyles","Tips","Navigation","Events"],function(a){var d=new i.Classes[a](a,c);d.isEnabled()&&b.register(d),d.setAsProperty()&&(c[a.toLowerCase()]=d)})},Classes:{}};i.Classes.Events=new b({Implements:[f,g],initializePost:function(){this.fx=this.viz.fx,this.ntypes=this.viz.fx.nodeTypes,this.etypes=this.viz.fx.edgeTypes,this.moved=this.touchMoved=this.touched=this.pressed=this.hovered=!1},setAsProperty:a.lambda(!0),onMouseUp:function(b,c,d,e){b=a.event.get(b,c),this.moved||(e?this.config.onRightClick(this.hovered,d,b):this.config.onClick(this.pressed,d,b)),this.pressed&&(this.moved?this.config.onDragEnd(this.pressed,d,b):this.config.onDragCancel(this.pressed,d,b),this.pressed=this.moved=!1)},onMouseOut:function(b,c,d){var e=a.event.get(b,c),f;if(this.dom&&(f=this.isLabel(b,c,!0)))this.config.onMouseLeave(this.viz.graph.getNode(f.id),d,e),this.hovered=!1;else{b=e.relatedTarget;for(c=this.canvas.getElement();b&&b.parentNode;){if(c==b.parentNode)return;b=b.parentNode}this.hovered&&(this.config.onMouseLeave(this.hovered,d,e),this.hovered=!1)}},onMouseOver:function(b,c,d){var e=a.event.get(b,c),f;this.dom&&(f=this.isLabel(b,c,!0))&&(this.hovered=this.viz.graph.getNode(f.id),this.config.onMouseEnter(this.hovered,d,e))},onMouseMove:function(b,c,d){b=a.event.get(b,c);if(this.pressed)this.moved=!0,this.config.onDragMove(this.pressed,d,b);else if(this.dom)this.config.onMouseMove(this.hovered,d,b);else{if(this.hovered){var c=this.hovered,e=c.nodeFrom?this.etypes[c.getData("type")]:this.ntypes[c.getData("type")];if(e&&e.contains&&e.contains.call(this.fx,c,d.getPos())){this.config.onMouseMove(c,d,b);return}this.config.onMouseLeave(c,d,b),this.hovered=!1}(this.hovered=d.getNode()||this.config.enableForEdges&&d.getEdge())?this.config.onMouseEnter(this.hovered,d,b):this.config.onMouseMove(!1,d,b)}},onMouseWheel:function(b,c,d){this.config.onMouseWheel(d,a.event.get(b,c))},onMouseDown:function(b,c,d){var e=a.event.get(b,c);if(this.dom){if(b=this.isLabel(b,c))this.pressed=this.viz.graph.getNode(b.id)}else this.pressed=d.getNode()||this.config.enableForEdges&&d.getEdge();this.pressed&&this.config.onDragStart(this.pressed,d,e)},onTouchStart:function(b,c,d){var e=a.event.get(b,c),f;(this.touched=this.dom&&(f=this.isLabel(b,c))?this.viz.graph.getNode(f.id):d.getNode()||this.config.enableForEdges&&d.getEdge())&&this.config.onTouchStart(this.touched,d,e)},onTouchMove:function(b,c,d){b=a.event.get(b,c),this.touched&&(this.touchMoved=!0,this.config.onTouchMove(this.touched,d,b))},onTouchEnd:function(b,c,d){b=a.event.get(b,c),this.touched&&(this.touchMoved?this.config.onTouchEnd(this.touched,d,b):this.config.onTouchCancel(this.touched,d,b),this.touched=this.touchMoved=!1)}}),i.Classes.Tips=new b({Implements:[f,g],initializePost:function(){if(document.body){var b=a("_tooltip")||document.createElement("div");b.id="_tooltip",b.className="tip",a.extend(b.style,{position:"absolute",display:"none",zIndex:13e3}),document.body.appendChild(b),this.tip=b,this.node=!1}},setAsProperty:a.lambda(!0),onMouseOut:function(b,c){a.event.get(b,c);if(this.dom&&this.isLabel(b,c,!0))this.hide(!0);else{for(var d=b.relatedTarget,e=this.canvas.getElement();d&&d.parentNode;){if(e==d.parentNode)return;d=d.parentNode}this.hide(!1)}},onMouseOver:function(a,b){var c;this.dom&&(c=this.isLabel(a,b,!1))&&(this.node=this.viz.graph.getNode(c.id),this.config.onShow(this.tip,this.node,c))},onMouseMove:function(b,c,d){this.dom&&this.isLabel(b,c)&&this.setTooltipPosition(a.event.getPos(b,c));if(!this.dom){var e=d.getNode();if(e){if(this.config.force||!this.node||this.node.id!=e.id)this.node=e,this.config.onShow(this.tip,e,d.getContains());this.setTooltipPosition(a.event.getPos(b,c))}else this.hide(!0)}},setTooltipPosition:function(a){var b=this.tip,c=b.style,d=this.config;c.display="";var e={height:document.body.clientHeight,width:document.body.clientWidth},b={width:b.offsetWidth,height:b.offsetHeight},f=d.offsetX,d=d.offsetY;c.top=(a.y+d+b.height>e.height?a.y-b.height-d:a.y+d)+"px",c.left=(a.x+b.width+f>e.width?a.x-b.width-f:a.x+f)+"px"},hide:function(a){this.tip.style.display="none",a&&this.config.onHide()}}),i.Classes.NodeStyles=new b({Implements:[f,g],initializePost:function(){this.fx=this.viz.fx,this.types=this.viz.fx.nodeTypes,this.nStyles=this.config,this.nodeStylesOnHover=this.nStyles.stylesHover,this.nodeStylesOnClick=this.nStyles.stylesClick,this.hoveredNode=!1,this.fx.nodeFxAnimation=new d,this.move=this.down=!1},onMouseOut:function(a,b){this.down=this.move=!1;if(this.hoveredNode){this.dom&&this.isLabel(a,b,!0)&&this.toggleStylesOnHover(this.hoveredNode,!1);for(var c=a.relatedTarget,d=this.canvas.getElement();c&&c.parentNode;){if(d==c.parentNode)return;c=c.parentNode}this.toggleStylesOnHover(this.hoveredNode,!1),this.hoveredNode=!1}},onMouseOver:function(a,b){var c;this.dom&&(c=this.isLabel(a,b,!0))&&(c=this.viz.graph.getNode(c.id),!c.selected)&&(this.hoveredNode=c,this.toggleStylesOnHover(this.hoveredNode,!0))},onMouseDown:function(a,b,c,d){if(!d){var e;this.dom&&(e=this.isLabel(a,b))?this.down=this.viz.graph.getNode(e.id):this.dom||(this.down=c.getNode()),this.move=!1}},onMouseUp:function(a,b,c,d){d||(this.move||this.onClick(c.getNode()),this.down=this.move=!1)},getRestoredStyles:function(a,b){var c={},d=this["nodeStylesOn"+b],e;for(e in d)c[e]=a.styles["$"+e];return c},toggleStylesOnHover:function(a,b){this.nodeStylesOnHover&&this.toggleStylesOn("Hover",a,b)},toggleStylesOnClick:function(a,b){this.nodeStylesOnClick&&this.toggleStylesOn("Click",a,b)},toggleStylesOn:function(b,d,e){var f=this.viz;if(e){d.styles||(d.styles=a.merge(d.data,{}));for(var g in this["nodeStylesOn"+b])e="$"+g,e in d.styles||(d.styles[e]=d.getData(g));f.fx.nodeFx(a.extend({elements:{id:d.id,properties:this["nodeStylesOn"+b]},transition:c.Quart.easeOut,duration:300,fps:40},this.config))}else b=this.getRestoredStyles(d,b),f.fx.nodeFx(a.extend({elements:{id:d.id,properties:b},transition:c.Quart.easeOut,duration:300,fps:40},this.config))},onClick:function(a){if(a){var b=this.nodeStylesOnClick;b&&(a.selected?(this.toggleStylesOnClick(a,!1),delete a.selected):(this.viz.graph.eachNode(function(a){if(a.selected){for(var c in b)a.setData(c,a.styles["$"+c],"end");delete a.selected}}),this.toggleStylesOnClick(a,!0),a.selected=!0,delete a.hovered,this.hoveredNode=!1))}},onMouseMove:function(a,b,c){this.down&&(this.move=!0);if(!this.dom||!this.isLabel(a,b)){var d=this.nodeStylesOnHover;if(d&&!this.dom){if(this.hoveredNode&&(a=this.types[this.hoveredNode.getData("type")])&&a.contains&&a.contains.call(this.fx,this.hoveredNode,c.getPos()))return;c=c.getNode(),(this.hoveredNode||c)&&!c.hovered&&(c&&!c.selected?(this.fx.nodeFxAnimation.stopTimer(),this.viz.graph.eachNode(function(a){if(a.hovered&&!a.selected){for(var b in d)a.setData(b,a.styles["$"+b],"end");delete a.hovered}}),c.hovered=!0,this.hoveredNode=c,this.toggleStylesOnHover(c,!0)):this.hoveredNode&&!this.hoveredNode.selected&&(this.fx.nodeFxAnimation.stopTimer(),this.toggleStylesOnHover(this.hoveredNode,!1),delete this.hoveredNode.hovered,this.hoveredNode=!1))}}}}),i.Classes.Navigation=new b({Implements:[f,g],initializePost:function(){this.pressed=this.pos=!1},onMouseWheel:function(b,c,d){this.config.zooming&&(a.event.stop(a.event.get(b,c)),b=1+d*(this.config.zooming/1e3),this.canvas.scale(b,b))},onMouseDown:function(a,b,c){if(this.config.panning&&(this.config.panning!="avoid nodes"||(this.dom?!this.isLabel(a,b):!c.getNode()))){this.pressed=!0,this.pos=c.getPos();var a=this.canvas,b=a.translateOffsetX,c=a.translateOffsetY,d=a.scaleOffsetY;this.pos.x*=a.scaleOffsetX,this.pos.x+=b,this.pos.y*=d,this.pos.y+=c}},onMouseMove:function(a,b,c){if(this.config.panning&&this.pressed&&(this.config.panning!="avoid nodes"||(this.dom?!this.isLabel(a,b):!c.getNode()))){var a=this.pos,c=c.getPos(),d=this.canvas,e=d.translateOffsetX,f=d.translateOffsetY,b=d.scaleOffsetX,d=d.scaleOffsetY;c.x*=b,c.y*=d,c.x+=e,c.y+=f,e=c.x-a.x,a=c.y-a.y,this.pos=c,this.canvas.translate(e*1/b,a*1/d)}},onMouseUp:function(){this.config.panning&&(this.pressed=!1)}});var j;(function(){function c(b,c){var d=document.createElement(b),f;for(f in c)typeof c[f]=="object"?a.extend(d[f],c[f]):d[f]=c[f];return b=="canvas"&&!e&&G_vmlCanvasManager&&(d=G_vmlCanvasManager.initElement(document.body.appendChild(d))),d}var d=typeof HTMLCanvasElement,e=d=="object"||d=="function";$jit.Canvas=j=new b({canvases:[],pos:!1,element:!1,labelContainer:!1,translateOffsetX:0,translateOffsetY:0,scaleOffsetX:1,scaleOffsetY:1,initialize:function(b,d){this.viz=b,this.opt=this.config=d;var e=a.type(d.injectInto)=="string"?d.injectInto:d.injectInto.id,f=d.type,g=e+"-label",h=a(e),i=d.width||h.offsetWidth,k=d.height||h.offsetHeight;this.id=e;var l={injectInto:e,width:i,height:k};this.element=c("div",{id:e+"-canvaswidget",style:{position:"relative",width:i+"px",height:k+"px"}}),this.labelContainer=this.createLabelContainer(d.Label.type,g,l),this.canvases.push(new j.Base[f]({config:a.extend({idSuffix:"-canvas"},l),plot:function(){b.fx.plot()},resize:function(){b.refresh()}}));if(e=d.background)l=new j.Background[e.type](b,a.extend(e,l)),this.canvases.push(new j.Base[f](l));for(f=this.canvases.length;f--;)this.element.appendChild(this.canvases[f].canvas),f>0&&this.canvases[f].plot();this.element.appendChild(this.labelContainer),h.appendChild(this.element);var m=null,n=this;a.addEvent(window,"scroll",function(){clearTimeout(m),m=setTimeout(function(){n.getPos(!0)},500)})},getCtx:function(a){return this.canvases[a||0].getCtx()},getConfig:function(){return this.opt},getElement:function(){return this.element},getSize:function(a){return this.canvases[a||0].getSize()},resize:function(a,b){this.getPos(!0),this.translateOffsetX=this.translateOffsetY=0,this.scaleOffsetX=this.scaleOffsetY=1;for(var c=0,d=this.canvases.length;c<d;c++)this.canvases[c].resize(a,b);c=this.element.style,c.width=a+"px",c.height=b+"px",this.labelContainer&&(this.labelContainer.style.width=a+"px")},translate:function(a,b,c){this.translateOffsetX+=a*this.scaleOffsetX,this.translateOffsetY+=b*this.scaleOffsetY;for(var d=0,e=this.canvases.length;d<e;d++)this.canvases[d].translate(a,b,c)},scale:function(a,b){var c=this.scaleOffsetX*a,d=this.scaleOffsetY*b,e=this.translateOffsetX*(a-1)/c,f=this.translateOffsetY*(b-1)/d;this.scaleOffsetX=c,this.scaleOffsetY=d,c=0;for(d=this.canvases.length;c<d;c++)this.canvases[c].scale(a,b,!0);this.translate(e,f,!1)},getPos:function(b){return b||!this.pos?this.pos=a.getPos(this.getElement()):this.pos},clear:function(a){this.canvases[a||0].clear()},path:function(a,b){var c=this.canvases[0].getCtx();c.beginPath(),b(c),c[a](),c.closePath()},createLabelContainer:function(a,b,d){if(a=="HTML"||a=="Native")return c("div",{id:b,style:{overflow:"visible",position:"absolute",top:0,left:0,width:d.width+"px",height:0}});if(a=="SVG"){a=document.createElementNS("http://www.w3.org/2000/svg","svg:svg"),a.setAttribute("width",d.width),a.setAttribute("height",d.height);var e=a.style;return e.position="absolute",e.left=e.top="0px",e=document.createElementNS("http://www.w3.org/2000/svg","svg:g"),e.setAttribute("width",d.width),e.setAttribute("height",d.height),e.setAttribute("x",0),e.setAttribute("y",0),e.setAttribute("id",b),a.appendChild(e),a}}}),j.Base={},j.Base["2D"]=new b({translateOffsetX:0,translateOffsetY:0,scaleOffsetX:1,scaleOffsetY:1,initialize:function(a){this.viz=a,this.opt=a.config,this.size=!1,this.createCanvas(),this.translateToCenter()},createCanvas:function(){var a=this.opt,b=a.width,d=a.height;this.canvas=c("canvas",{id:a.injectInto+a.idSuffix,width:b,height:d,style:{position:"absolute",top:0,left:0,width:b+"px",height:d+"px"}})},getCtx:function(){return this.ctx?this.ctx:this.ctx=this.canvas.getContext("2d")},getSize:function(){if(this.size)return this.size;var a=this.canvas;return this.size={width:a.width,height:a.height}},translateToCenter:function(a){var b=this.getSize(),c=a?b.width-a.width-this.translateOffsetX*2:b.width;height=a?b.height-a.height-this.translateOffsetY*2:b.height,b=this.getCtx(),a&&b.scale(1/this.scaleOffsetX,1/this.scaleOffsetY),b.translate(c/2,height/2)},resize:function(a,b){var c=this.getSize(),d=this.canvas,f=d.style;this.size=!1,d.width=a,d.height=b,f.width=a+"px",f.height=b+"px",e?this.translateToCenter():this.translateToCenter(c),this.translateOffsetX=this.translateOffsetY=0,this.scaleOffsetX=this.scaleOffsetY=1,this.clear(),this.viz.resize(a,b,this)},translate:function(a,b,c){var d=this.scaleOffsetY;this.translateOffsetX+=a*this.scaleOffsetX,this.translateOffsetY+=b*d,this.getCtx().translate(a,b),!c&&this.plot()},scale:function(a,b,c){this.scaleOffsetX*=a,this.scaleOffsetY*=b,this.getCtx().scale(a,b),!c&&this.plot()},clear:function(){var a=this.getSize(),b=this.translateOffsetX,c=this.translateOffsetY,d=this.scaleOffsetX,e=this.scaleOffsetY;this.getCtx().clearRect((-a.width/2-b)*1/d,(-a.height/2-c)*1/e,a.width*1/d,a.height*1/e)},plot:function(){this.clear(),this.viz.plot(this)}}),j.Background={},j.Background.Circles=new b({initialize:function(b,c){this.viz=b,this.config=a.merge({idSuffix:"-bkcanvas",levelDistance:100,numberOfCircles:6,CanvasStyles:{},offset:0},c)},resize:function(a,b,c){this.plot(c)},plot:function(a){var a=a.getCtx(),b=this.config,c=b.CanvasStyles,d;for(d in c)a[d]=c[d];d=b.numberOfCircles,b=b.levelDistance;for(c=1;c<=d;c++)a.beginPath(),a.arc(0,0,b*c,0,2*Math.PI,!1),a.stroke(),a.closePath()}})})();var k=function(a,b){this.theta=a||0,this.rho=b||0};$jit.Polar=k,k.prototype={getc:function(a){return this.toComplex(a)},getp:function(){return this},set:function(a){a=a.getp(),this.theta=a.theta,this.rho=a.rho},setc:function(a,b){this.rho=Math.sqrt(a*a+b*b),this.theta=Math.atan2(b,a),this.theta<0&&(this.theta+=Math.PI*2)},setp:function(a,b){this.theta=a,this.rho=b},clone:function(){return new k(this.theta,this.rho)},toComplex:function(a){var b=Math.cos(this.theta)*this.rho,c=Math.sin(this.theta)*this.rho;return a?{x:b,y:c}:new l(b,c)},add:function(a){return new k(this.theta+a.theta,this.rho+a.rho)},scale:function(a){return new k(this.theta,this.rho*a)},equals:function(a){return this.theta==a.theta&&this.rho==a.rho},$add:function(a){return this.theta+=a.theta,this.rho+=a.rho,this},$madd:function(a){return this.theta=(this.theta+a.theta)%(Math.PI*2),this.rho+=a.rho,this},$scale:function(a){return this.rho*=a,this},isZero:function(){var a=Math.abs;return a(this.theta)<1e-4&&a(this.rho)<1e-4},interpolate:function(a,b){var c=Math.PI,d=c*2,e=function(a){return a<0?a%d+d:a%d},f=this.theta,g=a.theta,h=Math.abs(f-g);return{theta:h==c?f>g?e(g+(f-d-g)*b):e(g-d+(f-g)*b):h>=c?f>g?e(g+(f-d-g)*b):e(g-d+(f-(g-d))*b):e(g+(f-g)*b),rho:(this.rho-a.rho)*b+a.rho}}},k.KER=new k(0,0);var l=function(a,b){this.x=a||0,this.y=b||0};$jit.Complex=l,l.prototype={getc:function(){return this},getp:function(a){return this.toPolar(a)},set:function(a){a=a.getc(!0),this.x=a.x,this.y=a.y},setc:function(a,b){this.x=a,this.y=b},setp:function(a,b){this.x=Math.cos(a)*b,this.y=Math.sin(a)*b},clone:function(){return new l(this.x,this.y)},toPolar:function(a){var b=this.norm(),c=Math.atan2(this.y,this.x);return c<0&&(c+=Math.PI*2),a?{theta:c,rho:b}:new k(c,b)},norm:function(){return Math.sqrt(this.squaredNorm())},squaredNorm:function(){return this.x*this.x+this.y*this.y},add:function(a){return new l(this.x+a.x,this.y+a.y)},prod:function(a){return new l(this.x*a.x-this.y*a.y,this.y*a.x+this.x*a.y)},conjugate:function(){return new l(this.x,-this.y)},scale:function(a){return new l(this.x*a,this.y*a)},equals:function(a){return this.x==a.x&&this.y==a.y},$add:function(a){return this.x+=a.x,this.y+=a.y,this},$prod:function(a){var b=this.x,c=this.y;return this.x=b*a.x-c*a.y,this.y=c*a.x+b*a.y,this},$conjugate:function(){return this.y=-this.y,this},$scale:function(a){return this.x*=a,this.y*=a,this},$div:function(a){var b=this.x,c=this.y,d=a.squaredNorm();return this.x=b*a.x+c*a.y,this.y=c*a.x-b*a.y,this.$scale(1/d)},isZero:function(){var a=Math.abs;return a(this.x)<1e-4&&a(this.y)<1e-4}},l.KER=new l(0,0),$jit.Graph=new b({initialize:function(b,c,d,e){var f={klass:l,Node:{}};this.Node=c,this.Edge=d,this.Label=e,this.opt=a.merge(f,b||{}),this.nodes={},this.edges={};var g=this;this.nodeList={};for(var h in n)g.nodeList[h]=function(a){return function(){var b=Array.prototype.slice.call(arguments);g.eachNode(function(c){c[a].apply(c,b)})}}(h)},getNode:function(a){return this.hasNode(a)?this.nodes[a]:!1},get:function(a){return this.getNode(a)},getByName:function(a){for(var b in this.nodes){var c=this.nodes[b];if(c.name==a)return c}return!1},getAdjacence:function(a,b){return a in this.edges?this.edges[a][b]:!1},addNode:function(b){if(!this.nodes[b.id]){var c=this.edges[b.id]={};this.nodes[b.id]=new m.Node(a.extend({id:b.id,name:b.name,data:a.merge(b.data||{},{}),adjacencies:c},this.opt.Node),this.opt.klass,this.Node,this.Edge,this.Label)}return this.nodes[b.id]},addAdjacence:function(a,b,c){this.hasNode(a.id)||this.addNode(a),this.hasNode(b.id)||this.addNode(b),a=this.nodes[a.id],b=this.nodes[b.id];if(!a.adjacentTo(b)){var d=this.edges[a.id]=this.edges[a.id]||{},e=this.edges[b.id]=this.edges[b.id]||{};return d[b.id]=e[a.id]=new m.Adjacence(a,b,c,this.Edge,this.Label),d[b.id]}return this.edges[a.id][b.id]},removeNode:function(a){if(this.hasNode(a)){delete this.nodes[a];var b=this.edges[a],c;for(c in b)delete this.edges[c][a];delete this.edges[a]}},removeAdjacence:function(a,b){delete this.edges[a][b],delete this.edges[b][a]},hasNode:function(a){return a in this.nodes},empty:function(){this.nodes={},this.edges={}}});var m=$jit.Graph,n;(function(){var b=function(a,b,c,d,e){var f,c=c||"current";return c=="current"?f=this.data:c=="start"?f=this.startData:c=="end"&&(f=this.endData),a="$"+(a?a+"-":"")+b,d?f[a]:this.Config.overridable?a in f?f[a]:a in this.data?this.data[a]:e[b]||0:e[b]||0},c=function(a,b,c,d){var d=d||"current",e;d=="current"?e=this.data:d=="start"?e=this.startData:d=="end"&&(e=this.endData),e["$"+(a?a+"-":"")+b]=c},d=function(b,c){var b="$"+(b?b+"-":""),d=this;a.each(c,function(a){a=b+a,delete d.data[a],delete d.endData[a],delete d.startData[a]})};n={getData:function(a,c,d){return b.call(this,"",a,c,d,this.Config)},setData:function(a,b,d){c.call(this,"",a,b,d)},setDataset:function(b,c){var b=a.splat(b),d;for(d in c)for(var e=0,f=a.splat(c[d]),g=b.length;e<g;e++)this.setData(d,f[e],b[e])},removeData:function(){d.call(this,"",Array.prototype.slice.call(arguments))},getCanvasStyle:function(a,c,d){return b.call(this,"canvas",a,c,d,this.Config.CanvasStyles)},setCanvasStyle:function(a,b,d){c.call(this,"canvas",a,b,d)},setCanvasStyles:function(b,c){var b=a.splat(b),d;for(d in c)for(var e=0,f=a.splat(c[d]),g=b.length;e<g;e++)this.setCanvasStyle(d,f[e],b[e])},removeCanvasStyle:function(){d.call(this,"canvas",Array.prototype.slice.call(arguments))},getLabelData:function(a,c,d){return b.call(this,"label",a,c,d,this.Label)},setLabelData:function(a,b,d){c.call(this,"label",a,b,d)},setLabelDataset:function(b,c){var b=a.splat(b),d;for(d in c)for(var e=0,f=a.splat(c[d]),g=b.length;e<g;e++)this.setLabelData(d,f[e],b[e])},removeLabelData:function(){d.call(this,"label",Array.prototype.slice.call(arguments))}}})(),m.Node=new b({initialize:function(b,c,d,e,f){c={id:"",name:"",data:{},startData:{},endData:{},adjacencies:{},selected
24
+ :!1,drawn:!1,exist:!1,angleSpan:{begin:0,end:0},pos:new c,startPos:new c,endPos:new c},a.extend(this,a.extend(c,b)),this.Config=this.Node=d,this.Edge=e,this.Label=f},adjacentTo:function(a){return a.id in this.adjacencies},getAdjacency:function(a){return this.adjacencies[a]},getPos:function(a){a=a||"current";if(a=="current")return this.pos;if(a=="end")return this.endPos;if(a=="start")return this.startPos},setPos:function(a,b){var b=b||"current",c;b=="current"?c=this.pos:b=="end"?c=this.endPos:b=="start"&&(c=this.startPos),c.set(a)}}),m.Node.implement(n),m.Adjacence=new b({initialize:function(a,b,c,d,e){this.nodeFrom=a,this.nodeTo=b,this.data=c||{},this.startData={},this.endData={},this.Config=this.Edge=d,this.Label=e}}),m.Adjacence.implement(n),m.Util={filter:function(b){if(!b||a.type(b)!="string")return function(){return!0};var c=b.split(" ");return function(a){for(var b=0;b<c.length;b++)if(a[c[b]])return!1;return!0}},getNode:function(a,b){return a.nodes[b]},eachNode:function(a,b,c){var c=this.filter(c),d;for(d in a.nodes)c(a.nodes[d])&&b(a.nodes[d])},each:function(a,b,c){this.eachNode(a,b,c)},eachAdjacency:function(a,b,c){var d=a.adjacencies,c=this.filter(c),e;for(e in d){var f=d[e];if(c(f)){if(f.nodeFrom!=a){var g=f.nodeFrom;f.nodeFrom=f.nodeTo,f.nodeTo=g}b(f,e)}}},computeLevels:function(a,b,c,d){var c=c||0,e=this.filter(d);this.eachNode(a,function(a){a._flag=!1,a._depth=-1},d),a=a.getNode(b),a._depth=c;for(var f=[a];f.length!=0;){var g=f.pop();g._flag=!0,this.eachAdjacency(g,function(a){a=a.nodeTo,a._flag==0&&e(a)&&(a._depth<0&&(a._depth=g._depth+1+c),f.unshift(a))},d)}},eachBFS:function(a,b,c,d){var e=this.filter(d);this.clean(a);for(var f=[a.getNode(b)];f.length!=0;)a=f.pop(),a._flag=!0,c(a,a._depth),this.eachAdjacency(a,function(a){a=a.nodeTo,a._flag==0&&e(a)&&(a._flag=!0,f.unshift(a))},d)},eachLevel:function(a,b,c,d,e){var f=a._depth,g=this.filter(e),h=this,c=c===!1?Number.MAX_VALUE-f:c;(function i(a,b,c){var e=a._depth;e>=b&&e<=c&&g(a)&&d(a,e),e<c&&h.eachAdjacency(a,function(a){a=a.nodeTo,a._depth>e&&i(a,b,c)})})(a,b+f,c+f)},eachSubgraph:function(a,b,c){this.eachLevel(a,0,!1,b,c)},eachSubnode:function(a,b,c){this.eachLevel(a,1,1,b,c)},anySubnode:function(b,c,d){var e=!1,c=c||a.lambda(!0),f=a.type(c)=="string"?function(a){return a[c]}:c;return this.eachSubnode(b,function(a){f(a)&&(e=!0)},d),e},getSubnodes:function(b,c,d){var e=[],c=c||0,f;return a.type(c)=="array"?(f=c[0],c=c[1]):(f=c,c=Number.MAX_VALUE-b._depth),this.eachLevel(b,f,c,function(a){e.push(a)},d),e},getParents:function(a){var b=[];return this.eachAdjacency(a,function(c){c=c.nodeTo,c._depth<a._depth&&b.push(c)}),b},isDescendantOf:function(a,b){if(a.id==b)return!0;for(var c=this.getParents(a),d=!1,e=0;!d&&e<c.length;e++)d=d||this.isDescendantOf(c[e],b);return d},clean:function(a){this.eachNode(a,function(a){a._flag=!1})},getClosestNodeToOrigin:function(a,b,c){return this.getClosestNodeToPos(a,k.KER,b,c)},getClosestNodeToPos:function(a,b,c,d){var e=null,c=c||"current",b=b&&b.getc(!0)||l.KER,f=function(a,b){var c=a.x-b.x,d=a.y-b.y;return c*c+d*d};return this.eachNode(a,function(a){e=e==null||f(a.getPos(c).getc(!0),b)<f(e.getPos(c).getc(!0),b)?a:e},d),e}},a.each(["get","getNode","each","eachNode","computeLevels","eachBFS","clean","getClosestNodeToPos","getClosestNodeToOrigin"],function(a){m.prototype[a]=function(){return m.Util[a].apply(m.Util,[this].concat(Array.prototype.slice.call(arguments)))}}),a.each(["eachAdjacency","eachLevel","eachSubgraph","eachSubnode","anySubnode","getSubnodes","getParents","isDescendantOf"],function(a){m.Node.prototype[a]=function(){return m.Util[a].apply(m.Util,[this].concat(Array.prototype.slice.call(arguments)))}}),m.Op={options:{type:"nothing",duration:2e3,hideLabels:!0,fps:30},initialize:function(a){this.viz=a},removeNode:function(b,c){var d=this.viz,e=a.merge(this.options,d.controller,c),f=a.splat(b),g,h,i;switch(e.type){case"nothing":for(g=0;g<f.length;g++)d.graph.removeNode(f[g]);break;case"replot":this.removeNode(f,{type:"nothing"}),d.labels.clearLabels(),d.refresh(!0);break;case"fade:seq":case"fade":h=this;for(g=0;g<f.length;g++)i=d.graph.getNode(f[g]),i.setData("alpha",0,"end");d.fx.animate(a.merge(e,{modes:["node-property:alpha"],onComplete:function(){h.removeNode(f,{type:"nothing"}),d.labels.clearLabels(),d.reposition(),d.fx.animate(a.merge(e,{modes:["linear"]}))}}));break;case"fade:con":h=this;for(g=0;g<f.length;g++)i=d.graph.getNode(f[g]),i.setData("alpha",0,"end"),i.ignore=!0;d.reposition(),d.fx.animate(a.merge(e,{modes:["node-property:alpha","linear"],onComplete:function(){h.removeNode(f,{type:"nothing"}),e.onComplete&&e.onComplete()}}));break;case"iter":h=this,d.fx.sequence({condition:function(){return f.length!=0},step:function(){h.removeNode(f.shift(),{type:"nothing"}),d.labels.clearLabels()},onComplete:function(){e.onComplete&&e.onComplete()},duration:Math.ceil(e.duration/f.length)});break;default:this.doError()}},removeEdge:function(b,c){var d=this.viz,e=a.merge(this.options,d.controller,c),f=a.type(b[0])=="string"?[b]:b,g,h,i;switch(e.type){case"nothing":for(g=0;g<f.length;g++)d.graph.removeAdjacence(f[g][0],f[g][1]);break;case"replot":this.removeEdge(f,{type:"nothing"}),d.refresh(!0);break;case"fade:seq":case"fade":h=this;for(g=0;g<f.length;g++)(i=d.graph.getAdjacence(f[g][0],f[g][1]))&&i.setData("alpha",0,"end");d.fx.animate(a.merge(e,{modes:["edge-property:alpha"],onComplete:function(){h.removeEdge(f,{type:"nothing"}),d.reposition(),d.fx.animate(a.merge(e,{modes:["linear"]}))}}));break;case"fade:con":h=this;for(g=0;g<f.length;g++)if(i=d.graph.getAdjacence(f[g][0],f[g][1]))i.setData("alpha",0,"end"),i.ignore=!0;d.reposition(),d.fx.animate(a.merge(e,{modes:["edge-property:alpha","linear"],onComplete:function(){h.removeEdge(f,{type:"nothing"}),e.onComplete&&e.onComplete()}}));break;case"iter":h=this,d.fx.sequence({condition:function(){return f.length!=0},step:function(){h.removeEdge(f.shift(),{type:"nothing"}),d.labels.clearLabels()},onComplete:function(){e.onComplete()},duration:Math.ceil(e.duration/f.length)});break;default:this.doError()}},sum:function(b,c){var d=this.viz,e=a.merge(this.options,d.controller,c),f=d.root,g;d.root=c.id||d.root;switch(e.type){case"nothing":g=d.construct(b),g.eachNode(function(a){a.eachAdjacency(function(a){d.graph.addAdjacence(a.nodeFrom,a.nodeTo,a.data)})});break;case"replot":d.refresh(!0),this.sum(b,{type:"nothing"}),d.refresh(!0);break;case"fade:seq":case"fade":case"fade:con":that=this,g=d.construct(b);var h=this.preprocessSum(g)?["node-property:alpha","edge-property:alpha"]:["node-property:alpha"];d.reposition(),e.type!="fade:con"?d.fx.animate(a.merge(e,{modes:["linear"],onComplete:function(){d.fx.animate(a.merge(e,{modes:h,onComplete:function(){e.onComplete()}}))}})):(d.graph.eachNode(function(a){a.id!=f&&a.pos.isZero()&&(a.pos.set(a.endPos),a.startPos.set(a.endPos))}),d.fx.animate(a.merge(e,{modes:["linear"].concat(h)})));break;default:this.doError()}},morph:function(b,c,d){var d=d||{},e=this.viz,f=a.merge(this.options,e.controller,c),g=e.root,h;e.root=c.id||e.root;switch(f.type){case"nothing":h=e.construct(b),h.eachNode(function(a){var b=e.graph.hasNode(a.id);a.eachAdjacency(function(a){var b=!!e.graph.getAdjacence(a.nodeFrom.id,a.nodeTo.id);e.graph.addAdjacence(a.nodeFrom,a.nodeTo,a.data);if(b){var b=e.graph.getAdjacence(a.nodeFrom.id,a.nodeTo.id),c;for(c in a.data||{})b.data[c]=a.data[c]}});if(b){var b=e.graph.getNode(a.id),c;for(c in a.data||{})b.data[c]=a.data[c]}}),e.graph.eachNode(function(a){a.eachAdjacency(function(a){h.getAdjacence(a.nodeFrom.id,a.nodeTo.id)||e.graph.removeAdjacence(a.nodeFrom.id,a.nodeTo.id)}),h.hasNode(a.id)||e.graph.removeNode(a.id)});break;case"replot":e.labels.clearLabels(!0),this.morph(b,{type:"nothing"}),e.refresh(!0),e.refresh(!0);break;case"fade:seq":case"fade":case"fade:con":that=this,h=e.construct(b);var i="node-property"in d&&a.map(a.splat(d["node-property"]),function(a){return"$"+a});e.graph.eachNode(function(b){var c=h.getNode(b.id);if(c){var c=c.data,d;for(d in c)i&&a.indexOf(i,d)>-1?b.endData[d]=c[d]:b.data[d]=c[d]}else b.setData("alpha",1),b.setData("alpha",1,"start"),b.setData("alpha",0,"end"),b.ignore=!0}),e.graph.eachNode(function(a){a.ignore||a.eachAdjacency(function(a){if(!a.nodeFrom.ignore&&!a.nodeTo.ignore){var b=h.getNode(a.nodeFrom.id),a=h.getNode(a.nodeTo.id);b.adjacentTo(a)||(a=e.graph.getAdjacence(b.id,a.id),j=!0,a.setData("alpha",1),a.setData("alpha",1,"start"),a.setData("alpha",0,"end"))}})});var j=this.preprocessSum(h),b=j?["node-property:alpha","edge-property:alpha"]:["node-property:alpha"];b[0]+="node-property"in d?":"+a.splat(d["node-property"]).join(":"):"",b[1]=(b[1]||"edge-property:alpha")+("edge-property"in d?":"+a.splat(d["edge-property"]).join(":"):""),"label-property"in d&&b.push("label-property:"+a.splat(d["label-property"]).join(":")),e.reposition?e.reposition():e.compute("end"),e.graph.eachNode(function(a){a.id!=g&&a.pos.getp().equals(k.KER)&&(a.pos.set(a.endPos),a.startPos.set(a.endPos))}),e.fx.animate(a.merge(f,{modes:[d.position||"polar"].concat(b),onComplete:function(){e.graph.eachNode(function(a){a.ignore&&e.graph.removeNode(a.id)}),e.graph.eachNode(function(a){a.eachAdjacency(function(a){a.ignore&&e.graph.removeAdjacence(a.nodeFrom.id,a.nodeTo.id)})}),f.onComplete()}}))}},contract:function(b,c){var d=this.viz;!b.collapsed&&b.anySubnode(a.lambda(!0))&&(c=a.merge(this.options,d.config,c||{},{modes:["node-property:alpha:span","linear"]}),b.collapsed=!0,function e(a){a.eachSubnode(function(a){a.ignore=!0,a.setData("alpha",0,c.type=="animate"?"end":"current"),e(a)})}(b),c.type=="animate"?(d.compute("end"),d.rotated&&d.rotate(d.rotated,"none",{property:"end"}),function f(a){a.eachSubnode(function(a){a.setPos(b.getPos("end"),"end"),f(a)})}(b),d.fx.animate(c)):c.type=="replot"&&d.refresh())},expand:function(b,c){if("collapsed"in b){var d=this.viz,c=a.merge(this.options,d.config,c||{},{modes:["node-property:alpha:span","linear"]});delete b.collapsed,function e(a){a.eachSubnode(function(a){delete a.ignore,a.setData("alpha",1,c.type=="animate"?"end":"current"),e(a)})}(b),c.type=="animate"?(d.compute("end"),d.rotated&&d.rotate(d.rotated,"none",{property:"end"}),d.fx.animate(c)):c.type=="replot"&&d.refresh()}},preprocessSum:function(a){var b=this.viz;a.eachNode(function(a){b.graph.hasNode(a.id)||(b.graph.addNode(a),a=b.graph.getNode(a.id),a.setData("alpha",0),a.setData("alpha",0,"start"),a.setData("alpha",1,"end"))});var c=!1;return a.eachNode(function(a){a.eachAdjacency(function(a){var d=b.graph.getNode(a.nodeFrom.id),e=b.graph.getNode(a.nodeTo.id);d.adjacentTo(e)||(a=b.graph.addAdjacence(d,e,a.data),d.startAlpha==d.endAlpha&&e.startAlpha==e.endAlpha&&(c=!0,a.setData("alpha",0),a.setData("alpha",0,"start"),a.setData("alpha",1,"end")))})}),c}};var o={none:{render:a.empty,contains:a.lambda(!1)},circle:{render:function(a,b,c,d){d=d.getCtx(),d.beginPath(),d.arc(b.x,b.y,c,0,Math.PI*2,!0),d.closePath(),d[a]()},contains:function(a,b,c){var d=a.x-b.x,a=a.y-b.y;return d*d+a*a<=c*c}},ellipse:{render:function(a,b,c,d,e){var e=e.getCtx(),f=1,g=1,h=1,i=1,j=0;c>d?(j=c/2,g=d/c,i=c/d):(j=d/2,f=c/d,h=d/c),e.save(),e.scale(f,g),e.beginPath(),e.arc(b.x*h,b.y*i,j,0,Math.PI*2,!0),e.closePath(),e[a](),e.restore()},contains:function(a,b,c,d){var e=0,f=1,g=1,h=0,i=0,e=0;return c>d?(e=c/2,g=d/c):(e=d/2,f=c/d),h=(a.x-b.x)*(1/f),i=(a.y-b.y)*(1/g),h*h+i*i<=e*e}},square:{render:function(a,b,c,d){d.getCtx()[a+"Rect"](b.x-c,b.y-c,2*c,2*c)},contains:function(a,b,c){return Math.abs(b.x-a.x)<=c&&Math.abs(b.y-a.y)<=c}},rectangle:{render:function(a,b,c,d,e){e.getCtx()[a+"Rect"](b.x-c/2,b.y-d/2,c,d)},contains:function(a,b,c,d){return Math.abs(b.x-a.x)<=c/2&&Math.abs(b.y-a.y)<=d/2}},triangle:{render:function(a,b,c,d){var d=d.getCtx(),e=b.x,f=b.y-c,g=e-c,b=b.y+c,c=e+c;d.beginPath(),d.moveTo(e,f),d.lineTo(g,b),d.lineTo(c,b),d.closePath(),d[a]()},contains:function(a,b,c){return o.circle.contains(a,b,c)}},star:{render:function(a,b,c,d){var d=d.getCtx(),e=Math.PI/5;d.save(),d.translate(b.x,b.y),d.beginPath(),d.moveTo(c,0);for(b=0;b<9;b++)d.rotate(e),b%2==0?d.lineTo(c/.525731*.200811,0):d.lineTo(c,0);d.closePath(),d[a](),d.restore()},contains:function(a,b,c){return o.circle.contains(a,b,c)}}},p={line:{render:function(a,b,c){c=c.getCtx(),c.beginPath(),c.moveTo(a.x,a.y),c.lineTo(b.x,b.y),c.stroke()},contains:function(a,b,c,d){var e=Math.min,f=Math.max,g=e(a.x,b.x),h=f(a.x,b.x),e=e(a.y,b.y),f=f(a.y,b.y);return c.x>=g&&c.x<=h&&c.y>=e&&c.y<=f?Math.abs(b.x-a.x)<=d?!0:Math.abs((b.y-a.y)/(b.x-a.x)*(c.x-a.x)+a.y-c.y)<=d:!1}},arrow:{render:function(a,b,c,d,e){e=e.getCtx(),d&&(d=a,a=b,b=d),d=new l(b.x-a.x,b.y-a.y),d.$scale(c/d.norm());var c=new l(b.x-d.x,b.y-d.y),f=new l(-d.y/2,d.x/2),d=c.add(f),c=c.$add(f.$scale(-1));e.beginPath(),e.moveTo(a.x,a.y),e.lineTo(b.x,b.y),e.stroke(),e.beginPath(),e.moveTo(d.x,d.y),e.lineTo(c.x,c.y),e.lineTo(b.x,b.y),e.closePath(),e.fill()},contains:function(a,b,c,d){return p.line.contains(a,b,c,d)}},hyperline:{render:function(a,b,c,d){function e(a,b){return a<b?a+Math.PI>b?!1:!0:b+Math.PI>a?!0:!1}var d=d.getCtx(),f=function(a,b){var c=a.x*b.y-a.y*b.x,d=a.squaredNorm(),e=b.squaredNorm();if(c==0)return{x:0,y:0,ratio:-1};var f=(a.y*e-b.y*d+a.y-b.y)/c,c=(b.x*d-a.x*e+b.x-a.x)/c,d=(f*f+c*c)/4-1;return d<0?{x:0,y:0,ratio:-1}:(d=Math.sqrt(d),{x:-f/2,y:-c/2,ratio:d>1e3?-1:d,a:f,b:c})}(a,b);f.a>1e3||f.b>1e3||f.ratio<0?(d.beginPath(),d.moveTo(a.x*c,a.y*c),d.lineTo(b.x*c,b.y*c)):(b=Math.atan2(b.y-f.y,b.x-f.x),a=Math.atan2(a.y-f.y,a.x-f.x),e=e(b,a),d.beginPath(),d.arc(f.x*c,f.y*c,f.ratio*c,b,a,e)),d.stroke()},contains:a.lambda(!1)}};m.Plot={initialize:function(a,b){this.viz=a,this.config=a.config,this.node=a.config.Node,this.edge=a.config.Edge,this.animation=new d,this.nodeTypes=new b.Plot.NodeTypes,this.edgeTypes=new b.Plot.EdgeTypes,this.labels=a.labels},nodeHelper:o,edgeHelper:p,Interpolator:{map:{border:"color",color:"color",width:"number",height:"number",dim:"number",alpha:"number",lineWidth:"number",angularWidth:"number",span:"number",valueArray:"array-number",dimArray:"array-number"},canvas:{globalAlpha:"number",fillStyle:"color",strokeStyle:"color",lineWidth:"number",shadowBlur:"number",shadowColor:"color",shadowOffsetX:"number",shadowOffsetY:"number",miterLimit:"number"},label:{size:"number",color:"color"},compute:function(a,b,c){return a+(b-a)*c},moebius:function(a,b,c,d){b=d.scale(-c);if(b.norm()<1){var c=b.x,d=b.y,e=a.startPos.getc().moebiusTransformation(b);a.pos.setc(e.x,e.y),b.x=c,b.y=d}},linear:function(a,b,c){var b=a.startPos.getc(!0),d=a.endPos.getc(!0);a.pos.setc(this.compute(b.x,d.x,c),this.compute(b.y,d.y,c))},polar:function(a,b,c){b=a.startPos.getp(!0),c=a.endPos.getp().interpolate(b,c),a.pos.setp(c.theta,c.rho)},number:function(a,b,c,d,e){var f=a[d](b,"start"),d=a[d](b,"end");a[e](b,this.compute(f,d,c))},color:function(b,c,d,e,f){var g=a.hexToRgb(b[e](c,"start")),e=a.hexToRgb(b[e](c,"end")),h=this.compute,d=a.rgbToHex([parseInt(h(g[0],e[0],d)),parseInt(h(g[1],e[1],d)),parseInt(h(g[2],e[2],d))]);b[f](c,d)},"array-number":function(a,b,c,d,e){for(var f=a[d](b,"start"),d=a[d](b,"end"),g=[],h=0,i=f.length;h<i;h++){var j=f[h],k=d[h];if(j.length){for(var l=0,m=j.length,n=[];l<m;l++)n.push(this.compute(j[l],k[l],c));g.push(n)}else g.push(this.compute(j,k,c))}a[e](b,g)},node:function(a,b,c,d,e,f){d=this[d];if(b)for(var g=b.length,h=0;h<g;h++){var i=b[h];this[d[i]](a,i,c,e,f)}else for(i in d)this[d[i]](a,i,c,e,f)},edge:function(a,b,c,d,e,f){var a=a.adjacencies,g;for(g in a)this.node(a[g],b,c,d,e,f)},"node-property":function(a,b,c){this.node(a,b,c,"map","getData","setData")},"edge-property":function(a,b,c){this.edge(a,b,c,"map","getData","setData")},"label-property":function(a,b,c){this.node(a,b,c,"label","getLabelData","setLabelData")},"node-style":function(a,b,c){this.node(a,b,c,"canvas","getCanvasStyle","setCanvasStyle")},"edge-style":function(a,b,c){this.edge(a,b,c,"canvas","getCanvasStyle","setCanvasStyle")}},sequence:function(b){var c=this,b=a.merge({condition:a.lambda(!1),step:a.empty,onComplete:a.empty,duration:200},b||{}),d=setInterval(function(){b.condition()?b.step():(clearInterval(d),b.onComplete()),c.viz.refresh(!0)},b.duration)},prepare:function(b){var c=this.viz.graph,d={"node-property":{getter:"getData",setter:"setData"},"edge-property":{getter:"getData",setter:"setData"},"node-style":{getter:"getCanvasStyle",setter:"setCanvasStyle"},"edge-style":{getter:"getCanvasStyle",setter:"setCanvasStyle"}},e={};if(a.type(b)=="array")for(var f=0,g=b.length;f<g;f++){var h=b[f].split(":");e[h.shift()]=h}else for(f in b)f=="position"?e[b.position]=[]:e[f]=a.splat(b[f]);return c.eachNode(function(b){b.startPos.set(b.pos),a.each(["node-property","node-style"],function(a){if(a in e)for(var c=e[a],f=0,g=c.length;f<g;f++)b[d[a].setter](c[f],b[d[a].getter](c[f]),"start")}),a.each(["edge-property","edge-style"],function(a){if(a in e){var c=e[a];b.eachAdjacency(function(b){for(var e=0,f=c.length;e<f;e++)b[d[a].setter](c[e],b[d[a].getter](c[e]),"start")})}})}),e},animate:function(b,c){var b=a.merge(this.viz.config,b||{}),d=this,e=this.viz.graph,f=this.Interpolator,g=b.type==="nodefx"?this.nodeFxAnimation:this.animation,h=this.prepare(b.modes);b.hideLabels&&this.labels.hideLabels(!0),g.setOptions(a.extend(b,{$animating:!1,compute:function(a){e.eachNode(function(b){for(var d in h)f[d](b,h[d],a,c)}),d.plot(b,this.$animating,a),this.$animating=!0},complete:function(){b.hideLabels&&d.labels.hideLabels(!1),d.plot(b),b.onComplete()}})).start()},nodeFx:function(b){var c=this.viz,d=c.graph,e=this.nodeFxAnimation,f=a.merge(this.viz.config,{elements:{id:!1,properties:{}},reposition:!1}),b=a.merge(f,b||{},{onBeforeCompute:a.empty,onAfterCompute:a.empty});e.stopTimer();var g=b.elements.properties;b.elements.id?(e=a.splat(b.elements.id),a.each(e,function(a){if(a=d.getNode(a))for(var b in g)a.setData(b,g[b],"end")})):d.eachNode(function(a){for(var b in g)a.setData(b,g[b],"end")});var e=[],h;for(h in g)e.push(h);h=["node-property:"+e.join(":")],b.reposition&&(h.push("linear"),c.compute("end")),this.animate(a.merge(b,{modes:h,type:"nodefx"}))},plot:function(a,b){var c=this.viz,d=c.graph,e=c.canvas,c=c.root,f=this;e.getCtx(),a=a||this.viz.controller,a.clearCanvas&&e.clear();if(c=d.getNode(c)){var g=!!c.visited;d.eachNode(function(c){var d=c.getData("alpha");c.eachAdjacency(function(d){var h=d.nodeTo;!!h.visited===g&&c.drawn&&h.drawn&&(!b&&a.onBeforePlotLine(d),f.plotLine(d,e,b),!b&&a.onAfterPlotLine(d))}),c.drawn&&(!b&&a.onBeforePlotNode(c),f.plotNode(c,e,b),!b&&a.onAfterPlotNode(c)),!f.labelsHidden&&a.withLabels&&(c.drawn&&d>=.95?f.labels.plotLabel(e,c,a):f.labels.hideLabel(c,!1)),c.visited=!g})}},plotTree:function(a,b,c){var d=this,e=this.viz.canvas;e.getCtx();var f=a.getData("alpha");a.eachSubnode(function(f){if(b.plotSubtree(a,f)&&f.exist&&f.drawn){var g=a.getAdjacency(f.id);!c&&b.onBeforePlotLine(g),d.plotLine(g,e,c),!c&&b.onAfterPlotLine(g),d.plotTree(f,b,c)}}),a.drawn?(!c&&b.onBeforePlotNode(a),this.plotNode(a,e,c),!c&&b.onAfterPlotNode(a),!b.hideLabels&&b.withLabels&&f>=.95?this.labels.plotLabel(e,a,b):this.labels.hideLabel(a,!1)):this.labels.hideLabel(a,!0)},plotNode:function(a,b,c){var d=a.getData("type"),e=this.node.CanvasStyles;if(d!="none"){var f=a.getData("lineWidth"),g=a.getData("color"),h=a.getData("alpha"),i=b.getCtx();i.save(),i.lineWidth=f,i.fillStyle=i.strokeStyle=g,i.globalAlpha=h;for(var j in e)i[j]=a.getCanvasStyle(j);this.nodeTypes[d].render.call(this,a,b,c),i.restore()}},plotLine:function(a,b,c){var d=a.getData("type"),e=this.edge.CanvasStyles;if(d!="none"){var f=a.getData("lineWidth"),g=a.getData("color"),h=b.getCtx(),i=a.nodeFrom,j=a.nodeTo;h.save(),h.lineWidth=f,h.fillStyle=h.strokeStyle=g,h.globalAlpha=Math.min(i.getData("alpha"),j.getData("alpha"),a.getData("alpha"));for(var k in e)h[k]=a.getCanvasStyle(k);this.edgeTypes[d].render.call(this,a,b,c),h.restore()}}},m.Plot3D=a.merge(m.Plot,{Interpolator:{linear:function(a,b,c){var b=a.startPos.getc(!0),d=a.endPos.getc(!0);a.pos.setc(this.compute(b.x,d.x,c),this.compute(b.y,d.y,c),this.compute(b.z,d.z,c))}},plotNode:function(a,b){a.getData("type")!="none"&&this.plotElement(a,b,{getAlpha:function(){return a.getData("alpha")}})},plotLine:function(a,b){a.getData("type")!="none"&&this.plotElement(a,b,{getAlpha:function(){return Math.min(a.nodeFrom.getData("alpha"),a.nodeTo.getData("alpha"),a.getData("alpha"))}})},plotElement:function(b,c,d){var e=c.getCtx(),f=new Matrix4,g=c.config.Scene.Lighting,h=c.canvases[0],c=h.program,h=h.camera;b.geometry||(b.geometry=new(O3D[b.getData("type")])),b.geometry.update(b);if(!b.webGLVertexBuffer){for(var i=[],j=[],k=[],l=0,m=b.geometry,n=0,o=m.vertices,m=m.faces,p=m.length;n<p;n++){var q=m[n],r=o[q.a],s=o[q.b],t=o[q.c],u=q.d?o[q.d]:!1,q=q.normal;i.push(r.x,r.y,r.z),i.push(s.x,s.y,s.z),i.push(t.x,t.y,t.z),u&&i.push(u.x,u.y,u.z),k.push(q.x,q.y,q.z),k.push(q.x,q.y,q.z),k.push(q.x,q.y,q.z),u&&k.push(q.x,q.y,q.z),j.push(l,l+1,l+2),u?(j.push(l,l+2,l+3),l+=4):l+=3}b.webGLVertexBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,b.webGLVertexBuffer),e.bufferData(e.ARRAY_BUFFER,new Float32Array(i),e.STATIC_DRAW),b.webGLFaceBuffer=e.createBuffer(),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,b.webGLFaceBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,new Uint16Array(j),e.STATIC_DRAW),b.webGLFaceCount=j.length,b.webGLNormalBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,b.webGLNormalBuffer),e.bufferData(e.ARRAY_BUFFER,new Float32Array(k),e.STATIC_DRAW)}f.multiply(h.matrix,b.geometry.matrix),e.uniformMatrix4fv(c.viewMatrix,!1,f.flatten()),e.uniformMatrix4fv(c.projectionMatrix,!1,h.projectionMatrix.flatten()),f=Matrix4.makeInvert(f),f.$transpose(),e.uniformMatrix4fv(c.normalMatrix,!1,f.flatten()),f=a.hexToRgb(b.getData("color")),f.push(d.getAlpha()),e.uniform4f(c.color,f[0]/255,f[1]/255,f[2]/255,f[3]),e.uniform1i(c.enableLighting,g.enable),g.enable&&(g.ambient&&(d=g.ambient,e.uniform3f(c.ambientColor,d[0],d[1],d[2])),g.directional&&(g=g.directional,f=g.color,g=g.direction,g=(new Vector3(g.x,g.y,g.z)).normalize().$scale(-1),e.uniform3f(c.lightingDirection,g.x,g.y,g.z),e.uniform3f(c.directionalColor,f[0],f[1],f[2]))),e.bindBuffer(e.ARRAY_BUFFER,b.webGLVertexBuffer),e.vertexAttribPointer(c.position,3,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,b.webGLNormalBuffer),e.vertexAttribPointer(c.normal,3,e.FLOAT,!1,0,0),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,b.webGLFaceBuffer),e.drawElements(e.TRIANGLES,b.webGLFaceCount,e.UNSIGNED_SHORT,0)}}),m.Label={},m.Label.Native=new b({initialize:function(a){this.viz=a},plotLabel:function(a,b,c){var d=a.getCtx();b.pos.getc(!0),d.font=b.getLabelData("style")+" "+b.getLabelData("size")+"px "+b.getLabelData("family"),d.textAlign=b.getLabelData("textAlign"),d.fillStyle=d.strokeStyle=b.getLabelData("color"),d.textBaseline=b.getLabelData("textBaseline"),this.renderLabel(a,b,c)},renderLabel:function(a,b){var c=a.getCtx(),d=b.pos.getc(!0);c.fillText(b.name,d.x,d.y+b.getData("height")/2)},hideLabel:a.empty,hideLabels:a.empty}),m.Label.DOM=new b({labelsHidden:!1,labelContainer:!1,labels:{},getLabelContainer:function(){return this.labelContainer?this.labelContainer:this.labelContainer=document.getElementById(this.viz.config.labelContainer)},getLabel:function(a){return a in this.labels&&this.labels[a]!=null?this.labels[a]:this.labels[a]=document.getElementById(a)},hideLabels:function(a){this.getLabelContainer().style.display=a?"none":"",this.labelsHidden=a},clearLabels:function(a){for(var b in this.labels)if(a||!this.viz.graph.hasNode(b))this.disposeLabel(b),delete this.labels[b]},disposeLabel:function(a){(a=this.getLabel(a))&&a.parentNode&&a.parentNode.removeChild(a)},hideLabel:function(b,c){var b=a.splat(b),d=c?"":"none",e=this;a.each(b,function(a){if(a=e.getLabel(a.id))a.style.display=d})},fitsInCanvas:function(a,b){var c=b.getSize();return a.x>=c.width||a.x<0||a.y>=c.height||a.y<0?!1:!0}}),m.Label.HTML=new b({Implements:m.Label.DOM,plotLabel:function(a,b,c){var a=b.id,d=this.getLabel(a);if(!d&&!(d=document.getElementById(a))){var d=document.createElement("div"),e=this.getLabelContainer();d.id=a,d.className="node",d.style.position="absolute",c.onCreateLabel(d,b),e.appendChild(d),this.labels[b.id]=d}this.placeLabel(d,b,c)}}),m.Label.SVG=new b({Implements:m.Label.DOM,plotLabel:function(a,b,c){var a=b.id,d=this.getLabel(a);if(!d&&!(d=document.getElementById(a))){var d=document.createElementNS("http://www.w3.org/2000/svg","svg:text"),e=document.createElementNS("http://www.w3.org/2000/svg","svg:tspan");d.appendChild(e),e=this.getLabelContainer(),d.setAttribute("id",a),d.setAttribute("class","node"),e.appendChild(d),c.onCreateLabel(d,b),this.labels[b.id]=d}this.placeLabel(d,b,c)}});var f=$jit.Layouts={},q={label:null,compute:function(b,c,d){this.initializeLabel(d);var e=this.label,f=e.style;b.eachNode(function(b){var c=b.getData("autoWidth"),d=b.getData("autoHeight");if(c||d){delete b.data.$width,delete b.data.$height,delete b.data.$dim;var g=b.getData("width"),h=b.getData("height");f.width=c?"auto":g+"px",f.height=d?"auto":h+"px",e.innerHTML=b.name,c=e.offsetWidth,d=e.offsetHeight,g=b.getData("type"),a.indexOf(["circle","square","triangle","star"],g)===-1?(b.setData("width",c),b.setData("height",d)):(c=c>d?c:d,b.setData("width",c),b.setData("height",c),b.setData("dim",c))}})},initializeLabel:function(a){this.label||(this.label=document.createElement("div"),document.body.appendChild(this.label)),this.setLabelStyles(a)},setLabelStyles:function(){a.extend(this.label.style,{visibility:"hidden",position:"absolute",width:"auto",height:"auto"}),this.label.className="jit-autoadjust-label"}};f.Radial=new b({compute:function(b){b=a.splat(b||["current","start","end"]),q.compute(this.graph,b,this.config),this.graph.computeLevels(this.root,0,"ignore");var c=this.createLevelDistanceFunc();this.computeAngularWidths(b),this.computePositions(b,c)},computePositions:function(a,b){for(var c=this.graph,d=c.getNode(this.root),e=this.parent,f=0,g=a.length;f<g;f++){var h=a[f];d.setPos(new k(0,0),h),d.setData("span",Math.PI*2,h)}d.angleSpan={begin:0,end:2*Math.PI},c.eachBFS(this.root,function(c){var d=c.angleSpan.end-c.angleSpan.begin,f=c.angleSpan.begin,g=b(c),h=0,i=[],j={};c.eachSubnode(function(b){h+=b._treeAngularWidth;for(var c=0,d=a.length;c<d;c++){var e=a[c],f=b.getData("dim",e);j[e]=e in j?f>j[e]?f:j[e]:f}i.push(b)},"ignore"),e&&e.id==c.id&&i.length>0&&i[0].dist&&i.sort(function(a,b){return(a.dist>=b.dist)-(a.dist<=b.dist)});for(var c=0,l=i.length;c<l;c++){var m=i[c];if(!m._flag){for(var n=m._treeAngularWidth/h*d,o=f+n/2,p=0,q=a.length;p<q;p++){var r=a[p];m.setPos(new k(o,g),r),m.setData("span",n,r),m.setData("dim-quotient",m.getData("dim",r)/j[r],r)}m.angleSpan={begin:f,end:f+n},f+=n}}},"ignore")},setAngularWidthForNodes:function(a){this.graph.eachBFS(this.root,function(b,c){var d=b.getData("angularWidth",a[0])||5;b._angularWidth=d/c},"ignore")},setSubtreesAngularWidth:function(){var a=this;this.graph.eachNode(function(b){a.setSubtreeAngularWidth(b)},"ignore")},setSubtreeAngularWidth:function(a){var b=this,c=a._angularWidth,d=0;a.eachSubnode(function(a){b.setSubtreeAngularWidth(a),d+=a._treeAngularWidth},"ignore"),a._treeAngularWidth=Math.max(c,d)},computeAngularWidths:function(a){this.setAngularWidthForNodes(a),this.setSubtreesAngularWidth()}}),$jit.RGraph=new b({Implements:[{construct:function(b){var c=a.type(b)=="array",d=new m(this.graphOptions,this.config.Node,this.config.Edge,this.config.Label);return c?function(b,c){for(var d=function(a){for(var d=0,e=c.length;d<e;d++)if(c[d].id==a)return c[d];return b.addNode({id:a,name:a})},e=0,f=c.length;e<f;e++){b.addNode(c[e]);var g=c[e].adjacencies;if(g)for(var h=0,i=g.length;h<i;h++){var j=g[h],k={};typeof g[h]!="string"&&(k=a.merge(j.data,{}),j=j.nodeTo),b.addAdjacence(c[e],d(j),k)}}}(d,b):function(a,b){a.addNode(b);if(b.children)for(var c=0,d=b.children;c<d.length;c++)a.addAdjacence(b,d[c]),arguments.callee(a,d[c])}(d,b),d},loadJSON:function(b,c){this.json=b,this.labels&&this.labels.clearLabels&&this.labels.clearLabels(!0),this.graph=this.construct(b),this.root=a.type(b)!="array"?b.id:b[c?c:0].id},toJSON:function(a){if((a||"tree")=="tree")var b={},b=function d(a){var b={};b.id=a.id,b.name=a.name,b.data=a.data;var c=[];return a.eachSubnode(function(a){c.push(d(a))}),b.children=c,b}(this.graph.getNode(this.root));else{var b=[],c=!!this.graph.getNode(this.root).visited;this.graph.eachNode(function(a){var d={};d.id=a.id,d.name=a.name,d.data=a.data;var e=[];a.eachAdjacency(function(a){var b=a.nodeTo;if(!!b.visited===c){var d={};d.nodeTo=b.id,d.data=a.data,e.push(d)}}),d.adjacencies=e,b.push(d),a.visited=!c})}return b}},i,f.Radial],initialize:function(b){var c=$jit.RGraph,b=this.controller=this.config=a.merge(e("Canvas","Node","Edge","Fx","Controller","Tips","NodeStyles","Events","Navigation","Label"),{interpolation:"linear",levelDistance:100},b);b.useCanvas?(this.canvas=b.useCanvas,this.config.labelContainer=this.canvas.id+"-label"):(b.background&&(b.background=a.merge({type:"Circles"},b.background)),this.canvas=new j(this,b),this.config.labelContainer=(typeof b.injectInto=="string"?b.injectInto:b.injectInto.id)+"-label"),this.graphOptions={klass:k,Node:{selected:!1,exist:!0,drawn:!0}},this.graph=new m(this.graphOptions,this.config.Node,this.config.Edge),this.labels=new c.Label[b.Label.type](this),this.fx=new c.Plot(this,c),this.op=new c.Op(this),this.root=this.json=null,this.parent=this.busy=!1,this.initializeExtras()},createLevelDistanceFunc:function(){var a=this.config.levelDistance;return function(b){return(b._depth+1)*a}},refresh:function(){this.compute(),this.plot()},reposition:function(){this.compute("end")},plot:function(){this.fx.plot()},getNodeAndParentAngle:function(a){var b=!1,c=this.graph.getNode(a),a=c.getParents();if(a=a.length>0?a[0]:!1)b=a.pos.getc(),c=c.pos.getc(),b=b.add(c.scale(-1)),b=Math.atan2(b.y,b.x),b<0&&(b+=2*Math.PI);return{parent:a,theta:b}},tagChildren:function(a,b){if(a.angleSpan){var c=[];a.eachAdjacency(function(a){c.push(a.nodeTo)},"ignore");for(var d=c.length,e=0;e<d&&b!=c[e].id;e++);for(var e=(e+1)%d,f=0;b!=c[e].id;e=(e+1)%d)c[e].dist=f++}},onClick:function(b,c){if(this.root!=b&&!this.busy){this.busy=!0,this.root=b;var d=this;this.controller.onBeforeCompute(this.graph.getNode(b));var e=this.getNodeAndParentAngle(b);this.tagChildren(e.parent,b),this.parent=e.parent,this.compute("end");var f=e.theta-e.parent.endPos.theta;this.graph.eachNode(function(a){a.endPos.set(a.endPos.getp().add(new k(f,0)))}),e=this.config.interpolation,c=a.merge({onComplete:a.empty},c||{}),this.fx.animate(a.merge({hideLabels:!0,modes:[e]},c,{onComplete:function(){d.busy=!1,c.onComplete()}}))}}}),$jit.RGraph.$extend=!0,function(c){c.Op=new b({Implements:m.Op}),c.Plot=new b({Implements:m.Plot}),c.Label={},c.Label.Native=new b({Implements:m.Label.Native}),c.Label.SVG=new b({Implements:m.Label.SVG,initialize:function(a){this.viz=a},placeLabel:function(a,b,c){var d=b.pos.getc(!0),e=this.viz.canvas,f=e.translateOffsetX,g=e.translateOffsetY,h=e.scaleOffsetX,i=e.scaleOffsetY,e=e.getSize(),d={x:Math.round(d.x*h+f+e.width/2),y:Math.round(d.y*i+g+e.height/2)};a.setAttribute("x",d.x),a.setAttribute("y",d.y),c.onPlaceLabel(a,b)}}),c.Label.HTML=new b({Implements:m.Label.HTML,initialize:function(a){this.viz=a},placeLabel:function(a,b,c){var d=b.pos.getc(!0),e=this.viz.canvas,f=e.translateOffsetX,g=e.translateOffsetY,h=e.scaleOffsetX,i=e.scaleOffsetY,j=e.getSize(),d={x:Math.round(d.x*h+f+j.width/2),y:Math.round(d.y*i+g+j.height/2)},f=a.style;f.left=d.x+"px",f.top=d.y+"px",f.display=this.fitsInCanvas(d,e)?"":"none",c.onPlaceLabel(a,b)}}),c.Plot.NodeTypes=new b({none:{render:a.empty,contains:a.lambda(!1)},circle:{render:function(a,b){var c=a.pos.getc(!0),d=a.getData("dim");this.nodeHelper.circle.render("fill",c,d,b)},contains:function(a,b){var c=a.pos.getc(!0),d=a.getData("dim");return this.nodeHelper.circle.contains(c,b,d)}},ellipse:{render:function(a,b){var c=a.pos.getc(!0),d=a.getData("width"),e=a.getData("height");this.nodeHelper.ellipse.render("fill",c,d,e,b)},contains:function(a,b){var c=a.pos.getc(!0),d=a.getData("width"),e=a.getData("height");return this.nodeHelper.ellipse.contains(c,b,d,e)}},square:{render:function(a,b){var c=a.pos.getc(!0),d=a.getData("dim");this.nodeHelper.square.render("fill",c,d,b)},contains:function(a,b){var c=a.pos.getc(!0),d=a.getData("dim");return this.nodeHelper.square.contains(c,b,d)}},rectangle:{render:function(a,b){var c=a.pos.getc(!0),d=a.getData("width"),e=a.getData("height");this.nodeHelper.rectangle.render("fill",c,d,e,b)},contains:function(a,b){var c=a.pos.getc(!0),d=a.getData("width"),e=a.getData("height");return this.nodeHelper.rectangle.contains(c,b,d,e)}},triangle:{render:function(a,b){var c=a.pos.getc(!0),d=a.getData("dim");this.nodeHelper.triangle.render("fill",c,d,b)},contains:function(a,b){var c=a.pos
25
+ .getc(!0),d=a.getData("dim");return this.nodeHelper.triangle.contains(c,b,d)}},star:{render:function(a,b){var c=a.pos.getc(!0),d=a.getData("dim");this.nodeHelper.star.render("fill",c,d,b)},contains:function(a,b){var c=a.pos.getc(!0),d=a.getData("dim");return this.nodeHelper.star.contains(c,b,d)}}}),c.Plot.EdgeTypes=new b({none:a.empty,line:{render:function(a,b){var c=a.nodeFrom.pos.getc(!0),d=a.nodeTo.pos.getc(!0);this.edgeHelper.line.render(c,d,b)},contains:function(a,b){var c=a.nodeFrom.pos.getc(!0),d=a.nodeTo.pos.getc(!0);return this.edgeHelper.line.contains(c,d,b,this.edge.epsilon)}},arrow:{render:function(a,b){var c=a.nodeFrom.pos.getc(!0),d=a.nodeTo.pos.getc(!0),e=a.getData("dim"),f=a.data.$direction;this.edgeHelper.arrow.render(c,d,e,f&&f.length>1&&f[0]!=a.nodeFrom.id,b)},contains:function(a,b){var c=a.nodeFrom.pos.getc(!0),d=a.nodeTo.pos.getc(!0);return this.edgeHelper.arrow.contains(c,d,b,this.edge.epsilon)}}})}($jit.RGraph)})()
Binary file