grnsight 3.0.0 → 5.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (489) hide show
  1. package/.eslintignore +1 -0
  2. package/.travis.yml +1 -1
  3. package/GRNsight - Beta.html +194 -0
  4. package/Gemfile.lock +259 -0
  5. package/README.md +1 -1
  6. package/_gh_pages/about.html +360 -45
  7. package/_gh_pages/assets/css/footer.css +3 -0
  8. package/_gh_pages/assets/css/main.css +28 -14
  9. package/_gh_pages/assets/images/21-genes_31-edges_Schade-data_estimation_output_binary-no-targetless-genes_sif.png +0 -0
  10. package/_gh_pages/assets/images/21-genes_31-edges_Schade-data_estimation_output_binary_sif.png +0 -0
  11. package/_gh_pages/assets/images/21-genes_31-edges_Schade-data_graphml_3-edges-and-footer.png +0 -0
  12. package/_gh_pages/assets/images/21-genes_31-edges_Schade-data_graphml_header-and-3-nodes.png +0 -0
  13. package/_gh_pages/assets/images/21-genes_31-edges_Schade-data_graphml_output_3-edges-and-footer.png +0 -0
  14. package/_gh_pages/assets/images/21-genes_31-edges_Schade-data_graphml_output_header-and-3-nodes.png +0 -0
  15. package/_gh_pages/assets/images/21-genes_31-edges_Schade-data_input_binary-no-targetless-genes_sif.png +0 -0
  16. package/_gh_pages/assets/images/21-genes_31-edges_Schade-data_input_binary_sif.png +0 -0
  17. package/_gh_pages/assets/images/21-genes_31-edges_Schade-data_input_concatenated-no-targetless-genes_sif.png +0 -0
  18. package/_gh_pages/assets/images/21-genes_31-edges_Schade-data_input_concatenated_sif.png +0 -0
  19. package/_gh_pages/assets/images/Choe-Shin_CMSI402-poster-session_20180430.jpg +0 -0
  20. package/_gh_pages/assets/images/Choe_SCCUR_2017.jpg +0 -0
  21. package/_gh_pages/assets/images/Dahlquist-Choe-Shin_CMSI402-poster-session_20180430.jpg +0 -0
  22. package/_gh_pages/assets/images/Dionisio-Dahlquist_GRNsight-shades_20170506.jpg +0 -0
  23. package/_gh_pages/assets/images/Klein_Samdarshi_TriBeta_2018_20180317.jpg +0 -0
  24. package/_gh_pages/assets/images/Shin_SCCUR_2017.jpg +0 -0
  25. package/{documents/manuscripts/peerj-computerscience-2016/figures/submitted-versions/Figure1_zoom145_900pix-wide.png → _gh_pages/assets/images/demo-3_network-sheet.png} +0 -0
  26. package/{documents/manuscripts/peerj-computerscience-2016/figures/submitted-versions/Figure2_zoom145_900pix-wide.png → _gh_pages/assets/images/demo-4_network-optimized-weights-sheet.png} +0 -0
  27. package/_gh_pages/assets/images/gene-pages-0.png +0 -0
  28. package/_gh_pages/assets/images/gene-pages-1.png +0 -0
  29. package/_gh_pages/assets/images/gene-pages-2.png +0 -0
  30. package/_gh_pages/assets/images/gene-pages-3.png +0 -0
  31. package/_gh_pages/assets/images/grnsight2020.png +0 -0
  32. package/_gh_pages/assets/images/v3demo2-grid+nodecoloring.png +0 -0
  33. package/_gh_pages/assets/images/v3demo2-nodecoloring.png +0 -0
  34. package/_gh_pages/assets/images/v3demo2.png +0 -0
  35. package/_gh_pages/assets/js/ga-report.js +11 -11
  36. package/_gh_pages/assets/js/iframeResizer.min.js +9 -0
  37. package/_gh_pages/assets/js/main.js +43 -43
  38. package/_gh_pages/beta.html +29 -24
  39. package/_gh_pages/contact.html +31 -31
  40. package/_gh_pages/coverage/coverage.json +1 -0
  41. package/_gh_pages/coverage/coverage.raw.json +1 -0
  42. package/_gh_pages/coverage/lcov-report/base.css +223 -0
  43. package/_gh_pages/coverage/lcov-report/block-navigation.js +63 -0
  44. package/_gh_pages/coverage/lcov-report/controllers/additional-sheet-parser.js.html +330 -0
  45. package/_gh_pages/coverage/lcov-report/controllers/constants.js.html +243 -0
  46. package/_gh_pages/coverage/lcov-report/controllers/export-controller.js.html +285 -0
  47. package/_gh_pages/coverage/lcov-report/controllers/exporters/graphml.js.html +405 -0
  48. package/_gh_pages/coverage/lcov-report/controllers/exporters/index.html +110 -0
  49. package/_gh_pages/coverage/lcov-report/controllers/exporters/sif.js.html +150 -0
  50. package/_gh_pages/coverage/lcov-report/controllers/helpers.js.html +114 -0
  51. package/_gh_pages/coverage/lcov-report/controllers/import-controller.js.html +233 -0
  52. package/_gh_pages/coverage/lcov-report/controllers/importers/graphml.js.html +716 -0
  53. package/_gh_pages/coverage/lcov-report/controllers/importers/index.html +106 -0
  54. package/_gh_pages/coverage/lcov-report/controllers/importers/sif.js.html +488 -0
  55. package/_gh_pages/coverage/lcov-report/controllers/index.html +162 -0
  56. package/_gh_pages/coverage/lcov-report/controllers/semantic-checker.js.html +810 -0
  57. package/_gh_pages/coverage/lcov-report/controllers/spreadsheet-controller.js.html +1779 -0
  58. package/_gh_pages/coverage/lcov-report/index.html +136 -0
  59. package/_gh_pages/coverage/lcov-report/prettify.css +1 -0
  60. package/_gh_pages/coverage/lcov-report/prettify.js +1 -0
  61. package/_gh_pages/coverage/lcov-report/server/controllers/additional-sheet-parser.js.html +330 -0
  62. package/_gh_pages/coverage/lcov-report/server/controllers/constants.js.html +243 -0
  63. package/_gh_pages/coverage/lcov-report/server/controllers/export-controller.js.html +285 -0
  64. package/_gh_pages/coverage/lcov-report/server/controllers/exporters/graphml.js.html +405 -0
  65. package/_gh_pages/coverage/lcov-report/server/controllers/exporters/index.html +110 -0
  66. package/_gh_pages/coverage/lcov-report/server/controllers/exporters/sif.js.html +150 -0
  67. package/_gh_pages/coverage/lcov-report/server/controllers/graphml-constants.js.html +585 -0
  68. package/_gh_pages/coverage/lcov-report/server/controllers/helpers.js.html +114 -0
  69. package/_gh_pages/coverage/lcov-report/server/controllers/import-controller.js.html +237 -0
  70. package/_gh_pages/coverage/lcov-report/server/controllers/importers/graphml.js.html +585 -0
  71. package/_gh_pages/coverage/lcov-report/server/controllers/importers/index.html +110 -0
  72. package/_gh_pages/coverage/lcov-report/server/controllers/importers/sif.js.html +492 -0
  73. package/_gh_pages/coverage/lcov-report/server/controllers/index.html +188 -0
  74. package/_gh_pages/coverage/lcov-report/server/controllers/semantic-checker.js.html +810 -0
  75. package/_gh_pages/coverage/lcov-report/server/controllers/spreadsheet-controller.js.html +1779 -0
  76. package/_gh_pages/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  77. package/_gh_pages/coverage/lcov-report/sorter.js +158 -0
  78. package/_gh_pages/coverage/lcov-report/web-client/public/js/grnstate.js.html +225 -0
  79. package/_gh_pages/coverage/lcov-report/web-client/public/js/index.html +97 -0
  80. package/_gh_pages/coverage/lcov.info +49 -0
  81. package/_gh_pages/documentation.html +998 -320
  82. package/_gh_pages/documents/abstracts/SIGGRAPH 2017 Abstract/siggraph-abstract-review.aux +47 -0
  83. package/_gh_pages/documents/abstracts/SIGGRAPH 2017 Abstract/siggraph-abstract-review.bbl +73 -0
  84. package/_gh_pages/documents/abstracts/SIGGRAPH 2017 Abstract/siggraph-abstract-review.blg +52 -0
  85. package/_gh_pages/documents/abstracts/SIGGRAPH 2017 Abstract/siggraph-abstract-review.log +1056 -0
  86. package/_gh_pages/documents/abstracts/SIGGRAPH 2017 Abstract/siggraph-abstract-review.out +7 -0
  87. package/_gh_pages/documents/abstracts/SIGGRAPH 2017 Abstract/siggraph-abstract-review.synctex.gz +0 -0
  88. package/_gh_pages/documents/manuscripts/peerj-computerscience-2016/revisions/GRNsight_PeerJ-CS_manuscript_2016_text-only_revised-Dondi.docx +0 -0
  89. package/_gh_pages/encryption/server.cert +21 -0
  90. package/_gh_pages/encryption/server.key +28 -0
  91. package/_gh_pages/favicon.ico +0 -0
  92. package/_gh_pages/index.html +45 -22
  93. package/_gh_pages/links.html +47 -28
  94. package/_gh_pages/news.html +103 -21
  95. package/_gh_pages/onlyfooter.html +78 -0
  96. package/_gh_pages/onlyheader.html +64 -0
  97. package/_gh_pages/onlysidebar.html +73 -0
  98. package/_gh_pages/package-lock.json +14048 -0
  99. package/_gh_pages/people.html +129 -40
  100. package/_gh_pages/privacy.html +23 -17
  101. package/_gh_pages/publications.html +75 -33
  102. package/_gh_pages/robots.txt +1 -0
  103. package/_gh_pages/sitemap.xml +87 -74
  104. package/_gh_pages/test-files/import-samples/attributes.graphml +40 -0
  105. package/_gh_pages/test-files/import-samples/port.graphml +32 -0
  106. package/_gh_pages/test-files/import-samples/simple.graphml +31 -0
  107. package/_gh_pages/web-client/public/js/grnsight.min.js +2347 -0
  108. package/_gh_pages/web-client/public/stylesheets/grnsight.css +443 -0
  109. package/coverage/coverage.json +1 -1
  110. package/coverage/coverage.raw.json +1 -0
  111. package/coverage/lcov-report/base.css +18 -8
  112. package/coverage/lcov-report/block-navigation.js +63 -0
  113. package/coverage/lcov-report/controllers/additional-sheet-parser.js.html +330 -0
  114. package/coverage/lcov-report/controllers/constants.js.html +65 -61
  115. package/coverage/lcov-report/controllers/export-controller.js.html +96 -92
  116. package/coverage/lcov-report/controllers/exporters/graphml.js.html +168 -164
  117. package/coverage/lcov-report/controllers/exporters/index.html +36 -32
  118. package/coverage/lcov-report/controllers/exporters/sif.js.html +65 -61
  119. package/coverage/lcov-report/controllers/helpers.js.html +25 -21
  120. package/coverage/lcov-report/controllers/index.html +49 -45
  121. package/coverage/lcov-report/controllers/semantic-checker.js.html +403 -396
  122. package/coverage/lcov-report/controllers/spreadsheet-controller.js.html +973 -879
  123. package/coverage/lcov-report/index.html +45 -28
  124. package/coverage/lcov-report/server/controllers/additional-sheet-parser.js.html +330 -0
  125. package/coverage/lcov-report/server/controllers/constants.js.html +243 -0
  126. package/coverage/lcov-report/server/controllers/export-controller.js.html +285 -0
  127. package/coverage/lcov-report/server/controllers/exporters/graphml.js.html +405 -0
  128. package/coverage/lcov-report/server/controllers/exporters/index.html +110 -0
  129. package/coverage/lcov-report/server/controllers/exporters/sif.js.html +150 -0
  130. package/coverage/lcov-report/server/controllers/graphml-constants.js.html +585 -0
  131. package/coverage/lcov-report/server/controllers/helpers.js.html +114 -0
  132. package/coverage/lcov-report/server/controllers/import-controller.js.html +237 -0
  133. package/coverage/lcov-report/server/controllers/importers/graphml.js.html +585 -0
  134. package/coverage/lcov-report/server/controllers/importers/index.html +110 -0
  135. package/coverage/lcov-report/server/controllers/importers/sif.js.html +492 -0
  136. package/coverage/lcov-report/server/controllers/index.html +188 -0
  137. package/coverage/lcov-report/server/controllers/semantic-checker.js.html +810 -0
  138. package/coverage/lcov-report/server/controllers/spreadsheet-controller.js.html +1779 -0
  139. package/coverage/lcov-report/web-client/public/js/grnstate.js.html +225 -0
  140. package/coverage/lcov-report/web-client/public/js/index.html +97 -0
  141. package/coverage/lcov.info +1758 -876
  142. package/encryption/server.cert +21 -0
  143. package/encryption/server.key +28 -0
  144. package/package.json +46 -22
  145. package/server/app.js +6 -2
  146. package/server/config/config.js +16 -7
  147. package/server/controllers/additional-sheet-parser.js +292 -55
  148. package/server/controllers/api-controllers.js +36 -0
  149. package/server/controllers/constants.js +4 -37
  150. package/server/controllers/database-controller.js +129 -0
  151. package/server/controllers/demo-workbooks.js +5973 -0
  152. package/server/controllers/export-constants.js +78 -0
  153. package/server/controllers/export-controller.js +25 -3
  154. package/server/controllers/exporters/graphml.js +15 -15
  155. package/server/controllers/exporters/sif.js +7 -7
  156. package/server/controllers/exporters/xlsx.js +183 -0
  157. package/server/controllers/expression-sheet-parser.js +170 -0
  158. package/server/controllers/ga-controller.js +1 -1
  159. package/server/controllers/graphml-constants.js +0 -17
  160. package/server/controllers/helpers.js +25 -1
  161. package/server/controllers/import-controller.js +2 -2
  162. package/server/controllers/importers/graphml.js +17 -20
  163. package/server/controllers/importers/sif.js +22 -18
  164. package/server/controllers/network-sheet-parser.js +307 -0
  165. package/server/controllers/semantic-checker.js +30 -162
  166. package/server/controllers/sif-constants.js +36 -0
  167. package/server/controllers/spreadsheet-controller.js +277 -424
  168. package/server/controllers/workbook-constants.js +521 -0
  169. package/test/additional-sheet-parser-tests.js +147 -38
  170. package/test/api-tests.js +245 -0
  171. package/test/errors-adjacency-matrix-modifications.js +30 -29
  172. package/test/errors-gene-name-modifications.js +9 -0
  173. package/test/errors-graph-tests.js +4 -4
  174. package/test/errors-sheet-modifications.js +10 -2
  175. package/test/export-tests.js +431 -24
  176. package/test/expression-data-import-tests.js +113 -0
  177. package/test/grnstate-tests.js +29 -0
  178. package/test/import-graphml-tests.js +59 -40
  179. package/test/import-sif-tests.js +50 -37
  180. package/test/test.js +557 -93
  181. package/test/warnings-adjacency-matrix-modifications.js +8 -7
  182. package/test-files/additional-sheet-test-files/optimization-diagnostics-default.xlsx +0 -0
  183. package/test-files/additional-sheet-test-files/optimization-diagnostics-extraneous-data.xlsx +0 -0
  184. package/test-files/additional-sheet-test-files/optimization-diagnostics-incorrect-MSE-gene-header.xlsx +0 -0
  185. package/test-files/additional-sheet-test-files/optimization-diagnostics-incorrect-MSE-header.xlsx +0 -0
  186. package/test-files/additional-sheet-test-files/optimization-diagnostics-incorrect-column-headers.xlsx +0 -0
  187. package/test-files/additional-sheet-test-files/optimization-diagnostics-invalid-MSE-data.xlsx +0 -0
  188. package/test-files/additional-sheet-test-files/optimization-diagnostics-invalid-value.xlsx +0 -0
  189. package/test-files/additional-sheet-test-files/optimization-diagnostics-missing-MSE-data.xlsx +0 -0
  190. package/test-files/additional-sheet-test-files/optimization-diagnostics-missing-column-headers.xlsx +0 -0
  191. package/test-files/additional-sheet-test-files/optimization-diagnostics-missing-header.xlsx +0 -0
  192. package/test-files/additional-sheet-test-files/optimization-diagnostics-unknown-parameter.xlsx +0 -0
  193. package/test-files/additional-sheet-test-files/optimization-parameters-default.xlsx +0 -0
  194. package/test-files/additional-sheet-test-files/optimization-parameters-incorrect-headers.xlsx +0 -0
  195. package/test-files/additional-sheet-test-files/optimization-parameters-invalid-optimization-parameter.xlsx +0 -0
  196. package/test-files/additional-sheet-test-files/optimization-parameters-missing-headers.xlsx +0 -0
  197. package/test-files/additional-sheet-test-files/optimization-parameters-unknown-parameter.xlsx +0 -0
  198. package/test-files/additional-sheet-test-files/two-column-sheets-extraneous-data.xlsx +0 -0
  199. package/test-files/additional-sheet-test-files/two-column-sheets-incorrect-cell-A1.xlsx +0 -0
  200. package/test-files/additional-sheet-test-files/two-column-sheets-incorrect-column-header.xlsx +0 -0
  201. package/test-files/additional-sheet-test-files/two-column-sheets-invalid-gene-length.xlsx +0 -0
  202. package/test-files/additional-sheet-test-files/two-column-sheets-invalid-gene-type.xlsx +0 -0
  203. package/test-files/additional-sheet-test-files/two-column-sheets-invalid-value.xlsx +0 -0
  204. package/test-files/additional-sheet-test-files/two-column-sheets-missing-column-header.xlsx +0 -0
  205. package/test-files/additional-sheet-test-files/two-column-sheets-special-character.xlsx +0 -0
  206. package/test-files/adjacency-matrix-modifications/asymmetric-gene-order-input.xlsx +0 -0
  207. package/test-files/adjacency-matrix-modifications/asymmetric-gene-order-output.xlsx +0 -0
  208. package/test-files/adjacency-matrix-modifications/extra-column-adjacent-input.xlsx +0 -0
  209. package/test-files/adjacency-matrix-modifications/extra-column-adjacent-output.xlsx +0 -0
  210. package/test-files/adjacency-matrix-modifications/extra-column-end-of-sheet-input.xlsx +0 -0
  211. package/test-files/adjacency-matrix-modifications/extra-column-end-of-sheet-output.xlsx +0 -0
  212. package/test-files/adjacency-matrix-modifications/extra-data-random-cell-both-output.xlsx +0 -0
  213. package/test-files/adjacency-matrix-modifications/extra-data-random-cell-network-only-input.xlsx +0 -0
  214. package/test-files/adjacency-matrix-modifications/extra-data-random-cell-network-only-output.xlsx +0 -0
  215. package/test-files/adjacency-matrix-modifications/extra-data-random-cell-network-optimized-only-output.xlsx +0 -0
  216. package/test-files/adjacency-matrix-modifications/extra-row-end-of-sheet-input.xlsx +0 -0
  217. package/test-files/adjacency-matrix-modifications/extra-row-end-of-sheet-output.xlsx +0 -0
  218. package/test-files/adjacency-matrix-modifications/incorrect-network-cell-A1.xlsx +0 -0
  219. package/test-files/adjacency-matrix-modifications/missing-column-end-input.xlsx +0 -0
  220. package/test-files/adjacency-matrix-modifications/missing-column-end-output.xlsx +0 -0
  221. package/test-files/adjacency-matrix-modifications/missing-data-input.xlsx +0 -0
  222. package/test-files/adjacency-matrix-modifications/missing-data-output.xlsx +0 -0
  223. package/test-files/adjacency-matrix-modifications/missing-row-end-input.xlsx +0 -0
  224. package/test-files/adjacency-matrix-modifications/missing-row-end-output.xlsx +0 -0
  225. package/test-files/adjacency-matrix-modifications/missing-row-middle-input.xlsx +0 -0
  226. package/test-files/adjacency-matrix-modifications/missing-row-middle-output.xlsx +0 -0
  227. package/test-files/adjacency-matrix-modifications/missing-value-bottom-corner-input.xlsx +0 -0
  228. package/test-files/adjacency-matrix-modifications/missing-value-bottom-corner-output.xlsx +0 -0
  229. package/test-files/adjacency-matrix-modifications/value-replaced-w-spaces-both-output.xlsx +0 -0
  230. package/test-files/adjacency-matrix-modifications/value-replaced-w-spaces-net-only-input.xlsx +0 -0
  231. package/test-files/adjacency-matrix-modifications/value-replaced-w-spaces-net-op-only-output.xlsx +0 -0
  232. package/test-files/adjacency-matrix-modifications/value-replaced/342/200/223w-spaces-net-only-output.xlsx +0 -0
  233. package/test-files/demo-files/15-genes_28-edges_db5_Dahlquist-data_estimation_output.xlsx +0 -0
  234. package/test-files/demo-files/15-genes_28-edges_db5_Dahlquist-data_input.xlsx +0 -0
  235. package/test-files/expression-data-test-sheets/expression_sheet_correct_numbering.xlsx +0 -0
  236. package/test-files/expression-data-test-sheets/expression_sheet_different_number_of_columns.xlsx +0 -0
  237. package/test-files/expression-data-test-sheets/expression_sheet_empty_column.xlsx +0 -0
  238. package/test-files/expression-data-test-sheets/expression_sheet_empty_row.xlsx +0 -0
  239. package/test-files/expression-data-test-sheets/expression_sheet_erroneous_data.xlsx +0 -0
  240. package/test-files/expression-data-test-sheets/expression_sheet_extra_gene_name.xlsx +0 -0
  241. package/test-files/expression-data-test-sheets/expression_sheet_incorrectly_ordered_time_points.xlsx +0 -0
  242. package/test-files/expression-data-test-sheets/expression_sheet_mismatched_case_gene_names.xlsx +0 -0
  243. package/test-files/expression-data-test-sheets/expression_sheet_mismatched_gene_names.xlsx +0 -0
  244. package/test-files/expression-data-test-sheets/expression_sheet_missing_column_header.xlsx +0 -0
  245. package/test-files/expression-data-test-sheets/expression_sheet_missing_data_error.xlsx +0 -0
  246. package/test-files/expression-data-test-sheets/expression_sheet_missing_data_ok.xlsx +0 -0
  247. package/test-files/expression-data-test-sheets/expression_sheet_missing_data_ok_export_exact.xlsx +0 -0
  248. package/test-files/expression-data-test-sheets/expression_sheet_missing_gene_name.xlsx +0 -0
  249. package/test-files/expression-data-test-sheets/expression_sheet_name_not_in_optparams.xlsx +0 -0
  250. package/test-files/expression-data-test-sheets/expression_sheet_name_not_present.xlsx +0 -0
  251. package/test-files/expression-data-test-sheets/expression_sheet_negative_time_points.xlsx +0 -0
  252. package/test-files/expression-data-test-sheets/expression_sheet_non_numerical_time_points.xlsx +0 -0
  253. package/test-files/expression-data-test-sheets/expression_sheet_not_existing.xlsx +0 -0
  254. package/test-files/expression-data-test-sheets/expression_sheet_wrong_id_label.xlsx +0 -0
  255. package/test-files/expression-data-test-sheets/expression_sheet_wrong_order_gene_names.xlsx +0 -0
  256. package/test-files/expression-data-test-sheets/expression_sheet_wrong_sheet_name_case.xlsx +0 -0
  257. package/test-files/expression-data-test-sheets/expression_sheet_wrong_sheet_name_convention.xlsx +0 -0
  258. package/test-files/gene-name-modifications/NaN-as-gene-name-input.xlsx +0 -0
  259. package/test-files/gene-name-modifications/NaN-as-gene-name-output.xlsx +0 -0
  260. package/test-files/gene-name-modifications/mismatched-case-related-input.xlsx +0 -0
  261. package/test-files/gene-name-modifications/mismatched-case-related-output.xlsx +0 -0
  262. package/test-files/gene-name-modifications/mismatched-case-unrelated-input.xlsx +0 -0
  263. package/test-files/gene-name-modifications/mismatched-case-unrelated-output.xlsx +0 -0
  264. package/test-files/gene-name-modifications/numbers-as-gene-name-related-input.xlsx +0 -0
  265. package/test-files/gene-name-modifications/numbers-as-gene-name-related-output.xlsx +0 -0
  266. package/test-files/gene-name-modifications/numbers-as-gene-name-unrelated-input.xlsx +0 -0
  267. package/test-files/gene-name-modifications/numbers-as-gene-name-unrelated-output.xlsx +0 -0
  268. package/test-files/graph-tests/different-sized-networks/{80-genes-0-edges.xlsx → 134-genes-0-edges.xlsx} +0 -0
  269. package/test-files/graph-tests/different-sized-networks/{45-genes-max-edges.xlsx → 44-source-genes-45-target-genes-max-edges.xlsx} +0 -0
  270. package/test-files/graph-tests/different-sized-networks/{1-gene-0-edges.xlsx → unused-files/1-gene-0-edges.xlsx} +0 -0
  271. package/test-files/graph-tests/different-sized-networks/{1-gene-1-edges.xlsx → unused-files/1-gene-1-edges.xlsx} +0 -0
  272. package/test-files/graph-tests/different-sized-networks/{10-genes-50-edges.xlsx → unused-files/10-genes-50-edges.xlsx} +0 -0
  273. package/test-files/graph-tests/different-sized-networks/{10-genes-90-edges.xlsx → unused-files/10-genes-90-edges.xlsx} +0 -0
  274. package/test-files/graph-tests/different-sized-networks/{100-genes-0-edges.xlsx → unused-files/100-genes-0-edges.xlsx} +0 -0
  275. package/test-files/graph-tests/different-sized-networks/{110-genes-0-edges.xlsx → unused-files/110-genes-0-edges.xlsx} +0 -0
  276. package/test-files/graph-tests/different-sized-networks/{120-genes-0-edges.xlsx → unused-files/120-genes-0-edges.xlsx} +0 -0
  277. package/test-files/graph-tests/different-sized-networks/{130-genes-0-edges.xlsx → unused-files/130-genes-0-edges.xlsx} +0 -0
  278. package/test-files/graph-tests/different-sized-networks/{140-genes-0-edges.xlsx → unused-files/140-genes-0-edges.xlsx} +0 -0
  279. package/test-files/graph-tests/different-sized-networks/{150-genes-10000-edges.xlsx → unused-files/150-genes-10000-edges.xlsx} +0 -0
  280. package/test-files/graph-tests/different-sized-networks/{150-genes-20000-edges.xlsx → unused-files/150-genes-20000-edges.xlsx} +0 -0
  281. package/test-files/graph-tests/different-sized-networks/{150-genes-max-edges.xlsx → unused-files/150-genes-max-edges.xlsx} +0 -0
  282. package/test-files/graph-tests/different-sized-networks/{160-genes-max-edges.xlsx → unused-files/160-genes-max-edges.xlsx} +0 -0
  283. package/test-files/graph-tests/different-sized-networks/{20-genes-max-edges.xlsx → unused-files/20-genes-max-edges.xlsx} +0 -0
  284. package/test-files/graph-tests/different-sized-networks/{25-genes-max-edges.xlsx → unused-files/25-genes-max-edges.xlsx} +0 -0
  285. package/test-files/graph-tests/different-sized-networks/{30-genes-max-edges.xlsx → unused-files/30-genes-max-edges.xlsx} +0 -0
  286. package/test-files/graph-tests/different-sized-networks/{34-genes-0-edges.xlsx → unused-files/34-genes-0-edges.xlsx} +0 -0
  287. package/test-files/graph-tests/different-sized-networks/{34-genes-40-edges.xlsx → unused-files/34-genes-40-edges.xlsx} +0 -0
  288. package/test-files/graph-tests/different-sized-networks/{34-genes-65-edges.xlsx → unused-files/34-genes-65-edges.xlsx} +0 -0
  289. package/test-files/graph-tests/different-sized-networks/{34-genes-90-edges.xlsx → unused-files/34-genes-90-edges.xlsx} +0 -0
  290. package/test-files/graph-tests/different-sized-networks/{5-genes-max-edges.xlsx → unused-files/5-genes-max-edges.xlsx} +0 -0
  291. package/test-files/graph-tests/different-sized-networks/{51-genes-max-edges.xlsx → unused-files/51-genes-max-edges.xlsx} +0 -0
  292. package/test-files/graph-tests/different-sized-networks/{52-genes-max-edges.xlsx → unused-files/52-genes-max-edges.xlsx} +0 -0
  293. package/test-files/graph-tests/different-sized-networks/{55-genes-0-edges.xlsx → unused-files/55-genes-0-edges.xlsx} +0 -0
  294. package/test-files/graph-tests/different-sized-networks/{55-genes-max-edges.xlsx → unused-files/55-genes-max-edges.xlsx} +0 -0
  295. package/test-files/graph-tests/different-sized-networks/{65-genes-0-edges.xlsx → unused-files/65-genes-0-edges.xlsx} +0 -0
  296. package/test-files/graph-tests/different-sized-networks/{7-genes-max-edges.xlsx → unused-files/7-genes-max-edges.xlsx} +0 -0
  297. package/test-files/graph-tests/different-sized-networks/{70-genes-0-edges.xlsx → unused-files/70-genes-0-edges.xlsx} +0 -0
  298. package/test-files/graph-tests/different-sized-networks/{9-genes-max-edges.xlsx → unused-files/9-genes-max-edges.xlsx} +0 -0
  299. package/test-files/graph-tests/different-sized-networks/{90-genes-0-edges.xlsx → unused-files/90-genes-0-edges.xlsx} +0 -0
  300. package/test-files/graph-tests/different-sized-networks/{regulation-matrix-documented-20140709-AllTF-all-targets.xlsx → unused-files/regulation-matrix-documented-20140709-AllTF-all-targets.xlsx} +0 -0
  301. package/test-files/node-tests/long-gene-name-no-spaces-first.xlsx +0 -0
  302. package/test-files/node-tests/long-gene-name-no-spaces-second.xlsx +0 -0
  303. package/test-files/node-tests/long-gene-name-spaces.xlsx +0 -0
  304. package/test-files/species-test-data/15-genes_28-edges_db5_Dahlquist-data_input_no-species.xlsx +0 -0
  305. package/test-files/species-test-data/15-genes_28-edges_db5_Dahlquist-data_input_with-species.xlsx +0 -0
  306. package/test-files/species-test-data/3-gene_7-edge_elegans.xlsx +0 -0
  307. package/test-files/species-test-data/3-gene_7-edge_melanogaster.xlsx +0 -0
  308. package/test-files/species-test-data/3-gene_7-edge_musculus.xlsx +0 -0
  309. package/test-files/species-test-data/3-gene_7-edge_sapiens.xlsx +0 -0
  310. package/test-files/species-test-data/kev-fake-data-sapiens-no-exp-data.xlsx +0 -0
  311. package/test-files/spreadsheet-controller-test-files/sheet-name-capitalized-network-optimized-weights.xlsx +0 -0
  312. package/test-files/spreadsheet-controller-test-files/sheet-name-capitalized-network.xlsx +0 -0
  313. package/web-client/app.js +1 -1
  314. package/web-client/config/config.js +5 -5
  315. package/web-client/controllers/main.js +5 -1
  316. package/web-client/public/favicon.ico +0 -0
  317. package/web-client/public/gene/GRNSight.svg +689 -0
  318. package/web-client/public/gene/PageDesignREADME.md +1 -0
  319. package/web-client/public/gene/api.js +442 -0
  320. package/web-client/public/gene/info.css +181 -0
  321. package/web-client/public/gene/info.js +334 -0
  322. package/web-client/public/gene/integrationREADME.md +52 -0
  323. package/web-client/public/js/constants.js +182 -0
  324. package/web-client/public/js/getGeneInformationREADME.md +4 -0
  325. package/web-client/public/js/graph-statistics.js +7 -7
  326. package/web-client/public/js/graph.js +480 -476
  327. package/web-client/public/js/grnsight.js +10 -9
  328. package/web-client/public/js/grnsight.min.js +2335 -0
  329. package/web-client/public/js/grnstate.js +147 -0
  330. package/web-client/public/js/iframe-coordination.js +55 -0
  331. package/web-client/public/js/setup-handlers.js +617 -0
  332. package/web-client/public/js/setup-load-and-import-handlers.js +180 -0
  333. package/web-client/public/js/update-app.js +980 -0
  334. package/web-client/public/js/upload.js +352 -578
  335. package/web-client/public/js/warnings.js +60 -0
  336. package/web-client/public/lib/iframeSizer.contentWindow.min.js +10 -0
  337. package/{documents/SDF/CMSI_402/spring_2018/writtenStatusReport4 → web-client/public/lib/jaspar-front.html} +0 -0
  338. package/web-client/public/stylesheets/grnsight.styl +176 -26
  339. package/web-client/public/stylesheets/print.styl +10 -4
  340. package/web-client/views/{graph.jade → graph.pug} +1 -3
  341. package/web-client/views/info.pug +215 -0
  342. package/web-client/views/upload.pug +587 -0
  343. package/_gh_pages/Gemfile +0 -7
  344. package/_gh_pages/Gemfile.lock +0 -129
  345. package/documents/SDF/CMSI_402/spring_2014/Southwick_CMSI402_Spring2014_software-development-plan.md +0 -71
  346. package/documents/SDF/CMSI_402/spring_2014/Southwick_CMSI402_Spring2014_software-requirements-specification.md +0 -71
  347. package/documents/SDF/CMSI_402/spring_2014/use-case-diagram-spring-2014.jpg +0 -0
  348. package/documents/SDF/CMSI_402/spring_2017/Anguiano_402_Final_Presentation.pptx +0 -0
  349. package/documents/SDF/CMSI_402/spring_2017/Anguiano_402_Presentation_Final_Poster.pdf +0 -0
  350. package/documents/SDF/CMSI_402/spring_2017/Anguiano_CMSI402_Spring2017_project-proposal-presentation.pptx +0 -0
  351. package/documents/SDF/CMSI_402/spring_2017/Anguiano_CMSI402_Spring2017_project-proposal.docx +0 -0
  352. package/documents/SDF/CMSI_402/spring_2017/Anguiano_CMSI402_Spring2017_software-development-plan.docx +0 -0
  353. package/documents/SDF/CMSI_402/spring_2017/Anguiano_CMSI402_Spring2017_software-requirements-specification.docx +0 -0
  354. package/documents/SDF/CMSI_402/spring_2017/Design Review Presentation.pptx +0 -0
  355. package/documents/SDF/CMSI_402/spring_2018/0402report.docx +0 -0
  356. package/documents/SDF/CMSI_402/spring_2018/0409report.docx +0 -0
  357. package/documents/SDF/CMSI_402/spring_2018/402-gantt.png +0 -0
  358. package/documents/SDF/CMSI_402/spring_2018/402SRS_GRNSightFeedback01.txt +0 -28
  359. package/documents/SDF/CMSI_402/spring_2018/402_SPD.md +0 -223
  360. package/documents/SDF/CMSI_402/spring_2018/ChoeShinCMSI402_Final.pptx +0 -0
  361. package/documents/SDF/CMSI_402/spring_2018/ProjectProposal.md +0 -22
  362. package/documents/SDF/CMSI_402/spring_2018/SoftwareRequirementsSpecification.md +0 -88
  363. package/documents/SDF/CMSI_402/spring_2018/homework/choe_eileen/Choe_Eileen_CMSI 402_HW1.pdf +0 -0
  364. package/documents/SDF/CMSI_402/spring_2018/homework/choe_eileen/Choe_Eileen_CMSI402_HW2.pdf +0 -0
  365. package/documents/SDF/CMSI_402/spring_2018/homework/shin_jen/402hw2.docx +0 -0
  366. package/documents/SDF/CMSI_402/spring_2018/homework/shin_jen/Jen - 402Hw1.docx +0 -0
  367. package/documents/SDF/CMSI_402/spring_2018/homework/shin_jen/Jen - hw3.docx +0 -0
  368. package/documents/SDF/CMSI_402/spring_2018/writtenStatusReport.docx +0 -0
  369. package/documents/Varshneya_Samdarshi_LMU_Symposium_2016.pptx +0 -0
  370. package/documents/abstracts/Anguiano_Varshneya_Undergraduate-Research-Symposium_2017_abstract.pdf +0 -0
  371. package/documents/abstracts/SIGGRAPH 2017 Abstract/ACM-Reference-Format.bst +0 -3478
  372. package/documents/abstracts/SIGGRAPH 2017 Abstract/Figure1_zoom100.png +0 -0
  373. package/documents/abstracts/SIGGRAPH 2017 Abstract/acmart.cls +0 -2352
  374. package/documents/abstracts/SIGGRAPH 2017 Abstract/acmart.ins +0 -29
  375. package/documents/abstracts/SIGGRAPH 2017 Abstract/always-weights.png +0 -0
  376. package/documents/abstracts/SIGGRAPH 2017 Abstract/auto.png +0 -0
  377. package/documents/abstracts/SIGGRAPH 2017 Abstract/networkA.png +0 -0
  378. package/documents/abstracts/SIGGRAPH 2017 Abstract/networkB-normalized.png +0 -0
  379. package/documents/abstracts/SIGGRAPH 2017 Abstract/networkB.png +0 -0
  380. package/documents/abstracts/SIGGRAPH 2017 Abstract/never-weights.png +0 -0
  381. package/documents/abstracts/SIGGRAPH 2017 Abstract/representative-image/screenshot.jpg +0 -0
  382. package/documents/abstracts/SIGGRAPH 2017 Abstract/representative-image/screenshot3x2.png +0 -0
  383. package/documents/abstracts/SIGGRAPH 2017 Abstract/representative-image/withweights3x2.png +0 -0
  384. package/documents/abstracts/SIGGRAPH 2017 Abstract/screenshot-auto.png +0 -0
  385. package/documents/abstracts/SIGGRAPH 2017 Abstract/siggraph-abstract-review.bib +0 -85
  386. package/documents/abstracts/SIGGRAPH 2017 Abstract/siggraph-abstract-review.pdf +0 -0
  387. package/documents/abstracts/SIGGRAPH 2017 Abstract/siggraph-abstract-review.tex +0 -235
  388. package/documents/abstracts/SWE Collegiate Competition 2017.md +0 -9
  389. package/documents/abstracts/Varshneya_Samdarshi_Southern-California-Systems-Biology_2017_abstract.docx +0 -0
  390. package/documents/developer_documents/State Diagram.graphml +0 -3525
  391. package/documents/developer_documents/graphml/State Diagram.graphml +0 -3115
  392. package/documents/developer_documents/older_versions/GRNsight State Diagram old.png +0 -0
  393. package/documents/developer_documents/older_versions/GRNsight State Diagram.png +0 -0
  394. package/documents/developer_documents/testing_script_generator/GRNsightTestingDocument.md +0 -998
  395. package/documents/developer_documents/testing_script_generator/featureList.json +0 -486
  396. package/documents/developer_documents/testing_script_generator/testing-script-generator.js +0 -149
  397. package/documents/manuscripts/peerj-computerscience-2016/GRNsight_PeerJ-CS_conference-presentations_2016.docx +0 -0
  398. package/documents/manuscripts/peerj-computerscience-2016/GRNsight_PeerJ-CS_manuscript_2016.docx +0 -0
  399. package/documents/manuscripts/peerj-computerscience-2016/GRNsight_PeerJ-CS_manuscript_2016_Table1.docx +0 -0
  400. package/documents/manuscripts/peerj-computerscience-2016/GRNsight_PeerJ-CS_manuscript_2016_references.rtf +0 -264
  401. package/documents/manuscripts/peerj-computerscience-2016/GRNsight_PeerJ-CS_manuscript_2016_text-only.docx +0 -0
  402. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/21-genes_31-edges_Schade-data_for-screenshots.xlsx +0 -0
  403. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure1_zoom100.jpg +0 -0
  404. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure1_zoom100.png +0 -0
  405. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure1_zoom100.psd +0 -0
  406. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure1_zoom145.jpg +0 -0
  407. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure1_zoom145.png +0 -0
  408. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure1_zoom145.psd +0 -0
  409. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure1_zoom145_900pix-wide.psd +0 -0
  410. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure2_zoom100.jpg +0 -0
  411. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure2_zoom100.png +0 -0
  412. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure2_zoom100.psd +0 -0
  413. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure2_zoom145.jpg +0 -0
  414. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure2_zoom145.png +0 -0
  415. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure2_zoom145.psd +0 -0
  416. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure2_zoom145_900pix-wide.psd +0 -0
  417. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure5A.pdf +0 -0
  418. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure5B.pdf +0 -0
  419. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure5C.eps +0 -0
  420. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure5D.pdf +0 -0
  421. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure5E.pdf +0 -0
  422. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure5F.eps +0 -0
  423. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure5_compiled.png +0 -0
  424. package/documents/manuscripts/peerj-computerscience-2016/figures/submitted-versions/Figure3_GRNsight-Architecture.pdf +0 -0
  425. package/documents/manuscripts/peerj-computerscience-2016/figures/submitted-versions/Figure4_GRNsight-Screenshot.pdf +0 -0
  426. package/documents/manuscripts/peerj-computerscience-2016/figures/submitted-versions/Figure5_compiled.pdf +12 -5383
  427. package/documents/manuscripts/peerj-computerscience-2016/peerj-reviewing-10823-v0.pdf +0 -0
  428. package/documents/manuscripts/peerj-computerscience-2016/revisions/GRNsight_PeerJ-CS_conference-presentations_2016_revised.docx +0 -0
  429. package/documents/manuscripts/peerj-computerscience-2016/revisions/GRNsight_PeerJ-CS_cover-letter-and-response_2016.pdf +0 -0
  430. package/documents/manuscripts/peerj-computerscience-2016/revisions/GRNsight_PeerJ-CS_cover-letter_2016.docx +0 -0
  431. package/documents/manuscripts/peerj-computerscience-2016/revisions/GRNsight_PeerJ-CS_cover-letter_2016.pdf +0 -0
  432. package/documents/manuscripts/peerj-computerscience-2016/revisions/GRNsight_PeerJ-CS_manuscript_2016_Table1.docx +0 -0
  433. package/documents/manuscripts/peerj-computerscience-2016/revisions/GRNsight_PeerJ-CS_manuscript_2016_references_revised.rtf +0 -385
  434. package/documents/manuscripts/peerj-computerscience-2016/revisions/GRNsight_PeerJ-CS_manuscript_2016_text-only_revised.docx +0 -0
  435. package/documents/manuscripts/peerj-computerscience-2016/revisions/GRNsight_PeerJ-CS_manuscript_2016_text-only_revised_marked.docx +0 -0
  436. package/documents/manuscripts/peerj-computerscience-2016/revisions/GRNsight_PeerJ-CS_response-to-reviewers_2016.docx +0 -0
  437. package/documents/manuscripts/peerj-computerscience-2016/revisions/GRNsight_PeerJ-CS_response-to-reviewers_2016.pdf +0 -0
  438. package/documents/manuscripts/peerj-computerscience-2016/revisions/figures/Figure3_GRNsight-Architecture.pdf +0 -0
  439. package/documents/manuscripts/peerj-computerscience-2016/revisions/figures/Figure4_GRNsight-Screenshot-auto.pdf +0 -0
  440. package/documents/manuscripts/peerj-computerscience-2016/revisions/figures/Figure4_GRNsight-Screenshot.pdf +0 -0
  441. package/documents/manuscripts/peerj-computerscience-2016/revisions/peerj-reviewing-10823-v1.pdf +0 -0
  442. package/documents/posters/Anguiano_402_Presentation_Draft_Poster.pdf +0 -0
  443. package/documents/posters/Anguiano_402_Presentation_Draft_Poster.pptx +0 -0
  444. package/documents/posters/Anguiano_Varshneya_LMU-Symposium_2015_poster.pptx +0 -0
  445. package/documents/posters/Anguiano_Varshneya_SCCUR-Poster_20141122_poster.pptx +0 -0
  446. package/documents/posters/ChoeShinCMSI402-2.pptx +0 -0
  447. package/documents/posters/ChoeShinCMSI402.pptx +0 -0
  448. package/documents/posters/ChoeShinCMSI402Final.pptx +0 -0
  449. package/documents/posters/Dahlquist-et-al_BOSC_ISMB_2016_poster.pptx +0 -0
  450. package/documents/posters/Samdarshi et al. LMU Symposium 2017-finalDraft.pptx +0 -0
  451. package/documents/posters/Samdarshi et al. LMU Symposium 2018-firstDraft.pptx +0 -0
  452. package/documents/posters/Shin et al. SCCUR 2017 FinalDraft.pptx +0 -0
  453. package/documents/posters/Southwick_CMSI402_2014_poster.pptx +0 -0
  454. package/documents/posters/Varshneya_Samdarshi_LMU-Symposium_2016_poster.pptx +0 -0
  455. package/documents/posters/Varshneya_Samdarshi_Southern-California-Systems-Biology-Conference_2017_poster.pptx +0 -0
  456. package/documents/posters/~$Samdarshi et al. LMU Symposium 2018-firstDraft.pptx +0 -0
  457. package/documents/presentations/Anguiano_402_Final_Presentation.pptx +0 -0
  458. package/documents/presentations/Choe_SCCUR2017.pptx +0 -0
  459. package/documents/presentations/Choe_SWERapidFire2017_final.pptx +0 -0
  460. package/documents/presentations/Dahlquist_BOSC_20160709.pptx +0 -0
  461. package/documents/presentations/Dahlquist_ExperimentalBiology_20160404_talk.pptx +0 -0
  462. package/documents/presentations/Dahlquist_SoCalSysBio_20150131_talk.pptx +0 -0
  463. package/documents/presentations/Samdarshi et al. LMU Symposium 2017-draft.pptx +0 -0
  464. package/documents/presentations/Southwick_Anguiano_LMU-Symposium_20140329_talk.pptx +0 -0
  465. package/documents/presentations/Southwick_CMSI402_Presentation_20140508_talk.pptx +0 -0
  466. package/documents/presentations/Varshneya-Anguiano-LMU Symposium-201703.pptx +0 -0
  467. package/documents/presentations/~$Choe_SWERapidFire2017_final.pptx +0 -0
  468. package/documents/reports/Varshneya-201701-AnnotatedBibliography.docx +0 -0
  469. package/documents/reports/Varshneya-201702-Introduction.docx +0 -0
  470. package/documents/reports/Varshneya-201702-Outline.docx +0 -0
  471. package/documents/reports/Varshneya-201703-Discussion.docx +0 -0
  472. package/documents/reports/Varshneya-201703-MMResults.docx +0 -0
  473. package/documents/reports/Varshneya-201704-Draft-1.docx +0 -0
  474. package/documents/reports/Varshneya-201704-Final.docx +0 -0
  475. package/test/graph-library-tests.js +0 -165
  476. package/test-files/demo-files/21-genes_50-edges_Dahlquist-data_estimation_output.xlsx +0 -0
  477. package/test-files/demo-files/21-genes_50-edges_Dahlquist-data_input.xlsx +0 -0
  478. package/test-files/graph-tests/different-sized-networks/10-genes-max-edges.xlsx +0 -0
  479. package/test-files/graph-tests/different-sized-networks/12-genes-max-edges.xlsx +0 -0
  480. package/test-files/graph-tests/different-sized-networks/35-genes-max-edges.xlsx +0 -0
  481. package/test-files/graph-tests/different-sized-networks/40-genes-0-edges.xlsx +0 -0
  482. package/test-files/graph-tests/different-sized-networks/40-genes-max-edges.xlsx +0 -0
  483. package/test-files/graph-tests/different-sized-networks/42-genes-max-edges.xlsx +0 -0
  484. package/test-files/graph-tests/different-sized-networks/50-genes-max-edges.xlsx +0 -0
  485. package/test-files/graph-tests/different-sized-networks/75-genes-150-edges.xlsx +0 -0
  486. package/web-client/public/js/container.js +0 -121
  487. package/web-client/public/js/node-coloring.js +0 -306
  488. package/web-client/public/js/sliders.js +0 -197
  489. package/web-client/views/upload.jade +0 -458
@@ -1,43 +1,27 @@
1
- export const upload = function (sliderObject, sliderGroupController, drawGraph, nodeColoringController) {
2
- // Slider Values
3
- var LINK_DIST_SLIDER_ID = "#linkDistInput";
4
- var LINK_DIST_VALUE = "#linkDistVal";
5
- var LINK_DIST_DEFAULT = 500;
6
- var CHARGE_SLIDER_ID = "#chargeInput";
7
- var CHARGE_VALUE = "#chargeVal";
8
- var CHARGE_DEFAULT = -50;
9
- var TOOLTIP_SHOW_DELAY = 700;
10
- var TOOLTIP_HIDE_DELAY = 100;
1
+ // TODO Likely a temporary location, while things are being moved to their "true" homes.
2
+ // But placed here for now so that the true MVC cycle of grnState, updateApp, and the
3
+ // controller code installed by setupHandlers can access them.
11
4
 
12
- // Demo Stuff
13
- var UNWEIGHTED_DEMO_ID = "#unweighted";
14
- var UNWEIGHTED_DEMO_PATH = "demo/unweighted";
15
- var UNWEIGHTED_DEMO_NAME = "Demo #1: Unweighted GRN (21 genes, 50 edges)";
16
- var WEIGHTED_DEMO_ID = "#weighted";
17
- var WEIGHTED_DEMO_PATH = "demo/weighted";
18
- var WEIGHTED_DEMO_NAME = "Demo #2: Weighted GRN (21 genes, 50 edges, Dahlquist Lab unpublished data)";
19
- var SCHADE_INPUT_ID = "#schadeInput";
20
- var SCHADE_INPUT_PATH = "demo/schadeInput";
21
- var SCHADE_INPUT_NAME = "Demo #3: Unweighted GRN (21 genes, 31 edges)";
22
- var SCHADE_OUTPUT_ID = "#schadeOutput";
23
- var SCHADE_OUTPUT_PATH = "demo/schadeOutput";
24
- var SCHADE_OUTPUT_NAME = "Demo #4: Weighted GRN (21 genes, 31 edges, Schade et al. 2004 data)";
5
+ /* eslint-disable max-len */
6
+ import { grnState } from "./grnstate";
25
7
 
26
- // Settings Stuff
27
- var COLOR_PREFERENCES_CLASS = ".colorPreferences";
28
- var ACTIVE_COLOR_OPTION = "active";
8
+ import {
9
+ buildURL,
10
+ responseData,
11
+ stopLoadingIcon
12
+ } from "./update-app";
29
13
 
30
- // Weights Stuff
31
- var WEIGHTS_SHOW_MOUSE_OVER_MENU = "#weightsMouseOverMenu";
32
- var WEIGHTS_SHOW_ALWAYS_MENU = "#weightsAlwaysMenu";
33
- var WEIGHTS_HIDE_MENU = "#weightsNeverMenu";
34
- var WEIGHTS_SHOW_MOUSE_OVER_SIDE = "#weightsMouseOverSide";
35
- var WEIGHTS_SHOW_ALWAYS_SIDE = "#weightsAlwaysSide";
36
- var WEIGHTS_HIDE_SIDE = "#weightsNeverSide";
37
- var WEIGHTS_SHOW_MOUSE_OVER_CLASS = ".weightsMouseOver";
38
- var WEIGHTS_SHOW_ALWAYS_CLASS = ".weightsAlways";
39
- var WEIGHTS_HIDE_CLASS = ".weightsNever";
14
+ export const uploadState = {
15
+ currentWorkbook: null,
16
+ };
17
+
18
+ export const upload = function () {
19
+
20
+ // Values
21
+ var TOOLTIP_SHOW_DELAY = 700;
22
+ var TOOLTIP_HIDE_DELAY = 100;
40
23
 
24
+ // Settings Stuff
41
25
  var styleLabelTooltips = function () {
42
26
  $(".info").tooltip({
43
27
  placement: "top",
@@ -47,285 +31,7 @@ export const upload = function (sliderObject, sliderGroupController, drawGraph,
47
31
 
48
32
  styleLabelTooltips();
49
33
 
50
- var nodeColoring = nodeColoringController;
51
- nodeColoring.configureNodeColoringHandlers();
52
- nodeColoring.initialize();
53
-
54
- var linkDistanceSlider = new sliderObject(LINK_DIST_SLIDER_ID, LINK_DIST_VALUE, LINK_DIST_DEFAULT, false);
55
- var chargeSlider = new sliderObject(CHARGE_SLIDER_ID, CHARGE_VALUE, CHARGE_DEFAULT, false);
56
- var sliders = new sliderGroupController([chargeSlider, linkDistanceSlider]);
57
- sliders.setSliderHandlers();
58
- sliders.updateValues();
59
- sliders.configureSliderControllers();
60
-
61
- var currentNetwork = null;
62
-
63
- var displayWarnings = function (warnings) {
64
- $("#warningIntro").html("There were " + warnings.length + " warning(s) detected in this file. " +
65
- "The graph will be loaded, but may not be displayed accurately. " +
66
- "We recommend you review your file and ensure that it is formatted correctly. " +
67
- "To view the details of the warning(s), please click on the \"Warnings List\" below.");
68
-
69
- var warningsString = "";
70
- // printed = [MISSING_SOURCE,MISSING_TARGET,INVALID_DATA,RANDOM_DATA,
71
- // EMPTY_ROW,INVALID_NETWORK_SIZE,INVALID_CELL_DATA_TYPE]
72
-
73
- var NUM_POSSIBLE_WARNINGS = 11;
74
-
75
- // Fill printed with 0s programatically
76
- var printed = [];
77
- for (var i = 0; i < NUM_POSSIBLE_WARNINGS; i++) {
78
- printed.push(0);
79
- }
80
-
81
- var missingSourceCount = warnings.filter(function (x) {
82
- return x.warningCode === "MISSING_SOURCE";
83
- });
84
- var missingTargetCount = warnings.filter(function (x) {
85
- return x.warningCode === "MISSING_TARGET";
86
- });
87
- var invalidDataCount = warnings.filter(function (x) {
88
- return x.warningCode === "INVALID_DATA";
89
- });
90
- var randomDataCount = warnings.filter(function (x) {
91
- return x.warningCode === "RANDOM_DATA";
92
- });
93
- var emptyRowCount = warnings.filter(function (x) {
94
- return x.warningCode === "EMPTY_ROW";
95
- });
96
- var invalidNetworkSizeCount = warnings.filter(function (x) {
97
- return x.warningCode === "INVALID_NETWORK_SIZE";
98
- });
99
- var extraneousDataCount = warnings.filter(function (x) {
100
- return x.warningCode === "EXTRANEOUS_DATA";
101
- });
102
- var edgesWithoutWeightsCount = warnings.filter(function (x) {
103
- return x.warningCode === "EDGES_WITHOUT_WEIGHTS";
104
- });
105
- var edgeDefaultNotDirectedCount = warnings.filter(function (x) {
106
- return x.warningCode === "EDGE_DEFAULT_NOT_DIRECTED";
107
- });
108
- var sifFormatWarningCount = warnings.filter(function (x) {
109
- return x.warningCode === "SIF_FORMAT_WARNING";
110
- });
111
- var incorrectlyNamedSheetWarningCount = warnings.filter(function (x) {
112
- return x.warningCode === "INCORRECTLY_NAMED_SHEET";
113
- });
114
-
115
- var appendWarning = function (warning) {
116
- warningsString += warning.errorDescription + "<br><br>";
117
- };
118
-
119
- var createWarningsString = function (warningCount, index) {
120
- for (var i = 0; i < warningCount.length; i++) {
121
- if (warningCount.length <= 3) {
122
- appendWarning(warningCount[i]);
123
- } else if (printed[index] < 3) {
124
- appendWarning(warningCount[i]);
125
- printed[index]++;
126
- } else {
127
- warningsString += "<i> " + (+warningCount.length - 3) +
128
- " more warning(s) like this exist. </i> <br><br>";
129
- break;
130
- }
131
- }
132
- };
133
-
134
- createWarningsString(missingSourceCount, 0);
135
- createWarningsString(missingTargetCount, 1);
136
- createWarningsString(invalidDataCount, 2);
137
- createWarningsString(randomDataCount, 3);
138
- createWarningsString(emptyRowCount, 4);
139
- createWarningsString(invalidNetworkSizeCount, 5);
140
- createWarningsString(extraneousDataCount, 6);
141
- createWarningsString(edgesWithoutWeightsCount, 7);
142
- createWarningsString(edgeDefaultNotDirectedCount, 8);
143
- createWarningsString(sifFormatWarningCount, 9);
144
- createWarningsString(incorrectlyNamedSheetWarningCount, 10);
145
-
146
- $("#warningsList").html(warningsString);
147
-
148
- var screenHeight = $(window).height();
149
- var MIN_SCREEN_HEIGHT = 600;
150
- var BORDER = 425;
151
- var setPanel = (screenHeight - BORDER) + "px";
152
- var minPanel = (MIN_SCREEN_HEIGHT - BORDER) + "px";
153
- if (screenHeight > MIN_SCREEN_HEIGHT) {
154
- $("#list-frame").css({height: setPanel});
155
- } else {
156
- $("#list-frame").css({height: minPanel});
157
- }
158
-
159
- $("#warningsModal").modal("show");
160
- };
161
-
162
- var displayNetwork = function (network, name) {
163
- nodeColoring.reload(network, name);
164
- if (document.getElementById("zoomSlider").disabled) {
165
- document.getElementById("zoomSlider").disabled = false;
166
- }
167
-
168
- currentNetwork = network;
169
- console.log("Network: ", network); // Display the network in the console
170
- $("#graph-metadata").html(network.genes.length + " nodes<br>" + network.links.length + " edges");
171
-
172
- if (network.warnings.length > 0) {
173
- displayWarnings(network.warnings);
174
- }
175
-
176
-
177
- $("#fileName").text(name); // Set the name of the file to display in the top bar
178
- $("input[type='range']").off("input"); // I have no idea why I do this. Investigate later.
179
-
180
- // If more things need to be turned off, we'll add them to this array
181
- [ "#resetSliders", "#resetSlidersMenu", "#undoReset", "#undoResetMenu" ].forEach(function (selector) {
182
- $(selector).off("click");
183
- });
184
- drawGraph(network, sliders, nodeColoring);
185
- };
186
-
187
- var networkErrorDisplayer = function (xhr) {
188
- // Deleted status, error for argument because it was never used
189
- var err = JSON.parse(xhr.responseText);
190
- var errorString = "Your graph failed to load.<br><br>";
191
-
192
- if (!err.errors) { // will be falsy if an error was thrown before the network was generated
193
- errorString += err;
194
- } else {
195
- console.log(err.errors);
196
- errorString = err.errors.reduce(function (currentErrorString, currentError) {
197
- return currentErrorString + currentError.possibleCause + " " + currentError.suggestedFix + "<br><br>";
198
- }, errorString);
199
- }
200
-
201
- $("#error").html(errorString);
202
- $("#errorModal").modal("show");
203
- };
204
-
205
- var reloader = function () { };
206
-
207
- var loadGrn = function (url, name, formData) {
208
- // The presence of formData is taken to indicate a POST.
209
- var fullUrl = [ $("#service-root").val(), url ].join("/");
210
- (formData ?
211
- $.ajax({
212
- url: fullUrl,
213
- data: formData,
214
- processData: false,
215
- contentType: false,
216
- type: "POST",
217
- crossDomain: true
218
- }) :
219
- $.getJSON(fullUrl)
220
- ).done(function (network, textStatus, jqXhr) {
221
- console.log(network); // Display the network in the console
222
- displayNetwork(network, name || jqXhr.getResponseHeader("X-GRNsight-Filename"));
223
- reloader = function () {
224
- loadGrn(url, name, formData);
225
- };
226
- // displayStatistics(network);
227
- }).error(networkErrorDisplayer);
228
- };
229
-
230
- var loadDemo = function (url) {
231
- loadGrn(url);
232
- reloader = function () {
233
- loadGrn(url);
234
- };
235
-
236
- $("a.upload > input[type=file]").val("");
237
- };
238
-
239
- var initializeDemoFile = function (demoId, demoPath, demoName) {
240
- $(demoId).on("click", function () {
241
- // Deleted parameter event
242
- loadDemo(demoPath, demoName);
243
- });
244
- };
245
-
246
- var demoInformation = [ [ WEIGHTED_DEMO_ID, WEIGHTED_DEMO_PATH, WEIGHTED_DEMO_NAME ],
247
- [ UNWEIGHTED_DEMO_ID, UNWEIGHTED_DEMO_PATH, UNWEIGHTED_DEMO_NAME ],
248
- [ SCHADE_INPUT_ID, SCHADE_INPUT_PATH, SCHADE_INPUT_NAME ],
249
- [ SCHADE_OUTPUT_ID, SCHADE_OUTPUT_PATH, SCHADE_OUTPUT_NAME ] ];
250
- demoInformation.forEach(function (demoInfo) {
251
- initializeDemoFile.apply(null, demoInfo);
252
- });
253
-
254
- var settingsController = function () {
255
- this.color = true;
256
-
257
- this.setupSettingsHandlers = function () {
258
- $(COLOR_PREFERENCES_CLASS).on("click", function () {
259
- $(COLOR_PREFERENCES_CLASS).toggleClass(ACTIVE_COLOR_OPTION);
260
- $(COLOR_PREFERENCES_CLASS + ">span").toggleClass("glyphicon-ok invisible");
261
- });
262
- };
263
- };
264
-
265
- var settings = new settingsController();
266
- settings.setupSettingsHandlers();
267
-
268
- var lockForce = function (disable) {
269
- $("#linkDistInput").prop("disabled", disable);
270
- $("#chargeInput").prop("disabled", disable);
271
- $("#resetSlidersButton").prop("disabled", disable);
272
- $("#lockSlidersButton").prop("checked", disable);
273
- };
274
-
275
- var toggleLayout = function (on, off) {
276
- if (!$(on).prop("checked")) {
277
- $(on).prop("checked", true);
278
- $(off).prop("checked", false);
279
- $(off + " span").removeClass("glyphicon-ok");
280
- $(on + " span").addClass("glyphicon-ok");
281
- if (on === "#gridLayout") {
282
- lockForce(true);
283
- $("#lockSlidersMenu").parent().addClass("disabled");
284
- $("#resetSlidersMenu").parent().addClass("disabled");
285
- $("#link-distance").parent().addClass("disabled");
286
- $("#charge").parent().addClass("disabled");
287
- } else {
288
- lockForce(false);
289
- $("#lockSlidersMenu").parent().removeClass("disabled");
290
- $("#resetSlidersMenu").parent().removeClass("disabled");
291
- $("#link-distance").parent().removeClass("disabled");
292
- $("#charge").parent().removeClass("disabled");
293
- }
294
- if (!$(on).hasClass("called")) {
295
- $("#gridLayoutButton").trigger("click");
296
- }
297
- }
298
- };
299
-
300
- $("#gridLayout").on("click", function () {
301
- toggleLayout("#gridLayout", "#forceGraph");
302
- });
303
-
304
- $("#forceGraph").on("click", function () {
305
- toggleLayout("#forceGraph", "#gridLayout");
306
- });
307
-
308
- // TODO: Make this less bad
309
- $("#upload-sif").on("click", function () {
310
- // deleted event parameter
311
- $("#launchFileOpen").off("click").on("click", function () {
312
- $("#upload-sif").click();
313
- });
314
- });
315
- $("#upload-graphml").on("click", function () {
316
- // deleted event parameter
317
- $("#launchFileOpen").off("click").on("click", function () {
318
- $("#upload-graphml").click();
319
- });
320
- });
321
- $("#upload").on("click", function () {
322
- // deleted event parameter
323
- $("#launchFileOpen").off("click").on("click", function () {
324
- $("#upload").click();
325
- });
326
- });
327
-
328
- $("#printGraph").on("click", function () {
34
+ $("#printGraph").click( function () {
329
35
  if (!$(".startDisabled").hasClass("disabled")) {
330
36
  window.print();
331
37
  }
@@ -337,242 +43,14 @@ export const upload = function (sliderObject, sliderGroupController, drawGraph,
337
43
  delay: { show: 700, hide: 100 }
338
44
  });
339
45
 
340
- // Normalization Controller
341
- var MIN_EDGE_WEIGHT_NORMALIZATION = 0.0001;
342
- var MAX_EDGE_WEIGHT_NORMALIZATION = 1000;
343
-
344
- var valueValidator = function (min, max, value) {
345
- return Math.min(max, Math.max(min, value));
346
- };
347
-
348
- var edgeWeightNormalizationInputValidation = function (value) {
349
- return value === "" ? "" : valueValidator(MIN_EDGE_WEIGHT_NORMALIZATION, MAX_EDGE_WEIGHT_NORMALIZATION, value);
350
- };
351
-
352
- var synchronizeNormalizationValues = function (value) {
353
- var validated = edgeWeightNormalizationInputValidation(value);
354
- $("#normalization-max").val(validated);
355
- $("#edge-weight-normalization-factor-menu").val(validated);
356
- drawGraph(currentNetwork, sliders, nodeColoring);
357
- };
358
-
359
- $("#normalization-button").click(function () {
360
- synchronizeNormalizationValues($("#normalization-max").val());
361
- });
362
-
363
- $("#reset-normalization-factor-menu, #resetNormalizationButton").click(function () {
364
- synchronizeNormalizationValues("");
365
- });
366
-
367
- $("#edge-weight-normalization-factor-menu").on("change", function () {
368
- synchronizeNormalizationValues($("#edge-weight-normalization-factor-menu").val());
369
- });
370
-
371
- var GREY_EDGE_THRESHOLD_MENU = "#gray-edge-threshold-menu";
372
- var GREY_EDGE_THRESHOLD_SLIDER_SIDEBAR = "#grayThresholdInput";
373
- var GREY_EDGE_THRESHOLD_TEXT_SIDEBAR = "#grayThresholdValue";
374
-
375
- // Gray Edge Controller
376
-
377
- var grayEdgeInputValidator = function (value) {
378
- return valueValidator(0, 100, value);
379
- };
380
-
381
- var updateGrayEdgeValues = function (value) {
382
- var validatedInput = grayEdgeInputValidator(value);
383
- $(GREY_EDGE_THRESHOLD_TEXT_SIDEBAR).text(validatedInput + "%");
384
- $(GREY_EDGE_THRESHOLD_MENU).val(validatedInput);
385
- $(GREY_EDGE_THRESHOLD_SLIDER_SIDEBAR).val(validatedInput / 100);
386
- drawGraph(currentNetwork, sliders, nodeColoring);
387
- };
388
-
389
- $(GREY_EDGE_THRESHOLD_MENU).on("change", function () {
390
- var value = Math.round(($(GREY_EDGE_THRESHOLD_MENU).val()));
391
- updateGrayEdgeValues(value);
392
- });
393
-
394
- $(GREY_EDGE_THRESHOLD_SLIDER_SIDEBAR).on("change", function () {
395
- var value = Math.round(($(GREY_EDGE_THRESHOLD_SLIDER_SIDEBAR).val() * 100));
396
- updateGrayEdgeValues(value);
397
- });
398
-
399
- // Dashed Gray Line Controller
400
-
401
- var GREY_EDGES_DASHED_MENU = "#grey-edges-dashed-menu";
402
- var GREY_EDGES_DASHED_SIDEBAR = "#dashedGrayLineButton";
403
-
404
- var syncGreyEdgesAsDashedOptions = function (showAsDashed) {
405
- if (showAsDashed) {
406
- $(GREY_EDGES_DASHED_MENU + " span").addClass("glyphicon-ok");
407
- $(GREY_EDGES_DASHED_MENU).prop("checked", "checked");
408
- $(GREY_EDGES_DASHED_SIDEBAR).prop("checked", "checked");
409
- } else {
410
- $(GREY_EDGES_DASHED_MENU + " span").removeClass("glyphicon-ok");
411
- $(GREY_EDGES_DASHED_MENU).removeProp("checked");
412
- $(GREY_EDGES_DASHED_SIDEBAR).removeProp("checked");
413
- }
414
- drawGraph(currentNetwork, sliders, nodeColoring);
415
- };
416
-
417
- $(GREY_EDGES_DASHED_MENU).click(function () {
418
- syncGreyEdgesAsDashedOptions(!$(GREY_EDGES_DASHED_MENU).prop("checked"));
419
- });
420
-
421
- $(GREY_EDGES_DASHED_SIDEBAR).on("change", function () {
422
- syncGreyEdgesAsDashedOptions($(GREY_EDGES_DASHED_SIDEBAR).prop("checked"));
423
- });
424
-
425
- var annotateLinks = function (network) {
426
- // TODO This duplicates logic that is done on the server side for an .xlsx spreadsheet.
427
- // Think of a way to consolidate it. Having discovered this, it seems like this should
428
- // be done on the client side because it rearranges data redundantly, for ease of display.
429
- network.positiveWeights = [];
430
- network.negativeWeights = [];
431
-
432
- network.links.forEach(function (link) {
433
- if (network.sheetType === "unweighted" && !link.value) {
434
- link.value = 1;
435
- }
436
-
437
- if (link.value > 0) {
438
- link.type = "arrowhead";
439
- // link.stroke = "MediumVioletRed"; // GRNsight v1 magenta edge color
440
- link.stroke = "rgb(195, 61, 61)"; // Node coloring-consistent red edge color
441
- network.positiveWeights.push(link.value);
442
- } else {
443
- link.type = "repressor";
444
- // link.stroke = "DarkTurquoise"; // GRNsight v1 cyan edge color
445
- link.stroke = "rgb(51, 124, 183)"; // Node coloring-consistent blue edge color
446
- network.negativeWeights.push(link.value);
447
- }
448
- });
449
- };
450
-
451
- /*
452
- * Thanks to http://stackoverflow.com/questions/6974684/how-to-send-formdata-objects-with-ajax-requests-in-jquery
453
- * for helping to resolve this.
454
- */
455
-
456
- // TODO Some opportunity for unification with loadGrn?
457
- var importGrn = function (uploadRoute, filename, formData) {
458
- var fullUrl = [ $("#service-root").val(), uploadRoute ].join("/");
459
- $.ajax({
460
- url: fullUrl,
461
- data: formData,
462
- processData: false,
463
- contentType: false,
464
- type: "POST",
465
- crossDomain: true
466
- }).done(function (network) {
467
- annotateLinks(network);
468
- displayNetwork(network, filename);
469
- reloader = function () {
470
- importGrn(uploadRoute, filename, formData);
471
- };
472
- }).error(networkErrorDisplayer);
473
- };
474
-
475
- var submittedFilename = function ($upload) {
476
- var path = $upload.val();
477
- var fakePathCheck = path.search("\\\\") + 1;
478
-
479
- while (fakePathCheck) {
480
- path = path.substring(fakePathCheck);
481
- fakePathCheck = path.search("\\\\") + 1;
482
- }
483
-
484
- return path;
485
- };
486
-
487
- var createFileForm = function ($upload) {
488
- var formData = new FormData();
489
- formData.append("file", $upload[0].files[0]);
490
- return formData;
491
- };
492
-
493
- var uploadEpilogue = function (event) {
494
- if (window.ga) {
495
- window.ga("send", "pageview", {
496
- page: "/GRNsight/upload",
497
- sessionControl: "start"
498
- });
499
- }
500
-
501
- $("a.upload > input[type=file]").val("");
502
- event.preventDefault();
503
- };
504
-
505
- var uploadHandler = function (uploadRoute, uploader) {
506
- return function (event) {
507
- var $upload = $(this);
508
- var filename = submittedFilename($upload);
509
- var formData = createFileForm($upload);
510
- uploader(uploadRoute, filename, formData);
511
- uploadEpilogue(event);
512
- };
513
- };
514
-
515
- $("#upload").on("change", uploadHandler("upload", loadGrn));
516
- $("#upload-sif").on("change", uploadHandler("upload-sif", importGrn));
517
- $("#upload-graphml").on("change", uploadHandler("upload-graphml", importGrn));
518
-
519
46
  $("#warningsModal").on("hidden.bs.modal", function () {
520
47
  if ($("#warningsInfo").hasClass("in")) {
521
48
  $("#warningsInfo").removeClass("in");
522
49
  }
523
50
  });
524
51
 
525
- $(WEIGHTS_SHOW_MOUSE_OVER_CLASS).click(function () {
526
- $(WEIGHTS_SHOW_MOUSE_OVER_MENU + " span").addClass("glyphicon-ok");
527
- $(WEIGHTS_SHOW_ALWAYS_MENU + " span").removeClass("glyphicon-ok");
528
- $(WEIGHTS_HIDE_MENU + " span").removeClass("glyphicon-ok");
529
-
530
- $(WEIGHTS_SHOW_MOUSE_OVER_SIDE).prop("checked", "checked");
531
- $(WEIGHTS_SHOW_ALWAYS_SIDE).removeProp("checked");
532
- $(WEIGHTS_HIDE_SIDE).removeProp("checked");
533
-
534
- $(WEIGHTS_SHOW_MOUSE_OVER_CLASS).addClass("selected");
535
- $(WEIGHTS_SHOW_ALWAYS_CLASS).removeClass("selected");
536
- $(WEIGHTS_HIDE_CLASS).removeClass("selected");
537
- });
538
-
539
- $(WEIGHTS_SHOW_ALWAYS_CLASS).click(function () {
540
- $(WEIGHTS_SHOW_MOUSE_OVER_MENU + " span").removeClass("glyphicon-ok");
541
- $(WEIGHTS_SHOW_ALWAYS_MENU + " span").addClass("glyphicon-ok");
542
- $(WEIGHTS_HIDE_MENU + " span").removeClass("glyphicon-ok");
543
-
544
- $(WEIGHTS_SHOW_MOUSE_OVER_SIDE).removeProp("checked");
545
- $(WEIGHTS_SHOW_ALWAYS_SIDE).prop("checked", "checked");
546
- $(WEIGHTS_HIDE_SIDE).removeProp("checked");
547
-
548
- $(WEIGHTS_SHOW_MOUSE_OVER_CLASS).removeClass("selected");
549
- $(WEIGHTS_SHOW_ALWAYS_CLASS).addClass("selected");
550
- $(WEIGHTS_HIDE_CLASS).removeClass("selected");
551
- });
552
-
553
- $(WEIGHTS_HIDE_CLASS).click(function () {
554
- $(WEIGHTS_SHOW_MOUSE_OVER_MENU + " span").removeClass("glyphicon-ok");
555
- $(WEIGHTS_SHOW_ALWAYS_MENU + " span").removeClass("glyphicon-ok");
556
- $(WEIGHTS_HIDE_MENU + " span").addClass("glyphicon-ok");
557
-
558
- $(WEIGHTS_SHOW_MOUSE_OVER_SIDE).removeProp("checked");
559
- $(WEIGHTS_SHOW_ALWAYS_SIDE).removeProp("checked");
560
- $(WEIGHTS_HIDE_SIDE).prop("checked", "checked");
561
-
562
- $(WEIGHTS_SHOW_MOUSE_OVER_CLASS).removeClass("selected");
563
- $(WEIGHTS_SHOW_ALWAYS_CLASS).removeClass("selected");
564
- $(WEIGHTS_HIDE_CLASS).addClass("selected");
565
- });
566
-
567
- $("#printGraph").click(function () {
568
- // Deleted event parameter
569
- if (!$(this).parent().hasClass("disabled")) {
570
- window.print();
571
- }
572
- });
573
-
574
- var flattenNetwork = function (network, sheetType) {
575
- var result = $.extend(true, { }, network, { sheetType: sheetType });
52
+ var flattenWorkbook = function (workbook, sheetType) {
53
+ var result = $.extend(true, { }, workbook, { sheetType: sheetType });
576
54
  result.links.forEach(function (link) {
577
55
  link.source = link.source.index;
578
56
  link.target = link.target.index;
@@ -587,7 +65,6 @@ export const upload = function (sliderObject, sliderGroupController, drawGraph,
587
65
  if (currentExtension && currentExtension.length) {
588
66
  filename = filename.substr(0, filename.length - currentExtension[0].length);
589
67
  }
590
-
591
68
  if (suffix) {
592
69
  filename = filename + "_" + suffix;
593
70
  }
@@ -595,14 +72,44 @@ export const upload = function (sliderObject, sliderGroupController, drawGraph,
595
72
  return filename + "." + extension;
596
73
  };
597
74
 
598
- var performExport = function (route, extension, sheetType) {
599
- return function () {
600
- // Deleted event parameter
75
+ const handleExportExcelButtonExport = (route, extension, sheetType, source) => {
76
+ grnState.workbook.exportNetworkType = sheetType;
77
+ const expressionSheets = $("input[name=expressionSheets]:checked");
78
+ var chosenSheets = [];
79
+ for (const [key, value] of Object.entries(expressionSheets)) {
80
+ if (!isNaN(parseInt(key, 10))) {
81
+ if (value.value === "select all") {
82
+ const allExpressionSheets = $("input[name=expressionSheets]");
83
+ chosenSheets = [];
84
+ for (const [k, v] of Object.entries(allExpressionSheets)) {
85
+ if (!isNaN(parseInt(k, 10))) {
86
+ if (v.value !== "select all") {
87
+ chosenSheets.push(v.value);
88
+ }
89
+ }
90
+ }
91
+ break;
92
+ } else {
93
+ chosenSheets.push(value.value);
94
+ }
95
+ }
96
+ }
97
+ const exportSheets = {};
98
+
99
+ if (source === "userInput" && grnState.workbook.expression) {
100
+ // source is from user speadsheet
101
+ // parse through grnState expression sheets and collect the sheets to be exported
102
+ for (let sheet of chosenSheets) {
103
+ if (grnState.workbook.expression[sheet]) {
104
+ exportSheets[sheet] = grnState.workbook.expression[sheet];
105
+ }
106
+ }
107
+ grnState.workbook.exportExpression = exportSheets;
601
108
  if (!$(this).parent().hasClass("disabled")) {
602
- var networkToExport = flattenNetwork(currentNetwork, sheetType);
603
- var networkFilename = filenameWithExtension(sheetType !== currentNetwork.sheetType ?
109
+ var workbookToExport = flattenWorkbook(uploadState.currentWorkbook, sheetType);
110
+ var workbookFilename = filenameWithExtension(sheetType !== uploadState.currentWorkbook.sheetType ?
604
111
  sheetType : "", extension);
605
- networkToExport.filename = networkFilename;
112
+ workbookToExport.filename = workbookFilename;
606
113
 
607
114
  var exportForm = $("<form></form>").attr({
608
115
  method: "POST",
@@ -610,46 +117,313 @@ export const upload = function (sliderObject, sliderGroupController, drawGraph,
610
117
  }).append($("<input></input>").attr({
611
118
  type: "hidden",
612
119
  name: "filename",
613
- value: networkFilename
120
+ value: workbookFilename
614
121
  })).append($("<input></input>").attr({
615
122
  type: "hidden",
616
- name: "network",
617
- value: JSON.stringify(networkToExport)
123
+ name: "workbook",
124
+ value: JSON.stringify(workbookToExport)
618
125
  }));
619
126
  $("body").append(exportForm);
620
127
  exportForm.submit();
621
128
  exportForm.remove();
622
129
  }
623
- };
130
+ $("#exportExcelModal").modal("hide");
131
+ } else {
132
+ // source is from database so lets query her up
133
+ for (let sheet of chosenSheets) {
134
+ let queryURL = buildURL({ dataset: sheet });
135
+ responseData("", queryURL).then(function (response) {
136
+ exportSheets[sheet] = response;
137
+ if (exportSheets[sheet]) {
138
+ stopLoadingIcon();
139
+ if (Object.keys(exportSheets).length === chosenSheets.length) {
140
+ // we have all of the sheets so lets initilize the export process
141
+ const finalExportSheets = {};
142
+ Object.keys(exportSheets).forEach((sheet) => {
143
+ // make sure that the sheets we queried are populated with the correct data
144
+ if (exportSheets[sheet].data && exportSheets[sheet].timePoints) {
145
+ // if the resulting query contains both the timePoint data and
146
+ // the gene data then export it. If not don't :)
147
+ finalExportSheets[sheet] = exportSheets[sheet];
148
+ }
149
+ });
150
+ grnState.workbook.exportExpression = finalExportSheets;
151
+ if (!$(this).parent().hasClass("disabled")) {
152
+ var workbookToExport = flattenWorkbook(uploadState.currentWorkbook, sheetType);
153
+ var workbookFilename = filenameWithExtension(sheetType !== uploadState.currentWorkbook.sheetType ?
154
+ sheetType : "", extension);
155
+ workbookToExport.filename = workbookFilename;
156
+ var exportForm = $("<form></form>").attr({
157
+ method: "POST",
158
+ action: $("#service-root").val() + "/" + route
159
+ }).append($("<input></input>").attr({
160
+ type: "hidden",
161
+ name: "filename",
162
+ value: workbookFilename
163
+ })).append($("<input></input>").attr({
164
+ type: "hidden",
165
+ name: "workbook",
166
+ value: JSON.stringify(workbookToExport)
167
+ }));
168
+ $("body").append(exportForm);
169
+ exportForm.submit();
170
+ exportForm.remove();
171
+ }
172
+ $("#exportExcelModal").modal("hide");
173
+ }
174
+ }
175
+ }).catch(function (error) {
176
+ console.log(error.stack);
177
+ console.log(error.name);
178
+ console.log(error.message);
179
+ });
180
+ }
181
+ }
624
182
  };
625
183
 
626
- $("#exportAsUnweightedSif").click(performExport("export-to-sif", "sif", "unweighted"));
627
- $("#exportAsWeightedSif").click(performExport("export-to-sif", "sif", "weighted"));
628
- $("#exportAsUnweightedGraphMl").click(performExport("export-to-graphml", "graphml", "unweighted"));
629
- $("#exportAsWeightedGraphMl").click(performExport("export-to-graphml", "graphml", "weighted"));
184
+ var performExport = function (route, extension, sheetType, source) {
185
+ return function () {
186
+ // Deleted event parameter
187
+ if (route === "export-to-excel" && source) {
188
+ handleExportExcelButtonExport(route, extension, sheetType, source);
189
+ } else {
190
+ if (!$(this).parent().hasClass("disabled")) {
191
+ var workbookToExport = flattenWorkbook(uploadState.currentWorkbook, sheetType);
192
+ var workbookFilename = filenameWithExtension(sheetType !== uploadState.currentWorkbook.sheetType ?
193
+ sheetType : "", extension);
194
+ workbookToExport.filename = workbookFilename;
195
+
196
+ var exportForm = $("<form></form>").attr({
197
+ method: "POST",
198
+ action: $("#service-root").val() + "/" + route
199
+ }).append($("<input></input>").attr({
200
+ type: "hidden",
201
+ name: "filename",
202
+ value: workbookFilename
203
+ })).append($("<input></input>").attr({
204
+ type: "hidden",
205
+ name: "workbook",
206
+ value: JSON.stringify(workbookToExport)
207
+ }));
208
+ $("body").append(exportForm);
209
+ exportForm.submit();
210
+ exportForm.remove();
211
+ }
630
212
 
631
- $("#reload").click(function () {
632
- // Deleted event parameter
633
- if (!$(this).parent().hasClass("disabled")) {
634
- if ($.isFunction(reloader)) {
635
- reloader();
636
213
  }
214
+ };
215
+ };
216
+
217
+ const createHTMLforForm1 = () => {
218
+ return `
219
+ <form id=\'exportExcelForm1\'>
220
+ <div class=\'form-group\'>
221
+ <p id=\'exportExcelNetwork\'></p>
222
+ <ul class=\'export-radio-group\' id=\'export-excel-weights-list\' style=\"list-style-type:none;\"> </ul>
223
+ </div>
224
+ <div class=\'form-group\'>
225
+ <p id=\'exportExcelExpressionSources\'> </p>
226
+ <ul class=\'export-radio-group\' id=\'export-excel-expression-source-list\' style=\"list-style-type:none;\">
227
+ <li>
228
+ <input type=\'radio\' name=\'expressionSource\' checked=\"true\" value=\"userInput\" id=\'exportExcelExpressionSource-userInputRadio\' class=\'export-radio\' />
229
+ <label for=\'exportExcelExpressionSource-userInputRadio\' id=\'exportExcelExpressionSource-userInput\' class=\'export-radio-label\'> </label>
230
+ </li>
231
+ <li>
232
+ <input type=\'radio\' name=\'expressionSource\' value=\"Dahlquist_2018\" id=\'exportExcelExpressionSource-DahlquistRadio\' class=\'export-radio\' />
233
+ <label for=\'exportExcelExpressionSource-DahlquistRadio\' id=\'exportExcelExpressionSource-Dahlquist\' class=\'export-radio-label\'> </label>
234
+ </li>
235
+ <li>
236
+ <input type=\'radio\' name=\'expressionSource\' value=\"Kitagawa_2002\" id=\'exportExcelExpressionSource-KitagawaRadio\' class=\'export-radio\' />
237
+ <label for=\'exportExcelExpressionSource-KitagawaRadio\' id=\'exportExcelExpressionSource-Kitagawa\' class=\'export-radio-label\'> </label>
238
+ </li>
239
+ <li>
240
+ <input type=\'radio\' name=\'expressionSource\' value=\"Thorsen_2007\" id=\'exportExcelExpressionSource-ThorsenRadio\' class=\'export-radio\' />
241
+ <label for=\'exportExcelExpressionSource-ThorsenRadio\' id=\'exportExcelExpressionSource-Thorsen\' class=\'export-radio-label\'> </label>
242
+ </li>
243
+ <li>
244
+ <input type=\'radio\' name=\'expressionSource\' value=\"Barreto_2012\" id=\'exportExcelExpressionSource-BarretoRadio\' class=\'export-radio\' />
245
+ <label for=\'exportExcelExpressionSource-BarretoRadio\' id=\'exportExcelExpressionSource-Barreto\' class=\'export-radio-label\'> </label>
246
+ </li>
247
+ </ul>
248
+ </div>
249
+ <button type=\'submit\' class=\'btn btn-default\' id=\'exportExcelContinueButton\'> Continue </button>
250
+ </form>
251
+ `;
252
+ };
253
+
254
+ const createHTMLforForm2 = () => {
255
+ return `
256
+ <form id=\'exportExcelForm2\'>
257
+ <div class=\'form-group\'>
258
+ <p id=\'exportExcelExpressionSheets\'></p>
259
+ <ul class=\'exportExcelExpressionSheets\' id=\'export-excel-expression-sheet-list\' style=\"list-style-type:none;\"> </ul>
260
+ </div>
261
+ <input type=\'button\' class=\'btn btn-default\' id=\'exportExcelButton\' value=\'Export Workbook\' />
262
+ </form>
263
+ `;
264
+ };
265
+ const createHTMLforWeights = () => {
266
+ $(".export-excel-weighted-option").remove();
267
+ if (grnState.workbook.sheetType !== "weighted") {
268
+ return `
269
+ <li class=\'export-excel-weighted-option\'>
270
+ <input type=\'radio\' checked=\"true\" name=\'network-weights\' value=\"unweighted\" id=\'exportExcelUnweightedRadio\' class=\'export-radio\' />
271
+ <label for=\'exportExcelUnweightedRadio\' id=\'exportExcelUnweighted\' class=\'export-radio-label\' >
272
+ Unweighted
273
+ </label>
274
+ </li>`;
275
+ } else {
276
+ return `
277
+ <li class=\'export-excel-weighted-option\'>
278
+ <input type=\'radio\' checked=\"true\" name=\'network-weights\' value=\"weighted\" id=\'exportExcelWeightedRadio\' class=\'export-radio\' />
279
+ <label for=\'exportExcelWeightedRadio\' id=\'exportExcelWeighted\' class=\'export-radio-label\' >
280
+ Weighted
281
+ </label>
282
+ </li>
283
+ <li class=\'export-excel-weighted-option\'>
284
+ <input type=\'radio\' name=\'network-weights\' value=\"unweighted\" id=\'exportExcelUnweightedRadio\' class=\'export-radio\' />
285
+ <label for=\'exportExcelUnweightedRadio\' id=\'exportExcelUnweighted\' class=\'export-radio-label\' >
286
+ Unweighted
287
+ </label>
288
+ </li>
289
+ `;
637
290
  }
638
- });
291
+ };
639
292
 
640
- // Prevent Bootstrap dropdown from closing on clicks in menu input boxes
641
- // https://stackoverflow.com/a/27759926
642
- $(".dropdown").on({
643
- "click": function (event) {
644
- if ($(event.target).hasClass("keepopen")) {
645
- $(this).data("closable", $(event.target).closest(".dropdown-toggle").length !== 0);
293
+ const createHTMLforExpressionSheets = (source) => {
294
+ $(".export-excel-expression-sheet-option").remove();
295
+ // check if user updated data is selected
296
+ let result = `
297
+ <li class=\'export-excel-expression-sheet-option\'>
298
+ <input type=\'checkbox\' name=\'expressionSheets\' checked=\"true\" value=\"select all\" id=\'exportExcelExpression-All\' class=\'export-checkbox\' />
299
+ <label for=\'exportExcelExpression-All\' id=\'exportExcelExpression-All-label\' class=\'export-checkbox-label\' >
300
+ All Expression Sheets
301
+ </label>
302
+ </li>
303
+ `;
304
+ if (source === "userInput") {
305
+ for (let expression in grnState.workbook.expression) {
306
+ result = result + `
307
+ <li class=\'export-excel-expression-sheet-option\'>
308
+ <input type=\'checkbox\' name=\'expressionSheets\' checked=\"true\" value=\"${expression}\" id=\'exportExcelExpression-${expression}\' class=\'export-checkbox\' />
309
+ <label for=\'exportExcelExpression-${expression}\' id=\'exportExcelExpression-${expression}-label\' class=\'export-checkbox-label\' >
310
+ ${expression}
311
+ </label>
312
+ </li>
313
+ `;
646
314
  }
647
- },
648
- "hide.bs.dropdown": function () {
649
- var hide = $(this).data("closable");
650
- $(this).data("closable", true);
651
- return hide;
315
+ } else if (source === "Dahlquist_2018") {
316
+ // if the source is from a database
317
+ result = result + `
318
+ <li class=\'export-excel-expression-sheet-option\'>
319
+ <input type=\'checkbox\' name=\'expressionSheets\' checked=\"true\" value=\"Dahlquist_2018_dcin5\" id=\'exportExcelExpression-Dahlquist_2018_dcin5\' class=\'export-checkbox\' />
320
+ <label for=\'exportExcelExpression-Dahlquist_2018_dcin5\' id=\'exportExcelExpression-Dahlquist_2018_dcin5-label\' class=\'export-checkbox-label\' >
321
+ Dahlquist_2018_dcin5
322
+ </label>
323
+ </li>
324
+ <li class=\'export-excel-expression-sheet-option\'>
325
+ <input type=\'checkbox\' checked=\"true\" name=\'expressionSheets\' value=\"Dahlquist_2018_dgln3\" id=\'exportExcelExpression-Dahlquist_2018_dgln3\' class=\'export-checkbox\' />
326
+ <label for=\'exportExcelExpression-Dahlquist_2018_dgln3\' id=\'exportExcelExpression-Dahlquist_2018_dgln3-label\' class=\'export-checkbox-label\' >
327
+ Dahlquist_2018_dgln3
328
+ </label>
329
+ </li>
330
+ <li class=\'export-excel-expression-sheet-option\'>
331
+ <input type=\'checkbox\' checked=\"true\" name=\'expressionSheets\' value=\"Dahlquist_2018_dhap4\" id=\'exportExcelExpression-Dahlquist_2018_dhap4\' class=\'export-checkbox\' />
332
+ <label for=\'exportExcelExpression-Dahlquist_2018_dhap4\' id=\'exportExcelExpression-Dahlquist_2018_dhap4-label\' class=\'export-checkbox-label\' >
333
+ Dahlquist_2018_dhap4
334
+ </label>
335
+ </li>
336
+ <li class=\'export-excel-expression-sheet-option\'>
337
+ <input type=\'checkbox\' checked=\"true\" name=\'expressionSheets\' value=\"Dahlquist_2018_dzap1\" id=\'exportExcelExpression-Dahlquist_2018_dzap1\' class=\'export-checkbox\' />
338
+ <label for=\'exportExcelExpression-Dahlquist_2018_dzap1\' id=\'exportExcelExpression-Dahlquist_2018_dzap1-label\' class=\'export-checkbox-label\' >
339
+ Dahlquist_2018_dzap1
340
+ </label>
341
+ </li>
342
+ <div class=\'expression-db-loader\'></div>
343
+ <div class=\'expression-db-loader-text\'>Expression Database is Loading</div>
344
+ `;
345
+ } else if (source === "Kitagawa_2002") {
346
+ // if the source is from a database
347
+ result = result + `
348
+ <li class=\'export-excel-expression-sheet-option\'>
349
+ <input type=\'checkbox\' checked=\"true\" name=\'expressionSheets\' value=\"Kitagawa_2002_wt\" id=\'exportExcelExpression-Kitagawa_2002_wt\' class=\'export-checkbox\' />
350
+ <label for=\'exportExcelExpression-Kitagawa_2002_wt\' id=\'exportExcelExpression-Kitagawa_2002_wt-label\' class=\'export-checkbox-label\' >
351
+ Kitagawa_2002_wt
352
+ </label>
353
+ </li>
354
+ <div class=\'expression-db-loader\'></div>
355
+ <div class=\'expression-db-loader-text\'>Expression Database is Loading</div>
356
+ `;
357
+ } else if (source === "Thorsen_2007") {
358
+ // if the source is from a database
359
+ result = result + `
360
+ <li class=\'export-excel-expression-sheet-option\'>
361
+ <input type=\'checkbox\' checked=\"true\" name=\'expressionSheets\' value=\"Thorsen_2007_wt\" id=\'exportExcelExpression-Thorsen_2007_wt\' class=\'export-checkbox\' />
362
+ <label for=\'exportExcelExpression-Thorsen_2007_wt\' id=\'exportExcelExpression-Thorsen_2007_wt-label\' class=\'export-checkbox-label\' >
363
+ Thorsen_2007_wt
364
+ </label>
365
+ </li>
366
+ <div class=\'expression-db-loader\'></div>
367
+ <div class=\'expression-db-loader-text\'>Expression Database is Loading</div>
368
+ `;
369
+ } else if (source === "Barreto_2012") {
370
+ // if the source is from a database
371
+ result = result + `
372
+ <li class=\'export-excel-expression-sheet-option\'>
373
+ <input type=\'checkbox\' checked=\"true\" name=\'expressionSheets\' value=\"Barreto_2012_wt\" id=\'exportExcelExpression-Barreto_2012_wt\' class=\'export-checkbox\' />
374
+ <label for=\'exportExcelExpression-Barreto_2012_wt\' id=\'exportExcelExpression-Barreto_2012_wt-label\' class=\'export-checkbox-label\' >
375
+ Barreto_2012_wt
376
+ </label>
377
+ </li>
378
+ <div class=\'expression-db-loader\'></div>
379
+ <div class=\'expression-db-loader-text\'>Expression Database is Loading</div>
380
+ `;
652
381
  }
653
- });
382
+ return result;
383
+ };
384
+
385
+ const handleExportExcelButtonContinue = () => {
386
+ const weight = $("input[name=network-weights]:checked")[0].value;
387
+ const source = $("input[name=expressionSource]:checked")[0].value;
388
+ $("#exportExcelForm1").remove();
389
+ // $("#exportExcelForm1")[0].style = "display:none;";
390
+ $("#exportExcelQuestions-containter").append(createHTMLforForm2);
391
+ $("#exportExcelExpressionSheets").html("Select Expression Sheets:");
392
+ $("#export-excel-expression-sheet-list").append(createHTMLforExpressionSheets(source));
393
+ $("#exportExcelButton").on("click", performExport("export-to-excel", "xlsx", weight, source));
394
+ };
395
+
396
+ var displayExportExcelModal = function () {
397
+ $("#exportExcelForm2").remove();
398
+ $("#exportExcelQuestions-containter").append(createHTMLforForm1);
399
+ $("#exportExcelNetwork").html("Select the workbooks export type:");
400
+ $("#export-excel-weights-list").append(createHTMLforWeights());
401
+
402
+ $("#exportExcelExpressionSources").html("Select the Expression Data Source:");
403
+ $("#exportExcelExpressionSource-userInput").html(grnState.name);
404
+ $("#exportExcelExpressionSource-Dahlquist").html("Dahlquist_2018");
405
+ $("#exportExcelExpressionSource-Kitagawa").html("Kitagawa_2002");
406
+ $("#exportExcelExpressionSource-Thorsen").html("Thorsen_2007");
407
+ $("#exportExcelExpressionSource-Barreto").html("Barreto_2012");
408
+ $("#exportExcelContinueButton").on("click", () => handleExportExcelButtonContinue());
409
+ $("#exportExcelModal").modal("show");
410
+ };
411
+
412
+ var performExcelExport = function () {
413
+ return function () {
414
+ if (!$(this).parent().hasClass("disabled")) {
415
+ displayExportExcelModal();
416
+ }
417
+ };
418
+ };
419
+
420
+ // $("#exportAsExcelWkbk").click(performExport("export-to-excel", "xlsx", "unweighted"));
421
+ $("#exportAsUnweightedSif").on("click", performExport("export-to-sif", "sif", "unweighted"));
422
+ $("#exportAsWeightedSif").on("click", performExport("export-to-sif", "sif", "weighted"));
423
+ $("#exportAsUnweightedGraphMl").on("click", performExport("export-to-graphml", "graphml", "unweighted"));
424
+ $("#exportAsWeightedGraphMl").on("click", performExport("export-to-graphml", "graphml", "weighted"));
425
+ // $("#exportAsUnweightedExcel").on("click", performExport("export-to-excel", "xlsx", "unweighted"));
426
+ // $("#exportAsWeightedExcel").on("click", performExport("export-to-excel", "xlsx", "weighted"));
427
+ $("#exportAsExcel").on("click", performExcelExport());
654
428
 
655
429
  };