grnsight 4.0.0 → 6.0.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 (458) hide show
  1. package/.travis.yml +3 -1
  2. package/GRNsight - Beta.html +194 -0
  3. package/Gemfile.lock +259 -0
  4. package/README.md +2 -2
  5. package/_gh_pages/about.html +360 -45
  6. package/_gh_pages/assets/css/footer.css +3 -0
  7. package/_gh_pages/assets/css/main.css +28 -14
  8. package/_gh_pages/assets/images/21-genes_31-edges_Schade-data_estimation_output_binary-no-targetless-genes_sif.png +0 -0
  9. package/_gh_pages/assets/images/21-genes_31-edges_Schade-data_estimation_output_binary_sif.png +0 -0
  10. package/_gh_pages/assets/images/21-genes_31-edges_Schade-data_graphml_3-edges-and-footer.png +0 -0
  11. package/_gh_pages/assets/images/21-genes_31-edges_Schade-data_graphml_header-and-3-nodes.png +0 -0
  12. package/_gh_pages/assets/images/21-genes_31-edges_Schade-data_graphml_output_3-edges-and-footer.png +0 -0
  13. package/_gh_pages/assets/images/21-genes_31-edges_Schade-data_graphml_output_header-and-3-nodes.png +0 -0
  14. package/_gh_pages/assets/images/21-genes_31-edges_Schade-data_input_binary-no-targetless-genes_sif.png +0 -0
  15. package/_gh_pages/assets/images/21-genes_31-edges_Schade-data_input_binary_sif.png +0 -0
  16. package/_gh_pages/assets/images/21-genes_31-edges_Schade-data_input_concatenated-no-targetless-genes_sif.png +0 -0
  17. package/_gh_pages/assets/images/21-genes_31-edges_Schade-data_input_concatenated_sif.png +0 -0
  18. package/_gh_pages/assets/images/Choe-Shin_CMSI402-poster-session_20180430.jpg +0 -0
  19. package/_gh_pages/assets/images/Choe_SCCUR_2017.jpg +0 -0
  20. package/_gh_pages/assets/images/Dahlquist-Choe-Shin_CMSI402-poster-session_20180430.jpg +0 -0
  21. package/_gh_pages/assets/images/Dionisio-Dahlquist_GRNsight-shades_20170506.jpg +0 -0
  22. package/_gh_pages/assets/images/Klein_Samdarshi_TriBeta_2018_20180317.jpg +0 -0
  23. package/_gh_pages/assets/images/Shin_SCCUR_2017.jpg +0 -0
  24. 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
  25. 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
  26. package/_gh_pages/assets/images/gene-pages-0.png +0 -0
  27. package/_gh_pages/assets/images/gene-pages-1.png +0 -0
  28. package/_gh_pages/assets/images/gene-pages-2.png +0 -0
  29. package/_gh_pages/assets/images/gene-pages-3.png +0 -0
  30. package/_gh_pages/assets/images/grnsight2020.png +0 -0
  31. package/_gh_pages/assets/images/v3demo2-grid+nodecoloring.png +0 -0
  32. package/_gh_pages/assets/images/v3demo2-nodecoloring.png +0 -0
  33. package/_gh_pages/assets/images/v3demo2.png +0 -0
  34. package/_gh_pages/assets/js/ga-report.js +11 -11
  35. package/_gh_pages/assets/js/iframeResizer.min.js +9 -0
  36. package/_gh_pages/assets/js/main.js +43 -43
  37. package/_gh_pages/beta.html +29 -24
  38. package/_gh_pages/contact.html +31 -31
  39. package/_gh_pages/coverage/coverage.json +1 -0
  40. package/_gh_pages/coverage/coverage.raw.json +1 -0
  41. package/_gh_pages/coverage/lcov-report/base.css +223 -0
  42. package/_gh_pages/coverage/lcov-report/block-navigation.js +63 -0
  43. package/_gh_pages/coverage/lcov-report/controllers/additional-sheet-parser.js.html +330 -0
  44. package/_gh_pages/coverage/lcov-report/controllers/constants.js.html +243 -0
  45. package/_gh_pages/coverage/lcov-report/controllers/export-controller.js.html +285 -0
  46. package/_gh_pages/coverage/lcov-report/controllers/exporters/graphml.js.html +405 -0
  47. package/_gh_pages/coverage/lcov-report/controllers/exporters/index.html +110 -0
  48. package/_gh_pages/coverage/lcov-report/controllers/exporters/sif.js.html +150 -0
  49. package/_gh_pages/coverage/lcov-report/controllers/helpers.js.html +114 -0
  50. package/_gh_pages/coverage/lcov-report/controllers/import-controller.js.html +233 -0
  51. package/_gh_pages/coverage/lcov-report/controllers/importers/graphml.js.html +716 -0
  52. package/_gh_pages/coverage/lcov-report/controllers/importers/index.html +106 -0
  53. package/_gh_pages/coverage/lcov-report/controllers/importers/sif.js.html +488 -0
  54. package/_gh_pages/coverage/lcov-report/controllers/index.html +162 -0
  55. package/_gh_pages/coverage/lcov-report/controllers/semantic-checker.js.html +810 -0
  56. package/_gh_pages/coverage/lcov-report/controllers/spreadsheet-controller.js.html +1779 -0
  57. package/_gh_pages/coverage/lcov-report/index.html +136 -0
  58. package/_gh_pages/coverage/lcov-report/prettify.css +1 -0
  59. package/_gh_pages/coverage/lcov-report/prettify.js +1 -0
  60. package/_gh_pages/coverage/lcov-report/server/controllers/additional-sheet-parser.js.html +330 -0
  61. package/_gh_pages/coverage/lcov-report/server/controllers/constants.js.html +243 -0
  62. package/_gh_pages/coverage/lcov-report/server/controllers/export-controller.js.html +285 -0
  63. package/_gh_pages/coverage/lcov-report/server/controllers/exporters/graphml.js.html +405 -0
  64. package/_gh_pages/coverage/lcov-report/server/controllers/exporters/index.html +110 -0
  65. package/_gh_pages/coverage/lcov-report/server/controllers/exporters/sif.js.html +150 -0
  66. package/_gh_pages/coverage/lcov-report/server/controllers/graphml-constants.js.html +585 -0
  67. package/_gh_pages/coverage/lcov-report/server/controllers/helpers.js.html +114 -0
  68. package/_gh_pages/coverage/lcov-report/server/controllers/import-controller.js.html +237 -0
  69. package/_gh_pages/coverage/lcov-report/server/controllers/importers/graphml.js.html +585 -0
  70. package/_gh_pages/coverage/lcov-report/server/controllers/importers/index.html +110 -0
  71. package/_gh_pages/coverage/lcov-report/server/controllers/importers/sif.js.html +492 -0
  72. package/_gh_pages/coverage/lcov-report/server/controllers/index.html +188 -0
  73. package/_gh_pages/coverage/lcov-report/server/controllers/semantic-checker.js.html +810 -0
  74. package/_gh_pages/coverage/lcov-report/server/controllers/spreadsheet-controller.js.html +1779 -0
  75. package/_gh_pages/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  76. package/_gh_pages/coverage/lcov-report/sorter.js +158 -0
  77. package/_gh_pages/coverage/lcov-report/web-client/public/js/grnstate.js.html +225 -0
  78. package/_gh_pages/coverage/lcov-report/web-client/public/js/index.html +97 -0
  79. package/_gh_pages/coverage/lcov.info +49 -0
  80. package/_gh_pages/documentation.html +998 -320
  81. package/_gh_pages/documents/abstracts/SIGGRAPH 2017 Abstract/siggraph-abstract-review.aux +47 -0
  82. package/_gh_pages/documents/abstracts/SIGGRAPH 2017 Abstract/siggraph-abstract-review.bbl +73 -0
  83. package/_gh_pages/documents/abstracts/SIGGRAPH 2017 Abstract/siggraph-abstract-review.blg +52 -0
  84. package/_gh_pages/documents/abstracts/SIGGRAPH 2017 Abstract/siggraph-abstract-review.log +1056 -0
  85. package/_gh_pages/documents/abstracts/SIGGRAPH 2017 Abstract/siggraph-abstract-review.out +7 -0
  86. package/_gh_pages/documents/abstracts/SIGGRAPH 2017 Abstract/siggraph-abstract-review.synctex.gz +0 -0
  87. package/_gh_pages/documents/manuscripts/peerj-computerscience-2016/revisions/GRNsight_PeerJ-CS_manuscript_2016_text-only_revised-Dondi.docx +0 -0
  88. package/_gh_pages/encryption/server.cert +21 -0
  89. package/_gh_pages/encryption/server.key +28 -0
  90. package/_gh_pages/favicon.ico +0 -0
  91. package/_gh_pages/index.html +45 -22
  92. package/_gh_pages/links.html +47 -28
  93. package/_gh_pages/news.html +103 -21
  94. package/_gh_pages/onlyfooter.html +78 -0
  95. package/_gh_pages/onlyheader.html +64 -0
  96. package/_gh_pages/onlysidebar.html +73 -0
  97. package/_gh_pages/package-lock.json +14048 -0
  98. package/_gh_pages/people.html +129 -40
  99. package/_gh_pages/privacy.html +23 -17
  100. package/_gh_pages/publications.html +75 -33
  101. package/_gh_pages/robots.txt +1 -0
  102. package/_gh_pages/sitemap.xml +87 -74
  103. package/_gh_pages/test-files/import-samples/attributes.graphml +40 -0
  104. package/_gh_pages/test-files/import-samples/port.graphml +32 -0
  105. package/_gh_pages/test-files/import-samples/simple.graphml +31 -0
  106. package/_gh_pages/web-client/public/js/grnsight.min.js +2347 -0
  107. package/_gh_pages/web-client/public/stylesheets/grnsight.css +443 -0
  108. package/coverage/coverage.json +1 -1
  109. package/coverage/lcov.info +1847 -1142
  110. package/database/README.md +1 -0
  111. package/database/network-database/README.md +44 -0
  112. package/database/network-database/schema.sql +24 -0
  113. package/database/network-database/scripts/filter_genes.py +76 -0
  114. package/database/network-database/scripts/generate_network.py +199 -0
  115. package/database/network-database/scripts/generate_sgd_network_from_yeastract_network.py +120 -0
  116. package/database/network-database/scripts/loader.py +78 -0
  117. package/package.json +20 -11
  118. package/server/app.js +7 -2
  119. package/server/config/config.js +12 -3
  120. package/server/controllers/additional-sheet-parser.js +292 -55
  121. package/server/controllers/constants.js +4 -37
  122. package/server/controllers/custom-workbook-controller.js +66 -0
  123. package/server/controllers/demo-workbooks.js +5973 -0
  124. package/server/controllers/export-constants.js +78 -0
  125. package/server/controllers/export-controller.js +4 -3
  126. package/server/controllers/exporters/graphml.js +15 -15
  127. package/server/controllers/exporters/sif.js +7 -7
  128. package/server/controllers/exporters/xlsx.js +110 -34
  129. package/server/controllers/expression-database-controller.js +19 -0
  130. package/server/controllers/expression-sheet-parser.js +170 -0
  131. package/server/controllers/graphml-constants.js +0 -17
  132. package/server/controllers/helpers.js +25 -1
  133. package/server/controllers/import-controller.js +2 -2
  134. package/server/controllers/importers/graphml.js +17 -20
  135. package/server/controllers/importers/sif.js +22 -18
  136. package/server/controllers/network-database-controller.js +18 -0
  137. package/server/controllers/network-sheet-parser.js +307 -0
  138. package/server/controllers/semantic-checker.js +30 -162
  139. package/server/controllers/sif-constants.js +36 -0
  140. package/server/controllers/spreadsheet-controller.js +277 -425
  141. package/server/controllers/workbook-constants.js +521 -0
  142. package/server/dals/expression-dal.js +122 -0
  143. package/server/dals/network-dal.js +96 -0
  144. package/test/additional-sheet-parser-tests.js +147 -38
  145. package/test/api-tests.js +3 -6
  146. package/test/errors-adjacency-matrix-modifications.js +30 -29
  147. package/test/errors-graph-tests.js +4 -4
  148. package/test/errors-sheet-modifications.js +10 -2
  149. package/test/export-tests.js +187 -60
  150. package/test/expression-data-import-tests.js +113 -0
  151. package/test/grnstate-tests.js +8 -2
  152. package/test/import-graphml-tests.js +59 -40
  153. package/test/import-sif-tests.js +50 -37
  154. package/test/test.js +554 -91
  155. package/test/warnings-adjacency-matrix-modifications.js +8 -7
  156. package/test-files/additional-sheet-test-files/optimization-diagnostics-default.xlsx +0 -0
  157. package/test-files/additional-sheet-test-files/optimization-diagnostics-extraneous-data.xlsx +0 -0
  158. package/test-files/additional-sheet-test-files/optimization-diagnostics-incorrect-MSE-gene-header.xlsx +0 -0
  159. package/test-files/additional-sheet-test-files/optimization-diagnostics-incorrect-MSE-header.xlsx +0 -0
  160. package/test-files/additional-sheet-test-files/optimization-diagnostics-incorrect-column-headers.xlsx +0 -0
  161. package/test-files/additional-sheet-test-files/optimization-diagnostics-invalid-MSE-data.xlsx +0 -0
  162. package/test-files/additional-sheet-test-files/optimization-diagnostics-invalid-value.xlsx +0 -0
  163. package/test-files/additional-sheet-test-files/optimization-diagnostics-missing-MSE-data.xlsx +0 -0
  164. package/test-files/additional-sheet-test-files/optimization-diagnostics-missing-column-headers.xlsx +0 -0
  165. package/test-files/additional-sheet-test-files/optimization-diagnostics-missing-header.xlsx +0 -0
  166. package/test-files/additional-sheet-test-files/optimization-diagnostics-unknown-parameter.xlsx +0 -0
  167. package/test-files/additional-sheet-test-files/optimization-parameters-default.xlsx +0 -0
  168. package/test-files/additional-sheet-test-files/optimization-parameters-incorrect-headers.xlsx +0 -0
  169. package/test-files/additional-sheet-test-files/optimization-parameters-invalid-optimization-parameter.xlsx +0 -0
  170. package/test-files/additional-sheet-test-files/optimization-parameters-missing-headers.xlsx +0 -0
  171. package/test-files/additional-sheet-test-files/optimization-parameters-unknown-parameter.xlsx +0 -0
  172. package/test-files/additional-sheet-test-files/two-column-sheets-extraneous-data.xlsx +0 -0
  173. package/test-files/additional-sheet-test-files/two-column-sheets-incorrect-cell-A1.xlsx +0 -0
  174. package/test-files/additional-sheet-test-files/two-column-sheets-incorrect-column-header.xlsx +0 -0
  175. package/test-files/additional-sheet-test-files/two-column-sheets-invalid-gene-length.xlsx +0 -0
  176. package/test-files/additional-sheet-test-files/two-column-sheets-invalid-gene-type.xlsx +0 -0
  177. package/test-files/additional-sheet-test-files/two-column-sheets-invalid-value.xlsx +0 -0
  178. package/test-files/additional-sheet-test-files/two-column-sheets-missing-column-header.xlsx +0 -0
  179. package/test-files/additional-sheet-test-files/two-column-sheets-special-character.xlsx +0 -0
  180. package/test-files/adjacency-matrix-modifications/asymmetric-gene-order-input.xlsx +0 -0
  181. package/test-files/adjacency-matrix-modifications/asymmetric-gene-order-output.xlsx +0 -0
  182. package/test-files/adjacency-matrix-modifications/extra-column-adjacent-input.xlsx +0 -0
  183. package/test-files/adjacency-matrix-modifications/extra-column-adjacent-output.xlsx +0 -0
  184. package/test-files/adjacency-matrix-modifications/extra-column-end-of-sheet-input.xlsx +0 -0
  185. package/test-files/adjacency-matrix-modifications/extra-column-end-of-sheet-output.xlsx +0 -0
  186. package/test-files/adjacency-matrix-modifications/extra-data-random-cell-both-output.xlsx +0 -0
  187. package/test-files/adjacency-matrix-modifications/extra-data-random-cell-network-only-input.xlsx +0 -0
  188. package/test-files/adjacency-matrix-modifications/extra-data-random-cell-network-only-output.xlsx +0 -0
  189. package/test-files/adjacency-matrix-modifications/extra-data-random-cell-network-optimized-only-output.xlsx +0 -0
  190. package/test-files/adjacency-matrix-modifications/extra-row-end-of-sheet-input.xlsx +0 -0
  191. package/test-files/adjacency-matrix-modifications/extra-row-end-of-sheet-output.xlsx +0 -0
  192. package/test-files/adjacency-matrix-modifications/incorrect-network-cell-A1.xlsx +0 -0
  193. package/test-files/adjacency-matrix-modifications/missing-column-end-input.xlsx +0 -0
  194. package/test-files/adjacency-matrix-modifications/missing-column-end-output.xlsx +0 -0
  195. package/test-files/adjacency-matrix-modifications/missing-data-input.xlsx +0 -0
  196. package/test-files/adjacency-matrix-modifications/missing-data-output.xlsx +0 -0
  197. package/test-files/adjacency-matrix-modifications/missing-row-end-input.xlsx +0 -0
  198. package/test-files/adjacency-matrix-modifications/missing-row-end-output.xlsx +0 -0
  199. package/test-files/adjacency-matrix-modifications/missing-row-middle-input.xlsx +0 -0
  200. package/test-files/adjacency-matrix-modifications/missing-row-middle-output.xlsx +0 -0
  201. package/test-files/adjacency-matrix-modifications/missing-value-bottom-corner-input.xlsx +0 -0
  202. package/test-files/adjacency-matrix-modifications/missing-value-bottom-corner-output.xlsx +0 -0
  203. package/test-files/adjacency-matrix-modifications/value-replaced-w-spaces-both-output.xlsx +0 -0
  204. package/test-files/adjacency-matrix-modifications/value-replaced-w-spaces-net-only-input.xlsx +0 -0
  205. package/test-files/adjacency-matrix-modifications/value-replaced-w-spaces-net-op-only-output.xlsx +0 -0
  206. package/test-files/adjacency-matrix-modifications/value-replaced/342/200/223w-spaces-net-only-output.xlsx +0 -0
  207. package/test-files/demo-files/15-genes_28-edges_db5_Dahlquist-data_estimation_output.xlsx +0 -0
  208. package/test-files/demo-files/15-genes_28-edges_db5_Dahlquist-data_input.xlsx +0 -0
  209. package/test-files/expression-data-test-sheets/expression_sheet_correct_numbering.xlsx +0 -0
  210. package/test-files/expression-data-test-sheets/expression_sheet_different_number_of_columns.xlsx +0 -0
  211. package/test-files/expression-data-test-sheets/expression_sheet_empty_column.xlsx +0 -0
  212. package/test-files/expression-data-test-sheets/expression_sheet_empty_row.xlsx +0 -0
  213. package/test-files/expression-data-test-sheets/expression_sheet_erroneous_data.xlsx +0 -0
  214. package/test-files/expression-data-test-sheets/expression_sheet_extra_gene_name.xlsx +0 -0
  215. package/test-files/expression-data-test-sheets/expression_sheet_incorrectly_ordered_time_points.xlsx +0 -0
  216. package/test-files/expression-data-test-sheets/expression_sheet_mismatched_case_gene_names.xlsx +0 -0
  217. package/test-files/expression-data-test-sheets/expression_sheet_mismatched_gene_names.xlsx +0 -0
  218. package/test-files/expression-data-test-sheets/expression_sheet_missing_column_header.xlsx +0 -0
  219. package/test-files/expression-data-test-sheets/expression_sheet_missing_data_error.xlsx +0 -0
  220. package/test-files/expression-data-test-sheets/expression_sheet_missing_data_ok.xlsx +0 -0
  221. package/test-files/expression-data-test-sheets/expression_sheet_missing_data_ok_export_exact.xlsx +0 -0
  222. package/test-files/expression-data-test-sheets/expression_sheet_missing_gene_name.xlsx +0 -0
  223. package/test-files/expression-data-test-sheets/expression_sheet_name_not_in_optparams.xlsx +0 -0
  224. package/test-files/expression-data-test-sheets/expression_sheet_name_not_present.xlsx +0 -0
  225. package/test-files/expression-data-test-sheets/expression_sheet_negative_time_points.xlsx +0 -0
  226. package/test-files/expression-data-test-sheets/expression_sheet_non_numerical_time_points.xlsx +0 -0
  227. package/test-files/expression-data-test-sheets/expression_sheet_not_existing.xlsx +0 -0
  228. package/test-files/expression-data-test-sheets/expression_sheet_wrong_id_label.xlsx +0 -0
  229. package/test-files/expression-data-test-sheets/expression_sheet_wrong_order_gene_names.xlsx +0 -0
  230. package/test-files/expression-data-test-sheets/expression_sheet_wrong_sheet_name_case.xlsx +0 -0
  231. package/test-files/expression-data-test-sheets/expression_sheet_wrong_sheet_name_convention.xlsx +0 -0
  232. package/test-files/gene-name-modifications/NaN-as-gene-name-input.xlsx +0 -0
  233. package/test-files/gene-name-modifications/NaN-as-gene-name-output.xlsx +0 -0
  234. package/test-files/gene-name-modifications/mismatched-case-related-input.xlsx +0 -0
  235. package/test-files/gene-name-modifications/mismatched-case-related-output.xlsx +0 -0
  236. package/test-files/gene-name-modifications/mismatched-case-unrelated-input.xlsx +0 -0
  237. package/test-files/gene-name-modifications/mismatched-case-unrelated-output.xlsx +0 -0
  238. package/test-files/graph-tests/different-sized-networks/{80-genes-0-edges.xlsx → 134-genes-0-edges.xlsx} +0 -0
  239. package/test-files/graph-tests/different-sized-networks/{45-genes-max-edges.xlsx → 44-source-genes-45-target-genes-max-edges.xlsx} +0 -0
  240. package/test-files/graph-tests/different-sized-networks/{1-gene-0-edges.xlsx → unused-files/1-gene-0-edges.xlsx} +0 -0
  241. package/test-files/graph-tests/different-sized-networks/{1-gene-1-edges.xlsx → unused-files/1-gene-1-edges.xlsx} +0 -0
  242. package/test-files/graph-tests/different-sized-networks/{10-genes-50-edges.xlsx → unused-files/10-genes-50-edges.xlsx} +0 -0
  243. package/test-files/graph-tests/different-sized-networks/{10-genes-90-edges.xlsx → unused-files/10-genes-90-edges.xlsx} +0 -0
  244. package/test-files/graph-tests/different-sized-networks/{100-genes-0-edges.xlsx → unused-files/100-genes-0-edges.xlsx} +0 -0
  245. package/test-files/graph-tests/different-sized-networks/{110-genes-0-edges.xlsx → unused-files/110-genes-0-edges.xlsx} +0 -0
  246. package/test-files/graph-tests/different-sized-networks/{120-genes-0-edges.xlsx → unused-files/120-genes-0-edges.xlsx} +0 -0
  247. package/test-files/graph-tests/different-sized-networks/{130-genes-0-edges.xlsx → unused-files/130-genes-0-edges.xlsx} +0 -0
  248. package/test-files/graph-tests/different-sized-networks/{140-genes-0-edges.xlsx → unused-files/140-genes-0-edges.xlsx} +0 -0
  249. package/test-files/graph-tests/different-sized-networks/{150-genes-10000-edges.xlsx → unused-files/150-genes-10000-edges.xlsx} +0 -0
  250. package/test-files/graph-tests/different-sized-networks/{150-genes-20000-edges.xlsx → unused-files/150-genes-20000-edges.xlsx} +0 -0
  251. package/test-files/graph-tests/different-sized-networks/{150-genes-max-edges.xlsx → unused-files/150-genes-max-edges.xlsx} +0 -0
  252. package/test-files/graph-tests/different-sized-networks/{160-genes-max-edges.xlsx → unused-files/160-genes-max-edges.xlsx} +0 -0
  253. package/test-files/graph-tests/different-sized-networks/{20-genes-max-edges.xlsx → unused-files/20-genes-max-edges.xlsx} +0 -0
  254. package/test-files/graph-tests/different-sized-networks/{25-genes-max-edges.xlsx → unused-files/25-genes-max-edges.xlsx} +0 -0
  255. package/test-files/graph-tests/different-sized-networks/{30-genes-max-edges.xlsx → unused-files/30-genes-max-edges.xlsx} +0 -0
  256. package/test-files/graph-tests/different-sized-networks/{34-genes-0-edges.xlsx → unused-files/34-genes-0-edges.xlsx} +0 -0
  257. package/test-files/graph-tests/different-sized-networks/{34-genes-40-edges.xlsx → unused-files/34-genes-40-edges.xlsx} +0 -0
  258. package/test-files/graph-tests/different-sized-networks/{34-genes-65-edges.xlsx → unused-files/34-genes-65-edges.xlsx} +0 -0
  259. package/test-files/graph-tests/different-sized-networks/{34-genes-90-edges.xlsx → unused-files/34-genes-90-edges.xlsx} +0 -0
  260. package/test-files/graph-tests/different-sized-networks/{5-genes-max-edges.xlsx → unused-files/5-genes-max-edges.xlsx} +0 -0
  261. package/test-files/graph-tests/different-sized-networks/{51-genes-max-edges.xlsx → unused-files/51-genes-max-edges.xlsx} +0 -0
  262. package/test-files/graph-tests/different-sized-networks/{52-genes-max-edges.xlsx → unused-files/52-genes-max-edges.xlsx} +0 -0
  263. package/test-files/graph-tests/different-sized-networks/{55-genes-0-edges.xlsx → unused-files/55-genes-0-edges.xlsx} +0 -0
  264. package/test-files/graph-tests/different-sized-networks/{55-genes-max-edges.xlsx → unused-files/55-genes-max-edges.xlsx} +0 -0
  265. package/test-files/graph-tests/different-sized-networks/{65-genes-0-edges.xlsx → unused-files/65-genes-0-edges.xlsx} +0 -0
  266. package/test-files/graph-tests/different-sized-networks/{7-genes-max-edges.xlsx → unused-files/7-genes-max-edges.xlsx} +0 -0
  267. package/test-files/graph-tests/different-sized-networks/{70-genes-0-edges.xlsx → unused-files/70-genes-0-edges.xlsx} +0 -0
  268. package/test-files/graph-tests/different-sized-networks/{9-genes-max-edges.xlsx → unused-files/9-genes-max-edges.xlsx} +0 -0
  269. package/test-files/graph-tests/different-sized-networks/{90-genes-0-edges.xlsx → unused-files/90-genes-0-edges.xlsx} +0 -0
  270. 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
  271. package/test-files/node-tests/long-gene-name-no-spaces-first.xlsx +0 -0
  272. package/test-files/node-tests/long-gene-name-no-spaces-second.xlsx +0 -0
  273. package/test-files/node-tests/long-gene-name-spaces.xlsx +0 -0
  274. package/test-files/species-test-data/15-genes_28-edges_db5_Dahlquist-data_input_no-species.xlsx +0 -0
  275. package/test-files/species-test-data/15-genes_28-edges_db5_Dahlquist-data_input_with-species.xlsx +0 -0
  276. package/test-files/species-test-data/3-gene_7-edge_elegans.xlsx +0 -0
  277. package/test-files/species-test-data/3-gene_7-edge_melanogaster.xlsx +0 -0
  278. package/test-files/species-test-data/3-gene_7-edge_musculus.xlsx +0 -0
  279. package/test-files/species-test-data/3-gene_7-edge_sapiens.xlsx +0 -0
  280. package/test-files/species-test-data/kev-fake-data-sapiens-no-exp-data.xlsx +0 -0
  281. package/test-files/spreadsheet-controller-test-files/sheet-name-capitalized-network-optimized-weights.xlsx +0 -0
  282. package/test-files/spreadsheet-controller-test-files/sheet-name-capitalized-network.xlsx +0 -0
  283. package/web-client/app.js +1 -1
  284. package/web-client/controllers/main.js +1 -1
  285. package/web-client/public/favicon.ico +0 -0
  286. package/web-client/public/gene/api.js +76 -14
  287. package/web-client/public/gene/info.js +19 -8
  288. package/web-client/public/js/api/grnsight-api.js +124 -0
  289. package/web-client/public/js/constants.js +90 -17
  290. package/web-client/public/js/createNetwork.js +195 -0
  291. package/web-client/public/js/graph-statistics.js +7 -7
  292. package/web-client/public/js/graph.js +369 -324
  293. package/web-client/public/js/grnsight.js +2 -2
  294. package/web-client/public/js/grnsight.min.js +128 -59
  295. package/web-client/public/js/grnstate.js +54 -30
  296. package/web-client/public/js/iframe-coordination.js +55 -0
  297. package/web-client/public/js/setup-handlers.js +358 -18
  298. package/web-client/public/js/setup-load-and-import-handlers.js +105 -66
  299. package/web-client/public/js/update-app.js +483 -93
  300. package/web-client/public/js/upload.js +349 -32
  301. package/web-client/public/js/warnings.js +13 -51
  302. package/web-client/public/lib/iframeSizer.contentWindow.min.js +10 -0
  303. package/web-client/public/stylesheets/grnsight.styl +323 -28
  304. package/web-client/views/components/demo.pug +10 -0
  305. package/web-client/views/{graph.jade → graph.pug} +0 -0
  306. package/web-client/views/{info.jade → info.pug} +1 -5
  307. package/web-client/views/upload.pug +580 -0
  308. package/_gh_pages/Gemfile +0 -7
  309. package/_gh_pages/Gemfile.lock +0 -129
  310. package/documents/SDF/CMSI_402/spring_2014/Southwick_CMSI402_Spring2014_software-development-plan.md +0 -71
  311. package/documents/SDF/CMSI_402/spring_2014/Southwick_CMSI402_Spring2014_software-requirements-specification.md +0 -71
  312. package/documents/SDF/CMSI_402/spring_2014/use-case-diagram-spring-2014.jpg +0 -0
  313. package/documents/SDF/CMSI_402/spring_2017/Anguiano_402_Final_Presentation.pptx +0 -0
  314. package/documents/SDF/CMSI_402/spring_2017/Anguiano_402_Presentation_Final_Poster.pdf +0 -0
  315. package/documents/SDF/CMSI_402/spring_2017/Anguiano_CMSI402_Spring2017_project-proposal-presentation.pptx +0 -0
  316. package/documents/SDF/CMSI_402/spring_2017/Anguiano_CMSI402_Spring2017_project-proposal.docx +0 -0
  317. package/documents/SDF/CMSI_402/spring_2017/Anguiano_CMSI402_Spring2017_software-development-plan.docx +0 -0
  318. package/documents/SDF/CMSI_402/spring_2017/Anguiano_CMSI402_Spring2017_software-requirements-specification.docx +0 -0
  319. package/documents/SDF/CMSI_402/spring_2017/Design Review Presentation.pptx +0 -0
  320. package/documents/SDF/CMSI_402/spring_2018/0402report.docx +0 -0
  321. package/documents/SDF/CMSI_402/spring_2018/0409report.docx +0 -0
  322. package/documents/SDF/CMSI_402/spring_2018/402-gantt.png +0 -0
  323. package/documents/SDF/CMSI_402/spring_2018/402SRS_GRNSightFeedback01.txt +0 -28
  324. package/documents/SDF/CMSI_402/spring_2018/402_SPD.md +0 -223
  325. package/documents/SDF/CMSI_402/spring_2018/ChoeShinCMSI402_Final.pptx +0 -0
  326. package/documents/SDF/CMSI_402/spring_2018/ProjectProposal.md +0 -22
  327. package/documents/SDF/CMSI_402/spring_2018/SoftwareRequirementsSpecification.md +0 -88
  328. package/documents/SDF/CMSI_402/spring_2018/homework/choe_eileen/Choe_Eileen_CMSI 402_HW1.pdf +0 -0
  329. package/documents/SDF/CMSI_402/spring_2018/homework/choe_eileen/Choe_Eileen_CMSI402_HW2.pdf +0 -0
  330. package/documents/SDF/CMSI_402/spring_2018/homework/shin_jen/402hw2.docx +0 -0
  331. package/documents/SDF/CMSI_402/spring_2018/homework/shin_jen/Jen - 402Hw1.docx +0 -0
  332. package/documents/SDF/CMSI_402/spring_2018/homework/shin_jen/Jen - hw3.docx +0 -0
  333. package/documents/SDF/CMSI_402/spring_2018/writtenStatusReport.docx +0 -0
  334. package/documents/SDF/CMSI_402/spring_2018/writtenStatusReport4 +0 -0
  335. package/documents/abstracts/Anguiano_Varshneya_Undergraduate-Research-Symposium_2017_abstract.pdf +0 -0
  336. package/documents/abstracts/SIGGRAPH 2017 Abstract/ACM-Reference-Format.bst +0 -3478
  337. package/documents/abstracts/SIGGRAPH 2017 Abstract/Figure1_zoom100.png +0 -0
  338. package/documents/abstracts/SIGGRAPH 2017 Abstract/acmart.cls +0 -2352
  339. package/documents/abstracts/SIGGRAPH 2017 Abstract/acmart.ins +0 -29
  340. package/documents/abstracts/SIGGRAPH 2017 Abstract/always-weights.png +0 -0
  341. package/documents/abstracts/SIGGRAPH 2017 Abstract/auto.png +0 -0
  342. package/documents/abstracts/SIGGRAPH 2017 Abstract/networkA.png +0 -0
  343. package/documents/abstracts/SIGGRAPH 2017 Abstract/networkB-normalized.png +0 -0
  344. package/documents/abstracts/SIGGRAPH 2017 Abstract/networkB.png +0 -0
  345. package/documents/abstracts/SIGGRAPH 2017 Abstract/never-weights.png +0 -0
  346. package/documents/abstracts/SIGGRAPH 2017 Abstract/representative-image/screenshot.jpg +0 -0
  347. package/documents/abstracts/SIGGRAPH 2017 Abstract/representative-image/screenshot3x2.png +0 -0
  348. package/documents/abstracts/SIGGRAPH 2017 Abstract/representative-image/withweights3x2.png +0 -0
  349. package/documents/abstracts/SIGGRAPH 2017 Abstract/screenshot-auto.png +0 -0
  350. package/documents/abstracts/SIGGRAPH 2017 Abstract/siggraph-abstract-review.bib +0 -85
  351. package/documents/abstracts/SIGGRAPH 2017 Abstract/siggraph-abstract-review.pdf +0 -0
  352. package/documents/abstracts/SIGGRAPH 2017 Abstract/siggraph-abstract-review.tex +0 -235
  353. package/documents/abstracts/SWE Collegiate Competition 2017.md +0 -9
  354. package/documents/abstracts/Samdarshi_GRNsight_SoCalSysBio_Abstract_2019.docx +0 -0
  355. package/documents/abstracts/Varshneya_Samdarshi_Southern-California-Systems-Biology_2017_abstract.docx +0 -0
  356. package/documents/abstracts/~$mdarshi_SoCalSysBio_Abstract_2019.docx +0 -0
  357. package/documents/developer_documents/State Diagram.graphml +0 -3525
  358. package/documents/developer_documents/graphml/State Diagram.graphml +0 -3115
  359. package/documents/developer_documents/older_versions/GRNsight State Diagram old.png +0 -0
  360. package/documents/developer_documents/older_versions/GRNsight State Diagram.png +0 -0
  361. package/documents/developer_documents/testing_script_generator/GRNsightTestingDocument.md +0 -998
  362. package/documents/developer_documents/testing_script_generator/featureList.json +0 -496
  363. package/documents/developer_documents/testing_script_generator/testing-script-generator.js +0 -149
  364. package/documents/manuscripts/peerj-computerscience-2016/GRNsight_PeerJ-CS_conference-presentations_2016.docx +0 -0
  365. package/documents/manuscripts/peerj-computerscience-2016/GRNsight_PeerJ-CS_manuscript_2016.docx +0 -0
  366. package/documents/manuscripts/peerj-computerscience-2016/GRNsight_PeerJ-CS_manuscript_2016_Table1.docx +0 -0
  367. package/documents/manuscripts/peerj-computerscience-2016/GRNsight_PeerJ-CS_manuscript_2016_references.rtf +0 -264
  368. package/documents/manuscripts/peerj-computerscience-2016/GRNsight_PeerJ-CS_manuscript_2016_text-only.docx +0 -0
  369. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/21-genes_31-edges_Schade-data_for-screenshots.xlsx +0 -0
  370. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure1_zoom100.jpg +0 -0
  371. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure1_zoom100.png +0 -0
  372. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure1_zoom100.psd +0 -0
  373. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure1_zoom145.jpg +0 -0
  374. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure1_zoom145.png +0 -0
  375. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure1_zoom145.psd +0 -0
  376. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure1_zoom145_900pix-wide.psd +0 -0
  377. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure2_zoom100.jpg +0 -0
  378. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure2_zoom100.png +0 -0
  379. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure2_zoom100.psd +0 -0
  380. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure2_zoom145.jpg +0 -0
  381. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure2_zoom145.png +0 -0
  382. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure2_zoom145.psd +0 -0
  383. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure2_zoom145_900pix-wide.psd +0 -0
  384. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure5A.pdf +0 -0
  385. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure5B.pdf +0 -0
  386. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure5C.eps +0 -0
  387. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure5D.pdf +0 -0
  388. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure5E.pdf +0 -0
  389. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure5F.eps +0 -0
  390. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure5_compiled.png +0 -0
  391. package/documents/manuscripts/peerj-computerscience-2016/figures/submitted-versions/Figure3_GRNsight-Architecture.pdf +0 -0
  392. package/documents/manuscripts/peerj-computerscience-2016/figures/submitted-versions/Figure4_GRNsight-Screenshot.pdf +0 -0
  393. package/documents/manuscripts/peerj-computerscience-2016/figures/submitted-versions/Figure5_compiled.pdf +12 -5383
  394. package/documents/manuscripts/peerj-computerscience-2016/peerj-reviewing-10823-v0.pdf +0 -0
  395. package/documents/manuscripts/peerj-computerscience-2016/revisions/GRNsight_PeerJ-CS_conference-presentations_2016_revised.docx +0 -0
  396. package/documents/manuscripts/peerj-computerscience-2016/revisions/GRNsight_PeerJ-CS_cover-letter-and-response_2016.pdf +0 -0
  397. package/documents/manuscripts/peerj-computerscience-2016/revisions/GRNsight_PeerJ-CS_cover-letter_2016.docx +0 -0
  398. package/documents/manuscripts/peerj-computerscience-2016/revisions/GRNsight_PeerJ-CS_cover-letter_2016.pdf +0 -0
  399. package/documents/manuscripts/peerj-computerscience-2016/revisions/GRNsight_PeerJ-CS_manuscript_2016_Table1.docx +0 -0
  400. package/documents/manuscripts/peerj-computerscience-2016/revisions/GRNsight_PeerJ-CS_manuscript_2016_references_revised.rtf +0 -385
  401. package/documents/manuscripts/peerj-computerscience-2016/revisions/GRNsight_PeerJ-CS_manuscript_2016_text-only_revised.docx +0 -0
  402. package/documents/manuscripts/peerj-computerscience-2016/revisions/GRNsight_PeerJ-CS_manuscript_2016_text-only_revised_marked.docx +0 -0
  403. package/documents/manuscripts/peerj-computerscience-2016/revisions/GRNsight_PeerJ-CS_response-to-reviewers_2016.docx +0 -0
  404. package/documents/manuscripts/peerj-computerscience-2016/revisions/GRNsight_PeerJ-CS_response-to-reviewers_2016.pdf +0 -0
  405. package/documents/manuscripts/peerj-computerscience-2016/revisions/figures/Figure3_GRNsight-Architecture.pdf +0 -0
  406. package/documents/manuscripts/peerj-computerscience-2016/revisions/figures/Figure4_GRNsight-Screenshot-auto.pdf +0 -0
  407. package/documents/manuscripts/peerj-computerscience-2016/revisions/figures/Figure4_GRNsight-Screenshot.pdf +0 -0
  408. package/documents/manuscripts/peerj-computerscience-2016/revisions/peerj-reviewing-10823-v1.pdf +0 -0
  409. package/documents/posters/Anguiano_CMSI402_2017.pptx +0 -0
  410. package/documents/posters/Anguiano_Varshneya_LMU-Symposium_2015.pptx +0 -0
  411. package/documents/posters/Anguiano_Varshneya_SCCUR_2014.pptx +0 -0
  412. package/documents/posters/Choe_Shin_CMSI402_2018.pptx +0 -0
  413. package/documents/posters/Dahlquist-et-al_BOSC_ISMB_2016_poster.pptx +0 -0
  414. package/documents/posters/Lopez_Filler_LMU_Symposium_2019.pdf +0 -0
  415. package/documents/posters/Lopez_Filler_LMU_Symposium_2019.pptx +0 -0
  416. package/documents/posters/Samdarshi-et-al_LMU-Symposium_2017.pptx +0 -0
  417. package/documents/posters/Samdarshi-et-al_LMU-Symposium_2018.pptx +0 -0
  418. package/documents/posters/Samdarshi-et-al_SoCalSysBio_2019.pptx +0 -0
  419. package/documents/posters/Shin-et-al_SCCUR_2017.pptx +0 -0
  420. package/documents/posters/Southwick_CMSI402_2014.pptx +0 -0
  421. package/documents/posters/Varshneya_Samdarshi_LMU-Symposium_2016.pptx +0 -0
  422. package/documents/posters/Varshneya_Samdarshi_SoCalSysBio_2017.pptx +0 -0
  423. package/documents/presentations/Anguiano_402_Final_Presentation.pptx +0 -0
  424. package/documents/presentations/Choe_SWERapidFire2017_final.pptx +0 -0
  425. package/documents/presentations/Dahlquist_BOSC_20160709.pptx +0 -0
  426. package/documents/presentations/Dahlquist_ExperimentalBiology_20160404_talk.pptx +0 -0
  427. package/documents/presentations/Dahlquist_SoCalSysBio_20150131_talk.pptx +0 -0
  428. package/documents/presentations/Samdarshi_LMU-Symposium_20190323_talk.pdf +0 -0
  429. package/documents/presentations/Samdarshi_LMU-Symposium_20190323_talk.pptx +0 -0
  430. package/documents/presentations/Southwick_Anguiano_LMU-Symposium_20140329_talk.pptx +0 -0
  431. package/documents/presentations/Southwick_CMSI402_Presentation_20140508_talk.pptx +0 -0
  432. package/documents/presentations/Varshneya_Anguiano_LMU-Symposium_201703_talk.pptx +0 -0
  433. package/documents/reports/Samdarshi_Mihir_2019/Samdarshi_2019_Final.docx +0 -0
  434. package/documents/reports/Samdarshi_Mihir_2019/Samdarshi_Mihir_2019_AnnotatedBibliography.docx +0 -0
  435. package/documents/reports/Samdarshi_Mihir_2019/Samdarshi_Mihir_2019_Outline.docx +0 -0
  436. package/documents/reports/Samdarshi_Mihir_2019/~$mdarshi_2019_Draft.docx +0 -0
  437. package/documents/reports/Samdarshi_Mihir_2019/~$mdarshi_2019_Final_Paper_Draft.docx +0 -0
  438. package/documents/reports/Varshneya_Anu_2017/Varshneya-201701-AnnotatedBibliography.docx +0 -0
  439. package/documents/reports/Varshneya_Anu_2017/Varshneya-201702-Introduction.docx +0 -0
  440. package/documents/reports/Varshneya_Anu_2017/Varshneya-201702-Outline.docx +0 -0
  441. package/documents/reports/Varshneya_Anu_2017/Varshneya-201703-Discussion.docx +0 -0
  442. package/documents/reports/Varshneya_Anu_2017/Varshneya-201703-MMResults.docx +0 -0
  443. package/documents/reports/Varshneya_Anu_2017/Varshneya-201704-Draft-1.docx +0 -0
  444. package/documents/reports/Varshneya_Anu_2017/Varshneya-201704-Final.docx +0 -0
  445. package/onlysidebar.html +0 -8
  446. package/test/graph-library-tests.js +0 -165
  447. package/test-files/demo-files/21-genes_50-edges_Dahlquist-data_estimation_output.xlsx +0 -0
  448. package/test-files/demo-files/21-genes_50-edges_Dahlquist-data_input.xlsx +0 -0
  449. package/test-files/graph-tests/different-sized-networks/10-genes-max-edges.xlsx +0 -0
  450. package/test-files/graph-tests/different-sized-networks/12-genes-max-edges.xlsx +0 -0
  451. package/test-files/graph-tests/different-sized-networks/35-genes-max-edges.xlsx +0 -0
  452. package/test-files/graph-tests/different-sized-networks/40-genes-0-edges.xlsx +0 -0
  453. package/test-files/graph-tests/different-sized-networks/40-genes-max-edges.xlsx +0 -0
  454. package/test-files/graph-tests/different-sized-networks/42-genes-max-edges.xlsx +0 -0
  455. package/test-files/graph-tests/different-sized-networks/50-genes-max-edges.xlsx +0 -0
  456. package/test-files/graph-tests/different-sized-networks/75-genes-150-edges.xlsx +0 -0
  457. package/web-client/public/js/container.js +0 -121
  458. package/web-client/views/upload.jade +0 -464
@@ -28,11 +28,16 @@
28
28
  }, 200);
29
29
  });
30
30
 
31
- const search = location.search.substring(1);
31
+ // object for gene page API calls
32
+ // Thank you https://gist.github.com/pirate/9298155edda679510723
33
+ const query = new URLSearchParams(location.search);
32
34
  const obj = {
33
- symbol: search.match(/symbol=(.*?)(?=&)/)[1],
34
- species: search.match(/species=(.*?)(?=&)/)[1],
35
- taxon: search.match(/taxon=(.*?)/)[1]
35
+ symbol: query.get("symbol"),
36
+ species: query.get("species"),
37
+ jaspar: query.get("jaspar"),
38
+ uniprot: query.get("uniprot"),
39
+ ensembl: query.get("ensembl"),
40
+ mine: query.get("mine")
36
41
  };
37
42
 
38
43
  document.title = "GRNsight - " + obj.symbol;
@@ -60,11 +65,17 @@
60
65
  $(".ncbi-link").attr({ href: ncbiHrefTemplate + ncbiId });
61
66
  }
62
67
 
63
- const ensemblHrefTemplate = "https://www.ensembl.org/Saccharomyces_cerevisiae/Gene/Summary?g=";
68
+ const ensemblHrefTemplate = "https://www.ensembl.org/" + obj.species + "/Gene/Summary?g=";
69
+ const ensemblPlantHrefTemplate = "https://www.plants.ensembl.org/ " + obj.species + "/Gene/Summary?g=";
64
70
  const ensemblId = locusTag;
71
+ // console.log("ensembl id: " + ensemblId)
65
72
  $(".ensembl-link").text(ensemblId);
66
73
  if (ensemblId !== "Not found") {
67
- $(".ensembl-link").attr({ href: ensemblHrefTemplate + ensemblId });
74
+ if ( obj.ensembl === "plant") {
75
+ $(".ensembl-link").attr({ href: ensemblPlantHrefTemplate + ensemblId });
76
+ } else {
77
+ $(".ensembl-link").attr({ href: ensemblHrefTemplate + ensemblId });
78
+ }
68
79
  }
69
80
 
70
81
  const uniprotHrefTemplate = "http://www.uniprot.org/uniprot/";
@@ -86,8 +97,8 @@
86
97
  $(".geneDescription").text(geneDescription).attr({ href: sgdHrefTemplate + geneDescription });
87
98
 
88
99
 
89
- const uniSpecies = gene.uniprot.species;
90
- $(".uniProtSpecies").text(uniSpecies).attr({ href: uniprotHrefTemplate + uniSpecies });
100
+ const GRNSightSpecies = obj.species.replace("_", " "); // change to make species display work
101
+ $(".uniProtSpecies").text(GRNSightSpecies).attr({ href: uniprotHrefTemplate + GRNSightSpecies });
91
102
 
92
103
  // This has been moved to top of function
93
104
  $(".ncbiLocusTag").text(locusTag).attr({ href: ncbiHrefTemplate + locusTag });
@@ -0,0 +1,124 @@
1
+ import {responseCustomWorkbookData} from "../setup-load-and-import-handlers";
2
+
3
+ // Expression DB Access Functions
4
+ const buildExpressionTimepointsString = function (selection) {
5
+ let timepoints = "";
6
+ selection.timepoints.forEach(x => timepoints += (x + ","));
7
+ return timepoints.substring(0, timepoints.length - 1);
8
+ };
9
+ const buildExpressionGeneQuery = function (workbookGenes) {
10
+ let genes = "";
11
+ workbookGenes.forEach(x => genes += (x.name + ","));
12
+ return genes.substring(0, genes.length - 1);
13
+ };
14
+
15
+ const buildExpressionURL = function (selection, genes) {
16
+ const baseQuery = `expressiondb?dataset=${selection.dataset}&genes=${buildExpressionGeneQuery(genes)}`;
17
+ return selection.timepoints ?
18
+ `${baseQuery}&timepoints=${buildExpressionTimepointsString(selection)}` :
19
+ baseQuery;
20
+ };
21
+
22
+ const responseExpressionData = (formData, queryURL) => {
23
+ return new Promise(function (resolve) {
24
+ const uploadRoute = queryURL;
25
+ const fullUrl = [ $(".service-root").val(), uploadRoute ].join("/");
26
+ (formData ?
27
+ $.ajax({
28
+ url: fullUrl,
29
+ data: formData,
30
+ processData: false,
31
+ contentType: false,
32
+ type: "GET",
33
+ crossDomain: true
34
+ }) :
35
+ $.getJSON(fullUrl)
36
+ ).done((expressionData) => {
37
+ resolve(expressionData);
38
+ }).error(console.log("Error in accessing expression database. Result may just be loading."));
39
+ });
40
+ };
41
+
42
+ const queryExpressionDatabase = (query) => {
43
+ let queryURL = buildExpressionURL({dataset: query.dataset}, query.genes);
44
+ return responseExpressionData("", queryURL);
45
+ };
46
+
47
+ // Network DB Access Functions
48
+
49
+ const buildNetworkGenesQuery = (genes) => {
50
+ let result = "";
51
+ for (let gene in genes) {
52
+ result += `${gene},`;
53
+ }
54
+ return result.substring(0, result.length - 1);
55
+ };
56
+
57
+ const buildNetworkURL = function (queryType, queryInfo) {
58
+ let baseQuery = `networkdb?type=${queryType}`;
59
+ if (queryInfo !== null) {
60
+ for (let header in queryInfo) {
61
+ if (header === "genes") {
62
+ baseQuery += `&${header}=${buildNetworkGenesQuery(queryInfo[header])}`;
63
+ } else {
64
+ baseQuery += `&${header}=${queryInfo[header]}`;
65
+ }
66
+ }
67
+ }
68
+ return baseQuery;
69
+ };
70
+
71
+ const responseNetworkData = (formData, queryURL) => {
72
+ return new Promise(function (resolve) {
73
+ const uploadRoute = queryURL;
74
+ const fullUrl = [ $(".service-root").val(), uploadRoute ].join("/");
75
+ (formData ?
76
+ $.ajax({
77
+ url: fullUrl,
78
+ data: formData,
79
+ processData: false,
80
+ contentType: false,
81
+ type: "GET",
82
+ crossDomain: true
83
+ }) :
84
+ $.getJSON(fullUrl)
85
+ ).done((networkData) => {
86
+ resolve(networkData);
87
+ }).error(console.log("Error in accessing network database. Result may just be loading."));
88
+ });
89
+ };
90
+
91
+ const queryNetworkDatabase = (query) => {
92
+ let queryURL = buildNetworkURL(query.type, query.info);
93
+ return responseNetworkData("", queryURL);
94
+ };
95
+
96
+ // Upload Custom Workbook Functions
97
+ const buildCustomWorkbookURL = (name, genes, links) => {
98
+ let baseQuery = `upload-custom-workbook?name=${name}`;
99
+ let genesString = "";
100
+ let linksString = "";
101
+ let genesByIndex = {};
102
+ let i = 0;
103
+ for (let gene in genes) {
104
+ genesString += `${genes[gene]},`;
105
+ genesByIndex[gene] = i;
106
+ i++;
107
+ }
108
+ for (let regulator in links) {
109
+ for (let target of links[regulator]) {
110
+ linksString += `${genesByIndex[regulator]}->${genesByIndex[target]},`;
111
+ }
112
+ }
113
+ baseQuery += `&genes=${genesString.substring(0, genesString.length - 1)}`;
114
+ baseQuery += `&links=${linksString.substring(0, linksString.length - 1)}`;
115
+ return baseQuery;
116
+ };
117
+
118
+ const uploadCustomWorkbook = (workbook, grnState) => {
119
+ let queryURL = buildCustomWorkbookURL(workbook.name, workbook.genes, workbook.links);
120
+ return responseCustomWorkbookData(grnState, queryURL, workbook.name);
121
+ };
122
+
123
+
124
+ export {queryExpressionDatabase, queryNetworkDatabase, uploadCustomWorkbook};
@@ -1,19 +1,37 @@
1
+ export const HOST_SITE = "https://dondi.github.io";
2
+
3
+ export const FILE_NAME = "#fileName";
4
+
1
5
  export const GREY_EDGES_DASHED_MENU = "#grey-edges-dashed-menu";
2
6
  export const GREY_EDGES_DASHED_SIDEBAR = "#dashedGrayLineButton";
3
7
 
4
- export const UNWEIGHTED_DEMO_ID = "#unweighted";
8
+ export const CREATE_NETWORK_CLASS = ".create-network";
9
+ export const CREATE_NETWORK_MODAL = "#createNetworkModal";
10
+
11
+ export const UNWEIGHTED_DEMO_ID = ".unweighted";
5
12
  export const UNWEIGHTED_DEMO_PATH = "demo/unweighted";
6
- export const UNWEIGHTED_DEMO_NAME = "Demo #1: Unweighted GRN (21 genes, 50 edges)";
7
- export const WEIGHTED_DEMO_ID = "#weighted";
13
+ export const UNWEIGHTED_DEMO_NAME = "Demo #1: Unweighted GRN (15 genes, 28 edges)";
14
+ export const WEIGHTED_DEMO_ID = ".weighted";
8
15
  export const WEIGHTED_DEMO_PATH = "demo/weighted";
9
- export const WEIGHTED_DEMO_NAME = "Demo #2: Weighted GRN (21 genes, 50 edges, Dahlquist Lab unpublished data)";
10
- export const SCHADE_INPUT_ID = "#schadeInput";
16
+ export const WEIGHTED_DEMO_NAME = "Demo #2: Weighted GRN (15 genes, 28 edges, Dahlquist Lab unpublished data)";
17
+ export const SCHADE_INPUT_ID = ".schadeInput";
11
18
  export const SCHADE_INPUT_PATH = "demo/schadeInput";
12
19
  export const SCHADE_INPUT_NAME = "Demo #3: Unweighted GRN (21 genes, 31 edges)";
13
- export const SCHADE_OUTPUT_ID = "#schadeOutput";
14
- export const SCHADE_OUTPUT_PATH = "demo/schadeOutput";
20
+ export const SCHADE_OUTPUT_ID = ".schadeOutput";
21
+ export const SCHADE_OUTPUT_PATH = "demo/schadeOutput";
15
22
  export const SCHADE_OUTPUT_NAME = "Demo #4: Weighted GRN (21 genes, 31 edges, Schade et al. 2004 data)";
16
23
 
24
+ export const EXPORT_TO_EXCEL = "#exportAsExcelWkbk";
25
+ export const EXPORT_TO_UNWEIGHTED_SIF = "#exportAsUnweightedSif";
26
+ export const EXPORT_TO_WEIGHTED_SIF = "#exportAsWeightedSif";
27
+ export const EXPORT_TO_UNWEIGHTED_GML = "#exportAsUnweightedGraphMl";
28
+ export const EXPORT_TO_WEIGHTED_GML = "#exportAsWeightedGraphMl";
29
+ export const EXPORT_TO_PNG = "#exportAsPng";
30
+ export const EXPORT_TO_SVG = "#exportAsSvg";
31
+ export const EXPORT_TO_PDF = "#exportAsPdf";
32
+ export const EXPORT_WEIGHTED_CLASS = ".weighted.export";
33
+ export const EXPRESSION_SOURCE = "#expressionSource";
34
+
17
35
  export const DEMO_INFORMATION = [
18
36
  [ WEIGHTED_DEMO_ID, WEIGHTED_DEMO_PATH, WEIGHTED_DEMO_NAME ],
19
37
  [ UNWEIGHTED_DEMO_ID, UNWEIGHTED_DEMO_PATH, UNWEIGHTED_DEMO_NAME ],
@@ -24,7 +42,7 @@ export const DEMO_INFORMATION = [
24
42
  export const MIN_EDGE_WEIGHT_NORMALIZATION = 0.0001;
25
43
  export const MAX_EDGE_WEIGHT_NORMALIZATION = 1000;
26
44
 
27
- export const DEFAULT_ZOOM_VALUE = 4;
45
+ export const DEFAULT_ZOOM_VALUE = 100;
28
46
 
29
47
  export const GREY_EDGE_THRESHOLD_MENU = "#gray-edge-threshold-menu";
30
48
  export const GREY_EDGE_THRESHOLD_SLIDER_SIDEBAR = "#grayThresholdInput";
@@ -50,9 +68,10 @@ export const SHOW_WEIGHTS_MOUSEOVER = "showWeightsMouseover";
50
68
  export const SHOW_ALL_WEIGHTS = "showAllWeights";
51
69
  export const HIDE_ALL_WEIGHTS = "hideAllWeights";
52
70
 
53
- export const COLOR_EDGES = "#colorEdges";
54
- export const BLACK_EDGES = "#blackEdges";
71
+ export const COLOR_EDGES = ".colorEdges";
55
72
  export const ACTIVE_COLOR_OPTION = "active";
73
+ export const COLOR_EDGES_MENU = "#colorEdges";
74
+ export const COLOR_EDGES_SIDEBAR = "#colorEdgesSidebar";
56
75
 
57
76
  export const GRAVITY_LENGTH_WITHOUT_ZERO = 3;
58
77
  export const LOCK_SLIDERS_CLASS = ".lockSliders";
@@ -79,17 +98,33 @@ export const CHARGE_DEFAULT_VALUE = -50;
79
98
 
80
99
  export const GRID_LAYOUT = "GRID_LAYOUT";
81
100
  export const FORCE_GRAPH = "FORCE_GRAPH";
101
+ export const FORCE_GRAPH_BUTTON = "#forceGraphButton";
82
102
  export const GRID_LAYOUT_BUTTON = "#gridLayoutButton";
83
- export const FORCE_GRAPH_CLASS = "#forceGraph";
84
- export const GRID_LAYOUT_CLASS = "#gridLayout";
103
+ export const FORCE_GRAPH_MENU = "#forceGraph";
104
+ export const GRID_LAYOUT_MENU = "#gridLayout";
85
105
 
86
106
  export const MINIMUM_MAX_LOG_FOLD_CHANGE = 0;
87
107
  export const MAXIMUM_MAX_LOG_FOLD_CHANGE = 100;
88
108
  export const DEFAULT_MAX_LOG_FOLD_CHANGE = 3;
89
109
  export const MAX_NUM_CHARACTERS_DROPDOWN = 24;
110
+ export const LAYOUT_SIDEBAR_PANEL = "#layoutSidebarPanel";
111
+ export const EDGE_WEIGHT_MENU_CLASS = ".weightedGraphOptionsMenu";
112
+ export const EDGE_WEIGHT_SIDEBAR = ".edge-weight-sidebar";
113
+ export const EDGE_WEIGHT_SIDEBAR_HEADER_LINK = "#edgeWeightHeaderLink";
114
+ export const EXPRESSION_DB_MENU = ".data-sidebar";
115
+ export const EXPRESSION_DB_MENU_HEADER_LINK = "#dataSidebarLink";
116
+ export const EXPRESSION_DB_SIDEBAR_PANEL = "#dataSidebarPanel";
117
+ export const EXPRESSION_DB_LOADER = ".expression-db-loader";
118
+ export const EXPRESSION_DB_LOADER_TEXT = ".expression-db-loader-text";
119
+ export const DATA_SET_SELECT = "#data-set-select";
90
120
  export const NODE_COLORING_MENU = ".node-coloring";
91
121
  export const NODE_COLORING_MENU_CLASS = ".node-coloring-menu";
92
- export const NODE_COLORING_TOGGLE_SIDEBAR = "#nodeColoringToggle";
122
+ export const NODE_COLORING_SIDEBAR_PANEL = "#nodeColoringSidebarPanel";
123
+ export const NODE_COLORING_SIDEBAR_HEADER_LINK = "#nodeColoringHeaderLink";
124
+ export const NODE_COLORING_SIDEBAR_BODY = ".nodeColoringSidebarBody";
125
+ export const DATA_SIDEBAR_BODY = ".dataSidebarBody";
126
+ export const NODE_COLORING_SIDEBAR_HEADER = "#sidebarPanelHeader";
127
+ export const NODE_COLORING_TOGGLE_SIDEBAR = "#nodeColoringToggleSidebar";
93
128
  export const AVG_REPLICATE_VALS_BOTTOM_SIDEBAR = "#averageDataBottom";
94
129
  export const AVG_REPLICATE_VALS_TOP_SIDEBAR = "#averageDataTop";
95
130
  export const AVG_REPLICATE_VALS_TOP_MENU = "#averageDataTopMenu";
@@ -97,6 +132,7 @@ export const AVG_REPLICATE_VALS_BOTTOM_MENU = "#averageDataBottomMen
97
132
  export const NODE_COLORING_TOGGLE_MENU = "#node-coloring-toggle-menu";
98
133
  export const NODE_COLORING_TOGGLE_CLASS = ".nodeColoringToggle";
99
134
  export const LOG_FOLD_CHANGE_MAX_VALUE_CLASS = ".logFoldChangeMaxValue";
135
+ export const LOG_FOLD_CHANGE_MAX_VALUE_HEADER = "#logFoldChangeMaxValue";
100
136
  export const LOG_FOLD_CHANGE_MAX_VALUE_SIDEBAR_INPUT = "#log-fold-change-max-value-sidebar";
101
137
  export const LOG_FOLD_CHANGE_MAX_VALUE_SIDEBAR_BUTTON = "#log-fold-change-button";
102
138
  export const LOG_FOLD_CHANGE_MAX_VALUE_MENU = "#log-fold-change-max-value-menu";
@@ -106,7 +142,44 @@ export const TOP_DATASET_SELECTION_SIDEBAR = "#dataset-top";
106
142
  export const BOTTOM_DATASET_SELECTION_MENU = "#bottomDatasetDropdownMenu";
107
143
  export const BOTTOM_DATASET_SELECTION_SIDEBAR = "#dataset-bottom";
108
144
 
109
- export const ZOOM_CONTROL = ".zoom";
110
- export const ZOOM_SLIDER = "#zoomSlider";
111
- export const ZOOM_INPUT = "#zoomInput";
112
- export const ZOOM_PERCENT = "#zoomPercent";
145
+ export const SPECIES_IDENTIFIED_NAME = "#speciesName";
146
+ export const SPECIES_DISPLAY = "#speciesDropdown";
147
+ export const SPECIES_BUTTON_YEAST = "#Saccharomyces_cerevisiae";
148
+ export const SPECIES_BUTTON_HUMAN = "#Homo_sapiens";
149
+ export const SPECIES_BUTTON_FLY = "#Drosophila_melanogaster";
150
+ export const SPECIES_BUTTON_NEMATODE = "#Caenorhabditis_elegans";
151
+ export const SPECIES_BUTTON_MOUSE = "#Mus_musculus";
152
+ export const SPECIES_BUTTON_CRESS = "#Arabidopsis_thaliana";
153
+
154
+ export const NODE_COLORING_USING_EXPRESSION_DATA = "#expressionDB";
155
+
156
+ export const ZOOM_CONTROL = ".zoom";
157
+ export const ZOOM_DISPLAY_MAXIMUM_SELECTOR = ".maximum-zoom-display";
158
+ export const ZOOM_DISPLAY_MAXIMUM_VALUE = 200;
159
+ export const ZOOM_DISPLAY_MINIMUM_SELECTOR = ".minimum-zoom-display";
160
+ export const ZOOM_DISPLAY_MINIMUM_VALUE = 25;
161
+ export const ZOOM_DISPLAY_MIDDLE = 100;
162
+ export const ZOOM_ADAPTIVE_MAX_SCALE = 4;
163
+ export const ZOOM_SLIDER = "#zoomSlider";
164
+ export const ZOOM_INPUT = "#zoomInput";
165
+ export const ZOOM_PERCENT = "#zoomPercent";
166
+
167
+ export const VIEWPORT_INIT = "containerInit";
168
+ export const VIEWPORT_FIT = "containerFit";
169
+ export const VIEWPORT_S = "containerS";
170
+ export const VIEWPORT_M = "containerM";
171
+ export const VIEWPORT_L = "containerL";
172
+
173
+ export const VIEWPORT_SIZE_S_DROPDOWN = "#viewport-size-s";
174
+ export const VIEWPORT_SIZE_M_DROPDOWN = "#viewport-size-m";
175
+ export const VIEWPORT_SIZE_L_DROPDOWN = "#viewport-size-l";
176
+ export const VIEWPORT_SIZE_FIT_DROPDOWN = "#viewport-size-fit";
177
+ export const VIEWPORT_SIZE_S_SIDEBAR = "#boundBoxS";
178
+ export const VIEWPORT_SIZE_M_SIDEBAR = "#boundBoxM";
179
+ export const VIEWPORT_SIZE_L_SIDEBAR = "#boundBoxL";
180
+ export const VIEWPORT_SIZE_FIT_SIDEBAR = "#boundBoxFit";
181
+ export const VIEWPORT_OPTION_CLASS = ".viewportOption";
182
+ export const VIEWPORT_OPTION_CLASS_SIDEBAR = ".boundBoxSize";
183
+
184
+
185
+
@@ -0,0 +1,195 @@
1
+ import {CREATE_NETWORK_CLASS, CREATE_NETWORK_MODAL} from "./constants";
2
+ import { queryNetworkDatabase, uploadCustomWorkbook } from "./api/grnsight-api";
3
+ import { grnState } from "./grnstate";
4
+
5
+ export const createNetwork = function () {
6
+ const createHTMLforForm = (sources) => {
7
+ let result = `
8
+ <div id=\'createNetworkFormContainer\' '>
9
+ <h2 id=\'createNetwork\'>Create Network</h2>
10
+ <div class=\'form-group\'>
11
+ <label for=\'network-source\' id=\'network-source-label\'>Network Source</label>
12
+ <select class=\'network-dropdown btn btn-default\' id=\'network-source\'>
13
+ `;
14
+ if (sources.length !== 1) {
15
+ result += "<option value=\'none\' selected=\'true\' disabled>Select Network Source</option>";
16
+ for (let source in sources) {
17
+ result += `
18
+ <option value=\'${sources[source]}\'>${sources[source]}</option>
19
+ `;
20
+ }
21
+ } else {
22
+ result += `
23
+ <option value=\'${sources[0]}\' selected=\'true\' disabled hidden>${sources[0]}</option>
24
+ `;
25
+ }
26
+ result += `</select>
27
+ <p>Warning: changing network source will remove all current genes in network</p>
28
+ </div>
29
+ <div class=\'form-group\' id=\'getNetworkGenesForm\'>
30
+ <form id=\'getNetworkGenesForm\'>
31
+ <label for=\'network-search-bar\' id=\'network-source-label\'>Select genes</label>
32
+ <input type=\'text\' id=\'network-search-bar\' name=\'network-search-bar\'></input>
33
+ <button id=\'enter-search\' type=\'submit\' class=\'search-button btn btn-default\'>
34
+ <span class=\'glyphicon glyphicon-search\'></span>
35
+ </button>
36
+ </form>
37
+ </div>
38
+ <div id=\'selected-genes-container\'>
39
+ <div id=\'selected-genes\'>
40
+ <p>Added genes go here! Click on a gene to remove it</p>
41
+ </div>
42
+ </div>
43
+ <button id=\'submit-network\' class=\'btn btn-default\'>Create Network</input>
44
+ </div>
45
+ `;
46
+ return result;
47
+ };
48
+ const createGeneButtons = function () {
49
+ let result = `<div id=\'selected-genes\'>
50
+ <p>Added genes go below! Click on a gene to remove it.</p>
51
+ <div id=\'custom-network-genes-container\'>
52
+ `;
53
+ for (let gene in grnState.customWorkbook.genes) {
54
+ result += `
55
+ <div class=\'custom-network-gene\' id=${gene}>
56
+ <p class=\'custom-network-gene-display-id\'>
57
+ ${grnState.customWorkbook.genes[gene]}
58
+ </p>
59
+ <p class=\'custom-network-gene-id\'>
60
+ (${gene})
61
+ </p>
62
+ </div>
63
+ `;
64
+ }
65
+
66
+ result += "</div></div>";
67
+ return result;
68
+ };
69
+ const displayCurrentGenes = function () {
70
+ $("#selected-genes").remove();
71
+ $("#selected-genes-container").append(createGeneButtons());
72
+ for (let gene in grnState.customWorkbook.genes) {
73
+ $(`#${gene}`).on("click", (ev) => {
74
+ ev.stopPropagation();
75
+ $(`#${gene}`).remove();
76
+ delete grnState.customWorkbook.genes[gene];
77
+ });
78
+ }
79
+ };
80
+
81
+ const addGene = function () {
82
+ let gene = `${$("#network-search-bar").val()}`.toUpperCase();
83
+ $("#network-search-bar").val("");
84
+ if (!(/^[A-Z0-9_-]{1,12}$/.test(gene))) {
85
+ alert(`Gene: ${gene} is not to GRNsight specifications. Genes must be 12 characters or less,
86
+ containing "-", "_", and alpha-numeric characters only`);
87
+ } else {
88
+ let source = grnState.customWorkbook.source;
89
+ let headers = {
90
+ type:"NetworkGeneFromSource",
91
+ info: {
92
+ gene: gene,
93
+ source:grnState.customWorkbook.sources[source].source,
94
+ timestamp:grnState.customWorkbook.sources[source].timestamp.substring(0, 19).replace("T", " ")
95
+ }
96
+ };
97
+ queryNetworkDatabase(headers).then(function (response) {
98
+ if (response.geneId !== null && response.displayGeneId !== null) {
99
+ grnState.customWorkbook.genes[response.geneId] = response.displayGeneId;
100
+ displayCurrentGenes();
101
+ } else {
102
+ alert(`Gene: ${gene} was not found in this database. Please check for any typos and try again.`);
103
+ }
104
+ }).catch(function (error) {
105
+ console.log(error.stack);
106
+ console.log(error.name);
107
+ console.log(error.message);
108
+ });
109
+
110
+ }
111
+ };
112
+
113
+ const displayCreateNetworkModal = function () {
114
+ $("#createNetworkFormContainer").remove();
115
+ grnState.customWorkbook = {
116
+ genes : {},
117
+ source : null
118
+ };
119
+ // get sources from database
120
+ queryNetworkDatabase({type:"NetworkSource", info:null}).then(function (response) {
121
+ $("#createNetworkQuestions-container").append(createHTMLforForm(Object.keys(response.sources)));
122
+ grnState.customWorkbook.sources = response.sources;
123
+ grnState.customWorkbook.source = Object.keys(response.sources).length === 1 ?
124
+ Object.keys(response.sources)[0] : null;
125
+ }).catch(function (error) {
126
+ console.log(error.stack);
127
+ console.log(error.name);
128
+ console.log(error.message);
129
+ });
130
+ $(CREATE_NETWORK_MODAL).modal("show");
131
+ };
132
+
133
+ $("body").on("click", CREATE_NETWORK_CLASS, function (event) {
134
+ event.preventDefault();
135
+ event.stopPropagation();
136
+ displayCreateNetworkModal();
137
+ });
138
+
139
+ $("body").on("change", "#network-source", function (event) {
140
+ grnState.customWorkbook.source = $("#network-source").val();
141
+ grnState.customWorkbook.genes = {};
142
+ event.stopPropagation();
143
+ displayCurrentGenes();
144
+ });
145
+ $("body").on("click", "#submit-network", function () {
146
+ let genesAmount = Object.keys(grnState.customWorkbook.genes).length;
147
+ if (genesAmount === 0 ) {
148
+ alert("Network must have at least 1 gene");
149
+ } else if (genesAmount > 75) {
150
+ alert(`GRNsight is only capable of handling 75 genes at most. Your proposed network contains
151
+ ${genesAmount} genes. Please remove some genes from your proposed network.`);
152
+ } else {
153
+
154
+ let source = grnState.customWorkbook.source;
155
+ let headers = {
156
+ type:"CreateNetwork",
157
+ info: {
158
+ genes: grnState.customWorkbook.genes,
159
+ source:grnState.customWorkbook.sources[source].source,
160
+ timestamp:grnState.customWorkbook.sources[source].timestamp.substring(0, 19).replace("T", " ")
161
+ }
162
+ };
163
+ queryNetworkDatabase(headers).then(function (response) {
164
+ grnState.customWorkbook.links = response.links;
165
+ let genes = grnState.customWorkbook.genes;
166
+ let links = grnState.customWorkbook.links;
167
+ let genesAmount = Object.keys(genes).length;
168
+ let edgesAmount = Object.keys(links).length;
169
+ if (edgesAmount > 100) {
170
+ alert(`GRNsight is only capable of handling 100 edges at most. Your proposed network contains
171
+ ${edgesAmount} regulatory connections. Please remove some genes from your proposed network.`);
172
+ } else {
173
+ let name = `Custom Workbook: UnweightedGRN(${genesAmount} genes, ${edgesAmount} edges)`;
174
+ let workbook = {name, genes, links};
175
+ uploadCustomWorkbook(workbook, grnState);
176
+ $(CREATE_NETWORK_MODAL).modal("hide");
177
+ }
178
+ }).catch(function (error) {
179
+ console.log(error.stack);
180
+ console.log(error.name);
181
+ console.log(error.message);
182
+ });
183
+ }
184
+ });
185
+
186
+ $("body").on("click", "#enter-search", function (event) {
187
+ try {
188
+ event.preventDefault();
189
+ event.stopPropagation();
190
+ addGene();
191
+ } catch (error) {
192
+ console.log(error);
193
+ }
194
+ });
195
+ };
@@ -1,17 +1,17 @@
1
- var displayStatistics = function (network) { // eslint-disable-line no-unused-vars
1
+ var displayStatistics = function (workbook) { // eslint-disable-line no-unused-vars
2
2
  var $container = $(".graph-statistics-container").removeClass("hidden");
3
3
  var $thead = $container.find("thead");
4
4
  var $tbody = $container.find("tbody").empty();
5
5
 
6
6
  // TODO Still quick-and-dirty, needs robustness and optimization.
7
7
  var betweennessCentralityFor = function (geneName) {
8
- return network.graphStatisticsReport.betweennessCentrality.filter(function (bcItem) {
8
+ return workbook.graphStatisticsReport.betweennessCentrality.filter(function (bcItem) {
9
9
  return bcItem.gene.name === geneName;
10
10
  })[0].betweennessCentrality;
11
11
  };
12
12
 
13
13
  var shortestPath = function (sourceName, targetName) {
14
- var rawResult = network.graphStatisticsReport.shortestPath.filter(function (spItem) {
14
+ var rawResult = workbook.graphStatisticsReport.shortestPath.filter(function (spItem) {
15
15
  return spItem.source === sourceName && spItem.pathData.target === targetName;
16
16
  })[0].pathData.shortestPath;
17
17
 
@@ -20,20 +20,20 @@ var displayStatistics = function (network) { // eslint-disable-line no-unused-va
20
20
 
21
21
  var populateHead = function () {
22
22
  $thead.find(".shortest-path-column-headers").empty().append(
23
- network.genes.map(function (gene) {
23
+ workbook.genes.map(function (gene) {
24
24
  return $("<th></th>").text(gene.name);
25
25
  })
26
26
  );
27
27
 
28
- $thead.find(".shortest-path-header").attr({ colspan: network.genes.length });
28
+ $thead.find(".shortest-path-header").attr({ colspan: workbook.genes.length });
29
29
  };
30
30
 
31
31
  var populateBody = function () {
32
- $tbody.append(network.genes.map(function (gene) {
32
+ $tbody.append(workbook.genes.map(function (gene) {
33
33
  return $("<tr></tr>")
34
34
  .append($("<th></th>").text(gene.name))
35
35
  .append($("<td></td>").text(betweennessCentralityFor(gene.name)))
36
- .append(network.genes.map(function (targetGene) {
36
+ .append(workbook.genes.map(function (targetGene) {
37
37
  return $("<td></td>").text(shortestPath(gene.name, targetGene.name));
38
38
  }));
39
39
  }));