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
@@ -9,19 +9,20 @@ import {
9
9
  CHARGE_DEFAULT_VALUE,
10
10
  DEFAULT_MAX_LOG_FOLD_CHANGE,
11
11
  DEFAULT_ZOOM_VALUE,
12
- FORCE_GRAPH
12
+ FORCE_GRAPH,
13
+ VIEWPORT_INIT
13
14
  } from "./constants";
14
- let currentNetwork = null;
15
+ let currentWorkbook = null;
15
16
 
16
- const annotateLinks = network => {
17
+ const annotateLinks = workbook => {
17
18
  // TODO This duplicates logic that is done on the server side for an .xlsx spreadsheet.
18
19
  // Think of a way to consolidate it. Having discovered this, it seems like this should
19
20
  // be done on the client side because it rearranges data redundantly, for ease of display.
20
- network.positiveWeights = [];
21
- network.negativeWeights = [];
21
+ workbook.positiveWeights = [];
22
+ workbook.negativeWeights = [];
22
23
 
23
- network.links.forEach(link => {
24
- if (network.sheetType === "unweighted" && !link.value) {
24
+ workbook.links.forEach(link => {
25
+ if (workbook.sheetType === "unweighted" && !link.value) {
25
26
  link.value = 1;
26
27
  }
27
28
 
@@ -29,39 +30,31 @@ const annotateLinks = network => {
29
30
  link.type = "arrowhead";
30
31
  // link.stroke = "MediumVioletRed"; // GRNsight v1 magenta edge color
31
32
  link.stroke = "rgb(195, 61, 61)"; // Node coloring-consistent red edge color
32
- network.positiveWeights.push(link.value);
33
+ workbook.positiveWeights.push(link.value);
33
34
  } else {
34
35
  link.type = "repressor";
35
36
  // link.stroke = "DarkTurquoise"; // GRNsight v1 cyan edge color
36
37
  link.stroke = "rgb(51, 124, 183)"; // Node coloring-consistent blue edge color
37
- network.negativeWeights.push(link.value);
38
+ workbook.negativeWeights.push(link.value);
38
39
  }
39
40
  });
40
41
  };
41
42
 
42
- const genePageData = () => {
43
-
44
- // set to be a function for when data is read from .xml
45
- return {
46
- species: "Saccharomyces_cerevisiae",
47
- taxon: "559292"
48
- };
49
- };
50
-
51
43
  export const grnState = {
52
44
  name: null,
53
45
  simulation: undefined,
54
- newNetwork: false,
46
+ newWorkbook: false,
55
47
 
56
- get network () {
57
- return currentNetwork;
48
+ get workbook () {
49
+ return currentWorkbook;
58
50
  },
59
51
 
60
- set network (network) {
61
- currentNetwork = network;
52
+ set workbook (workbook) {
53
+ // console.dir(workbook);
54
+ currentWorkbook = workbook;
62
55
  // TODO: add colorOptimal so that the rest of the normalization code can get added
63
- this.resetNormalizationMax = max(network.positiveWeights.concat(network.negativeWeights));
64
- this.newNetwork = true;
56
+ this.resetNormalizationMax = max(workbook.positiveWeights.concat(workbook.negativeWeights));
57
+ this.newWorkbook = true;
65
58
  },
66
59
 
67
60
  // Edge Display Parameters
@@ -72,7 +65,7 @@ export const grnState = {
72
65
  grayEdgeThreshold: 5,
73
66
  dashedLine: false,
74
67
 
75
- annotateLinks: () => annotateLinks(currentNetwork),
68
+ annotateLinks: () => annotateLinks(currentWorkbook),
76
69
 
77
70
  // Zoom Parameter
78
71
  zoomValue: DEFAULT_ZOOM_VALUE,
@@ -80,7 +73,7 @@ export const grnState = {
80
73
  // Node Coloring
81
74
  nodeColoring: {
82
75
  showMenu: false,
83
- nodeColoringEnabled: true,
76
+ nodeColoringEnabled: undefined,
84
77
  logFoldChangeMaxValue: DEFAULT_MAX_LOG_FOLD_CHANGE,
85
78
  logFoldChangeUpdateTriggered: false,
86
79
  averageTopDataset: true,
@@ -94,8 +87,36 @@ export const grnState = {
94
87
 
95
88
 
96
89
  // Gene Page data
97
- species: genePageData().species,
98
- taxon: genePageData().taxon,
90
+ // left defaulting to yeast for tests, until a better solution is found
91
+ // Setting base case to yeast
92
+ genePageData: {
93
+ commonName: "Yeast",
94
+ species: "Saccharomyces_cerevisiae",
95
+ taxonUniprot: "559292",
96
+ taxonJaspar: "4932",
97
+ identified: false,
98
+ ensembl: "reg",
99
+ mine: "yeast"
100
+ },
101
+
102
+ nameToTaxon: {
103
+ // Treating like a dictionary with keys being the english name
104
+ // and values being a dictionary of (latin name, Uniprot, Jaspar)
105
+ // some taxon ids are different between the two
106
+ // changed spec names for common english and will have them formatted before calling an api
107
+ "Arabidopsis thaliana": { spec: "Arabidopsis_thaliana", jaspar: 3702, uniprot: 3702,
108
+ ensembl: "plant", mine: "thale"},
109
+ "Caenorhabditis elegans": { spec: "Caenorhabditis_elegans", jaspar: 6293, uniprot: 6293,
110
+ ensembl: "reg", mine: "worm"},
111
+ "Drosophila melanogaster": { spec: "Drosophila_melanogaster", jaspar: 7227, uniprot: 7227,
112
+ ensembl: "reg", mine: "fly"},
113
+ "Homo sapiens": { spec: "Homo_sapiens", jaspar: 9606, uniprot: 9606, ensembl: "reg",
114
+ mine: "fly"},
115
+ "Mus musculus": { spec: "Mus_musculus", jaspar: 10090, uniprot: 10090, ensembl: "reg",
116
+ mine: "mouse"},
117
+ "Saccharomyces cerevisiae": { spec: "Saccharomyces_cerevisiae", jaspar: 4932, uniprot: 559292,
118
+ ensembl: "reg", mine: "yeast"}
119
+ },
99
120
 
100
121
  // Slider Parameters
101
122
  slidersLocked: false,
@@ -120,5 +141,8 @@ export const grnState = {
120
141
  },
121
142
 
122
143
  // Graph Layout Parameter
123
- graphLayout: FORCE_GRAPH
144
+ graphLayout: FORCE_GRAPH,
145
+
146
+ // Viewport Size Parameter
147
+ viewportSize: VIEWPORT_INIT,
124
148
  };
@@ -0,0 +1,55 @@
1
+ /* eslint-disable */
2
+ // ^^^^^ Disabled because this code is meant to be run in the host website and explicitly relies
3
+ // on top-level names like iFrameResize and jQuery ($).
4
+
5
+ /**
6
+ * This script is for use by the top-level GRNsight website, in order to coordinate sizing between the
7
+ * host site and the embedded GRNsight application. It is meant to be executed _in the host site_
8
+ * via a standard `script` element.
9
+ *
10
+ * Prerequisites: jQuery and the iFrame Resizer library (v4.1.1 at this writing) must already be
11
+ * loaded into the web browser when this script executes.
12
+ */
13
+ iFrameResize({
14
+ checkOrigin: ["https://dondi.github.io", "https://grnsight.cs.lmu.edu"],
15
+ widthCalculationMethod: "taggedElement",
16
+ heightCalculationMethod: "taggedElement",
17
+ sizeWidth: true,
18
+ minWidth: 1081 // Based on minimum width page body and title elements.
19
+ }, "iframe.embedded-demo");
20
+
21
+ const HEIGHT_OFFSET = 53;
22
+ const HEIGHT_PADDING = 20;
23
+
24
+ const SMALL_HEIGHT = 648 + HEIGHT_OFFSET;
25
+ const MEDIUM_HEIGHT = 840 + HEIGHT_OFFSET;
26
+ const LARGE_HEIGHT = 1080 + HEIGHT_OFFSET;
27
+ const FIT_MARGIN = 4; // A little space so that "fit" isn’t totally flush with window bounds.
28
+
29
+ const sendDimensions = (destination, origin) => {
30
+ const iframeOffset = $("iframe.embedded-demo").offset();
31
+ destination.postMessage(
32
+ {
33
+ width: $(window).width() - iframeOffset.left,
34
+ height: $(window).height() - FIT_MARGIN,
35
+ top: iframeOffset.top
36
+ },
37
+
38
+ origin
39
+ );
40
+ };
41
+
42
+ window.addEventListener("message", event => {
43
+ if (event.origin.indexOf("https://grnsight.cs.lmu.edu") !== 0) {
44
+ // Ignore any message that did not originate from the GRNsight web client server.
45
+ return;
46
+ }
47
+
48
+ if (event.data === "dimensions") {
49
+ sendDimensions(event.source, event.origin);
50
+ }
51
+ });
52
+
53
+ window.addEventListener("resize", () => sendDimensions(
54
+ document.querySelector("iframe.embedded-demo").contentWindow, "https://grnsight.cs.lmu.edu"
55
+ ));
@@ -1,6 +1,11 @@
1
- import { updateApp } from "./update-app";
1
+ import { updaters } from "./graph";
2
+ import { updateApp, identifySpeciesMenu } from "./update-app";
3
+ import { saveSvgAsPng } from "save-svg-as-png";
4
+ import * as jsPDF from "jspdf";
5
+ import canvg from "canvg";
2
6
 
3
7
  import {
8
+ HOST_SITE,
4
9
  FORCE_GRAPH,
5
10
  GRID_LAYOUT,
6
11
  SET_NORMALIZATION_SIDEBAR,
@@ -19,7 +24,6 @@ import {
19
24
  SHOW_ALL_WEIGHTS,
20
25
  HIDE_ALL_WEIGHTS,
21
26
  COLOR_EDGES,
22
- BLACK_EDGES,
23
27
  LINK_DIST_SLIDER_SIDEBAR,
24
28
  LINK_DIST_MENU,
25
29
  CHARGE_SLIDER_SIDEBAR,
@@ -29,9 +33,10 @@ import {
29
33
  LOCK_SLIDERS_CLASS,
30
34
  RESET_SLIDERS_CLASS,
31
35
  UNDO_SLIDERS_RESET_CLASS,
36
+ FORCE_GRAPH_BUTTON,
37
+ FORCE_GRAPH_MENU,
32
38
  GRID_LAYOUT_BUTTON,
33
- GRID_LAYOUT_CLASS,
34
- FORCE_GRAPH_CLASS,
39
+ GRID_LAYOUT_MENU,
35
40
  NODE_COLORING_TOGGLE_CLASS,
36
41
  AVG_REPLICATE_VALS_TOP_MENU,
37
42
  AVG_REPLICATE_VALS_TOP_SIDEBAR,
@@ -44,6 +49,24 @@ import {
44
49
  BOTTOM_DATASET_SELECTION_SIDEBAR,
45
50
  TOP_DATASET_SELECTION_MENU,
46
51
  BOTTOM_DATASET_SELECTION_MENU,
52
+ ZOOM_DISPLAY_MAXIMUM_SELECTOR,
53
+ ZOOM_DISPLAY_MAXIMUM_VALUE,
54
+ ZOOM_DISPLAY_MINIMUM_SELECTOR,
55
+ ZOOM_DISPLAY_MINIMUM_VALUE,
56
+ EXPORT_TO_PNG,
57
+ EXPORT_TO_SVG,
58
+ EXPORT_TO_PDF,
59
+ SPECIES_DISPLAY,
60
+ SPECIES_BUTTON_CRESS,
61
+ SPECIES_BUTTON_FLY,
62
+ SPECIES_BUTTON_HUMAN,
63
+ SPECIES_BUTTON_MOUSE,
64
+ SPECIES_BUTTON_NEMATODE,
65
+ SPECIES_BUTTON_YEAST,
66
+ VIEWPORT_FIT,
67
+ VIEWPORT_INIT,
68
+ VIEWPORT_OPTION_CLASS,
69
+ VIEWPORT_OPTION_CLASS_SIDEBAR
47
70
  } from "./constants";
48
71
 
49
72
  import { setupLoadAndImportHandlers } from "./setup-load-and-import-handlers";
@@ -55,15 +78,151 @@ export const setupHandlers = grnState => {
55
78
  return Math.min(max, Math.max(min, value));
56
79
  };
57
80
 
58
- // Grid buttons
59
- const setGraphLayout = layout => {
60
- grnState.graphLayout = layout;
61
- updateApp(grnState);
81
+ const determineFileType = filename => {
82
+ if (filename.includes(".xlsx")) {
83
+ return ".xlsx";
84
+ } else if (filename.includes(".sif")) {
85
+ return ".sif";
86
+ } else if (filename.includes(".graphml")) {
87
+ return ".graphml";
88
+ }
89
+ };
90
+
91
+ // thank you for the help https://github.com/nytimes/svg-crowbar/blob/gh-pages/svg-crowbar-2.js
92
+ const setInlineStyles = (svg) => {
93
+ var emptySvg = window.document.createElementNS("http://www.w3.org/2000/svg", "svg");
94
+ window.document.body.appendChild(emptySvg);
95
+ var emptySvgDeclarationComputed = getComputedStyle(emptySvg);
96
+
97
+ const traverse = svg => {
98
+ var tree = [];
99
+ tree.push(svg);
100
+ // implement DFS
101
+ const visit = (node) => {
102
+ if (node && node.hasChildNodes()) {
103
+ var child = node.firstChild;
104
+ while (child) {
105
+ if (child.nodeType === 1 && child.nodeName !== "SCRIPT") {
106
+ tree.push(child);
107
+ visit(child);
108
+ }
109
+ child = child.nextSibling;
110
+ }
111
+ }
112
+ };
113
+ visit(svg);
114
+ return tree;
115
+ };
116
+
117
+ const explicitlySetStyle = element => {
118
+ const cSSStyleDeclarationComputed = window.getComputedStyle(element);
119
+ let i;
120
+ let len;
121
+ let key;
122
+ let value;
123
+ let computedStyleStr = "";
124
+
125
+ for (i = 0, len = cSSStyleDeclarationComputed.length; i < len; i++) {
126
+ key = cSSStyleDeclarationComputed[i];
127
+ value = cSSStyleDeclarationComputed.getPropertyValue(key);
128
+ if (value !== emptySvgDeclarationComputed.getPropertyValue(key)) {
129
+ // Don't set computed style of width and height. Makes SVG elmements disappear.
130
+ if ((key !== "height") && (key !== "width")) {
131
+ computedStyleStr += key + ":" + value + ";";
132
+ }
133
+
134
+ }
135
+ }
136
+ element.setAttribute("style", computedStyleStr);
137
+ };
138
+
139
+ // hardcode computed css styles inside svg
140
+ var allElements = traverse(svg);
141
+ var i = allElements.length;
142
+ while (i--) {
143
+ explicitlySetStyle(allElements[i]);
144
+ }
145
+ };
146
+
147
+ const sourceAttributeSetter = (svg) => {
148
+ svg.setAttribute("version", "1.1");
149
+
150
+ svg.removeAttribute("xmlns");
151
+ svg.removeAttribute("xlink");
152
+
153
+ if (!svg.hasAttributeNS("http://www.w3.org/2000/xmlns/", "xmlns")) {
154
+ svg.setAttributeNS("http://www.w3.org/2000/xmlns/", "xmlns", "http://www.w3.org/2000/svg");
155
+ }
156
+
157
+ if (!svg.hasAttributeNS("http://www.w3.org/2000/xmlns/", "xmlns:xlink")) {
158
+ svg.setAttributeNS("http://www.w3.org/2000/xmlns/", "xmlns:xlink", "http://www.w3.org/1999/xlink");
159
+ }
160
+ };
161
+
162
+ const exportSVG = (svgElement, name) => {
163
+ let source = svgElement;
164
+
165
+ sourceAttributeSetter(source);
166
+ setInlineStyles(source);
167
+
168
+ var doctype = "<?xml version=\"1.0\" standalone=\"no\"?><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">"; // eslint-disable-line
169
+ var sourceString = (new XMLSerializer()).serializeToString(source);
170
+ const finalSvgString = [doctype + sourceString];
171
+
172
+ var svgUrl = window.URL.createObjectURL(new Blob(finalSvgString, { "type" : "image\/svg+xml" }));
173
+
174
+ $("#exportAsSvg").attr("href", svgUrl);
175
+ $("#exportAsSvg").attr("download", name);
62
176
  };
63
177
 
64
- $(GRID_LAYOUT_BUTTON).click(() => setGraphLayout(grnState.graphLayout === FORCE_GRAPH ? GRID_LAYOUT : FORCE_GRAPH));
65
- $(FORCE_GRAPH_CLASS).click(() => setGraphLayout(FORCE_GRAPH));
66
- $(GRID_LAYOUT_CLASS).click(() => setGraphLayout(GRID_LAYOUT));
178
+ const exportPDF = (svgElement, name) => {
179
+ if (svgElement) {
180
+ svgElement = svgElement.replace(/\r?\n|\r/g, "").trim();
181
+ }
182
+
183
+ let canvas = document.createElement("canvas");
184
+ canvg(canvas, svgElement);
185
+ const imgData = canvas.toDataURL("image/png");
186
+
187
+ const pdf = new jsPDF("l", "mm", "letter");
188
+ const width = pdf.internal.pageSize.getWidth();
189
+ const height = pdf.internal.pageSize.getHeight();
190
+
191
+ pdf.addImage(imgData, "PNG", 0, 0, width, height);
192
+ pdf.save(name);
193
+ };
194
+
195
+ // Grid and Force Graph Layout
196
+ $(`${FORCE_GRAPH_MENU}, ${FORCE_GRAPH_BUTTON}`).click(() => {
197
+ updaters.setNodesToForceGraph();
198
+ grnState.graphLayout = FORCE_GRAPH;
199
+ updateApp(grnState);
200
+ });
201
+
202
+ $(`${GRID_LAYOUT_MENU}, ${GRID_LAYOUT_BUTTON}`).click(() => {
203
+ updaters.setNodesToGrid();
204
+ grnState.graphLayout = GRID_LAYOUT;
205
+ updateApp(grnState);
206
+ });
207
+
208
+ // Image Export
209
+ $(EXPORT_TO_PNG).click(() => {
210
+ var svgContainer = document.getElementById("exportContainer");
211
+ var editedName = grnState.name.replace(determineFileType(grnState.name), "") + ".png";
212
+ saveSvgAsPng(svgContainer, editedName);
213
+ });
214
+
215
+ $(EXPORT_TO_SVG).click(() => {
216
+ var svgContainer = document.getElementById("exportContainer");
217
+ var editedName = grnState.name.replace(determineFileType(grnState.name), "") + ".svg";
218
+ exportSVG(svgContainer, editedName );
219
+ });
220
+
221
+ $(EXPORT_TO_PDF).click(() => {
222
+ var svgContainer = document.getElementById("exportContainer").innerHTML;
223
+ var editedName = grnState.name.replace(determineFileType(grnState.name), "") + ".pdf";
224
+ exportPDF(svgContainer, editedName);
225
+ });
67
226
 
68
227
  // Node Coloring
69
228
  $(NODE_COLORING_TOGGLE_CLASS).click(() => {
@@ -151,7 +310,6 @@ export const setupHandlers = grnState => {
151
310
  });
152
311
 
153
312
  // Sliders Code
154
-
155
313
  var linkDistValidator = value => {
156
314
  return valueValidator(1, 1000, value);
157
315
  };
@@ -184,9 +342,21 @@ export const setupHandlers = grnState => {
184
342
  updateApp(grnState);
185
343
  });
186
344
 
187
- // Sliders code
188
345
  $(LOCK_SLIDERS_CLASS).click(() => {
189
346
  grnState.slidersLocked = !grnState.slidersLocked;
347
+ if (grnState.slidersLocked) {
348
+ grnState.showUndoReset = false;
349
+ }
350
+ updateApp(grnState);
351
+ });
352
+
353
+ $(VIEWPORT_OPTION_CLASS_SIDEBAR).click(function () {
354
+ grnState.viewportSize = $(this).val();
355
+ updateApp(grnState);
356
+ });
357
+
358
+ $(VIEWPORT_OPTION_CLASS).click(function () {
359
+ grnState.viewportSize = $(this).attr("value");
190
360
  updateApp(grnState);
191
361
  });
192
362
 
@@ -206,7 +376,7 @@ export const setupHandlers = grnState => {
206
376
  updateApp(grnState);
207
377
  });
208
378
 
209
- // Weights Visualization Handlers
379
+ // Weights Visualization
210
380
  $(WEIGHTS_SHOW_ALWAYS_CLASS).click(() => {
211
381
  grnState.edgeWeightDisplayOption = SHOW_ALL_WEIGHTS;
212
382
  updateApp(grnState);
@@ -238,7 +408,7 @@ export const setupHandlers = grnState => {
238
408
  updateApp(grnState);
239
409
  });
240
410
 
241
- // Grey Edges Handlers
411
+ // Grey Edges
242
412
  $(GREY_EDGES_DASHED_SIDEBAR).change(() => {
243
413
  grnState.dashedLine = $(GREY_EDGES_DASHED_SIDEBAR).prop("checked");
244
414
  updateApp(grnState);
@@ -265,13 +435,183 @@ export const setupHandlers = grnState => {
265
435
  });
266
436
 
267
437
  $(COLOR_EDGES).click(() => {
268
- grnState.colorOptimal = true;
438
+ grnState.colorOptimal = !grnState.colorOptimal;
439
+ updateApp(grnState);
440
+ });
441
+
442
+ // Species Selection
443
+ $(SPECIES_DISPLAY).change(() => {
444
+ var selection = $(SPECIES_DISPLAY).find(":selected").attr("value");
445
+ grnState.genePageData.identified = false;
446
+ identifySpeciesMenu(selection);
269
447
  updateApp(grnState);
270
448
  });
271
449
 
272
- $(BLACK_EDGES).click(() => {
273
- grnState.colorOptimal = false;
450
+ $(SPECIES_BUTTON_YEAST).click(function () {
451
+ var selection = $(SPECIES_BUTTON_YEAST).attr("id");
452
+ grnState.genePageData.identified = false;
453
+ identifySpeciesMenu(selection);
274
454
  updateApp(grnState);
275
455
  });
276
456
 
457
+ $(SPECIES_BUTTON_MOUSE).click(function () {
458
+ var selection = $(SPECIES_BUTTON_MOUSE).attr("id");
459
+ grnState.genePageData.identified = false;
460
+ identifySpeciesMenu(selection);
461
+ updateApp(grnState);
462
+ });
463
+
464
+ $(SPECIES_BUTTON_HUMAN).click(function () {
465
+ var selection = $(SPECIES_BUTTON_HUMAN).attr("id");
466
+ grnState.genePageData.identified = false;
467
+ identifySpeciesMenu(selection);
468
+ updateApp(grnState);
469
+ });
470
+
471
+ $(SPECIES_BUTTON_NEMATODE).click(function () {
472
+ var selection = $(SPECIES_BUTTON_NEMATODE).attr("id");
473
+ grnState.genePageData.identified = false;
474
+ identifySpeciesMenu(selection);
475
+ updateApp(grnState);
476
+ });
477
+
478
+ $(SPECIES_BUTTON_CRESS).click(function () {
479
+ var selection = $(SPECIES_BUTTON_CRESS).attr("id");
480
+ grnState.genePageData.identified = false;
481
+ identifySpeciesMenu(selection);
482
+ updateApp(grnState);
483
+ });
484
+
485
+ $(SPECIES_BUTTON_FLY).click(function () {
486
+ var selection = $(SPECIES_BUTTON_FLY).attr("id");
487
+ grnState.genePageData.identified = false;
488
+ identifySpeciesMenu(selection);
489
+ updateApp(grnState);
490
+ });
491
+
492
+ // Allow text-selection for input elements embedded within menu items.
493
+ //
494
+ // Partial thank you:
495
+ // https://stackoverflow.com/questions/6848140/how-do-i-prevent-drag-on-a-child-but-allow-drag-on-the-parent
496
+ //
497
+ // We use function syntax so that internal `this` can be used.
498
+ $(".dropdown input.keepopen").parent().attr({
499
+ draggable: false
500
+ });
501
+
502
+ // Prevent Bootstrap dropdown from closing on clicks in menu input boxes
503
+ // https://stackoverflow.com/a/27759926
504
+ $(".dropdown").on({
505
+ "click": function (event) {
506
+ if ($(event.target).hasClass("keepopen")) {
507
+ $(this).data("closable", $(event.target).closest(".dropdown-toggle").length !== 0);
508
+ }
509
+ },
510
+
511
+ "mouseup": function (event) {
512
+ if ($(event.target).find(".keepopen").length > 0) {
513
+ $(this).data("closable", $(event.target).closest(".dropdown-toggle").length !== 0);
514
+ }
515
+ },
516
+
517
+ "hide.bs.dropdown": function () {
518
+ var hide = $(this).data("closable");
519
+ $(this).data("closable", true);
520
+ return hide;
521
+ }
522
+ });
523
+
524
+ $(ZOOM_DISPLAY_MAXIMUM_SELECTOR).text(ZOOM_DISPLAY_MAXIMUM_VALUE);
525
+ $(ZOOM_DISPLAY_MINIMUM_SELECTOR).text(ZOOM_DISPLAY_MINIMUM_VALUE);
526
+
527
+ // Viewport handling.
528
+ const setupContainer = function () {
529
+ const MEDIUM_PAGE_WIDTH = 1500;
530
+ const LARGE_PAGE_WIDTH = 2200;
531
+
532
+ const initializeViewportSize = (width) => {
533
+ if (width < MEDIUM_PAGE_WIDTH) {
534
+ grnState.viewportSize = "containerS";
535
+ } else if (width > MEDIUM_PAGE_WIDTH && width < LARGE_PAGE_WIDTH) {
536
+ grnState.viewportSize = "containerM";
537
+ } else {
538
+ grnState.viewportSize = "containerL";
539
+ }
540
+ };
541
+
542
+ // For viewport-fit, we create a transient `dimensions` property in `grnState`
543
+ // which `updateApp` will use to determine the latest size.
544
+ //
545
+ // For any other size, we blank out the transient `dimensions`.
546
+ if (window === window.top) {
547
+ initializeViewportSize($(window).width());
548
+ $(window).on("resize", () => {
549
+ if (grnState.viewportSize === VIEWPORT_FIT) {
550
+ grnState.dimensions = {
551
+ width: $(window).width(),
552
+ height: $(window).height(),
553
+ top: 0
554
+ };
555
+
556
+ updateApp(grnState);
557
+ } else {
558
+ delete grnState.dimensions;
559
+ }
560
+ });
561
+ } else {
562
+ window.addEventListener("message", event => {
563
+ if (event.origin.indexOf(HOST_SITE) !== 0) {
564
+ return;
565
+ }
566
+
567
+ // Also filter out all but dimensions messages.
568
+ const { data } = event;
569
+ if (typeof(data) !== "object" || (
570
+ data.width === undefined ||
571
+ data.height === undefined ||
572
+ data.top === undefined
573
+ )) {
574
+ return;
575
+ }
576
+
577
+ // Live changes only matter if we are doing Fit to Window or initializing.
578
+ if ([VIEWPORT_FIT, VIEWPORT_INIT].includes(grnState.viewportSize)) {
579
+ if (grnState.viewportSize === VIEWPORT_INIT) {
580
+ initializeViewportSize(data.width);
581
+ }
582
+
583
+ if (grnState.viewportSize === VIEWPORT_FIT) {
584
+ grnState.dimensions = data;
585
+ }
586
+
587
+ updateApp(grnState);
588
+ } else {
589
+ delete grnState.dimensions;
590
+ }
591
+ });
592
+ }
593
+
594
+ $("#restrict-graph-to-viewport").on("click", function () {
595
+ if ($(".viewport").prop("checked")) {
596
+ $("#restrict-graph-to-viewport span").removeClass("glyphicon-ok");
597
+ $(".viewport").prop("checked", false);
598
+ $(".viewport").trigger("change");
599
+ } else {
600
+ $("#restrict-graph-to-viewport span").addClass("glyphicon-ok");
601
+ $(".viewport").prop("checked", true).trigger("change");
602
+ }
603
+ });
604
+
605
+ $("#expressionDB").on("click", function () {
606
+ if (!$("#expressionDB span").hasClass("glyphicon-ok")) {
607
+ $("#expressionDB span").addClass("glyphicon-ok");
608
+ $("#expressionDB").trigger("change");
609
+ } else {
610
+ $("#expressionDB span").removeClass("glyphicon-ok");
611
+ $("#expressionDB").trigger("change");
612
+ }
613
+ });
614
+ };
615
+
616
+ setupContainer();
277
617
  };