sequenceserver 2.0.0.rc3 → 2.0.0.rc8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (473) hide show
  1. checksums.yaml +4 -4
  2. data/bin/chromedriver +0 -0
  3. data/bin/geckodriver +0 -0
  4. data/bin/sequenceserver +39 -29
  5. data/lib/sequenceserver.rb +48 -22
  6. data/lib/sequenceserver/blast/job.rb +11 -1
  7. data/lib/sequenceserver/database.rb +7 -168
  8. data/lib/sequenceserver/exceptions.rb +14 -0
  9. data/lib/sequenceserver/makeblastdb.rb +323 -0
  10. data/lib/sequenceserver/routes.rb +6 -1
  11. data/lib/sequenceserver/sequence.rb +1 -1
  12. data/lib/sequenceserver/version.rb +1 -1
  13. data/public/css/sequenceserver.css +10 -3
  14. data/public/css/sequenceserver.min.css +1 -1
  15. data/public/js/error_modal.js +27 -29
  16. data/public/js/hit.js +14 -5
  17. data/public/js/jquery_world.js +1 -1
  18. data/public/js/query.js +31 -15
  19. data/public/js/report.js +13 -6
  20. data/public/js/search.js +44 -24
  21. data/public/js/sequence_modal.js +10 -5
  22. data/public/js/sidebar.js +52 -28
  23. data/public/sequenceserver-report.min.js +17 -17
  24. data/public/sequenceserver-search.min.js +2 -2
  25. data/views/layout.erb +5 -1
  26. data/views/report.erb +1 -1
  27. data/views/search.erb +1 -1
  28. metadata +9 -450
  29. data/.bootstrap/config.json +0 -433
  30. data/.codeclimate.yml +0 -31
  31. data/.csslintrc +0 -2
  32. data/.eslintignore +0 -1
  33. data/.eslintrc.json +0 -36
  34. data/.gitignore +0 -56
  35. data/.mailmap +0 -5
  36. data/.rspec +0 -3
  37. data/.rubocop.yml +0 -61
  38. data/.travis.yml +0 -74
  39. data/AppImage/recipe.yml +0 -15
  40. data/AppImage/sequenceserver.desktop +0 -8
  41. data/AppImage/sequenceserver.png +0 -0
  42. data/AppImage/sequenceserver.sh +0 -16
  43. data/Dockerfile +0 -23
  44. data/LICENSE.txt +0 -661
  45. data/LICENSE/Apache.txt +0 -176
  46. data/LICENSE/d3.txt +0 -26
  47. data/README.md +0 -161
  48. data/package.json +0 -48
  49. data/public/vendor/.dependencies.json +0 -18
  50. data/public/vendor/.loaderversions +0 -1
  51. data/public/vendor/github/components/jquery@2.1.4/.gitignore +0 -1
  52. data/public/vendor/github/components/jquery@2.1.4/.jspm-hash +0 -1
  53. data/public/vendor/github/components/jquery@2.1.4/.jspm.json +0 -37
  54. data/public/vendor/github/components/jqueryui@1.11.4/.gitignore +0 -4
  55. data/public/vendor/github/components/jqueryui@1.11.4/.jspm-hash +0 -1
  56. data/public/vendor/github/components/jqueryui@1.11.4/.jspm.json +0 -136
  57. data/public/vendor/github/components/jqueryui@1.11.4/ui/.jshintrc +0 -24
  58. data/public/vendor/github/jspm/nodelibs-buffer@0.1.0/.jspm-hash +0 -1
  59. data/public/vendor/github/jspm/nodelibs-buffer@0.1.0/.jspm.json +0 -10
  60. data/public/vendor/github/jspm/nodelibs-events@0.1.1/.jspm-hash +0 -1
  61. data/public/vendor/github/jspm/nodelibs-events@0.1.1/.jspm.json +0 -10
  62. data/public/vendor/github/jspm/nodelibs-fs@0.1.2/.jspm-hash +0 -1
  63. data/public/vendor/github/jspm/nodelibs-module@0.1.0/.jspm-hash +0 -1
  64. data/public/vendor/github/jspm/nodelibs-module@0.1.0/.jspm.json +0 -3
  65. data/public/vendor/github/jspm/nodelibs-path@0.1.0/.jspm-hash +0 -1
  66. data/public/vendor/github/jspm/nodelibs-path@0.1.0/.jspm.json +0 -10
  67. data/public/vendor/github/jspm/nodelibs-process@0.1.1/.jspm-hash +0 -1
  68. data/public/vendor/github/jspm/nodelibs-stream@0.1.0/.jspm-hash +0 -1
  69. data/public/vendor/github/jspm/nodelibs-stream@0.1.0/.jspm.json +0 -10
  70. data/public/vendor/github/jspm/nodelibs-util@0.1.0/.jspm-hash +0 -1
  71. data/public/vendor/github/jspm/nodelibs-util@0.1.0/.jspm.json +0 -10
  72. data/public/vendor/github/mbostock/d3@3.5.6/.jspm-hash +0 -1
  73. data/public/vendor/github/mbostock/d3@3.5.6/.jspm.json +0 -76
  74. data/public/vendor/github/nicgirault/circosJs@1.7.0/.gitignore +0 -10
  75. data/public/vendor/github/nicgirault/circosJs@1.7.0/.jspm-hash +0 -1
  76. data/public/vendor/github/systemjs/plugin-css@0.1.15/.gitignore +0 -1
  77. data/public/vendor/github/systemjs/plugin-css@0.1.15/.jspm-hash +0 -1
  78. data/public/vendor/github/systemjs/plugin-css@0.1.15/.jspm.json +0 -4
  79. data/public/vendor/github/systemjs/plugin-json@0.1.0/.jspm-hash +0 -1
  80. data/public/vendor/github/twbs/bootstrap@3.3.5/.jspm-hash +0 -1
  81. data/public/vendor/github/twbs/bootstrap@3.3.5/.jspm.json +0 -100
  82. data/public/vendor/npm/amdefine@1.0.0/.jspm-hash +0 -1
  83. data/public/vendor/npm/amdefine@1.0.0/.jspm.json +0 -55
  84. data/public/vendor/npm/babel-core@5.8.23/.jspm-hash +0 -1
  85. data/public/vendor/npm/babel-runtime@5.8.20/.jspm-hash +0 -1
  86. data/public/vendor/npm/babel-runtime@5.8.20/.npmignore +0 -2
  87. data/public/vendor/npm/base62@0.1.1/.jspm-hash +0 -1
  88. data/public/vendor/npm/base62@0.1.1/.jspm.json +0 -49
  89. data/public/vendor/npm/base62@0.1.1/.travis.yml +0 -4
  90. data/public/vendor/npm/base64-js@0.0.8/.jspm-hash +0 -1
  91. data/public/vendor/npm/base64-js@0.0.8/.jspm.json +0 -77
  92. data/public/vendor/npm/base64-js@0.0.8/.travis.yml +0 -5
  93. data/public/vendor/npm/buffer@3.4.3/.jspm-hash +0 -1
  94. data/public/vendor/npm/buffer@3.4.3/.jspm.json +0 -105
  95. data/public/vendor/npm/buffer@3.4.3/.npmignore +0 -1
  96. data/public/vendor/npm/buffer@3.4.3/.travis.yml +0 -8
  97. data/public/vendor/npm/buffer@3.4.3/.zuul.yml +0 -20
  98. data/public/vendor/npm/core-js@1.1.2/.eslintrc +0 -36
  99. data/public/vendor/npm/core-js@1.1.2/.gitattributes +0 -1
  100. data/public/vendor/npm/core-js@1.1.2/.jspm-hash +0 -1
  101. data/public/vendor/npm/core-js@1.1.2/.npmignore +0 -10
  102. data/public/vendor/npm/core-js@1.1.2/.travis.yml +0 -3
  103. data/public/vendor/npm/core-util-is@1.0.1/.jspm-hash +0 -1
  104. data/public/vendor/npm/core-util-is@1.0.1/.jspm.json +0 -58
  105. data/public/vendor/npm/envify@3.4.0/.jspm-hash +0 -1
  106. data/public/vendor/npm/envify@3.4.0/.jspm.json +0 -72
  107. data/public/vendor/npm/envify@3.4.0/.npmignore +0 -2
  108. data/public/vendor/npm/esprima-fb@13001.1001.0-dev-harmony-fb/.jspm-hash +0 -1
  109. data/public/vendor/npm/esprima-fb@13001.1001.0-dev-harmony-fb/.jspm.json +0 -102
  110. data/public/vendor/npm/events@1.0.2/.jspm-hash +0 -1
  111. data/public/vendor/npm/events@1.0.2/.jspm.json +0 -67
  112. data/public/vendor/npm/events@1.0.2/.npmignore +0 -1
  113. data/public/vendor/npm/events@1.0.2/.travis.yml +0 -7
  114. data/public/vendor/npm/events@1.0.2/.zuul.yml +0 -12
  115. data/public/vendor/npm/font-awesome@4.4.0/.jspm-hash +0 -1
  116. data/public/vendor/npm/font-awesome@4.4.0/.jspm.json +0 -81
  117. data/public/vendor/npm/font-awesome@4.4.0/.npmignore +0 -42
  118. data/public/vendor/npm/ieee754@1.1.6/.jspm-hash +0 -1
  119. data/public/vendor/npm/ieee754@1.1.6/.jspm.json +0 -70
  120. data/public/vendor/npm/ieee754@1.1.6/.travis.yml +0 -7
  121. data/public/vendor/npm/ieee754@1.1.6/.zuul.yml +0 -20
  122. data/public/vendor/npm/inherits@2.0.1/.jspm-hash +0 -1
  123. data/public/vendor/npm/inherits@2.0.1/.jspm.json +0 -60
  124. data/public/vendor/npm/is-array@1.0.1/.jepso-ci.json +0 -3
  125. data/public/vendor/npm/is-array@1.0.1/.jspm-hash +0 -1
  126. data/public/vendor/npm/is-array@1.0.1/.jspm.json +0 -42
  127. data/public/vendor/npm/is-array@1.0.1/.npmignore +0 -0
  128. data/public/vendor/npm/isarray@0.0.1/.jspm-hash +0 -1
  129. data/public/vendor/npm/isarray@0.0.1/.jspm.json +0 -51
  130. data/public/vendor/npm/jstransform@10.1.0/.jshintrc +0 -28
  131. data/public/vendor/npm/jstransform@10.1.0/.jspm-hash +0 -1
  132. data/public/vendor/npm/jstransform@10.1.0/.jspm.json +0 -95
  133. data/public/vendor/npm/jstransform@10.1.0/.npmignore +0 -4
  134. data/public/vendor/npm/jstransform@10.1.0/.travis.yml +0 -8
  135. data/public/vendor/npm/path-browserify@0.0.0/.jspm-hash +0 -1
  136. data/public/vendor/npm/path-browserify@0.0.0/.jspm.json +0 -56
  137. data/public/vendor/npm/process@0.10.1/.jspm-hash +0 -1
  138. data/public/vendor/npm/react@0.13.3/.jspm-hash +0 -1
  139. data/public/vendor/npm/react@0.13.3/.jspm.json +0 -77
  140. data/public/vendor/npm/readable-stream@1.1.13/.jspm-hash +0 -1
  141. data/public/vendor/npm/readable-stream@1.1.13/.jspm.json +0 -95
  142. data/public/vendor/npm/readable-stream@1.1.13/.npmignore +0 -5
  143. data/public/vendor/npm/source-map@0.1.31/.jspm-hash +0 -1
  144. data/public/vendor/npm/source-map@0.1.31/.jspm.json +0 -133
  145. data/public/vendor/npm/source-map@0.1.31/.npmignore +0 -2
  146. data/public/vendor/npm/source-map@0.1.31/.travis.yml +0 -4
  147. data/public/vendor/npm/stream-browserify@1.0.0/.jspm-hash +0 -1
  148. data/public/vendor/npm/stream-browserify@1.0.0/.jspm.json +0 -77
  149. data/public/vendor/npm/stream-browserify@1.0.0/.travis.yml +0 -4
  150. data/public/vendor/npm/string_decoder@0.10.31/.jspm-hash +0 -1
  151. data/public/vendor/npm/string_decoder@0.10.31/.jspm.json +0 -58
  152. data/public/vendor/npm/string_decoder@0.10.31/.npmignore +0 -2
  153. data/public/vendor/npm/through@2.3.8/.jspm-hash +0 -1
  154. data/public/vendor/npm/through@2.3.8/.jspm.json +0 -72
  155. data/public/vendor/npm/through@2.3.8/.travis.yml +0 -5
  156. data/public/vendor/npm/underscore@1.8.3/.jspm-hash +0 -1
  157. data/public/vendor/npm/underscore@1.8.3/.jspm.json +0 -74
  158. data/public/vendor/npm/util@0.10.3/.jspm-hash +0 -1
  159. data/public/vendor/npm/util@0.10.3/.jspm.json +0 -58
  160. data/public/vendor/npm/util@0.10.3/.npmignore +0 -1
  161. data/public/vendor/npm/util@0.10.3/.travis.yml +0 -8
  162. data/public/vendor/npm/util@0.10.3/.zuul.yml +0 -10
  163. data/public/vendor/npm/webshim@1.15.8/.gitattributes +0 -12
  164. data/public/vendor/npm/webshim@1.15.8/.jspm-hash +0 -1
  165. data/public/vendor/npm/webshim@1.15.8/.jspm.json +0 -92
  166. data/public/vendor/npm/webshim@1.15.8/.npmignore +0 -16
  167. data/public/vendor/npm/webshim@1.15.8/.project +0 -12
  168. data/public/vendor/npm/webshim@1.15.8/demos/demos/filereader/upload/.keep +0 -0
  169. data/sequenceserver.gemspec +0 -55
  170. data/spec/blast_versions/blast_2.2.30/blast_2.2.30_spec.rb +0 -228
  171. data/spec/blast_versions/blast_2.2.30/import_spec_capybara_local_2.2.30.rb +0 -583
  172. data/spec/blast_versions/blast_2.2.31/blast_2.2.31_spec.rb +0 -228
  173. data/spec/blast_versions/blast_2.2.31/import_spec_capybara_local_2.2.31.rb +0 -587
  174. data/spec/blast_versions/blast_2.3.0/blast_2.3.0_spec.rb +0 -229
  175. data/spec/blast_versions/blast_2.3.0/import_spec_capybara_local_2.3.0.rb +0 -587
  176. data/spec/blast_versions/blast_2.4.0/blast_2.4.0_spec.rb +0 -228
  177. data/spec/blast_versions/blast_2.4.0/import_spec_capybara_local_2.4.0.rb +0 -588
  178. data/spec/blast_versions/blast_2.5.0/blast_2.5.0_spec.rb +0 -228
  179. data/spec/blast_versions/blast_2.5.0/import_spec_capybara_local_2.5.0.rb +0 -587
  180. data/spec/blast_versions/blast_2.6.0/blast_2.6.0_spec.rb +0 -228
  181. data/spec/blast_versions/blast_2.6.0/import_spec_capybara_local_2.6.0.rb +0 -587
  182. data/spec/blast_versions/blast_2.7.1/blast_2.7.1_spec.rb +0 -228
  183. data/spec/blast_versions/blast_2.7.1/import_spec_capybara_local_2.7.1.rb +0 -587
  184. data/spec/blast_versions/blast_2.8.1/blast_2.8.1_spec.rb +0 -228
  185. data/spec/blast_versions/blast_2.8.1/import_spec_capybara_local_2.8.1.rb +0 -587
  186. data/spec/blast_versions/blast_2.9.0/blast_2.9.0_spec.rb +0 -228
  187. data/spec/blast_versions/blast_2.9.0/import_spec_capybara_local_2.9.0.rb +0 -585
  188. data/spec/blast_versions/diamond_0.9.24/diamond_0.9.24_spec.rb +0 -176
  189. data/spec/blast_versions/diamond_0.9.24/import_spec_capybara_local_0.9.24.rb +0 -237
  190. data/spec/capybara_spec.rb +0 -334
  191. data/spec/config_spec.rb +0 -87
  192. data/spec/database/funky_ids/funky_ids.fa +0 -16
  193. data/spec/database/funky_ids/funky_ids.fa.nhd +0 -8
  194. data/spec/database/funky_ids/funky_ids.fa.nhi +0 -0
  195. data/spec/database/funky_ids/funky_ids.fa.nhr +0 -0
  196. data/spec/database/funky_ids/funky_ids.fa.nin +0 -0
  197. data/spec/database/funky_ids/funky_ids.fa.nog +0 -0
  198. data/spec/database/funky_ids/funky_ids.fa.nsd +0 -15
  199. data/spec/database/funky_ids/funky_ids.fa.nsi +0 -0
  200. data/spec/database/funky_ids/funky_ids.fa.nsq +0 -0
  201. data/spec/database/funky_sequences/README.md +0 -14
  202. data/spec/database/funky_sequences/funky_aa_sequences.fa +0 -7
  203. data/spec/database/funky_sequences/funky_aa_sequences.fa.phd +0 -3
  204. data/spec/database/funky_sequences/funky_aa_sequences.fa.phi +0 -0
  205. data/spec/database/funky_sequences/funky_aa_sequences.fa.phr +0 -0
  206. data/spec/database/funky_sequences/funky_aa_sequences.fa.pin +0 -0
  207. data/spec/database/funky_sequences/funky_aa_sequences.fa.pog +0 -0
  208. data/spec/database/funky_sequences/funky_aa_sequences.fa.psd +0 -6
  209. data/spec/database/funky_sequences/funky_aa_sequences.fa.psi +0 -0
  210. data/spec/database/funky_sequences/funky_aa_sequences.fa.psq +0 -0
  211. data/spec/database/funky_sequences/funky_na_sequences.fa +0 -2
  212. data/spec/database/funky_sequences/funky_na_sequences.fa.nhr +0 -0
  213. data/spec/database/funky_sequences/funky_na_sequences.fa.nin +0 -0
  214. data/spec/database/funky_sequences/funky_na_sequences.fa.nog +0 -0
  215. data/spec/database/funky_sequences/funky_na_sequences.fa.nsd +0 -2
  216. data/spec/database/funky_sequences/funky_na_sequences.fa.nsi +0 -0
  217. data/spec/database/funky_sequences/funky_na_sequences.fa.nsq +0 -0
  218. data/spec/database/ox_parse_error/query.fa +0 -1
  219. data/spec/database/ox_parse_error/rand1.fa +0 -2
  220. data/spec/database/ox_parse_error/rand1.fa.nhd +0 -1
  221. data/spec/database/ox_parse_error/rand1.fa.nhi +0 -0
  222. data/spec/database/ox_parse_error/rand1.fa.nhr +0 -0
  223. data/spec/database/ox_parse_error/rand1.fa.nin +0 -0
  224. data/spec/database/ox_parse_error/rand1.fa.nog +0 -0
  225. data/spec/database/ox_parse_error/rand1.fa.nsd +0 -2
  226. data/spec/database/ox_parse_error/rand1.fa.nsi +0 -0
  227. data/spec/database/ox_parse_error/rand1.fa.nsq +0 -0
  228. data/spec/database/ox_parse_error/rand2.fa +0 -2
  229. data/spec/database/ox_parse_error/rand2.fa.nhd +0 -1
  230. data/spec/database/ox_parse_error/rand2.fa.nhi +0 -0
  231. data/spec/database/ox_parse_error/rand2.fa.nhr +0 -0
  232. data/spec/database/ox_parse_error/rand2.fa.nin +0 -0
  233. data/spec/database/ox_parse_error/rand2.fa.nog +0 -0
  234. data/spec/database/ox_parse_error/rand2.fa.nsd +0 -2
  235. data/spec/database/ox_parse_error/rand2.fa.nsi +0 -0
  236. data/spec/database/ox_parse_error/rand2.fa.nsq +0 -0
  237. data/spec/database/ox_parse_error_unique_ids/query.fa +0 -1
  238. data/spec/database/ox_parse_error_unique_ids/rand1.fa +0 -2
  239. data/spec/database/ox_parse_error_unique_ids/rand1.fa.nhd +0 -1
  240. data/spec/database/ox_parse_error_unique_ids/rand1.fa.nhi +0 -0
  241. data/spec/database/ox_parse_error_unique_ids/rand1.fa.nhr +0 -0
  242. data/spec/database/ox_parse_error_unique_ids/rand1.fa.nin +0 -0
  243. data/spec/database/ox_parse_error_unique_ids/rand1.fa.nog +0 -0
  244. data/spec/database/ox_parse_error_unique_ids/rand1.fa.nsd +0 -2
  245. data/spec/database/ox_parse_error_unique_ids/rand1.fa.nsi +0 -0
  246. data/spec/database/ox_parse_error_unique_ids/rand1.fa.nsq +0 -0
  247. data/spec/database/ox_parse_error_unique_ids/rand2.fa +0 -2
  248. data/spec/database/ox_parse_error_unique_ids/rand2.fa.nhd +0 -1
  249. data/spec/database/ox_parse_error_unique_ids/rand2.fa.nhi +0 -0
  250. data/spec/database/ox_parse_error_unique_ids/rand2.fa.nhr +0 -0
  251. data/spec/database/ox_parse_error_unique_ids/rand2.fa.nin +0 -0
  252. data/spec/database/ox_parse_error_unique_ids/rand2.fa.nog +0 -0
  253. data/spec/database/ox_parse_error_unique_ids/rand2.fa.nsd +0 -2
  254. data/spec/database/ox_parse_error_unique_ids/rand2.fa.nsi +0 -0
  255. data/spec/database/ox_parse_error_unique_ids/rand2.fa.nsq +0 -0
  256. data/spec/database/pipe_in_seqid/pipe_in_seqid.fa +0 -6
  257. data/spec/database/pipe_in_seqid/pipe_in_seqid.fa.nhd +0 -1
  258. data/spec/database/pipe_in_seqid/pipe_in_seqid.fa.nhi +0 -0
  259. data/spec/database/pipe_in_seqid/pipe_in_seqid.fa.nhr +0 -0
  260. data/spec/database/pipe_in_seqid/pipe_in_seqid.fa.nin +0 -0
  261. data/spec/database/pipe_in_seqid/pipe_in_seqid.fa.nog +0 -0
  262. data/spec/database/pipe_in_seqid/pipe_in_seqid.fa.nsd +0 -2
  263. data/spec/database/pipe_in_seqid/pipe_in_seqid.fa.nsi +0 -0
  264. data/spec/database/pipe_in_seqid/pipe_in_seqid.fa.nsq +0 -0
  265. data/spec/database/sample/genome/Solenopsis_invicta/Solenopsis_invicta_gnG_subset.fasta.nhd +0 -8
  266. data/spec/database/sample/genome/Solenopsis_invicta/Solenopsis_invicta_gnG_subset.fasta.nhi +0 -0
  267. data/spec/database/sample/genome/Solenopsis_invicta/Solenopsis_invicta_gnG_subset.fasta.nhr +0 -0
  268. data/spec/database/sample/genome/Solenopsis_invicta/Solenopsis_invicta_gnG_subset.fasta.nin +0 -0
  269. data/spec/database/sample/genome/Solenopsis_invicta/Solenopsis_invicta_gnG_subset.fasta.nog +0 -0
  270. data/spec/database/sample/genome/Solenopsis_invicta/Solenopsis_invicta_gnG_subset.fasta.nsd +0 -16
  271. data/spec/database/sample/genome/Solenopsis_invicta/Solenopsis_invicta_gnG_subset.fasta.nsi +0 -0
  272. data/spec/database/sample/genome/Solenopsis_invicta/Solenopsis_invicta_gnG_subset.fasta.nsq +0 -0
  273. data/spec/database/sample/genome/Solenopsis_invicta/Solenopsis_invicta_gnG_subset.txt +0 -8
  274. data/spec/database/sample/links.rb +0 -23
  275. data/spec/database/sample/proteins/Solenopsis_invicta/Sinvicta2-2-3.prot.subset.fasta +0 -6449
  276. data/spec/database/sample/proteins/Solenopsis_invicta/Sinvicta2-2-3.prot.subset.fasta.phd +0 -1189
  277. data/spec/database/sample/proteins/Solenopsis_invicta/Sinvicta2-2-3.prot.subset.fasta.phi +0 -0
  278. data/spec/database/sample/proteins/Solenopsis_invicta/Sinvicta2-2-3.prot.subset.fasta.phr +0 -0
  279. data/spec/database/sample/proteins/Solenopsis_invicta/Sinvicta2-2-3.prot.subset.fasta.pin +0 -0
  280. data/spec/database/sample/proteins/Solenopsis_invicta/Sinvicta2-2-3.prot.subset.fasta.pog +0 -0
  281. data/spec/database/sample/proteins/Solenopsis_invicta/Sinvicta2-2-3.prot.subset.fasta.psd +0 -2378
  282. data/spec/database/sample/proteins/Solenopsis_invicta/Sinvicta2-2-3.prot.subset.fasta.psi +0 -0
  283. data/spec/database/sample/proteins/Solenopsis_invicta/Sinvicta2-2-3.prot.subset.fasta.psq +0 -0
  284. data/spec/database/sample/proteins/uniprot/2018-04-Swiss-Prot_insecta.fasta.phd +0 -9140
  285. data/spec/database/sample/proteins/uniprot/2018-04-Swiss-Prot_insecta.fasta.phi +0 -0
  286. data/spec/database/sample/proteins/uniprot/2018-04-Swiss-Prot_insecta.fasta.phr +0 -0
  287. data/spec/database/sample/proteins/uniprot/2018-04-Swiss-Prot_insecta.fasta.pin +0 -0
  288. data/spec/database/sample/proteins/uniprot/2018-04-Swiss-Prot_insecta.fasta.pog +0 -0
  289. data/spec/database/sample/proteins/uniprot/2018-04-Swiss-Prot_insecta.fasta.psd +0 -18280
  290. data/spec/database/sample/proteins/uniprot/2018-04-Swiss-Prot_insecta.fasta.psi +0 -0
  291. data/spec/database/sample/proteins/uniprot/2018-04-Swiss-Prot_insecta.fasta.psq +0 -0
  292. data/spec/database/sample/proteins/uniprot/URL +0 -1
  293. data/spec/database/sample/si_uniprot_idmap.yml +0 -14180
  294. data/spec/database/sample/transcripts/Solenopsis_invicta/Sinvicta2-2-3.cdna.subset.fasta +0 -5486
  295. data/spec/database/sample/transcripts/Solenopsis_invicta/Sinvicta2-2-3.cdna.subset.fasta.nhd +0 -473
  296. data/spec/database/sample/transcripts/Solenopsis_invicta/Sinvicta2-2-3.cdna.subset.fasta.nhi +0 -0
  297. data/spec/database/sample/transcripts/Solenopsis_invicta/Sinvicta2-2-3.cdna.subset.fasta.nhr +0 -0
  298. data/spec/database/sample/transcripts/Solenopsis_invicta/Sinvicta2-2-3.cdna.subset.fasta.nin +0 -0
  299. data/spec/database/sample/transcripts/Solenopsis_invicta/Sinvicta2-2-3.cdna.subset.fasta.nog +0 -0
  300. data/spec/database/sample/transcripts/Solenopsis_invicta/Sinvicta2-2-3.cdna.subset.fasta.nsd +0 -946
  301. data/spec/database/sample/transcripts/Solenopsis_invicta/Sinvicta2-2-3.cdna.subset.fasta.nsi +0 -0
  302. data/spec/database/sample/transcripts/Solenopsis_invicta/Sinvicta2-2-3.cdna.subset.fasta.nsq +0 -0
  303. data/spec/database/unformatted/Cardiocondyla_obscurior/Cobs1.4.proteins.fa +0 -148303
  304. data/spec/database/without_parse_seqids/without_parse_seqids.fa +0 -10
  305. data/spec/database/without_parse_seqids/without_parse_seqids.fa.phr +0 -0
  306. data/spec/database/without_parse_seqids/without_parse_seqids.fa.pin +0 -0
  307. data/spec/database/without_parse_seqids/without_parse_seqids.fa.psq +0 -0
  308. data/spec/database_spec.rb +0 -127
  309. data/spec/doctor_spec.disabled.rb +0 -107
  310. data/spec/dotdir/blast_2.2.30/blastn/BLASTN_XML_2.2.30.xml +0 -1201
  311. data/spec/dotdir/blast_2.2.30/blastn/job.yaml +0 -8
  312. data/spec/dotdir/blast_2.2.30/blastn_nohits/BLASTN_NO_HITS_XML_2.2.30.xml +0 -866
  313. data/spec/dotdir/blast_2.2.30/blastn_nohits/job.yaml +0 -8
  314. data/spec/dotdir/blast_2.2.30/blastp/BLASTP_XML_2.2.30.xml +0 -1181
  315. data/spec/dotdir/blast_2.2.30/blastp/job.yaml +0 -8
  316. data/spec/dotdir/blast_2.2.30/blastx/BLASTX_XML_2.2.30.xml +0 -1181
  317. data/spec/dotdir/blast_2.2.30/blastx/job.yaml +0 -8
  318. data/spec/dotdir/blast_2.2.30/tblastn/TBLASTN_XML_2.2.30.xml +0 -1181
  319. data/spec/dotdir/blast_2.2.30/tblastn/job.yaml +0 -8
  320. data/spec/dotdir/blast_2.2.30/tblastx/TBLASTX_XML_2.2.30.xml +0 -8857
  321. data/spec/dotdir/blast_2.2.30/tblastx/job.yaml +0 -8
  322. data/spec/dotdir/blast_2.2.31/blastn/BLASTN_XML_2.2.31.xml +0 -1201
  323. data/spec/dotdir/blast_2.2.31/blastn/job.yaml +0 -8
  324. data/spec/dotdir/blast_2.2.31/blastn_nohits/BLASTN_NO_HITS_XML_2.2.31.xml +0 -866
  325. data/spec/dotdir/blast_2.2.31/blastn_nohits/job.yaml +0 -8
  326. data/spec/dotdir/blast_2.2.31/blastp/BLASTP_XML_2.2.31.xml +0 -1181
  327. data/spec/dotdir/blast_2.2.31/blastp/job.yaml +0 -8
  328. data/spec/dotdir/blast_2.2.31/blastx/BLASTX_XML_2.2.31.xml +0 -1181
  329. data/spec/dotdir/blast_2.2.31/blastx/job.yaml +0 -8
  330. data/spec/dotdir/blast_2.2.31/tblastn/TBLASTN_XML_2.2.31.xml +0 -1181
  331. data/spec/dotdir/blast_2.2.31/tblastn/job.yaml +0 -8
  332. data/spec/dotdir/blast_2.2.31/tblastx/TBLASTX_XML_2.2.31.xml +0 -8857
  333. data/spec/dotdir/blast_2.2.31/tblastx/job.yaml +0 -8
  334. data/spec/dotdir/blast_2.3.0/blastn/BLASTN_XML_2.3.0.xml +0 -1201
  335. data/spec/dotdir/blast_2.3.0/blastn/job.yaml +0 -8
  336. data/spec/dotdir/blast_2.3.0/blastn_nohits/BLASTN_NO_HITS_XML_2.3.0.xml +0 -866
  337. data/spec/dotdir/blast_2.3.0/blastn_nohits/job.yaml +0 -8
  338. data/spec/dotdir/blast_2.3.0/blastp/BLASTP_XML_2.3.0.xml +0 -1181
  339. data/spec/dotdir/blast_2.3.0/blastp/job.yaml +0 -8
  340. data/spec/dotdir/blast_2.3.0/blastx/BLASTX_XML_2.3.0.xml +0 -1181
  341. data/spec/dotdir/blast_2.3.0/blastx/job.yaml +0 -8
  342. data/spec/dotdir/blast_2.3.0/tblastn/TBLASTN_XML_2.3.0.xml +0 -1181
  343. data/spec/dotdir/blast_2.3.0/tblastn/job.yaml +0 -8
  344. data/spec/dotdir/blast_2.3.0/tblastx/TBLASTX_XML_2.3.0.xml +0 -8857
  345. data/spec/dotdir/blast_2.3.0/tblastx/job.yaml +0 -8
  346. data/spec/dotdir/blast_2.4.0/blastn/BLASTN_XML_2.4.0.xml +0 -1201
  347. data/spec/dotdir/blast_2.4.0/blastn/job.yaml +0 -8
  348. data/spec/dotdir/blast_2.4.0/blastn_nohits/BLASTN_NO_HITS_XML_2.4.0.xml +0 -866
  349. data/spec/dotdir/blast_2.4.0/blastn_nohits/job.yaml +0 -8
  350. data/spec/dotdir/blast_2.4.0/blastp/BLASTP_XML_2.4.0.xml +0 -1181
  351. data/spec/dotdir/blast_2.4.0/blastp/job.yaml +0 -8
  352. data/spec/dotdir/blast_2.4.0/blastx/BLASTX_XML_2.4.0.xml +0 -1181
  353. data/spec/dotdir/blast_2.4.0/blastx/job.yaml +0 -8
  354. data/spec/dotdir/blast_2.4.0/tblastn/TBLASTN_XML_2.4.0.xml +0 -1181
  355. data/spec/dotdir/blast_2.4.0/tblastn/job.yaml +0 -8
  356. data/spec/dotdir/blast_2.4.0/tblastx/TBLASTX_XML_2.4.0.xml +0 -8857
  357. data/spec/dotdir/blast_2.4.0/tblastx/job.yaml +0 -8
  358. data/spec/dotdir/blast_2.5.0/blastn/BLASTN_XML_2.5.0.xml +0 -1201
  359. data/spec/dotdir/blast_2.5.0/blastn/job.yaml +0 -8
  360. data/spec/dotdir/blast_2.5.0/blastn_nohits/BLASTN_NO_HITS_XML_2.5.0.xml +0 -866
  361. data/spec/dotdir/blast_2.5.0/blastn_nohits/job.yaml +0 -8
  362. data/spec/dotdir/blast_2.5.0/blastp/BLASTP +0 -2161
  363. data/spec/dotdir/blast_2.5.0/blastp/BLASTP_XML_2.5.0.xml +0 -1181
  364. data/spec/dotdir/blast_2.5.0/blastp/job.yaml +0 -8
  365. data/spec/dotdir/blast_2.5.0/blastx/BLASTX +0 -28080
  366. data/spec/dotdir/blast_2.5.0/blastx/BLASTX_XML_2.5.0.xml +0 -1181
  367. data/spec/dotdir/blast_2.5.0/blastx/job.yaml +0 -8
  368. data/spec/dotdir/blast_2.5.0/tblastn/TBLASTN +0 -29486
  369. data/spec/dotdir/blast_2.5.0/tblastn/TBLASTN_XML_2.5.0.xml +0 -1181
  370. data/spec/dotdir/blast_2.5.0/tblastn/job.yaml +0 -8
  371. data/spec/dotdir/blast_2.5.0/tblastx/TBLASTX +0 -180859
  372. data/spec/dotdir/blast_2.5.0/tblastx/TBLASTX_XML_2.5.0.xml +0 -8857
  373. data/spec/dotdir/blast_2.5.0/tblastx/job.yaml +0 -8
  374. data/spec/dotdir/blast_2.6.0/blastn/BLASTN_XML_2.6.0.xml +0 -1201
  375. data/spec/dotdir/blast_2.6.0/blastn/job.yaml +0 -8
  376. data/spec/dotdir/blast_2.6.0/blastn_nohits/BLASTN_NO_HITS_XML_2.6.0.xml +0 -866
  377. data/spec/dotdir/blast_2.6.0/blastn_nohits/job.yaml +0 -8
  378. data/spec/dotdir/blast_2.6.0/blastp/BLASTP_XML_2.6.0.xml +0 -1181
  379. data/spec/dotdir/blast_2.6.0/blastp/job.yaml +0 -8
  380. data/spec/dotdir/blast_2.6.0/blastx/BLASTX_XML_2.6.0.xml +0 -1181
  381. data/spec/dotdir/blast_2.6.0/blastx/job.yaml +0 -8
  382. data/spec/dotdir/blast_2.6.0/tblastn/TBLASTN_XML_2.6.0.xml +0 -1181
  383. data/spec/dotdir/blast_2.6.0/tblastn/job.yaml +0 -8
  384. data/spec/dotdir/blast_2.6.0/tblastx/TBLASTX_XML_2.6.0.xml +0 -8857
  385. data/spec/dotdir/blast_2.6.0/tblastx/job.yaml +0 -8
  386. data/spec/dotdir/blast_2.7.1/blastn/BLASTN_XML_2.7.1.xml +0 -1201
  387. data/spec/dotdir/blast_2.7.1/blastn/job.yaml +0 -8
  388. data/spec/dotdir/blast_2.7.1/blastn_nohits/BLASTN_NO_HITS_XML_2.7.1.xml +0 -866
  389. data/spec/dotdir/blast_2.7.1/blastn_nohits/job.yaml +0 -8
  390. data/spec/dotdir/blast_2.7.1/blastp/BLASTP_XML_2.7.1.xml +0 -1181
  391. data/spec/dotdir/blast_2.7.1/blastp/job.yaml +0 -8
  392. data/spec/dotdir/blast_2.7.1/blastx/BLASTX_XML_2.7.1.xml +0 -1181
  393. data/spec/dotdir/blast_2.7.1/blastx/job.yaml +0 -8
  394. data/spec/dotdir/blast_2.7.1/tblastn/TBLASTN_XML_2.7.1.xml +0 -1181
  395. data/spec/dotdir/blast_2.7.1/tblastn/job.yaml +0 -8
  396. data/spec/dotdir/blast_2.7.1/tblastx/TBLASTX_XML_2.7.1.xml +0 -8857
  397. data/spec/dotdir/blast_2.7.1/tblastx/job.yaml +0 -8
  398. data/spec/dotdir/blast_2.8.1/blastn/BLASTN_XML_2.8.1.xml +0 -1201
  399. data/spec/dotdir/blast_2.8.1/blastn/job.yaml +0 -8
  400. data/spec/dotdir/blast_2.8.1/blastn_nohits/BLASTN_NO_HITS_XML_2.8.1.xml +0 -866
  401. data/spec/dotdir/blast_2.8.1/blastn_nohits/job.yaml +0 -8
  402. data/spec/dotdir/blast_2.8.1/blastp/BLASTP_XML_2.8.1.xml +0 -1181
  403. data/spec/dotdir/blast_2.8.1/blastp/job.yaml +0 -8
  404. data/spec/dotdir/blast_2.8.1/blastx/BLASTX_XML_2.8.1.xml +0 -1181
  405. data/spec/dotdir/blast_2.8.1/blastx/job.yaml +0 -8
  406. data/spec/dotdir/blast_2.8.1/tblastn/TBLASTN_XML_2.8.1.xml +0 -1181
  407. data/spec/dotdir/blast_2.8.1/tblastn/job.yaml +0 -8
  408. data/spec/dotdir/blast_2.8.1/tblastx/TBLASTX_XML_2.8.1.xml +0 -8857
  409. data/spec/dotdir/blast_2.8.1/tblastx/job.yaml +0 -8
  410. data/spec/dotdir/blast_2.9.0/blastn/BLASTN_XML_2.9.0.xml +0 -1201
  411. data/spec/dotdir/blast_2.9.0/blastn/job.yaml +0 -8
  412. data/spec/dotdir/blast_2.9.0/blastn_nohits/BLASTN_NO_HITS_XML_2.9.0.xml +0 -866
  413. data/spec/dotdir/blast_2.9.0/blastn_nohits/job.yaml +0 -8
  414. data/spec/dotdir/blast_2.9.0/blastp/BLASTP_XML_2.9.0.xml +0 -1181
  415. data/spec/dotdir/blast_2.9.0/blastp/job.yaml +0 -8
  416. data/spec/dotdir/blast_2.9.0/blastx/BLASTX_XML_2.9.0.xml +0 -1181
  417. data/spec/dotdir/blast_2.9.0/blastx/job.yaml +0 -8
  418. data/spec/dotdir/blast_2.9.0/tblastn/TBLASTN_XML_2.9.0.xml +0 -1181
  419. data/spec/dotdir/blast_2.9.0/tblastn/job.yaml +0 -8
  420. data/spec/dotdir/blast_2.9.0/tblastx/TBLASTX_XML_2.9.0.xml +0 -8857
  421. data/spec/dotdir/blast_2.9.0/tblastx/job.yaml +0 -8
  422. data/spec/dotdir/diamond_0.9.24/blastp/DIAMOND_BLASTP_0.9.24.xml +0 -1040
  423. data/spec/dotdir/diamond_0.9.24/blastp/job.yaml +0 -8
  424. data/spec/dotdir/diamond_0.9.24/blastx/DIAMOND_BLASTX_0.9.24.xml +0 -1040
  425. data/spec/dotdir/diamond_0.9.24/blastx/job.yaml +0 -8
  426. data/spec/dotdir/diamond_0.9.24/blastx_nohits/DIAMOND_BLASTX_NOHITS_0.9.24.xml +0 -41
  427. data/spec/dotdir/diamond_0.9.24/blastx_nohits/job.yaml +0 -8
  428. data/spec/download_helper.rb +0 -35
  429. data/spec/empty_config.yml +0 -0
  430. data/spec/routes_spec.rb +0 -93
  431. data/spec/sample.conf +0 -2
  432. data/spec/sequence_spec.rb +0 -100
  433. data/spec/sequences/MH011443_1_gi_1486783306_gb_MH011443_1.txt +0 -6
  434. data/spec/sequences/MH011443_1_gi_1486783307_gb_AYF55702_1.txt +0 -6
  435. data/spec/sequences/MH011443_1_gi_1528997474_gb_MH447967_1.txt +0 -30
  436. data/spec/sequences/MH011443_1_sp_P04637_P53_HUMAN.txt +0 -6
  437. data/spec/sequences/Nucleotide_TP53_COX41.fasta +0 -15
  438. data/spec/sequences/Protein_TP53_COX41.fasta +0 -12
  439. data/spec/sequences/Query_1_SI2_2_0_06267.txt +0 -6
  440. data/spec/sequences/alignment-2_hits.txt +0 -12
  441. data/spec/sequences/alignment-35_hits_diamond_blastp.txt +0 -210
  442. data/spec/sequences/alignment-35_hits_diamond_blastx.txt +0 -210
  443. data/spec/sequences/alignment-3_hits.txt +0 -18
  444. data/spec/sequences/alignment-40_hits_blastn.txt +0 -246
  445. data/spec/sequences/alignment-40_hits_blastp.txt +0 -240
  446. data/spec/sequences/alignment-40_hits_blastp_2.2.30.txt +0 -240
  447. data/spec/sequences/alignment-40_hits_blastx.txt +0 -240
  448. data/spec/sequences/alignment-40_hits_tblastn.txt +0 -240
  449. data/spec/sequences/alignment-40_hits_tblastn_2.2.30.txt +0 -240
  450. data/spec/sequences/alignment-40_hits_tblastx.txt +0 -2664
  451. data/spec/sequences/alignment-4_hits.txt +0 -24
  452. data/spec/sequences/alignment-4_hits_blastn.txt +0 -24
  453. data/spec/sequences/alignment-4_hits_blastp.txt +0 -24
  454. data/spec/sequences/alignment-4_hits_blastp_2.2.30.txt +0 -24
  455. data/spec/sequences/alignment-4_hits_blastx.txt +0 -24
  456. data/spec/sequences/alignment-4_hits_diamond_blastp.txt +0 -24
  457. data/spec/sequences/alignment-4_hits_diamond_blastx.txt +0 -24
  458. data/spec/sequences/alignment-4_hits_tblastn.txt +0 -24
  459. data/spec/sequences/alignment-4_hits_tblastn_2.2.30.txt +0 -24
  460. data/spec/sequences/alignment-4_hits_tblastx.txt +0 -318
  461. data/spec/sequences/nucleotide_query.fa +0 -21
  462. data/spec/sequences/problematic_query.fa +0 -5
  463. data/spec/sequences/protein_query.fa +0 -9
  464. data/spec/sequences/sample_query_fire_ant_obps.fa +0 -44
  465. data/spec/sequences/sequenceserver-2_hits.fa +0 -10
  466. data/spec/sequences/sequenceserver-SI2.2.0_06267.fa +0 -5
  467. data/spec/sequences/sp_P04637_P53_HUMAN_gi_1099170394_ref_XP_018868681_1.txt +0 -6
  468. data/spec/sequences/sp_P04637_P53_HUMAN_gi_120407068_ref_NP_000537_3.txt +0 -6
  469. data/spec/sequences/sp_P04637_P53_HUMAN_gi_1484127324_gb_MG595988_1.txt +0 -6
  470. data/spec/sequences/sp_P04637_P53_HUMAN_gi_395440626_gb_JQ694049_1.txt +0 -6
  471. data/spec/sequences/sp_P04637_P53_HUMAN_sp_P04637_P53_HUMAN.txt +0 -6
  472. data/spec/sequenceserver_spec.rb +0 -90
  473. data/spec/spec_helper.rb +0 -63
@@ -16,6 +16,13 @@ export default React.createClass({
16
16
  return this.props.hit.accession;
17
17
  },
18
18
 
19
+ /**
20
+ * Returns id of the hit sequence.
21
+ */
22
+ sequenceID: function () {
23
+ return this.props.hit.id;
24
+ },
25
+
19
26
  /**
20
27
  * Returns length of the hit sequence.
21
28
  */
@@ -41,12 +48,14 @@ export default React.createClass({
41
48
  },
42
49
 
43
50
  viewSequenceLink: function () {
44
- return encodeURI(`get_sequence/?sequence_ids=${this.accession()}&database_ids=${this.databaseIDs()}`);
51
+ var sequenceIDs = encodeURIComponent(this.sequenceID());
52
+ var databaseIDs = encodeURIComponent(this.databaseIDs());
53
+ return `get_sequence/?sequence_ids=${sequenceIDs}&database_ids=${databaseIDs}`;
45
54
  },
46
55
 
47
56
  downloadFASTA: function (event) {
48
- var accessions = [this.accession()];
49
- downloadFASTA(accessions, this.databaseIDs());
57
+ var sequenceIDs = [this.sequenceID()];
58
+ downloadFASTA(sequenceIDs, this.databaseIDs());
50
59
  },
51
60
 
52
61
  // Event-handler for exporting alignments.
@@ -129,7 +138,7 @@ export default React.createClass({
129
138
  <div className="hit-links">
130
139
  <label>
131
140
  <input type="checkbox" id={this.domID() + '_checkbox'}
132
- value={this.accession()} onChange={function () {
141
+ value={this.sequenceID()} onChange={function () {
133
142
  this.props.selectHit(this.domID() + '_checkbox');
134
143
  }.bind(this)} data-target={'#' + this.domID()}
135
144
  /> Select
@@ -182,7 +191,7 @@ export default React.createClass({
182
191
  return {
183
192
  text: 'Alignment',
184
193
  icon: 'fa-download',
185
- className: 'download-fa',
194
+ className: 'download-aln',
186
195
  onClick: () => this.downloadAlignment()
187
196
  };
188
197
  },
@@ -55,7 +55,7 @@ import 'webshim';
55
55
  ._tooltip('destroy')
56
56
  ._tooltip($.extend({
57
57
  container: 'body',
58
- placement: 'left',
58
+ placement: 'bottom',
59
59
  delay: {
60
60
  show: 1000
61
61
  }
@@ -92,10 +92,20 @@ export default React.createClass({
92
92
  var HitsTable = React.createClass({
93
93
  mixins: [Utils],
94
94
  render: function () {
95
- var count = 0,
96
- hasName = _.every(this.props.query.hits, function(hit) {
97
- return hit.sciname !== '';
98
- });
95
+ var hasName = _.every(this.props.query.hits, function(hit) {
96
+ return hit.sciname !== '';
97
+ });
98
+
99
+ // Width of sequence column is 55% when species name is not shown and
100
+ // query coverage is.
101
+ var seqwidth = 55;
102
+ // If we are going to show species name, then reduce the width of
103
+ // sequence column by the width of species column.
104
+ if (hasName) seqwidth -= 15;
105
+ // If we are not going to show query coverage (i.e. for imported XML),
106
+ // then increase the width of sequence column by the width of coverage
107
+ // column.
108
+ if (this.props.imported_xml) seqwidth += 15;
99
109
 
100
110
  return (
101
111
  <div className="table-hit-overview">
@@ -108,12 +118,12 @@ var HitsTable = React.createClass({
108
118
  className="table table-hover table-condensed tabular-view ">
109
119
  <thead>
110
120
  <th className="text-left">#</th>
111
- <th>Similar sequences</th>
112
- {hasName && <th className="text-left">Species</th>}
113
- {!this.props.imported_xml && <th className="text-right">Query coverage (%)</th>}
114
- <th className="text-right">Total score</th>
115
- <th className="text-right">E value</th>
116
- <th className="text-right" data-toggle="tooltip"
121
+ <th width={`${seqwidth}%`}>Similar sequences</th>
122
+ {hasName && <th width="15%" className="text-left">Species</th>}
123
+ {!this.props.imported_xml && <th width="15%" className="text-right">Query coverage (%)</th>}
124
+ <th width="10%" className="text-right">Total score</th>
125
+ <th width="10%" className="text-right">E value</th>
126
+ <th width="10%" className="text-right" data-toggle="tooltip"
117
127
  data-placement="left" title="Total identity of all hsps / total length of all hsps">
118
128
  Identity (%)
119
129
  </th>
@@ -124,12 +134,18 @@ var HitsTable = React.createClass({
124
134
  return (
125
135
  <tr key={hit.number}>
126
136
  <td className="text-left">{hit.number + '.'}</td>
127
- <td>
128
- <a href={'#Query_' + this.props.query.number + '_hit_' + hit.number} className="btn-link">
129
- {hit.id}
130
- </a>
137
+ <td className="nowrap-ellipsis"
138
+ title={`${hit.id} ${hit.title}`}
139
+ data-toggle="tooltip" data-placement="left">
140
+ <a href={'#Query_' + this.props.query.number + '_hit_' + hit.number}
141
+ className="btn-link">{hit.id} {hit.title}</a>
131
142
  </td>
132
- {hasName && <td className="text-left">{hit.sciname}</td>}
143
+ {hasName &&
144
+ <td className="nowrap-ellipsis" title={hit.sciname}
145
+ data-toggle="tooltip" data-placement="top">
146
+ {hit.sciname}
147
+ </td>
148
+ }
133
149
  {!this.props.imported_xml && <td className="text-right">{hit.qcovs}</td>}
134
150
  <td className="text-right">{hit.score}</td>
135
151
  <td className="text-right">{this.inExponential(hit.hsps[0].evalue)}</td>
@@ -9,7 +9,7 @@ import Hit from './hit';
9
9
  import HSP from './hsp';
10
10
 
11
11
  import SequenceModal from './sequence_modal';
12
- import showErrorModal from './error_modal';
12
+ import ErrorModal from './error_modal';
13
13
 
14
14
  /**
15
15
  * Base component of report page. This component is later rendered into page's
@@ -23,7 +23,8 @@ var Page = React.createClass({
23
23
  the Report component to render itself in. */}
24
24
  <div className="container">
25
25
  <Report showSequenceModal={ _ => this.showSequenceModal(_) }
26
- getCharacterWidth={ () => this.getCharacterWidth() } />
26
+ getCharacterWidth={ () => this.getCharacterWidth() }
27
+ showErrorModal={ (...args) => this.showErrorModal(...args) } />
27
28
  </div>
28
29
 
29
30
  {/* Add a hidden span tag containing chars used in HSPs */}
@@ -34,7 +35,10 @@ var Page = React.createClass({
34
35
  {/* Required by Grapher for SVG and PNG download */}
35
36
  <canvas id="png-exporter" hidden></canvas>
36
37
 
37
- <SequenceModal ref="sequenceModal" />
38
+ <SequenceModal ref="sequenceModal"
39
+ showErrorModal={ (...args) => this.showErrorModal(...args) }/>
40
+
41
+ <ErrorModal ref="errorModal" />
38
42
  </div>
39
43
  );
40
44
  },
@@ -48,6 +52,10 @@ var Page = React.createClass({
48
52
  this.refs.sequenceModal.show(url);
49
53
  },
50
54
 
55
+ showErrorModal: function (errorData, beforeShow) {
56
+ this.refs.errorModal.show(errorData, beforeShow);
57
+ },
58
+
51
59
  getCharacterWidth: function () {
52
60
  if (!this.characterWidth) {
53
61
  var $hspChars = $(React.findDOMNode(this.refs.hspChars));
@@ -118,7 +126,7 @@ var Report = React.createClass({
118
126
  case 404:
119
127
  case 400:
120
128
  case 500:
121
- showErrorModal(jqXHR.responseJSON);
129
+ component.props.showErrorModal(jqXHR.responseJSON);
122
130
  break;
123
131
  }
124
132
  });
@@ -157,8 +165,7 @@ var Report = React.createClass({
157
165
  * Called for the first time after as BLAST results have been retrieved from
158
166
  * the server and added to this.state by fetchResults. Only summary overview
159
167
  * and circos would have been rendered at this point. At this stage we kick
160
- * start iteratively updating 10 HSPs (and as many hits and queries) every
161
- * 25 milli-seconds.
168
+ * start iteratively adding 1 HSP to the page every 25 milli-seconds.
162
169
  */
163
170
  componentDidUpdate: function () {
164
171
  // Log to console how long the last update take?
@@ -7,6 +7,14 @@ import _ from 'underscore';
7
7
  */
8
8
  $.webshims.polyfill('forms');
9
9
 
10
+ /**
11
+ * Clear sessionStorage on reload.
12
+ */
13
+ if (performance.navigation.type == performance.navigation.TYPE_RELOAD) {
14
+ sessionStorage.clear();
15
+ history.replaceState(null, '', location.href.split('?')[0]);
16
+ }
17
+
10
18
  var Page = React.createClass({
11
19
  render: function () {
12
20
  return (
@@ -231,12 +239,13 @@ var Form = React.createClass({
231
239
  }.bind(this));
232
240
 
233
241
  /* Enable submitting form on Cmd+Enter */
234
- $(document).bind('keydown', _.bind(function (e) {
235
- if (e.ctrlKey && e.keyCode === 13 &&
236
- !$('#method').is(':disabled')) {
237
- $(this.getDOMNode()).trigger('submit');
242
+ $(document).on('keydown', (e)=> {
243
+ var $button = $('#method');
244
+ if (!$button.is(':disabled') &&
245
+ e.ctrlKey && e.key === 'Enter') {
246
+ $button.trigger('click');
238
247
  }
239
- }, this));
248
+ });
240
249
  },
241
250
 
242
251
  determineBlastMethod: function () {
@@ -303,6 +312,17 @@ var Form = React.createClass({
303
312
  }
304
313
  },
305
314
 
315
+ handleNewTabCheckbox: function () {
316
+ setTimeout(() => {
317
+ if ($('#toggleNewTab').is(':checked')) {
318
+ $('#blast').attr('target', '_blank');
319
+ }
320
+ else {
321
+ $('#blast').attr('target', '_self');
322
+ }
323
+ });
324
+ },
325
+
306
326
  render: function () {
307
327
  return (
308
328
  <div className="container">
@@ -320,6 +340,15 @@ var Form = React.createClass({
320
340
  onDatabaseTypeChanged={this.handleDatabaseTypeChanaged} />
321
341
  <div className="form-group">
322
342
  <Options ref="opts"/>
343
+ <div className="col-md-2">
344
+ <div className="form-group" style={{'textAlign': 'center', 'padding': '7px 0'}}>
345
+ <label>
346
+ <input type="checkbox" id="toggleNewTab"
347
+ onChange={()=> { this.handleNewTabCheckbox(); }}
348
+ /> Open results in new tab
349
+ </label>
350
+ </div>
351
+ </div>
323
352
  <SearchButton ref="button" onAlgoChanged={this.handleAlgoChanged}/>
324
353
  </div>
325
354
  </form>
@@ -614,8 +643,7 @@ var MixedNotification = React.createClass({
614
643
  style={{ display: 'none' }}>
615
644
  <div
616
645
  className="alert-danger col-md-10 col-md-offset-1">
617
- Detected: mixed nucleotide and amino-acid sequences. We
618
- can't handle that. Please try one sequence at a time.
646
+ Error: mixed nucleotide and amino-acid sequences detected.
619
647
  </div>
620
648
  </div>
621
649
  );
@@ -628,14 +656,12 @@ var Databases = React.createClass({
628
656
  },
629
657
 
630
658
  databases: function (category) {
631
- if (!category) {
632
- return this.props.databases.slice();
659
+ var databases = this.props.databases;
660
+ if (category) {
661
+ databases = _.select(databases, database => database.type === category);
633
662
  }
634
663
 
635
- return _.select(this.props.databases,
636
- function (database) {
637
- return database.type === category;
638
- });
664
+ return _.sortBy(databases, 'title');
639
665
  },
640
666
 
641
667
  nselected: function () {
@@ -649,7 +675,7 @@ var Databases = React.createClass({
649
675
 
650
676
  handleClick: function (database) {
651
677
  var type = this.nselected() ? database.type : '';
652
- this.setState({type: type});
678
+ if (type != this.state.type) this.setState({type: type});
653
679
  },
654
680
 
655
681
  handleToggle: function (toggleState, type) {
@@ -736,10 +762,6 @@ var Databases = React.createClass({
736
762
  );
737
763
  },
738
764
 
739
- //shouldComponentUpdate: function (props, state) {
740
- //return !(state.type && state.type === this.state.type);
741
- //},
742
-
743
765
  componentDidUpdate: function () {
744
766
  if (this.databases() && this.databases().length === 1) {
745
767
  $('.databases').find('input').prop('checked',true);
@@ -749,10 +771,8 @@ var Databases = React.createClass({
749
771
  if (this.props.preSelectedDbs) {
750
772
  var selectors = this.props.preSelectedDbs.map(db => `input[value=${db.id}]`);
751
773
  $(...selectors).prop('checked',true);
752
- setTimeout(() => {
753
- this.handleClick(this.props.preSelectedDbs[0]);
754
- this.props.preSelectedDbs = null;
755
- });
774
+ this.handleClick(this.props.preSelectedDbs[0]);
775
+ this.props.preSelectedDbs = null;
756
776
  }
757
777
  this.props.onDatabaseTypeChanged(this.state.type);
758
778
  }
@@ -777,7 +797,7 @@ var Options = React.createClass({
777
797
  classNames += ' yellow-background';
778
798
  }
779
799
  return (
780
- <div className="col-md-8">
800
+ <div className="col-md-7">
781
801
  <div className="form-group">
782
802
  <div className="col-md-12">
783
803
  <div className="input-group">
@@ -915,7 +935,7 @@ var SearchButton = React.createClass({
915
935
  var multi = methods.length > 1;
916
936
 
917
937
  return (
918
- <div className="col-md-4">
938
+ <div className="col-md-3">
919
939
  <div className="form-group">
920
940
  <div className="col-md-12">
921
941
  <div
@@ -1,7 +1,6 @@
1
1
  import './sequence';
2
2
  import React from 'react';
3
3
  import _ from 'underscore';
4
- import showErrorModal from './error_modal';
5
4
 
6
5
  /**
7
6
  * Takes sequence accession as props, fetches the sequence from the server, and
@@ -54,6 +53,13 @@ export default class SequenceModal extends React.Component {
54
53
  });
55
54
  }
56
55
 
56
+ /**
57
+ * Hide sequence viewer.
58
+ */
59
+ hide () {
60
+ this.modal().modal('hide');
61
+ }
62
+
57
63
  /**
58
64
  * Loads sequence using AJAX and updates modal state.
59
65
  */
@@ -67,10 +73,9 @@ export default class SequenceModal extends React.Component {
67
73
  requestCompleted: true
68
74
  });
69
75
  }, this))
70
- .fail(function (jqXHR, status, error) {
71
- showErrorModal(jqXHR, function () {
72
- this.hide();
73
- });
76
+ .fail((jqXHR, status, error) => {
77
+ this.hide();
78
+ this.props.showErrorModal(jqXHR.responseJSON);
74
79
  });
75
80
 
76
81
  }
@@ -9,6 +9,15 @@ import AlignmentExporter from './alignment_exporter'; // to download textual ali
9
9
  * Renders links for navigating to each query.
10
10
  */
11
11
  export default React.createClass({
12
+ /**
13
+ * Clear sessionStorage - useful to initiate a new search in the same tab.
14
+ * Passing sessionStorage.clear directly as onclick callback didn't work
15
+ * (on macOS Chrome).
16
+ */
17
+ clearSession: function () {
18
+ sessionStorage.clear();
19
+ },
20
+
12
21
  /**
13
22
  * Event-handler for downloading fasta of all hits.
14
23
  */
@@ -16,7 +25,7 @@ export default React.createClass({
16
25
  var sequence_ids = [];
17
26
  this.props.data.queries.forEach(
18
27
  (query) => query.hits.forEach(
19
- (hit) => sequence_ids.push(hit.accession)));
28
+ (hit) => sequence_ids.push(hit.id)));
20
29
  var database_ids = this.props.data.querydb.map((querydb) => querydb.id);
21
30
  downloadFASTA(sequence_ids, database_ids);
22
31
  return false;
@@ -66,7 +75,7 @@ export default React.createClass({
66
75
  console.log('check '+sequence_ids.toString());
67
76
  _.each(this.props.data.queries, _.bind(function (query) {
68
77
  _.each(query.hits, function (hit) {
69
- if (_.indexOf(sequence_ids, hit.accession) != -1) {
78
+ if (_.indexOf(sequence_ids, hit.id) != -1) {
70
79
  _.each(hit.hsps, function (hsp) {
71
80
  hsp.hit_id = hit.id;
72
81
  hsp.query_id = query.id;
@@ -84,43 +93,43 @@ export default React.createClass({
84
93
  render: function () {
85
94
  return (
86
95
  <div className="sidebar">
87
- { this.props.shouldShowIndex && this.index() }
88
- { this.downloads() }
96
+ { this.topPanelJSX() }
97
+ { this.downloadsPanelJSX() }
89
98
  </div>
90
99
  );
91
100
  },
92
101
 
93
- index: function () {
102
+ topPanelJSX: function () {
103
+ var path = location.pathname.split('/');
104
+ // Get job id.
105
+ var job_id = path.pop();
106
+ // Deriving rootURL this way is required for subURI deployments
107
+ // - we cannot just send to '/'.
108
+ var rootURL = path.join('/');
109
+
94
110
  return (
95
- <div className="index">
96
- <div
97
- className="section-header-sidebar">
111
+ <div className="sidebar-top-panel">
112
+ <div className="section-header-sidebar">
98
113
  <h4>
99
- { this.summary() }
114
+ { this.summaryString() }
100
115
  </h4>
101
116
  </div>
102
- <ul
103
- className="nav hover-reset active-bold">
104
- {
105
- _.map(this.props.data.queries, _.bind(function (query) {
106
- return (
107
- <li key={'Side_bar_'+query.id}>
108
- <a
109
- className="btn-link nowrap-ellipsis hover-bold"
110
- href={'#Query_' + query.number}
111
- title={'Query= ' + query.id + ' ' + query.title}>
112
- {'Query= ' + query.id}
113
- </a>
114
- </li>
115
- );
116
- }, this))
117
- }
118
- </ul>
117
+ <div>
118
+ <a href={`${rootURL}/?job_id=${job_id}`}>
119
+ <i className="fa fa-pencil"></i> Edit search
120
+ </a>
121
+ <span className="line">|</span>
122
+ <a href={`${rootURL}/`}
123
+ onClick={this.clearSession}>
124
+ <i className="fa fa-file-o"></i> New search
125
+ </a>
126
+ </div>
127
+ { this.props.shouldShowIndex && this.indexJSX() }
119
128
  </div>
120
129
  );
121
130
  },
122
131
 
123
- summary: function () {
132
+ summaryString: function () {
124
133
  var program = this.props.data.program;
125
134
  var numqueries = this.props.data.queries.length;
126
135
  var numquerydb = this.props.data.querydb.length;
@@ -132,7 +141,22 @@ export default React.createClass({
132
141
  );
133
142
  },
134
143
 
135
- downloads: function () {
144
+ indexJSX: function () {
145
+ return <ul className="nav hover-reset active-bold"> {
146
+ _.map(this.props.data.queries, (query)=> {
147
+ return <li key={'Side_bar_'+query.id}>
148
+ <a className="btn-link nowrap-ellipsis hover-bold"
149
+ title={'Query= ' + query.id + ' ' + query.title}
150
+ href={'#Query_' + query.number}>
151
+ {'Query= ' + query.id}
152
+ </a>
153
+ </li>;
154
+ })
155
+ }
156
+ </ul>;
157
+ },
158
+
159
+ downloadsPanelJSX: function () {
136
160
  return (
137
161
  <div className="downloads">
138
162
  <div className="section-header-sidebar">