sequenceserver 2.0.0.rc3 → 2.0.0.rc8

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 (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">