grnsight 5.0.0 → 5.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (189) hide show
  1. package/.travis.yml +1 -1
  2. package/package.json +5 -5
  3. package/server/app.js +4 -2
  4. package/server/controllers/database-controller.js +9 -8
  5. package/server/controllers/exporters/xlsx.js +27 -9
  6. package/test/export-tests.js +2 -2
  7. package/test/test.js +3 -1
  8. package/test-files/expression-data-test-sheets/expression_sheet_missing_data_ok_export_exact.xlsx +0 -0
  9. package/web-client/app.js +1 -1
  10. package/web-client/controllers/main.js +1 -1
  11. package/web-client/public/js/constants.js +4 -1
  12. package/web-client/public/js/update-app.js +8 -11
  13. package/web-client/public/js/upload.js +337 -11
  14. package/web-client/views/{graph.jade → graph.pug} +0 -0
  15. package/web-client/views/{info.jade → info.pug} +1 -5
  16. package/web-client/views/{upload.jade → upload.pug} +47 -4
  17. package/documents/SDF/CMSI_402/spring_2014/Southwick_CMSI402_Spring2014_software-development-plan.md +0 -71
  18. package/documents/SDF/CMSI_402/spring_2014/Southwick_CMSI402_Spring2014_software-requirements-specification.md +0 -71
  19. package/documents/SDF/CMSI_402/spring_2014/use-case-diagram-spring-2014.jpg +0 -0
  20. package/documents/SDF/CMSI_402/spring_2017/Anguiano_402_Final_Presentation.pptx +0 -0
  21. package/documents/SDF/CMSI_402/spring_2017/Anguiano_402_Presentation_Final_Poster.pdf +0 -0
  22. package/documents/SDF/CMSI_402/spring_2017/Anguiano_CMSI402_Spring2017_project-proposal-presentation.pptx +0 -0
  23. package/documents/SDF/CMSI_402/spring_2017/Anguiano_CMSI402_Spring2017_project-proposal.docx +0 -0
  24. package/documents/SDF/CMSI_402/spring_2017/Anguiano_CMSI402_Spring2017_software-development-plan.docx +0 -0
  25. package/documents/SDF/CMSI_402/spring_2017/Anguiano_CMSI402_Spring2017_software-requirements-specification.docx +0 -0
  26. package/documents/SDF/CMSI_402/spring_2017/Design Review Presentation.pptx +0 -0
  27. package/documents/SDF/CMSI_402/spring_2018/0402report.docx +0 -0
  28. package/documents/SDF/CMSI_402/spring_2018/0409report.docx +0 -0
  29. package/documents/SDF/CMSI_402/spring_2018/402-gantt.png +0 -0
  30. package/documents/SDF/CMSI_402/spring_2018/402SRS_GRNSightFeedback01.txt +0 -28
  31. package/documents/SDF/CMSI_402/spring_2018/402_SPD.md +0 -223
  32. package/documents/SDF/CMSI_402/spring_2018/ChoeShinCMSI402_Final.pptx +0 -0
  33. package/documents/SDF/CMSI_402/spring_2018/ProjectProposal.md +0 -22
  34. package/documents/SDF/CMSI_402/spring_2018/SoftwareRequirementsSpecification.md +0 -88
  35. package/documents/SDF/CMSI_402/spring_2018/homework/choe_eileen/Choe_Eileen_CMSI 402_HW1.pdf +0 -0
  36. package/documents/SDF/CMSI_402/spring_2018/homework/choe_eileen/Choe_Eileen_CMSI402_HW2.pdf +0 -0
  37. package/documents/SDF/CMSI_402/spring_2018/homework/shin_jen/402hw2.docx +0 -0
  38. package/documents/SDF/CMSI_402/spring_2018/homework/shin_jen/Jen - 402Hw1.docx +0 -0
  39. package/documents/SDF/CMSI_402/spring_2018/homework/shin_jen/Jen - hw3.docx +0 -0
  40. package/documents/SDF/CMSI_402/spring_2018/writtenStatusReport.docx +0 -0
  41. package/documents/SDF/CMSI_402/spring_2018/writtenStatusReport4 +0 -0
  42. package/documents/SDF/CMSI_402/spring_2020/Alexia Filler/Expression Database Schema.pdf +0 -0
  43. package/documents/SDF/CMSI_402/spring_2020/Alexia Filler/ExpressionDbLayoutImage.jpg +0 -0
  44. package/documents/SDF/CMSI_402/spring_2020/Alexia Filler/ExpressionDbLayoutImageSmall.jpg +0 -0
  45. package/documents/SDF/CMSI_402/spring_2020/Alexia Filler/Filler_Patterson_CMSI402_Poster.pptx +0 -0
  46. package/documents/SDF/CMSI_402/spring_2020/Alexia Filler/GRNsight Final Presentation.pdf +0 -0
  47. package/documents/SDF/CMSI_402/spring_2020/Alexia Filler/Project Proposal Doc.pdf +0 -0
  48. package/documents/SDF/CMSI_402/spring_2020/Alexia Filler/Project Proposal Presentation.pdf +0 -0
  49. package/documents/SDF/CMSI_402/spring_2020/Alexia Filler/Software Development Plan/GANTT Chart.xlsx +0 -0
  50. package/documents/SDF/CMSI_402/spring_2020/Alexia Filler/Software Development Plan/Software Development Plan.pdf +0 -0
  51. package/documents/SDF/CMSI_402/spring_2020/Alexia Filler/Software Development Plan (Updated)/GANTT Chart (Updated).xlsx +0 -0
  52. package/documents/SDF/CMSI_402/spring_2020/Alexia Filler/Software Development Plan (Updated)/Software Development Plan (Updated).pdf +0 -0
  53. package/documents/SDF/CMSI_402/spring_2020/Alexia Filler/Software Requirements Specification (Updated).pdf +0 -0
  54. package/documents/SDF/CMSI_402/spring_2020/Alexia Filler/Software Requirements Specification.pdf +0 -0
  55. package/documents/SDF/CMSI_402/spring_2020/Kevin Patterson/402 GANTT Chart - Sheet1.pdf +0 -0
  56. package/documents/SDF/CMSI_402/spring_2020/Kevin Patterson/402 GRNsight SDP.pdf +0 -0
  57. package/documents/SDF/CMSI_402/spring_2020/Kevin Patterson/402 SRS.pdf +0 -0
  58. package/documents/SDF/CMSI_402/spring_2020/Kevin Patterson/FINAL GRNSIGHT PRESENTATION.pdf +0 -0
  59. package/documents/SDF/CMSI_402/spring_2020/Kevin Patterson/GRNsight Presentation.pdf +0 -0
  60. package/documents/SDF/CMSI_402/spring_2020/Kevin Patterson/Project Proposal 402.pdf +0 -0
  61. package/documents/SDF/CMSI_402/spring_2020/Kevin Patterson/SDP Updated/402 GANTT Chart UPDATED - Sheet1.pdf +0 -0
  62. package/documents/SDF/CMSI_402/spring_2020/Kevin Patterson/SDP Updated/402 GRNsight SDP UPDATED.pdf +0 -0
  63. package/documents/SDF/CMSI_402/spring_2020/Kevin Patterson/SRS Update/402 SRS Final.pdf +0 -0
  64. package/documents/abstracts/Anguiano_Varshneya_Undergraduate-Research-Symposium_2017_abstract.pdf +0 -0
  65. package/documents/abstracts/Dahlquist_Dionisio_et-al_BOSC_2020_abstract.pdf +0 -0
  66. package/documents/abstracts/SIGGRAPH 2017 Abstract/ACM-Reference-Format.bst +0 -3478
  67. package/documents/abstracts/SIGGRAPH 2017 Abstract/Figure1_zoom100.png +0 -0
  68. package/documents/abstracts/SIGGRAPH 2017 Abstract/acmart.cls +0 -2352
  69. package/documents/abstracts/SIGGRAPH 2017 Abstract/acmart.ins +0 -29
  70. package/documents/abstracts/SIGGRAPH 2017 Abstract/always-weights.png +0 -0
  71. package/documents/abstracts/SIGGRAPH 2017 Abstract/auto.png +0 -0
  72. package/documents/abstracts/SIGGRAPH 2017 Abstract/networkA.png +0 -0
  73. package/documents/abstracts/SIGGRAPH 2017 Abstract/networkB-normalized.png +0 -0
  74. package/documents/abstracts/SIGGRAPH 2017 Abstract/networkB.png +0 -0
  75. package/documents/abstracts/SIGGRAPH 2017 Abstract/never-weights.png +0 -0
  76. package/documents/abstracts/SIGGRAPH 2017 Abstract/representative-image/screenshot.jpg +0 -0
  77. package/documents/abstracts/SIGGRAPH 2017 Abstract/representative-image/screenshot3x2.png +0 -0
  78. package/documents/abstracts/SIGGRAPH 2017 Abstract/representative-image/withweights3x2.png +0 -0
  79. package/documents/abstracts/SIGGRAPH 2017 Abstract/screenshot-auto.png +0 -0
  80. package/documents/abstracts/SIGGRAPH 2017 Abstract/siggraph-abstract-review.bib +0 -85
  81. package/documents/abstracts/SIGGRAPH 2017 Abstract/siggraph-abstract-review.pdf +0 -0
  82. package/documents/abstracts/SIGGRAPH 2017 Abstract/siggraph-abstract-review.tex +0 -235
  83. package/documents/abstracts/SWE Collegiate Competition 2017.md +0 -9
  84. package/documents/abstracts/Samdarshi_GRNsight_SoCalSysBio_Abstract_2019.docx +0 -0
  85. package/documents/abstracts/Varshneya_Samdarshi_Southern-California-Systems-Biology_2017_abstract.docx +0 -0
  86. package/documents/abstracts/~$mdarshi_SoCalSysBio_Abstract_2019.docx +0 -0
  87. package/documents/developer_documents/State Diagram.graphml +0 -3525
  88. package/documents/developer_documents/graphml/State Diagram.graphml +0 -3115
  89. package/documents/developer_documents/older_versions/GRNsight State Diagram old.png +0 -0
  90. package/documents/developer_documents/older_versions/GRNsight State Diagram.png +0 -0
  91. package/documents/developer_documents/testing_script_generator/GRNsightTestingDocument.md +0 -1016
  92. package/documents/developer_documents/testing_script_generator/edgeFeatures.json +0 -178
  93. package/documents/developer_documents/testing_script_generator/fileFeatures.json +0 -100
  94. package/documents/developer_documents/testing_script_generator/layoutFeatures.json +0 -166
  95. package/documents/developer_documents/testing_script_generator/nodeFeatures.json +0 -195
  96. package/documents/developer_documents/testing_script_generator/speciesFeatures.json +0 -30
  97. package/documents/developer_documents/testing_script_generator/testing-script-generator.js +0 -172
  98. package/documents/developer_documents/testing_script_generator/viewFeatures.json +0 -82
  99. package/documents/developer_documents/testing_script_generator/viewportFeatures.json +0 -50
  100. package/documents/manuscripts/peerj-computerscience-2016/GRNsight_PeerJ-CS_conference-presentations_2016.docx +0 -0
  101. package/documents/manuscripts/peerj-computerscience-2016/GRNsight_PeerJ-CS_manuscript_2016.docx +0 -0
  102. package/documents/manuscripts/peerj-computerscience-2016/GRNsight_PeerJ-CS_manuscript_2016_Table1.docx +0 -0
  103. package/documents/manuscripts/peerj-computerscience-2016/GRNsight_PeerJ-CS_manuscript_2016_references.rtf +0 -264
  104. package/documents/manuscripts/peerj-computerscience-2016/GRNsight_PeerJ-CS_manuscript_2016_text-only.docx +0 -0
  105. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/21-genes_31-edges_Schade-data_for-screenshots.xlsx +0 -0
  106. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure1_zoom100.jpg +0 -0
  107. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure1_zoom100.png +0 -0
  108. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure1_zoom100.psd +0 -0
  109. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure1_zoom145.jpg +0 -0
  110. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure1_zoom145.png +0 -0
  111. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure1_zoom145.psd +0 -0
  112. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure1_zoom145_900pix-wide.psd +0 -0
  113. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure2_zoom100.jpg +0 -0
  114. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure2_zoom100.png +0 -0
  115. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure2_zoom100.psd +0 -0
  116. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure2_zoom145.jpg +0 -0
  117. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure2_zoom145.png +0 -0
  118. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure2_zoom145.psd +0 -0
  119. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure2_zoom145_900pix-wide.psd +0 -0
  120. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure5A.pdf +0 -0
  121. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure5B.pdf +0 -0
  122. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure5C.eps +0 -0
  123. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure5D.pdf +0 -0
  124. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure5E.pdf +0 -0
  125. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure5F.eps +0 -0
  126. package/documents/manuscripts/peerj-computerscience-2016/figures/other-versions/Figure5_compiled.png +0 -0
  127. package/documents/manuscripts/peerj-computerscience-2016/figures/submitted-versions/Figure1_zoom145_900pix-wide.png +0 -0
  128. package/documents/manuscripts/peerj-computerscience-2016/figures/submitted-versions/Figure2_zoom145_900pix-wide.png +0 -0
  129. package/documents/manuscripts/peerj-computerscience-2016/figures/submitted-versions/Figure3_GRNsight-Architecture.pdf +0 -0
  130. package/documents/manuscripts/peerj-computerscience-2016/figures/submitted-versions/Figure4_GRNsight-Screenshot.pdf +0 -0
  131. package/documents/manuscripts/peerj-computerscience-2016/figures/submitted-versions/Figure5_compiled.pdf +12 -5383
  132. package/documents/manuscripts/peerj-computerscience-2016/peerj-reviewing-10823-v0.pdf +0 -0
  133. package/documents/manuscripts/peerj-computerscience-2016/revisions/GRNsight_PeerJ-CS_conference-presentations_2016_revised.docx +0 -0
  134. package/documents/manuscripts/peerj-computerscience-2016/revisions/GRNsight_PeerJ-CS_cover-letter-and-response_2016.pdf +0 -0
  135. package/documents/manuscripts/peerj-computerscience-2016/revisions/GRNsight_PeerJ-CS_cover-letter_2016.docx +0 -0
  136. package/documents/manuscripts/peerj-computerscience-2016/revisions/GRNsight_PeerJ-CS_cover-letter_2016.pdf +0 -0
  137. package/documents/manuscripts/peerj-computerscience-2016/revisions/GRNsight_PeerJ-CS_manuscript_2016_Table1.docx +0 -0
  138. package/documents/manuscripts/peerj-computerscience-2016/revisions/GRNsight_PeerJ-CS_manuscript_2016_references_revised.rtf +0 -385
  139. package/documents/manuscripts/peerj-computerscience-2016/revisions/GRNsight_PeerJ-CS_manuscript_2016_text-only_revised.docx +0 -0
  140. package/documents/manuscripts/peerj-computerscience-2016/revisions/GRNsight_PeerJ-CS_manuscript_2016_text-only_revised_marked.docx +0 -0
  141. package/documents/manuscripts/peerj-computerscience-2016/revisions/GRNsight_PeerJ-CS_response-to-reviewers_2016.docx +0 -0
  142. package/documents/manuscripts/peerj-computerscience-2016/revisions/GRNsight_PeerJ-CS_response-to-reviewers_2016.pdf +0 -0
  143. package/documents/manuscripts/peerj-computerscience-2016/revisions/figures/Figure3_GRNsight-Architecture.pdf +0 -0
  144. package/documents/manuscripts/peerj-computerscience-2016/revisions/figures/Figure4_GRNsight-Screenshot-auto.pdf +0 -0
  145. package/documents/manuscripts/peerj-computerscience-2016/revisions/figures/Figure4_GRNsight-Screenshot.pdf +0 -0
  146. package/documents/manuscripts/peerj-computerscience-2016/revisions/peerj-reviewing-10823-v1.pdf +0 -0
  147. package/documents/posters/Anguiano_CMSI402_2017.pptx +0 -0
  148. package/documents/posters/Anguiano_Varshneya_LMU-Symposium_2015.pptx +0 -0
  149. package/documents/posters/Anguiano_Varshneya_SCCUR_2014.pptx +0 -0
  150. package/documents/posters/Choe_Shin_CMSI402_2018.pptx +0 -0
  151. package/documents/posters/Dahlquist-et-al_BOSC_ISMB_2016_poster.pptx +0 -0
  152. package/documents/posters/Filler_Patterson_CMSI402_Poster.pptx +0 -0
  153. package/documents/posters/Igbinedion_Green_Mersaghian_LMU_SYMPOSIUM_2021.pptx +0 -0
  154. package/documents/posters/Lopez_Filler_LMU_Symposium_2019.pdf +0 -0
  155. package/documents/posters/Lopez_Filler_LMU_Symposium_2019.pptx +0 -0
  156. package/documents/posters/Samdarshi-et-al_LMU-Symposium_2017.pptx +0 -0
  157. package/documents/posters/Samdarshi-et-al_LMU-Symposium_2018.pptx +0 -0
  158. package/documents/posters/Samdarshi-et-al_SoCalSysBio_2019.pptx +0 -0
  159. package/documents/posters/Shin-et-al_SCCUR_2017.pptx +0 -0
  160. package/documents/posters/Southwick_CMSI402_2014.pptx +0 -0
  161. package/documents/posters/Varshneya_Samdarshi_LMU-Symposium_2016.pptx +0 -0
  162. package/documents/posters/Varshneya_Samdarshi_SoCalSysBio_2017.pptx +0 -0
  163. package/documents/presentations/Anguiano_402_Final_Presentation.pptx +0 -0
  164. package/documents/presentations/Choe_SWERapidFire2017_final.pptx +0 -0
  165. package/documents/presentations/Dahlquist_BCC2020_20200720_talk.pptx +0 -0
  166. package/documents/presentations/Dahlquist_BOSC_20160709.pptx +0 -0
  167. package/documents/presentations/Dahlquist_ExperimentalBiology_20160404_talk.pptx +0 -0
  168. package/documents/presentations/Dahlquist_GRNsight_BCC2020_20200720_lightning-talk_video.mp4 +0 -0
  169. package/documents/presentations/Dahlquist_SoCalSysBio_20150131_talk.pptx +0 -0
  170. package/documents/presentations/Filler_Patterson_CMSI402_Presentation_20200501.pdf +0 -0
  171. package/documents/presentations/Filler_Patterson_LMU-Symposium_20200418_talk.pdf +0 -0
  172. package/documents/presentations/Samdarshi_LMU-Symposium_20190323_talk.pdf +0 -0
  173. package/documents/presentations/Samdarshi_LMU-Symposium_20190323_talk.pptx +0 -0
  174. package/documents/presentations/Southwick_Anguiano_LMU-Symposium_20140329_talk.pptx +0 -0
  175. package/documents/presentations/Southwick_CMSI402_Presentation_20140508_talk.pptx +0 -0
  176. package/documents/presentations/Varshneya_Anguiano_LMU-Symposium_201703_talk.pptx +0 -0
  177. package/documents/reports/Samdarshi_Mihir_2019/Samdarshi_2019_Final.docx +0 -0
  178. package/documents/reports/Samdarshi_Mihir_2019/Samdarshi_Mihir_2019_AnnotatedBibliography.docx +0 -0
  179. package/documents/reports/Samdarshi_Mihir_2019/Samdarshi_Mihir_2019_Outline.docx +0 -0
  180. package/documents/reports/Samdarshi_Mihir_2019/~$mdarshi_2019_Draft.docx +0 -0
  181. package/documents/reports/Samdarshi_Mihir_2019/~$mdarshi_2019_Final_Paper_Draft.docx +0 -0
  182. package/documents/reports/Varshneya_Anu_2017/Varshneya-201701-AnnotatedBibliography.docx +0 -0
  183. package/documents/reports/Varshneya_Anu_2017/Varshneya-201702-Introduction.docx +0 -0
  184. package/documents/reports/Varshneya_Anu_2017/Varshneya-201702-Outline.docx +0 -0
  185. package/documents/reports/Varshneya_Anu_2017/Varshneya-201703-Discussion.docx +0 -0
  186. package/documents/reports/Varshneya_Anu_2017/Varshneya-201703-MMResults.docx +0 -0
  187. package/documents/reports/Varshneya_Anu_2017/Varshneya-201704-Draft-1.docx +0 -0
  188. package/documents/reports/Varshneya_Anu_2017/Varshneya-201704-Final.docx +0 -0
  189. package/onlysidebar.html +0 -8
@@ -2,6 +2,15 @@
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
+ buildURL,
10
+ responseData,
11
+ stopLoadingIcon
12
+ } from "./update-app";
13
+
5
14
  export const uploadState = {
6
15
  currentWorkbook: null,
7
16
  };
@@ -56,7 +65,6 @@ export const upload = function () {
56
65
  if (currentExtension && currentExtension.length) {
57
66
  filename = filename.substr(0, filename.length - currentExtension[0].length);
58
67
  }
59
-
60
68
  if (suffix) {
61
69
  filename = filename + "_" + suffix;
62
70
  }
@@ -64,9 +72,39 @@ export const upload = function () {
64
72
  return filename + "." + extension;
65
73
  };
66
74
 
67
- var performExport = function (route, extension, sheetType) {
68
- return function () {
69
- // Deleted event parameter
75
+ const handleExportExcelButtonExport = (route, extension, sheetType, source) => {
76
+ grnState.workbook.exportNetworkType = sheetType;
77
+ const expressionSheets = $("input[name=expressionSheets]:checked");
78
+ var chosenSheets = [];
79
+ for (const [key, value] of Object.entries(expressionSheets)) {
80
+ if (!isNaN(parseInt(key, 10))) {
81
+ if (value.value === "select all") {
82
+ const allExpressionSheets = $("input[name=expressionSheets]");
83
+ chosenSheets = [];
84
+ for (const [k, v] of Object.entries(allExpressionSheets)) {
85
+ if (!isNaN(parseInt(k, 10))) {
86
+ if (v.value !== "select all") {
87
+ chosenSheets.push(v.value);
88
+ }
89
+ }
90
+ }
91
+ break;
92
+ } else {
93
+ chosenSheets.push(value.value);
94
+ }
95
+ }
96
+ }
97
+ const exportSheets = {};
98
+
99
+ if (source === "userInput" && grnState.workbook.expression) {
100
+ // source is from user speadsheet
101
+ // parse through grnState expression sheets and collect the sheets to be exported
102
+ for (let sheet of chosenSheets) {
103
+ if (grnState.workbook.expression[sheet]) {
104
+ exportSheets[sheet] = grnState.workbook.expression[sheet];
105
+ }
106
+ }
107
+ grnState.workbook.exportExpression = exportSheets;
70
108
  if (!$(this).parent().hasClass("disabled")) {
71
109
  var workbookToExport = flattenWorkbook(uploadState.currentWorkbook, sheetType);
72
110
  var workbookFilename = filenameWithExtension(sheetType !== uploadState.currentWorkbook.sheetType ?
@@ -89,15 +127,303 @@ export const upload = function () {
89
127
  exportForm.submit();
90
128
  exportForm.remove();
91
129
  }
130
+ $("#exportExcelModal").modal("hide");
131
+ } else {
132
+ // source is from database so lets query her up
133
+ for (let sheet of chosenSheets) {
134
+ let queryURL = buildURL({ dataset: sheet });
135
+ responseData("", queryURL).then(function (response) {
136
+ exportSheets[sheet] = response;
137
+ if (exportSheets[sheet]) {
138
+ stopLoadingIcon();
139
+ if (Object.keys(exportSheets).length === chosenSheets.length) {
140
+ // we have all of the sheets so lets initilize the export process
141
+ const finalExportSheets = {};
142
+ Object.keys(exportSheets).forEach((sheet) => {
143
+ // make sure that the sheets we queried are populated with the correct data
144
+ if (exportSheets[sheet].data && exportSheets[sheet].timePoints) {
145
+ // if the resulting query contains both the timePoint data and
146
+ // the gene data then export it. If not don't :)
147
+ finalExportSheets[sheet] = exportSheets[sheet];
148
+ }
149
+ });
150
+ grnState.workbook.exportExpression = finalExportSheets;
151
+ if (!$(this).parent().hasClass("disabled")) {
152
+ var workbookToExport = flattenWorkbook(uploadState.currentWorkbook, sheetType);
153
+ var workbookFilename = filenameWithExtension(sheetType !== uploadState.currentWorkbook.sheetType ?
154
+ sheetType : "", extension);
155
+ workbookToExport.filename = workbookFilename;
156
+ var exportForm = $("<form></form>").attr({
157
+ method: "POST",
158
+ action: $("#service-root").val() + "/" + route
159
+ }).append($("<input></input>").attr({
160
+ type: "hidden",
161
+ name: "filename",
162
+ value: workbookFilename
163
+ })).append($("<input></input>").attr({
164
+ type: "hidden",
165
+ name: "workbook",
166
+ value: JSON.stringify(workbookToExport)
167
+ }));
168
+ $("body").append(exportForm);
169
+ exportForm.submit();
170
+ exportForm.remove();
171
+ }
172
+ $("#exportExcelModal").modal("hide");
173
+ }
174
+ }
175
+ }).catch(function (error) {
176
+ console.log(error.stack);
177
+ console.log(error.name);
178
+ console.log(error.message);
179
+ });
180
+ }
181
+ }
182
+ };
183
+
184
+ var performExport = function (route, extension, sheetType, source) {
185
+ return function () {
186
+ // Deleted event parameter
187
+ if (route === "export-to-excel" && source) {
188
+ handleExportExcelButtonExport(route, extension, sheetType, source);
189
+ } else {
190
+ if (!$(this).parent().hasClass("disabled")) {
191
+ var workbookToExport = flattenWorkbook(uploadState.currentWorkbook, sheetType);
192
+ var workbookFilename = filenameWithExtension(sheetType !== uploadState.currentWorkbook.sheetType ?
193
+ sheetType : "", extension);
194
+ workbookToExport.filename = workbookFilename;
195
+
196
+ var exportForm = $("<form></form>").attr({
197
+ method: "POST",
198
+ action: $("#service-root").val() + "/" + route
199
+ }).append($("<input></input>").attr({
200
+ type: "hidden",
201
+ name: "filename",
202
+ value: workbookFilename
203
+ })).append($("<input></input>").attr({
204
+ type: "hidden",
205
+ name: "workbook",
206
+ value: JSON.stringify(workbookToExport)
207
+ }));
208
+ $("body").append(exportForm);
209
+ exportForm.submit();
210
+ exportForm.remove();
211
+ }
212
+
213
+ }
214
+ };
215
+ };
216
+
217
+ const createHTMLforForm1 = () => {
218
+ return `
219
+ <form id=\'exportExcelForm1\'>
220
+ <div class=\'form-group\'>
221
+ <p id=\'exportExcelNetwork\'></p>
222
+ <ul class=\'export-radio-group\' id=\'export-excel-weights-list\' style=\"list-style-type:none;\"> </ul>
223
+ </div>
224
+ <div class=\'form-group\'>
225
+ <p id=\'exportExcelExpressionSources\'> </p>
226
+ <ul class=\'export-radio-group\' id=\'export-excel-expression-source-list\' style=\"list-style-type:none;\">
227
+ <li>
228
+ <input type=\'radio\' name=\'expressionSource\' checked=\"true\" value=\"userInput\" id=\'exportExcelExpressionSource-userInputRadio\' class=\'export-radio\' />
229
+ <label for=\'exportExcelExpressionSource-userInputRadio\' id=\'exportExcelExpressionSource-userInput\' class=\'export-radio-label\'> </label>
230
+ </li>
231
+ <li>
232
+ <input type=\'radio\' name=\'expressionSource\' value=\"Dahlquist_2018\" id=\'exportExcelExpressionSource-DahlquistRadio\' class=\'export-radio\' />
233
+ <label for=\'exportExcelExpressionSource-DahlquistRadio\' id=\'exportExcelExpressionSource-Dahlquist\' class=\'export-radio-label\'> </label>
234
+ </li>
235
+ <li>
236
+ <input type=\'radio\' name=\'expressionSource\' value=\"Kitagawa_2002\" id=\'exportExcelExpressionSource-KitagawaRadio\' class=\'export-radio\' />
237
+ <label for=\'exportExcelExpressionSource-KitagawaRadio\' id=\'exportExcelExpressionSource-Kitagawa\' class=\'export-radio-label\'> </label>
238
+ </li>
239
+ <li>
240
+ <input type=\'radio\' name=\'expressionSource\' value=\"Thorsen_2007\" id=\'exportExcelExpressionSource-ThorsenRadio\' class=\'export-radio\' />
241
+ <label for=\'exportExcelExpressionSource-ThorsenRadio\' id=\'exportExcelExpressionSource-Thorsen\' class=\'export-radio-label\'> </label>
242
+ </li>
243
+ <li>
244
+ <input type=\'radio\' name=\'expressionSource\' value=\"Barreto_2012\" id=\'exportExcelExpressionSource-BarretoRadio\' class=\'export-radio\' />
245
+ <label for=\'exportExcelExpressionSource-BarretoRadio\' id=\'exportExcelExpressionSource-Barreto\' class=\'export-radio-label\'> </label>
246
+ </li>
247
+ </ul>
248
+ </div>
249
+ <button type=\'submit\' class=\'btn btn-default\' id=\'exportExcelContinueButton\'> Continue </button>
250
+ </form>
251
+ `;
252
+ };
253
+
254
+ const createHTMLforForm2 = () => {
255
+ return `
256
+ <form id=\'exportExcelForm2\'>
257
+ <div class=\'form-group\'>
258
+ <p id=\'exportExcelExpressionSheets\'></p>
259
+ <ul class=\'exportExcelExpressionSheets\' id=\'export-excel-expression-sheet-list\' style=\"list-style-type:none;\"> </ul>
260
+ </div>
261
+ <input type=\'button\' class=\'btn btn-default\' id=\'exportExcelButton\' value=\'Export Workbook\' />
262
+ </form>
263
+ `;
264
+ };
265
+ const createHTMLforWeights = () => {
266
+ $(".export-excel-weighted-option").remove();
267
+ if (grnState.workbook.sheetType !== "weighted") {
268
+ return `
269
+ <li class=\'export-excel-weighted-option\'>
270
+ <input type=\'radio\' checked=\"true\" name=\'network-weights\' value=\"unweighted\" id=\'exportExcelUnweightedRadio\' class=\'export-radio\' />
271
+ <label for=\'exportExcelUnweightedRadio\' id=\'exportExcelUnweighted\' class=\'export-radio-label\' >
272
+ Unweighted
273
+ </label>
274
+ </li>`;
275
+ } else {
276
+ return `
277
+ <li class=\'export-excel-weighted-option\'>
278
+ <input type=\'radio\' checked=\"true\" name=\'network-weights\' value=\"weighted\" id=\'exportExcelWeightedRadio\' class=\'export-radio\' />
279
+ <label for=\'exportExcelWeightedRadio\' id=\'exportExcelWeighted\' class=\'export-radio-label\' >
280
+ Weighted
281
+ </label>
282
+ </li>
283
+ <li class=\'export-excel-weighted-option\'>
284
+ <input type=\'radio\' name=\'network-weights\' value=\"unweighted\" id=\'exportExcelUnweightedRadio\' class=\'export-radio\' />
285
+ <label for=\'exportExcelUnweightedRadio\' id=\'exportExcelUnweighted\' class=\'export-radio-label\' >
286
+ Unweighted
287
+ </label>
288
+ </li>
289
+ `;
290
+ }
291
+ };
292
+
293
+ const createHTMLforExpressionSheets = (source) => {
294
+ $(".export-excel-expression-sheet-option").remove();
295
+ // check if user updated data is selected
296
+ let result = `
297
+ <li class=\'export-excel-expression-sheet-option\'>
298
+ <input type=\'checkbox\' name=\'expressionSheets\' checked=\"true\" value=\"select all\" id=\'exportExcelExpression-All\' class=\'export-checkbox\' />
299
+ <label for=\'exportExcelExpression-All\' id=\'exportExcelExpression-All-label\' class=\'export-checkbox-label\' >
300
+ All Expression Sheets
301
+ </label>
302
+ </li>
303
+ `;
304
+ if (source === "userInput") {
305
+ for (let expression in grnState.workbook.expression) {
306
+ result = result + `
307
+ <li class=\'export-excel-expression-sheet-option\'>
308
+ <input type=\'checkbox\' name=\'expressionSheets\' checked=\"true\" value=\"${expression}\" id=\'exportExcelExpression-${expression}\' class=\'export-checkbox\' />
309
+ <label for=\'exportExcelExpression-${expression}\' id=\'exportExcelExpression-${expression}-label\' class=\'export-checkbox-label\' >
310
+ ${expression}
311
+ </label>
312
+ </li>
313
+ `;
314
+ }
315
+ } else if (source === "Dahlquist_2018") {
316
+ // if the source is from a database
317
+ result = result + `
318
+ <li class=\'export-excel-expression-sheet-option\'>
319
+ <input type=\'checkbox\' name=\'expressionSheets\' checked=\"true\" value=\"Dahlquist_2018_dcin5\" id=\'exportExcelExpression-Dahlquist_2018_dcin5\' class=\'export-checkbox\' />
320
+ <label for=\'exportExcelExpression-Dahlquist_2018_dcin5\' id=\'exportExcelExpression-Dahlquist_2018_dcin5-label\' class=\'export-checkbox-label\' >
321
+ Dahlquist_2018_dcin5
322
+ </label>
323
+ </li>
324
+ <li class=\'export-excel-expression-sheet-option\'>
325
+ <input type=\'checkbox\' checked=\"true\" name=\'expressionSheets\' value=\"Dahlquist_2018_dgln3\" id=\'exportExcelExpression-Dahlquist_2018_dgln3\' class=\'export-checkbox\' />
326
+ <label for=\'exportExcelExpression-Dahlquist_2018_dgln3\' id=\'exportExcelExpression-Dahlquist_2018_dgln3-label\' class=\'export-checkbox-label\' >
327
+ Dahlquist_2018_dgln3
328
+ </label>
329
+ </li>
330
+ <li class=\'export-excel-expression-sheet-option\'>
331
+ <input type=\'checkbox\' checked=\"true\" name=\'expressionSheets\' value=\"Dahlquist_2018_dhap4\" id=\'exportExcelExpression-Dahlquist_2018_dhap4\' class=\'export-checkbox\' />
332
+ <label for=\'exportExcelExpression-Dahlquist_2018_dhap4\' id=\'exportExcelExpression-Dahlquist_2018_dhap4-label\' class=\'export-checkbox-label\' >
333
+ Dahlquist_2018_dhap4
334
+ </label>
335
+ </li>
336
+ <li class=\'export-excel-expression-sheet-option\'>
337
+ <input type=\'checkbox\' checked=\"true\" name=\'expressionSheets\' value=\"Dahlquist_2018_dzap1\" id=\'exportExcelExpression-Dahlquist_2018_dzap1\' class=\'export-checkbox\' />
338
+ <label for=\'exportExcelExpression-Dahlquist_2018_dzap1\' id=\'exportExcelExpression-Dahlquist_2018_dzap1-label\' class=\'export-checkbox-label\' >
339
+ Dahlquist_2018_dzap1
340
+ </label>
341
+ </li>
342
+ <div class=\'expression-db-loader\'></div>
343
+ <div class=\'expression-db-loader-text\'>Expression Database is Loading</div>
344
+ `;
345
+ } else if (source === "Kitagawa_2002") {
346
+ // if the source is from a database
347
+ result = result + `
348
+ <li class=\'export-excel-expression-sheet-option\'>
349
+ <input type=\'checkbox\' checked=\"true\" name=\'expressionSheets\' value=\"Kitagawa_2002_wt\" id=\'exportExcelExpression-Kitagawa_2002_wt\' class=\'export-checkbox\' />
350
+ <label for=\'exportExcelExpression-Kitagawa_2002_wt\' id=\'exportExcelExpression-Kitagawa_2002_wt-label\' class=\'export-checkbox-label\' >
351
+ Kitagawa_2002_wt
352
+ </label>
353
+ </li>
354
+ <div class=\'expression-db-loader\'></div>
355
+ <div class=\'expression-db-loader-text\'>Expression Database is Loading</div>
356
+ `;
357
+ } else if (source === "Thorsen_2007") {
358
+ // if the source is from a database
359
+ result = result + `
360
+ <li class=\'export-excel-expression-sheet-option\'>
361
+ <input type=\'checkbox\' checked=\"true\" name=\'expressionSheets\' value=\"Thorsen_2007_wt\" id=\'exportExcelExpression-Thorsen_2007_wt\' class=\'export-checkbox\' />
362
+ <label for=\'exportExcelExpression-Thorsen_2007_wt\' id=\'exportExcelExpression-Thorsen_2007_wt-label\' class=\'export-checkbox-label\' >
363
+ Thorsen_2007_wt
364
+ </label>
365
+ </li>
366
+ <div class=\'expression-db-loader\'></div>
367
+ <div class=\'expression-db-loader-text\'>Expression Database is Loading</div>
368
+ `;
369
+ } else if (source === "Barreto_2012") {
370
+ // if the source is from a database
371
+ result = result + `
372
+ <li class=\'export-excel-expression-sheet-option\'>
373
+ <input type=\'checkbox\' checked=\"true\" name=\'expressionSheets\' value=\"Barreto_2012_wt\" id=\'exportExcelExpression-Barreto_2012_wt\' class=\'export-checkbox\' />
374
+ <label for=\'exportExcelExpression-Barreto_2012_wt\' id=\'exportExcelExpression-Barreto_2012_wt-label\' class=\'export-checkbox-label\' >
375
+ Barreto_2012_wt
376
+ </label>
377
+ </li>
378
+ <div class=\'expression-db-loader\'></div>
379
+ <div class=\'expression-db-loader-text\'>Expression Database is Loading</div>
380
+ `;
381
+ }
382
+ return result;
383
+ };
384
+
385
+ const handleExportExcelButtonContinue = () => {
386
+ const weight = $("input[name=network-weights]:checked")[0].value;
387
+ const source = $("input[name=expressionSource]:checked")[0].value;
388
+ $("#exportExcelForm1").remove();
389
+ // $("#exportExcelForm1")[0].style = "display:none;";
390
+ $("#exportExcelQuestions-containter").append(createHTMLforForm2);
391
+ $("#exportExcelExpressionSheets").html("Select Expression Sheets:");
392
+ $("#export-excel-expression-sheet-list").append(createHTMLforExpressionSheets(source));
393
+ $("#exportExcelButton").on("click", performExport("export-to-excel", "xlsx", weight, source));
394
+ };
395
+
396
+ var displayExportExcelModal = function () {
397
+ $("#exportExcelForm2").remove();
398
+ $("#exportExcelQuestions-containter").append(createHTMLforForm1);
399
+ $("#exportExcelNetwork").html("Select the workbooks export type:");
400
+ $("#export-excel-weights-list").append(createHTMLforWeights());
401
+
402
+ $("#exportExcelExpressionSources").html("Select the Expression Data Source:");
403
+ $("#exportExcelExpressionSource-userInput").html(grnState.name);
404
+ $("#exportExcelExpressionSource-Dahlquist").html("Dahlquist_2018");
405
+ $("#exportExcelExpressionSource-Kitagawa").html("Kitagawa_2002");
406
+ $("#exportExcelExpressionSource-Thorsen").html("Thorsen_2007");
407
+ $("#exportExcelExpressionSource-Barreto").html("Barreto_2012");
408
+ $("#exportExcelContinueButton").on("click", () => handleExportExcelButtonContinue());
409
+ $("#exportExcelModal").modal("show");
410
+ };
411
+
412
+ var performExcelExport = function () {
413
+ return function () {
414
+ if (!$(this).parent().hasClass("disabled")) {
415
+ displayExportExcelModal();
416
+ }
92
417
  };
93
418
  };
94
419
 
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
- $("#exportAsUnweightedExcel").click(performExport("export-to-excel", "xlsx", "unweighted"));
101
- $("#exportAsWeightedExcel").click(performExport("export-to-excel", "xlsx", "weighted"));
420
+ // $("#exportAsExcelWkbk").click(performExport("export-to-excel", "xlsx", "unweighted"));
421
+ $("#exportAsUnweightedSif").on("click", performExport("export-to-sif", "sif", "unweighted"));
422
+ $("#exportAsWeightedSif").on("click", performExport("export-to-sif", "sif", "weighted"));
423
+ $("#exportAsUnweightedGraphMl").on("click", performExport("export-to-graphml", "graphml", "unweighted"));
424
+ $("#exportAsWeightedGraphMl").on("click", performExport("export-to-graphml", "graphml", "weighted"));
425
+ // $("#exportAsUnweightedExcel").on("click", performExport("export-to-excel", "xlsx", "unweighted"));
426
+ // $("#exportAsWeightedExcel").on("click", performExport("export-to-excel", "xlsx", "weighted"));
427
+ $("#exportAsExcel").on("click", performExcelExport());
102
428
 
103
429
  };
File without changes
@@ -4,7 +4,7 @@ html
4
4
  link(rel='stylesheet', href='https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css', integrity='sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M', crossorigin='anonymous')
5
5
  link(rel='stylesheet', href='gene/info.css')
6
6
  body
7
- input#service-root(type='hidden', value='#{serviceRoot}')
7
+ input#service-root(type='hidden', value=`${serviceRoot}`)
8
8
  // The following code is for the error modal
9
9
  #errorModal.modal.fade(tab-index='-1', role='dialog', aria-labelledby='mySmallModalLabel', aria-hidden='true')
10
10
  .modal-dialog
@@ -20,10 +20,6 @@ html
20
20
  .modal-footer
21
21
  input.btn.btn-default(type='button', data-dismiss='modal', value='Close')
22
22
  // End error modal
23
- #header
24
- iframe#iframeHeader(src='https://dondi.github.io/GRNsight/onlyheader.html', scrolling='no')
25
- #navBar
26
- iframe#iframeMenu(src='https://dondi.github.io/GRNsight/onlysidebar.html', scrolling='no')
27
23
  #mainContent
28
24
  #pageContent
29
25
  #pageHead.row
@@ -36,7 +36,7 @@ html
36
36
  | &nbsp; Open File
37
37
  i (.xlsx, .sif, .graphml)
38
38
  input(type='file' name='upload' id='upload' accept='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, .sif, .graphml')
39
- input(type='hidden' id='service-root' value='#{serviceRoot}')
39
+ input(type='hidden' id='service-root' value=`${serviceRoot}`)
40
40
  li(class='startDisabled disabled')
41
41
  a(href='#' id='reload')
42
42
  span(class='glyphicon glyphicon-repeat')
@@ -62,10 +62,12 @@ html
62
62
  li(class='startDisabled disabled weighted export')
63
63
  a(href='#' id='exportAsWeightedGraphMl') To Weighted GraphML
64
64
  li(class='divider')
65
- li(class='startDisabled disabled unweighted export')
65
+ //- li(class='startDisabled disabled unweighted export')
66
66
  a(href='#' id='exportAsUnweightedExcel') To Unweighted Excel
67
- li(class='startDisabled disabled weighted export')
68
- a(href='#' id='exportAsWeightedExcel') To Weighted Excel
67
+ //- li(class='startDisabled disabled weighted export')
68
+ //- a(href='#' id='exportAsWeightedExcel') To Weighted Excel
69
+ li(class='startDisabled disabled export')
70
+ a(href='#' id='exportAsExcel') To Excel
69
71
 
70
72
  li(class='dropdown-submenu')
71
73
  a(href='#')
@@ -509,6 +511,47 @@ html
509
511
  div(class='modal-footer')
510
512
  input(type='button' class='btn btn-default' data-dismiss='modal' value='Close')
511
513
  //- input(type='button' id='launchFileOpen' class='btn btn-primary' data-dismiss='modal' value='Select New File' onclick="$('#upload').click()")
514
+ div(id='exportExcelModal' class='modal fade' tab-index='-1' role='dialog' aria-labelledby='mySmallModalLabel' aria-hidden='true')
515
+ div(class='modal-dialog')
516
+ div(class='modal-content')
517
+ div(class='modal-header')
518
+ button(type='button' class='close' data-dismiss='modal' aria-label='Close')
519
+ span(aria-hidden='true') &times;
520
+ h4(class='modal-title') Export to Excel
521
+ div(class='modal-body')
522
+ div(id='exportExcelQuestions-containter')
523
+ //- form(id='exportExcelForm1')
524
+ //- div(class='form-group')
525
+ //- p(id='exportExcelNetwork')
526
+ //- ul(class='export-radio-group' id='export-excel-weights-list' style="list-style-type:none;")
527
+ //- div(class='form-group')
528
+ //- p(id='exportExcelExpressionSources')
529
+ //- ul(class='export-radio-group' id='export-excel-expression-source-list' style="list-style-type:none;")
530
+ //- li
531
+ //- input(type='radio' name='expressionSource' checked="true" value="userInput" id='exportExcelExpressionSource-userInputRadio' class='export-radio')
532
+ //- label(for='exportExcelExpressionSource-userInputCheckbox' id='exportExcelExpressionSource-userInput' class='export-radio-label')
533
+ //- li
534
+ //- input(type='radio' name='expressionSource' value="Dahlquist_2018" id='exportExcelExpressionSource-DahlquistRadio' class='export-radio')
535
+ //- label(for='exportExcelExpressionSource-DahlquistCheckbox' id='exportExcelExpressionSource-Dahlquist' class='export-radio-label')
536
+ //- li
537
+ //- input(type='radio' name='expressionSource' value="Kitagawa_2002" id='exportExcelExpressionSource-KitagawaRadio' class='export-radio')
538
+ //- label(for='exportExcelExpressionSource-KitagawaCheckbox' id='exportExcelExpressionSource-Kitagawa' class='export-radio-label')
539
+ //- li
540
+ //- input(type='radio' name='expressionSource' value="Thorsen_2007" id='exportExcelExpressionSource-ThorsenRadio' class='export-radio')
541
+ //- label(for='exportExcelExpressionSource-ThorsenCheckbox' id='exportExcelExpressionSource-Thorsen' class='export-radio-label')
542
+ //- li
543
+ //- input(type='radio' name='expressionSource' value="Barreto_2012" id='exportExcelExpressionSource-BarretoRadio' class='export-radio')
544
+ //- label(for='exportExcelExpressionSource-BarretoCheckbox' id='exportExcelExpressionSource-Barreto' class='export-radio-label')
545
+ //- button(type='submit' class='btn btn-default' id='exportExcelContinueButton') Continue
546
+ //- form(id='exportExcelForm2')
547
+ //- div(class='form-group')
548
+ //- p(id='exportExcelExpressionSheets')
549
+ //- ul(class='exportExcelExpressionSheets' id='export-excel-expression-sheet-list' style="list-style-type:none;")
550
+ //- //- input(type='checkbox' value='expression_sheet_name_expressionSuffix')
551
+ //- button(type='submit' class='btn btn-default' id='exportExcelButton') Export Workbook
552
+ div(class='modal-footer')
553
+ input(type='button' class='btn btn-default' data-dismiss='modal' value='Close')
554
+ //- input(type='button' id='launchFileOpen' class='btn btn-primary' data-dismiss='modal' value='Select New File' onclick="$('#upload').click()")
512
555
 
513
556
  div(id='warningsModalSpecies' class='modal fade' tab-index='-1' role='dialog' aria-labelledby='mySmallModalLabel' aria-hidden='true')
514
557
  div(class='modal-dialog')
@@ -1,71 +0,0 @@
1
- ## 2.0 Software Development Plan
2
-
3
- ## Table of Contents
4
- 2.1 Introduction
5
-
6
- 2.1.1 Project Deliverables
7
-
8
- 2.2 Project Resources
9
-
10
- 2.2.1 Hardware Resources
11
-
12
- 2.2.2 Software Resources
13
-
14
- 2.3 Project Organization
15
-
16
- 2.4 Schedule
17
-
18
- 2.4.1 Gantt Chart
19
-
20
- ## 2.1 Introduction
21
- This Software Development Plan provides the details of the planned development for the GRNsight application developed as an LMU Senior Project.This application provides a web service which will allow users to generate visualizations of gene regulatory networks derived from uploaded spreadsheets.This application will serve as an update of sorts to the XMLPipeDB program used by the LMU Biological Databases classes in addition to providing an accessible and dynamic visualization tool to general users. In addition to the time spent researching and coding, the development process will include meetings with both the Senior Project class and the professors that requested the application. Additionally, the application will be presented at both the 2014 LMU Undergraduate Research Symposium and during the final presentations for the Senior Project Laboratory.
22
-
23
- Major Milestones include:
24
- * 2014-01-21 Project Proposal Due
25
- * 2014-02-11 Requirements Due
26
- * 2014-03-11 Software Development Plan Due
27
- * 2014-03-29 Undergraduate Research Symposium
28
- * 2014-04-15 Final Software Design Description Due
29
- * 2014-05-06 Final Presentations and Demonstrations
30
-
31
- ### 2.1.1 Project Deliverables
32
- * **Project Proposal**: A general overview of the project goals and justifications. Delivered as an oral presentation and a written summary on 2014-01-21.
33
- * **Requirements Document**: A detailed description of the functionality required by the application. Separated into three sections: the Web Client Requirements, the Server Requirements, and the Visualizer Requirements. Uploaded to the project GitHub wiki on 2014-02-11.
34
- * **Software Development Plan**: This document, detailing the planned development for the project. Includes descriptions of the project organization and scheduling. Uploaded to the project GitHub wiki on 2014-03-11.
35
- * **Final Software Development Plan**: An updated version of the original Software Development Plan revised to reflect the actual development progress of the project. Will be uploaded to the project GitHub page on 2014-04-15
36
- * **Final Presentation**: An oral presentation and demonstration of the finished product. Will contain a Q&A section at the end. Will be delivered the week of 2014-05-06.
37
-
38
- ## 2.2 Project Resources
39
- This section will detail the various elements used to aid in the completion of the project.
40
-
41
- ### 2.2.1 Hardware Resources
42
- * A computer for development
43
- * A server to host the application
44
- * A network connection to access the application's website
45
- * A projector for the presentation
46
-
47
- ### 2.2.2 Software Resources
48
- * A code editor such as Text Wrangler
49
- * A web browser such as Chrome
50
- * D3 for the graph creation
51
- * Node.js for the server framework
52
- * Express to handle HTTP requests
53
- * Node-XLSX to parse spreadsheets
54
- * Cors to handle cross-origin requests
55
- * Multiparty to handle file uploads
56
- * Mocha and Supertest for testing
57
- * Jade to write the web pages
58
- * Stylus to style the web pages
59
- * Git for version controll
60
- * GitHub to host the code repository
61
-
62
- ## 2.3 Project Organization
63
- This project is divided into three major subsections: a server, a web client, and a visualizer. Early work will focus almost exclusively on the server and the web client. Work on the server and web client will be relatively concurrent as the functionality of both are fairly intertwined.
64
-
65
- Once the server and web client are developed, work will shift to the file upload system and then finally to the visualizer and the web pages that will host it. The refinement of the visualization will compose the bulk of the remaining development time, with some time devoted to designing and styling the web pages.
66
-
67
- ## 2.4 Schedule
68
- This section provides schedule information for the GRNsight project
69
-
70
- ### 2.4.1 Gantt Chart
71
- ![Gantt Chart](http://i.imgur.com/8L53Zch.png)
@@ -1,71 +0,0 @@
1
- ### 1.0 Requirements
2
-
3
- The system allows users to upload an Excel spreadsheet containing gene regulatory information generated by the GRNmap program, which is offered as a download by the web client. The system then parses this spreadsheet and uses the relevant data to create a visual representation of the numerical network data in the form of a user-modifiable directed graph.
4
-
5
- ### 1.1 Server Subsystem
6
- 1.1.1. The server subsystem shall receive xlsx files from the web client.
7
- 1.1.2. The server subsystem shall parse the xlsx file into a JSON object.
8
- 1.1.3. The server subsystem shall validate the JSON object.
9
- 1.1.4. The server subsystem shall send an error to the web client when validation fails.
10
- 1.1.5. The server subsystem shall POST the JSON object to the web client when validation succeeds.
11
- The server subsystem should receive JSON objects from the web client.
12
- The server subsystem should convert the JSON object into an xslx document.
13
- The server subsystem should POST the xlsx document to the web client.
14
- The server subsystem will use Nodejs as a server platform.
15
-
16
- ### 1.2 Web Client Subsystem
17
- 1.2.1. The web client subsystem shall consist of three web pages
18
- The web client will use Bootstrap.
19
- 1.2.2. The first page shall be an instructional page
20
- 1.2.2.1. The page shall display instructions for uploading spreadsheets
21
- 1.2.2.2. The page shall display instructions regarding GRNmap
22
- 1.2.2.2.1. The page shall display instructions regarding how to download GRNmap
23
- 1.2.2.2.2. The page shall display instructions for running GRNmap
24
- 1.2.2.3. The page shall display instructions for modifying a generated graph
25
- 1.2.3. The second page shall be the upload page
26
- 1.2.3.1. The upload page shall accept an xlsx file.
27
- 1.2.3.1.1. The upload page shall allow the user to browse for a file.
28
- 1.2.3.4. The upload page shall pass the input file to the server.
29
- 1.2.4. The Third page shall be the visualization as specified in Section 1.3 "Visualizer Subsystem".
30
- 1.2.4.1. The visualization page shall GET the parsed file from the server.
31
- 1.2.4.2. The visualization page shall run the visualizer on the parsed data.
32
- 1.2.4.3. The visualization page shall display the visualization.
33
- The visualization page should allow users to manipulate the visualization.
34
- The visualization page should allow users to click and drag nodes.
35
- The visualization page should allow users to double click to create new nodes.
36
- The visualization page should allow users to double click and drag between nodes to create
37
- new edges.
38
- The visualization page should allow users to click the endpoints of an edge to drag that
39
- endpoint to another node.
40
- The visualization page should allow users to click on an edge once to select it.
41
- The visualization page should allow users to press the '+' key to increase the magnitude of
42
- a selected edge.
43
- The visualization page should allow users to press the '-' key to decrease the magnitude of
44
- a selected edge.
45
- The visualization page should allow users to press the 'r' key to reverse the direction of
46
- a selected edge.
47
- The visualization page should allow users to press the 'SHIFT' key to toggle the selected
48
- edge between 'expression' and 'regulation.'
49
- The visualization page should allow users to submit the changes.
50
- The visualization page should convert the changed graph into a JSON object.
51
- The visualization page should POST the JSON to the server.
52
- The visualization page should GET an xlsx document from the server.
53
- The visualization page should prompt user to download the xlsx document.
54
-
55
- ### 1.3 Visualizer Subsystem
56
- 1.3.1. The visualizer subsystem shall run on the web client application.
57
- 1.3.2. The visualizer subsystem shall create a force-directed graph.
58
- 1.3.2.1. The visualizer subsystem shall read data from a JSON object provided by the web client.
59
- 1.3.2.2. The visualizer subsystem shall create nodes to represent genes.
60
- The visualizer subsystem will use D3.
61
- 1.3.2.2.1. The visualizer subsystem shall label each node with the gene's scientific name.
62
- 1.3.2.3. The visualizer subsystem shall create lines between nodes to represent a gene regulating another gene.
63
- 1.3.2.4. The visualizer subsystem shall color the lines to represent positive and negative influence.
64
- 1.3.2.4.1. Red lines shall signify a negative influence.
65
- 1.3.2.4.2. Blue lines shall signify a positive influence.
66
- 1.3.2.5. The visualizer subsystem shall use line thickness to denote magnitude of influence.
67
- 1.3.2.5.1. Greater thickness shall denote stronger influence.
68
- 1.3.2.5.2. Lesser thickness shall denote weaker influence.
69
-
70
-
71
-