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
@@ -2,8 +2,18 @@
2
2
  // But placed here for now so that the true MVC cycle of grnState, updateApp, and the
3
3
  // controller code installed by setupHandlers can access them.
4
4
 
5
+ /* eslint-disable max-len */
6
+ import { grnState } from "./grnstate";
7
+
8
+ import {
9
+ stopLoadingIcon,
10
+ startLoadingIcon
11
+ } from "./update-app";
12
+
13
+ import { queryExpressionDatabase } from "./api/grnsight-api.js";
14
+
5
15
  export const uploadState = {
6
- currentNetwork: null,
16
+ currentWorkbook: null,
7
17
  };
8
18
 
9
19
  export const upload = function () {
@@ -40,8 +50,8 @@ export const upload = function () {
40
50
  }
41
51
  });
42
52
 
43
- var flattenNetwork = function (network, sheetType) {
44
- var result = $.extend(true, { }, network, { sheetType: sheetType });
53
+ var flattenWorkbook = function (workbook, sheetType) {
54
+ var result = $.extend(true, { }, workbook, { sheetType: sheetType });
45
55
  result.links.forEach(function (link) {
46
56
  link.source = link.source.index;
47
57
  link.target = link.target.index;
@@ -56,7 +66,6 @@ export const upload = function () {
56
66
  if (currentExtension && currentExtension.length) {
57
67
  filename = filename.substr(0, filename.length - currentExtension[0].length);
58
68
  }
59
-
60
69
  if (suffix) {
61
70
  filename = filename + "_" + suffix;
62
71
  }
@@ -64,53 +73,361 @@ export const upload = function () {
64
73
  return filename + "." + extension;
65
74
  };
66
75
 
67
- var performExport = function (route, extension, sheetType) {
68
- return function () {
69
- // Deleted event parameter
76
+ const handleExportExcelButtonExport = (route, extension, sheetType, source) => {
77
+ grnState.workbook.exportNetworkType = sheetType;
78
+ const expressionSheets = $("input[name=expressionSheets]:checked");
79
+ var chosenSheets = [];
80
+ for (const [key, value] of Object.entries(expressionSheets)) {
81
+ if (!isNaN(parseInt(key, 10))) {
82
+ if (value.value === "select all") {
83
+ const allExpressionSheets = $("input[name=expressionSheets]");
84
+ chosenSheets = [];
85
+ for (const [k, v] of Object.entries(allExpressionSheets)) {
86
+ if (!isNaN(parseInt(k, 10))) {
87
+ if (v.value !== "select all") {
88
+ chosenSheets.push(v.value);
89
+ }
90
+ }
91
+ }
92
+ break;
93
+ } else {
94
+ chosenSheets.push(value.value);
95
+ }
96
+ }
97
+ }
98
+ const exportSheets = {};
99
+
100
+ if (source === "userInput" && grnState.workbook.expression) {
101
+ // source is from user speadsheet
102
+ // parse through grnState expression sheets and collect the sheets to be exported
103
+ for (let sheet of chosenSheets) {
104
+ if (grnState.workbook.expression[sheet]) {
105
+ exportSheets[sheet] = grnState.workbook.expression[sheet];
106
+ }
107
+ }
108
+ grnState.workbook.exportExpression = exportSheets;
70
109
  if (!$(this).parent().hasClass("disabled")) {
71
- var networkToExport = flattenNetwork(uploadState.currentNetwork, sheetType);
72
- var networkFilename = filenameWithExtension(sheetType !== uploadState.currentNetwork.sheetType ?
110
+ var workbookToExport = flattenWorkbook(uploadState.currentWorkbook, sheetType);
111
+ var workbookFilename = filenameWithExtension(sheetType !== uploadState.currentWorkbook.sheetType ?
73
112
  sheetType : "", extension);
74
- networkToExport.filename = networkFilename;
113
+ workbookToExport.filename = workbookFilename;
75
114
 
76
115
  var exportForm = $("<form></form>").attr({
77
116
  method: "POST",
78
- action: $("#service-root").val() + "/" + route
117
+ action: $(".service-root").val() + "/" + route
79
118
  }).append($("<input></input>").attr({
80
119
  type: "hidden",
81
120
  name: "filename",
82
- value: networkFilename
121
+ value: workbookFilename
83
122
  })).append($("<input></input>").attr({
84
123
  type: "hidden",
85
- name: "network",
86
- value: JSON.stringify(networkToExport)
124
+ name: "workbook",
125
+ value: JSON.stringify(workbookToExport)
87
126
  }));
88
127
  $("body").append(exportForm);
89
128
  exportForm.submit();
90
129
  exportForm.remove();
91
130
  }
131
+ $("#exportExcelModal").modal("hide");
132
+ } else {
133
+ // source is from database so lets query her up
134
+ for (let sheet of chosenSheets) {
135
+ startLoadingIcon();
136
+ queryExpressionDatabase({
137
+ dataset: sheet,
138
+ genes : grnState.workbook.genes
139
+ }).then(function (response) {
140
+ exportSheets[sheet] = response;
141
+ if (exportSheets[sheet]) {
142
+ stopLoadingIcon();
143
+ if (Object.keys(exportSheets).length === chosenSheets.length) {
144
+ // we have all of the sheets so lets initilize the export process
145
+ const finalExportSheets = {};
146
+ Object.keys(exportSheets).forEach((sheet) => {
147
+ // make sure that the sheets we queried are populated with the correct data
148
+ if (exportSheets[sheet].data && exportSheets[sheet].timePoints) {
149
+ // if the resulting query contains both the timePoint data and
150
+ // the gene data then export it. If not don't :)
151
+ finalExportSheets[sheet] = exportSheets[sheet];
152
+ }
153
+ });
154
+ grnState.workbook.exportExpression = finalExportSheets;
155
+ if (!$(this).parent().hasClass("disabled")) {
156
+ var workbookToExport = flattenWorkbook(uploadState.currentWorkbook, sheetType);
157
+ var workbookFilename = filenameWithExtension(sheetType !== uploadState.currentWorkbook.sheetType ?
158
+ sheetType : "", extension);
159
+ workbookToExport.filename = workbookFilename;
160
+ var exportForm = $("<form></form>").attr({
161
+ method: "POST",
162
+ action: $(".service-root").val() + "/" + route
163
+ }).append($("<input></input>").attr({
164
+ type: "hidden",
165
+ name: "filename",
166
+ value: workbookFilename
167
+ })).append($("<input></input>").attr({
168
+ type: "hidden",
169
+ name: "workbook",
170
+ value: JSON.stringify(workbookToExport)
171
+ }));
172
+ $("body").append(exportForm);
173
+ exportForm.submit();
174
+ exportForm.remove();
175
+ }
176
+ $("#exportExcelModal").modal("hide");
177
+ }
178
+ }
179
+ }).catch(function (error) {
180
+ console.log(error.stack);
181
+ console.log(error.name);
182
+ console.log(error.message);
183
+ });
184
+ }
185
+ }
186
+ };
187
+
188
+ var performExport = function (route, extension, sheetType, source) {
189
+ return function () {
190
+ // Deleted event parameter
191
+ if (route === "export-to-excel" && source) {
192
+ handleExportExcelButtonExport(route, extension, sheetType, source);
193
+ } else {
194
+ if (!$(this).parent().hasClass("disabled")) {
195
+ var workbookToExport = flattenWorkbook(uploadState.currentWorkbook, sheetType);
196
+ var workbookFilename = filenameWithExtension(sheetType !== uploadState.currentWorkbook.sheetType ?
197
+ sheetType : "", extension);
198
+ workbookToExport.filename = workbookFilename;
199
+
200
+ var exportForm = $("<form></form>").attr({
201
+ method: "POST",
202
+ action: $(".service-root").val() + "/" + route
203
+ }).append($("<input></input>").attr({
204
+ type: "hidden",
205
+ name: "filename",
206
+ value: workbookFilename
207
+ })).append($("<input></input>").attr({
208
+ type: "hidden",
209
+ name: "workbook",
210
+ value: JSON.stringify(workbookToExport)
211
+ }));
212
+ $("body").append(exportForm);
213
+ exportForm.submit();
214
+ exportForm.remove();
215
+ }
216
+
217
+ }
92
218
  };
93
219
  };
94
220
 
95
- $("#exportAsExcelWkbk").click(performExport("export-to-excel", "xlsx", "unweighted"));
96
- $("#exportAsUnweightedSif").click(performExport("export-to-sif", "sif", "unweighted"));
97
- $("#exportAsWeightedSif").click(performExport("export-to-sif", "sif", "weighted"));
98
- $("#exportAsUnweightedGraphMl").click(performExport("export-to-graphml", "graphml", "unweighted"));
99
- $("#exportAsWeightedGraphMl").click(performExport("export-to-graphml", "graphml", "weighted"));
100
-
101
- // Prevent Bootstrap dropdown from closing on clicks in menu input boxes
102
- // https://stackoverflow.com/a/27759926
103
- $(".dropdown").on({
104
- "click": function (event) {
105
- if ($(event.target).hasClass("keepopen")) {
106
- $(this).data("closable", $(event.target).closest(".dropdown-toggle").length !== 0);
221
+ const createHTMLforForm1 = () => {
222
+ return `
223
+ <form id=\'exportExcelForm1\'>
224
+ <div class=\'form-group\'>
225
+ <p id=\'exportExcelNetwork\'></p>
226
+ <ul class=\'export-radio-group\' id=\'export-excel-weights-list\' style=\"list-style-type:none;\"> </ul>
227
+ </div>
228
+ <div class=\'form-group\'>
229
+ <p id=\'exportExcelExpressionSources\'> </p>
230
+ <ul class=\'export-radio-group\' id=\'export-excel-expression-source-list\' style=\"list-style-type:none;\">
231
+ <li>
232
+ <input type=\'radio\' name=\'expressionSource\' checked=\"true\" value=\"userInput\" id=\'exportExcelExpressionSource-userInputRadio\' class=\'export-radio\' />
233
+ <label for=\'exportExcelExpressionSource-userInputRadio\' id=\'exportExcelExpressionSource-userInput\' class=\'export-radio-label\'> </label>
234
+ </li>
235
+ <li>
236
+ <input type=\'radio\' name=\'expressionSource\' value=\"Dahlquist_2018\" id=\'exportExcelExpressionSource-DahlquistRadio\' class=\'export-radio\' />
237
+ <label for=\'exportExcelExpressionSource-DahlquistRadio\' id=\'exportExcelExpressionSource-Dahlquist\' class=\'export-radio-label\'> </label>
238
+ </li>
239
+ <li>
240
+ <input type=\'radio\' name=\'expressionSource\' value=\"Kitagawa_2002\" id=\'exportExcelExpressionSource-KitagawaRadio\' class=\'export-radio\' />
241
+ <label for=\'exportExcelExpressionSource-KitagawaRadio\' id=\'exportExcelExpressionSource-Kitagawa\' class=\'export-radio-label\'> </label>
242
+ </li>
243
+ <li>
244
+ <input type=\'radio\' name=\'expressionSource\' value=\"Thorsen_2007\" id=\'exportExcelExpressionSource-ThorsenRadio\' class=\'export-radio\' />
245
+ <label for=\'exportExcelExpressionSource-ThorsenRadio\' id=\'exportExcelExpressionSource-Thorsen\' class=\'export-radio-label\'> </label>
246
+ </li>
247
+ <li>
248
+ <input type=\'radio\' name=\'expressionSource\' value=\"Barreto_2012\" id=\'exportExcelExpressionSource-BarretoRadio\' class=\'export-radio\' />
249
+ <label for=\'exportExcelExpressionSource-BarretoRadio\' id=\'exportExcelExpressionSource-Barreto\' class=\'export-radio-label\'> </label>
250
+ </li>
251
+ </ul>
252
+ </div>
253
+ <button type=\'submit\' class=\'btn btn-default\' id=\'exportExcelContinueButton\'> Continue </button>
254
+ </form>
255
+ `;
256
+ };
257
+
258
+ const createHTMLforForm2 = () => {
259
+ return `
260
+ <form id=\'exportExcelForm2\'>
261
+ <div class=\'form-group\'>
262
+ <p id=\'exportExcelExpressionSheets\'></p>
263
+ <ul class=\'exportExcelExpressionSheets\' id=\'export-excel-expression-sheet-list\' style=\"list-style-type:none;\"> </ul>
264
+ </div>
265
+ <input type=\'button\' class=\'btn btn-default\' id=\'exportExcelButton\' value=\'Export Workbook\' />
266
+ </form>
267
+ `;
268
+ };
269
+ const createHTMLforWeights = () => {
270
+ $(".export-excel-weighted-option").remove();
271
+ if (grnState.workbook.sheetType !== "weighted") {
272
+ return `
273
+ <li class=\'export-excel-weighted-option\'>
274
+ <input type=\'radio\' checked=\"true\" name=\'network-weights\' value=\"unweighted\" id=\'exportExcelUnweightedRadio\' class=\'export-radio\' />
275
+ <label for=\'exportExcelUnweightedRadio\' id=\'exportExcelUnweighted\' class=\'export-radio-label\' >
276
+ Unweighted
277
+ </label>
278
+ </li>`;
279
+ } else {
280
+ return `
281
+ <li class=\'export-excel-weighted-option\'>
282
+ <input type=\'radio\' checked=\"true\" name=\'network-weights\' value=\"weighted\" id=\'exportExcelWeightedRadio\' class=\'export-radio\' />
283
+ <label for=\'exportExcelWeightedRadio\' id=\'exportExcelWeighted\' class=\'export-radio-label\' >
284
+ Weighted
285
+ </label>
286
+ </li>
287
+ <li class=\'export-excel-weighted-option\'>
288
+ <input type=\'radio\' name=\'network-weights\' value=\"unweighted\" id=\'exportExcelUnweightedRadio\' class=\'export-radio\' />
289
+ <label for=\'exportExcelUnweightedRadio\' id=\'exportExcelUnweighted\' class=\'export-radio-label\' >
290
+ Unweighted
291
+ </label>
292
+ </li>
293
+ `;
294
+ }
295
+ };
296
+
297
+ const createHTMLforExpressionSheets = (source) => {
298
+ $(".export-excel-expression-sheet-option").remove();
299
+ // check if user updated data is selected
300
+ let result = `
301
+ <li class=\'export-excel-expression-sheet-option\'>
302
+ <input type=\'checkbox\' name=\'expressionSheets\' checked=\"true\" value=\"select all\" id=\'exportExcelExpression-All\' class=\'export-checkbox\' />
303
+ <label for=\'exportExcelExpression-All\' id=\'exportExcelExpression-All-label\' class=\'export-checkbox-label\' >
304
+ All Expression Sheets
305
+ </label>
306
+ </li>
307
+ `;
308
+ if (source === "userInput") {
309
+ for (let expression in grnState.workbook.expression) {
310
+ result = result + `
311
+ <li class=\'export-excel-expression-sheet-option\'>
312
+ <input type=\'checkbox\' name=\'expressionSheets\' checked=\"true\" value=\"${expression}\" id=\'exportExcelExpression-${expression}\' class=\'export-checkbox\' />
313
+ <label for=\'exportExcelExpression-${expression}\' id=\'exportExcelExpression-${expression}-label\' class=\'export-checkbox-label\' >
314
+ ${expression}
315
+ </label>
316
+ </li>
317
+ `;
107
318
  }
108
- },
109
- "hide.bs.dropdown": function () {
110
- var hide = $(this).data("closable");
111
- $(this).data("closable", true);
112
- return hide;
319
+ } else if (source === "Dahlquist_2018") {
320
+ // if the source is from a database
321
+ result = result + `
322
+ <li class=\'export-excel-expression-sheet-option\'>
323
+ <input type=\'checkbox\' name=\'expressionSheets\' checked=\"true\" value=\"Dahlquist_2018_dcin5\" id=\'exportExcelExpression-Dahlquist_2018_dcin5\' class=\'export-checkbox\' />
324
+ <label for=\'exportExcelExpression-Dahlquist_2018_dcin5\' id=\'exportExcelExpression-Dahlquist_2018_dcin5-label\' class=\'export-checkbox-label\' >
325
+ Dahlquist_2018_dcin5
326
+ </label>
327
+ </li>
328
+ <li class=\'export-excel-expression-sheet-option\'>
329
+ <input type=\'checkbox\' checked=\"true\" name=\'expressionSheets\' value=\"Dahlquist_2018_dgln3\" id=\'exportExcelExpression-Dahlquist_2018_dgln3\' class=\'export-checkbox\' />
330
+ <label for=\'exportExcelExpression-Dahlquist_2018_dgln3\' id=\'exportExcelExpression-Dahlquist_2018_dgln3-label\' class=\'export-checkbox-label\' >
331
+ Dahlquist_2018_dgln3
332
+ </label>
333
+ </li>
334
+ <li class=\'export-excel-expression-sheet-option\'>
335
+ <input type=\'checkbox\' checked=\"true\" name=\'expressionSheets\' value=\"Dahlquist_2018_dhap4\" id=\'exportExcelExpression-Dahlquist_2018_dhap4\' class=\'export-checkbox\' />
336
+ <label for=\'exportExcelExpression-Dahlquist_2018_dhap4\' id=\'exportExcelExpression-Dahlquist_2018_dhap4-label\' class=\'export-checkbox-label\' >
337
+ Dahlquist_2018_dhap4
338
+ </label>
339
+ </li>
340
+ <li class=\'export-excel-expression-sheet-option\'>
341
+ <input type=\'checkbox\' checked=\"true\" name=\'expressionSheets\' value=\"Dahlquist_2018_dzap1\" id=\'exportExcelExpression-Dahlquist_2018_dzap1\' class=\'export-checkbox\' />
342
+ <label for=\'exportExcelExpression-Dahlquist_2018_dzap1\' id=\'exportExcelExpression-Dahlquist_2018_dzap1-label\' class=\'export-checkbox-label\' >
343
+ Dahlquist_2018_dzap1
344
+ </label>
345
+ </li>
346
+ <div class=\'expression-db-loader\'></div>
347
+ <div class=\'expression-db-loader-text\'>Expression Database is Loading</div>
348
+ `;
349
+ } else if (source === "Kitagawa_2002") {
350
+ // if the source is from a database
351
+ result = result + `
352
+ <li class=\'export-excel-expression-sheet-option\'>
353
+ <input type=\'checkbox\' checked=\"true\" name=\'expressionSheets\' value=\"Kitagawa_2002_wt\" id=\'exportExcelExpression-Kitagawa_2002_wt\' class=\'export-checkbox\' />
354
+ <label for=\'exportExcelExpression-Kitagawa_2002_wt\' id=\'exportExcelExpression-Kitagawa_2002_wt-label\' class=\'export-checkbox-label\' >
355
+ Kitagawa_2002_wt
356
+ </label>
357
+ </li>
358
+ <div class=\'expression-db-loader\'></div>
359
+ <div class=\'expression-db-loader-text\'>Expression Database is Loading</div>
360
+ `;
361
+ } else if (source === "Thorsen_2007") {
362
+ // if the source is from a database
363
+ result = result + `
364
+ <li class=\'export-excel-expression-sheet-option\'>
365
+ <input type=\'checkbox\' checked=\"true\" name=\'expressionSheets\' value=\"Thorsen_2007_wt\" id=\'exportExcelExpression-Thorsen_2007_wt\' class=\'export-checkbox\' />
366
+ <label for=\'exportExcelExpression-Thorsen_2007_wt\' id=\'exportExcelExpression-Thorsen_2007_wt-label\' class=\'export-checkbox-label\' >
367
+ Thorsen_2007_wt
368
+ </label>
369
+ </li>
370
+ <div class=\'expression-db-loader\'></div>
371
+ <div class=\'expression-db-loader-text\'>Expression Database is Loading</div>
372
+ `;
373
+ } else if (source === "Barreto_2012") {
374
+ // if the source is from a database
375
+ result = result + `
376
+ <li class=\'export-excel-expression-sheet-option\'>
377
+ <input type=\'checkbox\' checked=\"true\" name=\'expressionSheets\' value=\"Barreto_2012_wt\" id=\'exportExcelExpression-Barreto_2012_wt\' class=\'export-checkbox\' />
378
+ <label for=\'exportExcelExpression-Barreto_2012_wt\' id=\'exportExcelExpression-Barreto_2012_wt-label\' class=\'export-checkbox-label\' >
379
+ Barreto_2012_wt
380
+ </label>
381
+ </li>
382
+ <div class=\'expression-db-loader\'></div>
383
+ <div class=\'expression-db-loader-text\'>Expression Database is Loading</div>
384
+ `;
113
385
  }
114
- });
386
+ return result;
387
+ };
388
+
389
+ const handleExportExcelButtonContinue = () => {
390
+ const weight = $("input[name=network-weights]:checked")[0].value;
391
+ const source = $("input[name=expressionSource]:checked")[0].value;
392
+ $("#exportExcelForm1").remove();
393
+ // $("#exportExcelForm1")[0].style = "display:none;";
394
+ $("#exportExcelQuestions-containter").append(createHTMLforForm2);
395
+ $("#exportExcelExpressionSheets").html("Select Expression Sheets:");
396
+ $("#export-excel-expression-sheet-list").append(createHTMLforExpressionSheets(source));
397
+ $("#exportExcelButton").on("click", performExport("export-to-excel", "xlsx", weight, source));
398
+ };
399
+
400
+ var displayExportExcelModal = function () {
401
+ $("#exportExcelForm2").remove();
402
+ $("#exportExcelQuestions-containter").append(createHTMLforForm1);
403
+ $("#exportExcelNetwork").html("Select the workbooks export type:");
404
+ $("#export-excel-weights-list").append(createHTMLforWeights());
405
+
406
+ $("#exportExcelExpressionSources").html("Select the Expression Data Source:");
407
+ $("#exportExcelExpressionSource-userInput").html(grnState.name);
408
+ $("#exportExcelExpressionSource-Dahlquist").html("Dahlquist_2018");
409
+ $("#exportExcelExpressionSource-Kitagawa").html("Kitagawa_2002");
410
+ $("#exportExcelExpressionSource-Thorsen").html("Thorsen_2007");
411
+ $("#exportExcelExpressionSource-Barreto").html("Barreto_2012");
412
+ $("#exportExcelContinueButton").on("click", () => handleExportExcelButtonContinue());
413
+ $("#exportExcelModal").modal("show");
414
+ };
415
+
416
+ var performExcelExport = function () {
417
+ return function () {
418
+ if (!$(this).parent().hasClass("disabled")) {
419
+ displayExportExcelModal();
420
+ }
421
+ };
422
+ };
423
+
424
+ // $("#exportAsExcelWkbk").click(performExport("export-to-excel", "xlsx", "unweighted"));
425
+ $("#exportAsUnweightedSif").on("click", performExport("export-to-sif", "sif", "unweighted"));
426
+ $("#exportAsWeightedSif").on("click", performExport("export-to-sif", "sif", "weighted"));
427
+ $("#exportAsUnweightedGraphMl").on("click", performExport("export-to-graphml", "graphml", "unweighted"));
428
+ $("#exportAsWeightedGraphMl").on("click", performExport("export-to-graphml", "graphml", "weighted"));
429
+ // $("#exportAsUnweightedExcel").on("click", performExport("export-to-excel", "xlsx", "unweighted"));
430
+ // $("#exportAsWeightedExcel").on("click", performExport("export-to-excel", "xlsx", "weighted"));
431
+ $("#exportAsExcel").on("click", performExcelExport());
115
432
 
116
433
  };
@@ -1,55 +1,19 @@
1
1
  export var displayWarnings = function (warnings) {
2
2
  $("#warningIntro").html("There were " + warnings.length + " warning(s) detected in this file. " +
3
- "The graph will be loaded, but may not be displayed accurately. " +
3
+ "The graph will be loaded, but may not be displayed accurately. Please note that" +
4
+ " this file may not export properly if this error remains in the workbook. " +
4
5
  "We recommend you review your file and ensure that it is formatted correctly. " +
5
6
  "To view the details of the warning(s), please click on the \"Warnings List\" below.");
6
-
7
7
  var warningsString = "";
8
- // printed = [MISSING_SOURCE,MISSING_TARGET,INVALID_DATA,RANDOM_DATA,
9
- // EMPTY_ROW,INVALID_NETWORK_SIZE,INVALID_CELL_DATA_TYPE]
10
-
11
8
  var NUM_POSSIBLE_WARNINGS = 11;
12
-
9
+ var warningCounts = {};
10
+ var index = 0;
13
11
  // Fill printed with 0s programatically
14
12
  var printed = [];
15
13
  for (var i = 0; i < NUM_POSSIBLE_WARNINGS; i++) {
16
14
  printed.push(0);
17
15
  }
18
16
 
19
- var missingSourceCount = warnings.filter(function (x) {
20
- return x.warningCode === "MISSING_SOURCE";
21
- });
22
- var missingTargetCount = warnings.filter(function (x) {
23
- return x.warningCode === "MISSING_TARGET";
24
- });
25
- var invalidDataCount = warnings.filter(function (x) {
26
- return x.warningCode === "INVALID_DATA";
27
- });
28
- var randomDataCount = warnings.filter(function (x) {
29
- return x.warningCode === "RANDOM_DATA";
30
- });
31
- var emptyRowCount = warnings.filter(function (x) {
32
- return x.warningCode === "EMPTY_ROW";
33
- });
34
- var invalidNetworkSizeCount = warnings.filter(function (x) {
35
- return x.warningCode === "INVALID_NETWORK_SIZE";
36
- });
37
- var extraneousDataCount = warnings.filter(function (x) {
38
- return x.warningCode === "EXTRANEOUS_DATA";
39
- });
40
- var edgesWithoutWeightsCount = warnings.filter(function (x) {
41
- return x.warningCode === "EDGES_WITHOUT_WEIGHTS";
42
- });
43
- var edgeDefaultNotDirectedCount = warnings.filter(function (x) {
44
- return x.warningCode === "EDGE_DEFAULT_NOT_DIRECTED";
45
- });
46
- var sifFormatWarningCount = warnings.filter(function (x) {
47
- return x.warningCode === "SIF_FORMAT_WARNING";
48
- });
49
- var incorrectlyNamedSheetWarningCount = warnings.filter(function (x) {
50
- return x.warningCode === "INCORRECTLY_NAMED_SHEET";
51
- });
52
-
53
17
  var appendWarning = function (warning) {
54
18
  warningsString += warning.errorDescription + "<br><br>";
55
19
  };
@@ -69,17 +33,15 @@ export var displayWarnings = function (warnings) {
69
33
  }
70
34
  };
71
35
 
72
- createWarningsString(missingSourceCount, 0);
73
- createWarningsString(missingTargetCount, 1);
74
- createWarningsString(invalidDataCount, 2);
75
- createWarningsString(randomDataCount, 3);
76
- createWarningsString(emptyRowCount, 4);
77
- createWarningsString(invalidNetworkSizeCount, 5);
78
- createWarningsString(extraneousDataCount, 6);
79
- createWarningsString(edgesWithoutWeightsCount, 7);
80
- createWarningsString(edgeDefaultNotDirectedCount, 8);
81
- createWarningsString(sifFormatWarningCount, 9);
82
- createWarningsString(incorrectlyNamedSheetWarningCount, 10);
36
+ for (let warning of warnings) {
37
+ warningCounts[warning.warningCode] = (warningCounts[warning.warningCode]) ?
38
+ [...warningCounts[warning.warningCode], warning] : [warning];
39
+ }
40
+
41
+ for (let warning in warningCounts) {
42
+ createWarningsString(warningCounts[warning], index);
43
+ index++;
44
+ }
83
45
 
84
46
  $("#warningsList").html(warningsString);
85
47
 
@@ -0,0 +1,10 @@
1
+ /*! iFrame Resizer (iframeSizer.contentWindow.min.js) - v4.1.1 - 2019-04-10
2
+ * Desc: Include this file in any page being loaded into an iframe
3
+ * to force the iframe to resize to the content size.
4
+ * Requires: iframeResizer.min.js on host page.
5
+ * Copyright: (c) 2019 David J. Bradshaw - dave@bradshaw.net
6
+ * License: MIT
7
+ */
8
+
9
+ !function(l){if("undefined"!=typeof window){var n=!0,o=10,i="",r=0,a="",t=null,u="",c=!1,s={resize:1,click:1},d=128,f=!0,m=1,h="bodyOffset",g=h,p=!0,v="",y={},b=32,e=null,w=!1,T="[iFrameSizer]",E=T.length,O="",S={max:1,min:1,bodyScroll:1,documentElementScroll:1},M="child",I=!0,N=window.parent,A="*",C=0,k=!1,z=null,R=16,x=1,L="scroll",F=L,P=window,D=function(){ue("onMessage function not defined")},j=function(){},q=function(){},H={height:function(){return ue("Custom height calculation function not defined"),document.documentElement.offsetHeight},width:function(){return ue("Custom width calculation function not defined"),document.body.scrollWidth}},W={},B=!1;try{var U=Object.create({},{passive:{get:function(){B=!0}}});window.addEventListener("test",te,U),window.removeEventListener("test",te,U)}catch(e){}var J,V,K,Q,X,Y,G,Z=Date.now||function(){return(new Date).getTime()},$={bodyOffset:function(){return document.body.offsetHeight+be("marginTop")+be("marginBottom")},offset:function(){return $.bodyOffset()},bodyScroll:function(){return document.body.scrollHeight},custom:function(){return H.height()},documentElementOffset:function(){return document.documentElement.offsetHeight},documentElementScroll:function(){return document.documentElement.scrollHeight},max:function(){return Math.max.apply(null,Te($))},min:function(){return Math.min.apply(null,Te($))},grow:function(){return $.max()},lowestElement:function(){return Math.max($.bodyOffset()||$.documentElementOffset(),we("bottom",Oe()))},taggedElement:function(){return Ee("bottom","data-iframe-height")}},_={bodyScroll:function(){return document.body.scrollWidth},bodyOffset:function(){return document.body.offsetWidth},custom:function(){return H.width()},documentElementScroll:function(){return document.documentElement.scrollWidth},documentElementOffset:function(){return document.documentElement.offsetWidth},scroll:function(){return Math.max(_.bodyScroll(),_.documentElementScroll())},max:function(){return Math.max.apply(null,Te(_))},min:function(){return Math.min.apply(null,Te(_))},rightMostElement:function(){return we("right",Oe())},taggedElement:function(){return Ee("right","data-iframe-width")}},ee=(J=Se,X=null,Y=0,G=function(){Y=Z(),X=null,Q=J.apply(V,K),X||(V=K=null)},function(){var e=Z();Y||(Y=e);var t=R-(e-Y);return V=this,K=arguments,t<=0||R<t?(X&&(clearTimeout(X),X=null),Y=e,Q=J.apply(V,K),X||(V=K=null)):X||(X=setTimeout(G,t)),Q});ne(window,"message",ke),ne(window,"readystatechange",ze),ze()}function te(){}function ne(e,t,n,o){e.addEventListener(t,n,!!B&&(o||{}))}function oe(e,t,n){e.removeEventListener(t,n,!1)}function ie(e){return e.charAt(0).toUpperCase()+e.slice(1)}function re(e){return T+"["+O+"] "+e}function ae(e){w&&"object"==typeof window.console&&console.log(re(e))}function ue(e){"object"==typeof window.console&&console.warn(re(e))}function ce(){var e;!function(){function e(e){return"true"===e}var t=v.substr(E).split(":");O=t[0],r=l!==t[1]?Number(t[1]):r,c=l!==t[2]?e(t[2]):c,w=l!==t[3]?e(t[3]):w,b=l!==t[4]?Number(t[4]):b,n=l!==t[6]?e(t[6]):n,a=t[7],g=l!==t[8]?t[8]:g,i=t[9],u=t[10],C=l!==t[11]?Number(t[11]):C,y.enable=l!==t[12]&&e(t[12]),M=l!==t[13]?t[13]:M,F=l!==t[14]?t[14]:F}(),ae("Initialising iFrame ("+location.href+")"),function(){function e(e,t){return"function"==typeof e&&(ae("Setup custom "+t+"CalcMethod"),H[t]=e,e="custom"),e}"iFrameResizer"in window&&Object===window.iFrameResizer.constructor&&(t=window.iFrameResizer,ae("Reading data from page: "+JSON.stringify(t)),Object.keys(t).forEach(se,t),D="onMessage"in t?t.onMessage:D,j="onReady"in t?t.onReady:j,A="targetOrigin"in t?t.targetOrigin:A,g="heightCalculationMethod"in t?t.heightCalculationMethod:g,F="widthCalculationMethod"in t?t.widthCalculationMethod:F,g=e(g,"height"),F=e(F,"width"));var t;ae("TargetOrigin for parent set to: "+A)}(),function(){l===a&&(a=r+"px");de("margin",function(e,t){-1!==t.indexOf("-")&&(ue("Negative CSS value ignored for "+e),t="");return t}("margin",a))}(),de("background",i),de("padding",u),(e=document.createElement("div")).style.clear="both",e.style.display="block",e.style.height="0",document.body.appendChild(e),he(),ge(),document.documentElement.style.height="",document.body.style.height="",ae('HTML & body height set to "auto"'),ae("Enable public methods"),P.parentIFrame={autoResize:function(e){return!0===e&&!1===n?(n=!0,pe()):!1===e&&!0===n&&(n=!1,ve()),n},close:function(){Ce(0,0,"close"),ae("Disable outgoing messages"),I=!1,ae("Remove event listener: Message"),oe(window,"message",ke),!0===n&&ve()},getId:function(){return O},getPageInfo:function(e){"function"==typeof e?(q=e,Ce(0,0,"pageInfo")):(q=function(){},Ce(0,0,"pageInfoStop"))},moveToAnchor:function(e){y.findTarget(e)},reset:function(){Ae("parentIFrame.reset")},scrollTo:function(e,t){Ce(t,e,"scrollTo")},scrollToOffset:function(e,t){Ce(t,e,"scrollToOffset")},sendMessage:function(e,t){Ce(0,0,"message",JSON.stringify(e),t)},setHeightCalculationMethod:function(e){g=e,he()},setWidthCalculationMethod:function(e){F=e,ge()},setTargetOrigin:function(e){ae("Set targetOrigin: "+e),A=e},size:function(e,t){var n=(e||"")+(t?","+t:"");Me("size","parentIFrame.size("+n+")",e,t)}},pe(),y=function(){function r(e){var t=e.getBoundingClientRect(),n={x:window.pageXOffset!==l?window.pageXOffset:document.documentElement.scrollLeft,y:window.pageYOffset!==l?window.pageYOffset:document.documentElement.scrollTop};return{x:parseInt(t.left,10)+parseInt(n.x,10),y:parseInt(t.top,10)+parseInt(n.y,10)}}function n(e){var t,n=e.split("#")[1]||e,o=decodeURIComponent(n),i=document.getElementById(o)||document.getElementsByName(o)[0];l!==i?(t=r(i),ae("Moving to in page link (#"+n+") at x: "+t.x+" y: "+t.y),Ce(t.y,t.x,"scrollToOffset")):(ae("In page link (#"+n+") not found in iFrame, so sending to parent"),Ce(0,0,"inPageLink","#"+n))}function e(){""!==location.hash&&"#"!==location.hash&&n(location.href)}function t(){Array.prototype.forEach.call(document.querySelectorAll('a[href^="#"]'),function(e){function t(e){e.preventDefault(),n(this.getAttribute("href"))}"#"!==e.getAttribute("href")&&ne(e,"click",t)})}y.enable?Array.prototype.forEach&&document.querySelectorAll?(ae("Setting up location.hash handlers"),t(),ne(window,"hashchange",e),setTimeout(e,d)):ue("In page linking not fully supported in this browser! (See README.md for IE8 workaround)"):ae("In page linking not enabled");return{findTarget:n}}(),Me("init","Init message from host page"),j()}function se(e){var t=e.split("Callback");if(2===t.length){var n="on"+t[0].charAt(0).toUpperCase()+t[0].slice(1);this[n]=this[e],delete this[e],ue("Deprecated: '"+e+"' has been renamed '"+n+"'. The old method will be removed in the next major version.")}}function de(e,t){l!==t&&""!==t&&"null"!==t&&ae("Body "+e+' set to "'+(document.body.style[e]=t)+'"')}function le(n){var e={add:function(e){function t(){Me(n.eventName,n.eventType)}W[e]=t,ne(window,e,t,{passive:!0})},remove:function(e){var t=W[e];delete W[e],oe(window,e,t)}};n.eventNames&&Array.prototype.map?(n.eventName=n.eventNames[0],n.eventNames.map(e[n.method])):e[n.method](n.eventName),ae(ie(n.method)+" event listener: "+n.eventType)}function fe(e){le({method:e,eventType:"Animation Start",eventNames:["animationstart","webkitAnimationStart"]}),le({method:e,eventType:"Animation Iteration",eventNames:["animationiteration","webkitAnimationIteration"]}),le({method:e,eventType:"Animation End",eventNames:["animationend","webkitAnimationEnd"]}),le({method:e,eventType:"Input",eventName:"input"}),le({method:e,eventType:"Mouse Up",eventName:"mouseup"}),le({method:e,eventType:"Mouse Down",eventName:"mousedown"}),le({method:e,eventType:"Orientation Change",eventName:"orientationchange"}),le({method:e,eventType:"Print",eventName:["afterprint","beforeprint"]}),le({method:e,eventType:"Ready State Change",eventName:"readystatechange"}),le({method:e,eventType:"Touch Start",eventName:"touchstart"}),le({method:e,eventType:"Touch End",eventName:"touchend"}),le({method:e,eventType:"Touch Cancel",eventName:"touchcancel"}),le({method:e,eventType:"Transition Start",eventNames:["transitionstart","webkitTransitionStart","MSTransitionStart","oTransitionStart","otransitionstart"]}),le({method:e,eventType:"Transition Iteration",eventNames:["transitioniteration","webkitTransitionIteration","MSTransitionIteration","oTransitionIteration","otransitioniteration"]}),le({method:e,eventType:"Transition End",eventNames:["transitionend","webkitTransitionEnd","MSTransitionEnd","oTransitionEnd","otransitionend"]}),"child"===M&&le({method:e,eventType:"IFrame Resized",eventName:"resize"})}function me(e,t,n,o){return t!==e&&(e in n||(ue(e+" is not a valid option for "+o+"CalculationMethod."),e=t),ae(o+' calculation method set to "'+e+'"')),e}function he(){g=me(g,h,$,"height")}function ge(){F=me(F,L,_,"width")}function pe(){var e;!0===n?(fe("add"),e=b<0,window.MutationObserver||window.WebKitMutationObserver?e?ye():t=function(){function t(e){function t(e){!1===e.complete&&(ae("Attach listeners to "+e.src),e.addEventListener("load",i,!1),e.addEventListener("error",r,!1),c.push(e))}"attributes"===e.type&&"src"===e.attributeName?t(e.target):"childList"===e.type&&Array.prototype.forEach.call(e.target.querySelectorAll("img"),t)}function o(e){var t;ae("Remove listeners from "+e.src),e.removeEventListener("load",i,!1),e.removeEventListener("error",r,!1),t=e,c.splice(c.indexOf(t),1)}function n(e,t,n){o(e.target),Me(t,n+": "+e.target.src,l,l)}function i(e){n(e,"imageLoad","Image loaded")}function r(e){n(e,"imageLoadFailed","Image load failed")}function e(e){Me("mutationObserver","mutationObserver: "+e[0].target+" "+e[0].type),e.forEach(t)}var a,u,c=[],s=window.MutationObserver||window.WebKitMutationObserver,d=(a=document.querySelector("body"),u={attributes:!0,attributeOldValue:!1,characterData:!0,characterDataOldValue:!1,childList:!0,subtree:!0},d=new s(e),ae("Create body MutationObserver"),d.observe(a,u),d);return{disconnect:function(){"disconnect"in d&&(ae("Disconnect body MutationObserver"),d.disconnect(),c.forEach(o))}}}():(ae("MutationObserver not supported in this browser!"),ye())):ae("Auto Resize disabled")}function ve(){fe("remove"),null!==t&&t.disconnect(),clearInterval(e)}function ye(){0!==b&&(ae("setInterval: "+b+"ms"),e=setInterval(function(){Me("interval","setInterval: "+b)},Math.abs(b)))}function be(e,t){var n=0;return t=t||document.body,n=null!==(n=document.defaultView.getComputedStyle(t,null))?n[e]:0,parseInt(n,o)}function we(e,t){for(var n,o=t.length,i=0,r=0,a=ie(e),u=Z(),c=0;c<o;c++)r<(i=t[c].getBoundingClientRect()[e]+be("margin"+a,t[c]))&&(r=i);return u=Z()-u,ae("Parsed "+o+" HTML elements"),ae("Element position calculated in "+u+"ms"),R/2<(n=u)&&ae("Event throttle increased to "+(R=2*n)+"ms"),r}function Te(e){return[e.bodyOffset(),e.bodyScroll(),e.documentElementOffset(),e.documentElementScroll()]}function Ee(e,t){var n=document.querySelectorAll("["+t+"]");return 0===n.length&&(ue("No tagged elements ("+t+") found on page"),document.querySelectorAll("body *")),we(e,n)}function Oe(){return document.querySelectorAll("body *")}function Se(e,t,n,o){var i,r;!function(){function e(e,t){return!(Math.abs(e-t)<=C)}return i=l!==n?n:$[g](),r=l!==o?o:_[F](),e(m,i)||c&&e(x,r)}()&&"init"!==e?e in{init:1,interval:1,size:1}||!(g in S||c&&F in S)?e in{interval:1}||ae("No change in size detected"):Ae(t):(Ie(),Ce(m=i,x=r,e))}function Me(e,t,n,o){k&&e in s?ae("Trigger event cancelled: "+e):(e in{reset:1,resetPage:1,init:1}||ae("Trigger event: "+t),"init"===e?Se(e,t,n,o):ee(e,t,n,o))}function Ie(){k||(k=!0,ae("Trigger event lock on")),clearTimeout(z),z=setTimeout(function(){k=!1,ae("Trigger event lock off"),ae("--")},d)}function Ne(e){m=$[g](),x=_[F](),Ce(m,x,e)}function Ae(e){var t=g;g=h,ae("Reset trigger event: "+e),Ie(),Ne("reset"),g=t}function Ce(e,t,n,o,i){var r;!0===I&&(l===i?i=A:ae("Message targetOrigin: "+i),ae("Sending message to host page ("+(r=O+":"+e+":"+t+":"+n+(l!==o?":"+o:""))+")"),N.postMessage(T+r,i))}function ke(t){var n={init:function(){v=t.data,N=t.source,ce(),f=!1,setTimeout(function(){p=!1},d)},reset:function(){p?ae("Page reset ignored by init"):(ae("Page size reset by host page"),Ne("resetPage"))},resize:function(){Me("resizeParent","Parent window requested size check")},moveToAnchor:function(){y.findTarget(i())},inPageLink:function(){this.moveToAnchor()},pageInfo:function(){var e=i();ae("PageInfoFromParent called from parent: "+e),q(JSON.parse(e)),ae(" --")},message:function(){var e=i();ae("onMessage called from parent: "+e),D(JSON.parse(e)),ae(" --")}};function o(){return t.data.split("]")[1].split(":")[0]}function i(){return t.data.substr(t.data.indexOf(":")+1)}function r(){return t.data.split(":")[2]in{true:1,false:1}}function e(){var e=o();e in n?n[e]():("undefined"==typeof module||!module.exports)&&"iFrameResize"in window||"jQuery"in window&&"iFrameResize"in window.jQuery.prototype||r()||ue("Unexpected message ("+t.data+")")}T===(""+t.data).substr(0,E)&&(!1===f?e():r()?n.init():ae('Ignored message of type "'+o()+'". Received before initialization.'))}function ze(){"loading"!==document.readyState&&window.parent.postMessage("[iFrameResizerChild]Ready","*")}}();
10
+ //# sourceMappingURL=iframeResizer.contentWindow.map