sequenceserver 3.0.1 → 3.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (64) hide show
  1. checksums.yaml +4 -4
  2. data/bin/sequenceserver +2 -2
  3. data/lib/sequenceserver/api_errors.rb +56 -2
  4. data/lib/sequenceserver/blast/job.rb +20 -3
  5. data/lib/sequenceserver/blast/report.rb +74 -86
  6. data/lib/sequenceserver/blast/tasks.rb +38 -0
  7. data/lib/sequenceserver/blast.rb +6 -0
  8. data/lib/sequenceserver/config.rb +54 -20
  9. data/lib/sequenceserver/database.rb +13 -0
  10. data/lib/sequenceserver/makeblastdb.rb +16 -2
  11. data/lib/sequenceserver/report.rb +0 -6
  12. data/lib/sequenceserver/routes.rb +66 -25
  13. data/lib/sequenceserver/sequence.rb +34 -7
  14. data/lib/sequenceserver/server.rb +1 -1
  15. data/lib/sequenceserver/version.rb +1 -1
  16. data/lib/sequenceserver.rb +1 -1
  17. data/public/404.html +1 -1
  18. data/public/css/app.css +121 -0
  19. data/public/css/app.min.css +1 -0
  20. data/public/css/sequenceserver.css +0 -148
  21. data/public/css/sequenceserver.min.css +3 -3
  22. data/public/js/circos.js +2 -2
  23. data/public/js/collapse_preferences.js +37 -0
  24. data/public/js/databases.js +65 -37
  25. data/public/js/databases_tree.js +2 -1
  26. data/public/js/dnd.js +37 -50
  27. data/public/js/download_fasta.js +1 -0
  28. data/public/js/form.js +79 -50
  29. data/public/js/grapher.js +23 -37
  30. data/public/js/hits_overview.js +2 -2
  31. data/public/js/kablammo.js +2 -2
  32. data/public/js/length_distribution.js +3 -3
  33. data/public/js/null_plugins/grapher/histogram.js +25 -0
  34. data/public/js/null_plugins/options.js +3 -0
  35. data/public/js/null_plugins/query_stats.js +11 -0
  36. data/public/js/null_plugins/report_plugins.js +6 -1
  37. data/public/js/null_plugins/search_header_plugin.js +4 -0
  38. data/public/js/options.js +161 -56
  39. data/public/js/query.js +85 -59
  40. data/public/js/report.js +1 -1
  41. data/public/js/search.js +2 -0
  42. data/public/js/search_button.js +67 -56
  43. data/public/js/sidebar.js +10 -1
  44. data/public/js/tests/database.spec.js +5 -5
  45. data/public/js/tests/form.spec.js +98 -0
  46. data/public/js/tests/mock_data/databases.json +5 -5
  47. data/public/js/tests/mocks/circos.js +6 -0
  48. data/public/js/tests/report.spec.js +4 -3
  49. data/public/js/tests/search_query.spec.js +16 -6
  50. data/public/sequenceserver-report.min.js +46 -24
  51. data/public/sequenceserver-search.min.js +57 -13
  52. data/public/sequenceserver_logo.webp +0 -0
  53. data/views/blastn_options.erb +66 -66
  54. data/views/blastp_options.erb +59 -59
  55. data/views/blastx_options.erb +68 -68
  56. data/views/layout.erb +61 -3
  57. data/views/search.erb +33 -38
  58. data/views/search_layout.erb +153 -0
  59. data/views/tblastn_options.erb +57 -57
  60. data/views/tblastx_options.erb +64 -64
  61. metadata +51 -22
  62. data/lib/sequenceserver/makeblastdb-modified-with-cache.rb +0 -345
  63. data/public/SequenceServer_logo.png +0 -0
  64. data/public/js/tests/advanced_parameters.spec.js +0 -36
@@ -5,9 +5,11 @@ require 'rest-client'
5
5
 
6
6
  require 'sequenceserver/job'
7
7
  require 'sequenceserver/blast'
8
+ require 'sequenceserver/blast/tasks'
8
9
  require 'sequenceserver/report'
9
10
  require 'sequenceserver/database'
10
11
  require 'sequenceserver/sequence'
12
+ require 'rack/csrf'
11
13
 
12
14
  module SequenceServer
13
15
  # Controller.
@@ -32,6 +34,8 @@ module SequenceServer
32
34
  # Override in config.ru if the instance is served under a subpath
33
35
  # e.g. for example.org/our-sequenceserver set to '/our-sequenceserver'
34
36
  set :root_path_prefix, ''
37
+
38
+ set :search_layout, :'search_layout'
35
39
  end
36
40
 
37
41
  # See
@@ -55,6 +59,14 @@ module SequenceServer
55
59
  frame_options = SequenceServer.config[:frame_options]
56
60
  frame_options && { frame_options: frame_options }
57
61
  }
62
+
63
+ use(
64
+ Rack::Session::Cookie,
65
+ key: 'rack.session.sequenceserver',
66
+ secret: ENV.fetch('SESSION_SECRET') { SecureRandom.alphanumeric(64) }
67
+ )
68
+
69
+ use Rack::Csrf, raise: true, skip: ['POST:/cloud_share']
58
70
  end
59
71
 
60
72
  unless ENV['SEQUENCE_SERVER_COMPRESS_RESPONSES'] == 'false'
@@ -74,7 +86,7 @@ module SequenceServer
74
86
 
75
87
  # Returns base HTML. Rest happens client-side: rendering the search form.
76
88
  get '/' do
77
- erb :search, layout: true
89
+ erb :search, layout: settings.search_layout
78
90
  end
79
91
 
80
92
  # Returns data that is used to render the search form client side. These
@@ -83,7 +95,8 @@ module SequenceServer
83
95
  searchdata = {
84
96
  query: Database.retrieve(params[:query]),
85
97
  database: Database.all,
86
- options: SequenceServer.config[:options]
98
+ options: SequenceServer.config[:options],
99
+ blastTaskMap: SequenceServer::BLAST::Tasks.to_h
87
100
  }
88
101
 
89
102
  searchdata.update(tree: Database.tree) if SequenceServer.config[:databases_widget] == 'tree'
@@ -100,7 +113,7 @@ module SequenceServer
100
113
  post '/' do
101
114
  if params[:input_sequence]
102
115
  @input_sequence = params[:input_sequence]
103
- erb :search, layout: true
116
+ erb :search, layout: settings.search_layout
104
117
  else
105
118
  job = Job.create(params)
106
119
  redirect to("/#{job.id}")
@@ -114,24 +127,11 @@ module SequenceServer
114
127
  halt 404, { error: 'Job not found' }.to_json if job.nil?
115
128
  halt 202 unless job.done?
116
129
 
117
- report = Report.generate(job)
130
+ report = BLAST::Report.new(job)
118
131
  halt 202 unless report.done?
119
132
 
120
- display_large_result_warning =
121
- SequenceServer.config[:large_result_warning_threshold].to_i.positive? &&
122
- params[:bypass_file_size_warning] != 'true' &&
123
- report.xml_file_size > SequenceServer.config[:large_result_warning_threshold]
124
-
125
- if display_large_result_warning
126
- halt 200,
127
- {
128
- user_warning: 'LARGE_RESULT',
129
- download_links: [
130
- { name: 'Standard Tabular Report', url: "download/#{jid}.std_tsv" },
131
- { name: 'Full Tabular Report', url: "/download/#{jid}.full_tsv" },
132
- { name: 'Results in XML', url: "/download/#{jid}.xml" }
133
- ]
134
- }.to_json
133
+ if display_large_result_warning?(report.xml_file_size)
134
+ halt 200, large_result_warning_payload(jid).to_json
135
135
  end
136
136
 
137
137
  report.to_json
@@ -156,15 +156,35 @@ module SequenceServer
156
156
  # in identifiers) and retreival_databases (we don't allow whitespace in a
157
157
  # database's name, so it's safe).
158
158
  get '/get_sequence/' do
159
- sequence_ids = params[:sequence_ids].split(',')
160
- database_ids = params[:database_ids].split(',')
159
+ sequence_ids = params[:sequence_ids].to_s.split(',')
160
+ database_ids = params[:database_ids].to_s.split(',')
161
+ if sequence_ids.empty?
162
+ status 422
163
+ return { error: 'No sequence ids provided' }.to_json
164
+ end
165
+
166
+ if database_ids.empty?
167
+ status 422
168
+ return { error: 'No database ids provided' }.to_json
169
+ end
161
170
  sequences = Sequence::Retriever.new(sequence_ids, database_ids)
162
171
  sequences.to_json
163
172
  end
164
173
 
165
174
  post '/get_sequence' do
166
- sequence_ids = params['sequence_ids'].split(',')
167
- database_ids = params['database_ids'].split(',')
175
+ sequence_ids = params['sequence_ids'].to_s.split(',')
176
+ database_ids = params['database_ids'].to_s.split(',')
177
+
178
+ if sequence_ids.empty?
179
+ status 422
180
+ return 'No sequence ids provided'
181
+ end
182
+
183
+ if database_ids.empty?
184
+ status 422
185
+ return 'No database ids provided'
186
+ end
187
+
168
188
  sequences = Sequence::Retriever.new(sequence_ids, database_ids, true)
169
189
  send_file(sequences.file.path,
170
190
  type: sequences.mime,
@@ -307,12 +327,33 @@ module SequenceServer
307
327
  # the user hits the back button. Thus we do not test for empty string.
308
328
  method = job.method.to_sym
309
329
  if job.advanced && job.advanced !=
310
- searchdata[:options][method][:default].join(' ')
330
+ searchdata.dig(:options, method, :default, :attributes).to_a.join(' ')
311
331
  searchdata[:options] = searchdata[:options].deep_copy
312
- searchdata[:options][method]['last search'] = [job.advanced]
332
+ searchdata[:options][method]['last search'] = { attributes: [job.advanced] }
313
333
  end
314
334
  end
315
335
 
336
+ def display_large_result_warning?(xml_file_size)
337
+ threshold = SequenceServer.config[:large_result_warning_threshold].to_i
338
+ return false unless threshold.positive?
339
+
340
+ return false if params[:bypass_file_size_warning] == 'true'
341
+
342
+ xml_file_size > threshold
343
+ end
344
+
345
+ def large_result_warning_payload(jid)
346
+ {
347
+ user_warning: 'LARGE_RESULT',
348
+ download_links: [
349
+ { name: 'Standard Tabular Report', url: "download/#{jid}.std_tsv" },
350
+ { name: 'Full Tabular Report', url: "/download/#{jid}.full_tsv" },
351
+ { name: 'Results in XML', url: "/download/#{jid}.xml" },
352
+ { name: 'Pairwise', url: "/download/#{jid}.pairwise" },
353
+ ]
354
+ }
355
+ end
356
+
316
357
  helpers do
317
358
  def root_path_prefix
318
359
  settings.root_path_prefix.to_s
@@ -180,7 +180,7 @@ module SequenceServer
180
180
  @database_ids = Array database_ids
181
181
  @in_file = in_file
182
182
 
183
- validate && run
183
+ validate && create_entry_batch_file && run
184
184
  end
185
185
 
186
186
  attr_reader :sequence_ids, :database_ids, :in_file, :sequences
@@ -197,10 +197,9 @@ module SequenceServer
197
197
  def run
198
198
  command = "blastdbcmd -outfmt '%g %i %a %t %s'" \
199
199
  " -db '#{database_names.join(' ')}'" \
200
- " -entry '#{sequence_ids.join(',')}'"
200
+ " -entry_batch '#{@batch_file.path}'"
201
201
 
202
202
  out, = sys(command, path: config[:bin])
203
-
204
203
  @sequences = out.each_line.map do |line|
205
204
  # Stop codons in amino acid sequence databases show up as invalid
206
205
  # UTF-8 characters in the output and cause the subsequent call to
@@ -208,6 +207,8 @@ module SequenceServer
208
207
  line = line.encode('UTF-8', invalid: :replace, replace: 'X')
209
208
  Sequence.new(*line.chomp.split(' '))
210
209
  end
210
+
211
+ @batch_file.unlink
211
212
  extend(IO) && write if in_file
212
213
  end
213
214
 
@@ -221,11 +222,37 @@ module SequenceServer
221
222
 
222
223
  def validate
223
224
  ids = Database.ids
224
- return true if database_ids.is_a?(Array) && !database_ids.empty? &&
225
- (ids & database_ids).length == database_ids.length
225
+ unless database_ids.is_a?(Array) &&
226
+ !database_ids.empty? &&
227
+ (ids & database_ids).length == database_ids.length
228
+
229
+ fail(
230
+ DatabaseUnreachableError,
231
+ "Database id should be one of: #{ids.join("\n")}"
232
+ )
233
+ end
234
+
235
+ invalid_sequence_ids = sequence_ids.reject do |id|
236
+ id =~ SequenceServer::BLAST::VALID_SEQUENCE_ID
237
+ end
226
238
 
227
- fail DatabaseUnreachableError, 'Database id should be one of:' \
228
- " #{ids.join("\n")}"
239
+ unless invalid_sequence_ids.empty?
240
+ fail(
241
+ InvalidSequenceIdError,
242
+ "Invalid sequence id(s): #{invalid_sequence_ids.join(', ')}"
243
+ )
244
+ end
245
+
246
+ true
247
+ end
248
+
249
+ ##
250
+ # Create a temporary file containing sequence ids to fetch.
251
+ def create_entry_batch_file
252
+ @batch_file = Tempfile.new("#{Time.now}_batch").tap do |f|
253
+ f.write(sequence_ids.join("\n"))
254
+ f.flush
255
+ end
229
256
  end
230
257
 
231
258
  # rubocop:disable Metrics/MethodLength
@@ -22,7 +22,7 @@ module SequenceServer
22
22
  def start
23
23
  setup_signal_handlers
24
24
  @server = WEBrick::HTTPServer.new(options)
25
- @server.mount '/', Rack::Handler::WEBrick, app
25
+ @server.mount '/', Rackup::Handler::WEBrick, app
26
26
  @server.start
27
27
  end
28
28
 
@@ -1,4 +1,4 @@
1
1
  # Define version number.
2
2
  module SequenceServer
3
- VERSION = '3.0.1'.freeze
3
+ VERSION = '3.1.2'.freeze
4
4
  end
@@ -8,7 +8,7 @@ Encoding.default_internal = 'UTF-8'
8
8
  # Top level module / namespace.
9
9
  module SequenceServer
10
10
  # The default version of BLAST that will be downloaded and configured for use.
11
- BLAST_VERSION = '2.12.0+'.freeze
11
+ BLAST_VERSION = '2.15.0+'.freeze
12
12
 
13
13
  # Default location of configuration file.
14
14
  DEFAULT_CONFIG_FILE = '~/.sequenceserver.conf'.freeze
data/public/404.html CHANGED
@@ -14,7 +14,7 @@
14
14
 
15
15
  <body class="bg-light text-dark text-center">
16
16
 
17
- <img src="SequenceServer_logo.png" alt="SequenceServer Logo" class="mt-5 mb-3" style="max-width: 200px;">
17
+ <img src="/sequenceserver_logo.webp" alt="SequenceServer Logo" class="mt-5 mb-3" style="max-width: 200px;">
18
18
 
19
19
  <div class="container" style="margin-top: 10%;">
20
20
  <h1 class="display-4">404 Not Found</h1>
@@ -0,0 +1,121 @@
1
+ @tailwind base;
2
+ @tailwind components;
3
+ @tailwind utilities;
4
+
5
+
6
+ /* Backported bootstrap tooltip styles */
7
+
8
+ .tooltip {
9
+ position: absolute;
10
+ z-index: 1070;
11
+ display: block;
12
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
13
+ font-style: normal;
14
+ font-weight: 400;
15
+ line-height: 1.42857143;
16
+ line-break: auto;
17
+ text-align: left;
18
+ text-align: start;
19
+ text-decoration: none;
20
+ text-shadow: none;
21
+ text-transform: none;
22
+ letter-spacing: normal;
23
+ word-break: normal;
24
+ word-spacing: normal;
25
+ word-wrap: normal;
26
+ white-space: normal;
27
+ font-size: 12px;
28
+ filter: alpha(opacity=0);
29
+ opacity: 0;
30
+ }
31
+ .tooltip.in {
32
+ filter: alpha(opacity=90);
33
+ opacity: 0.9;
34
+ }
35
+ .tooltip.top {
36
+ padding: 5px 0;
37
+ margin-top: -3px;
38
+ }
39
+ .tooltip.right {
40
+ padding: 0 5px;
41
+ margin-left: 3px;
42
+ }
43
+ .tooltip.bottom {
44
+ padding: 5px 0;
45
+ margin-top: 3px;
46
+ }
47
+ .tooltip.left {
48
+ padding: 0 5px;
49
+ margin-left: -3px;
50
+ }
51
+ .tooltip.top .tooltip-arrow {
52
+ bottom: 0;
53
+ left: 50%;
54
+ margin-left: -5px;
55
+ border-width: 5px 5px 0;
56
+ border-top-color: #000;
57
+ }
58
+ .tooltip.top-left .tooltip-arrow {
59
+ right: 5px;
60
+ bottom: 0;
61
+ margin-bottom: -5px;
62
+ border-width: 5px 5px 0;
63
+ border-top-color: #000;
64
+ }
65
+ .tooltip.top-right .tooltip-arrow {
66
+ bottom: 0;
67
+ left: 5px;
68
+ margin-bottom: -5px;
69
+ border-width: 5px 5px 0;
70
+ border-top-color: #000;
71
+ }
72
+ .tooltip.right .tooltip-arrow {
73
+ top: 50%;
74
+ left: 0;
75
+ margin-top: -5px;
76
+ border-width: 5px 5px 5px 0;
77
+ border-right-color: #000;
78
+ }
79
+ .tooltip.left .tooltip-arrow {
80
+ top: 50%;
81
+ right: 0;
82
+ margin-top: -5px;
83
+ border-width: 5px 0 5px 5px;
84
+ border-left-color: #000;
85
+ }
86
+ .tooltip.bottom .tooltip-arrow {
87
+ top: 0;
88
+ left: 50%;
89
+ margin-left: -5px;
90
+ border-width: 0 5px 5px;
91
+ border-bottom-color: #000;
92
+ }
93
+ .tooltip.bottom-left .tooltip-arrow {
94
+ top: 0;
95
+ right: 5px;
96
+ margin-top: -5px;
97
+ border-width: 0 5px 5px;
98
+ border-bottom-color: #000;
99
+ }
100
+ .tooltip.bottom-right .tooltip-arrow {
101
+ top: 0;
102
+ left: 5px;
103
+ margin-top: -5px;
104
+ border-width: 0 5px 5px;
105
+ border-bottom-color: #000;
106
+ }
107
+ .tooltip-inner {
108
+ max-width: 200px;
109
+ padding: 3px 8px;
110
+ color: #fff;
111
+ text-align: center;
112
+ background-color: #000;
113
+ border-radius: 4px;
114
+ }
115
+ .tooltip-arrow {
116
+ position: absolute;
117
+ width: 0;
118
+ height: 0;
119
+ border-color: transparent;
120
+ border-style: solid;
121
+ }
@@ -0,0 +1 @@
1
+ /*! tailwindcss v3.4.3 | MIT License | https://tailwindcss.com*/*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:initial}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:initial;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:initial}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}*,::backdrop,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }.\!container{width:100%!important}.container{width:100%}@media (min-width:640px){.\!container{max-width:640px!important}.container{max-width:640px}}@media (min-width:768px){.\!container{max-width:768px!important}.container{max-width:768px}}@media (min-width:1024px){.\!container{max-width:1024px!important}.container{max-width:1024px}}@media (min-width:1280px){.\!container{max-width:1280px!important}.container{max-width:1280px}}@media (min-width:1536px){.\!container{max-width:1536px!important}.container{max-width:1536px}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.visible{visibility:visible}.invisible{visibility:hidden}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:0}.bottom-0{bottom:0}.bottom-12{bottom:3rem}.end-1{inset-inline-end:.25rem}.left-0{left:0}.left-1{left:.25rem}.right-0{right:0}.right-2{right:.5rem}.start-1{inset-inline-start:.25rem}.top-0{top:0}.top-2{top:.5rem}.z-10{z-index:10}.z-40{z-index:40}.z-50{z-index:50}.col-span-2{grid-column:span 2/span 2}.mx-1{margin-left:.25rem;margin-right:.25rem}.mx-auto{margin-left:auto;margin-right:auto}.my-1{margin-top:.25rem;margin-bottom:.25rem}.my-2{margin-top:.5rem;margin-bottom:.5rem}.my-4{margin-top:1rem;margin-bottom:1rem}.my-6{margin-top:1.5rem;margin-bottom:1.5rem}.-mb-px{margin-bottom:-1px}.-ml-8{margin-left:-2rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.mr-1{margin-right:.25rem}.mr-2{margin-right:.5rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-5{margin-top:1.25rem}.\!block{display:block!important}.block{display:block}.inline-block{display:inline-block}.\!inline{display:inline!important}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.table-caption{display:table-caption}.table-cell{display:table-cell}.grid{display:grid}.contents{display:contents}.list-item{display:list-item}.\!hidden{display:none!important}.hidden{display:none}.h-2{height:.5rem}.h-4{height:1rem}.h-6{height:1.5rem}.h-8{height:2rem}.h-full{height:100%}.max-h-8{max-height:2rem}.max-h-96{max-height:24rem}.min-h-screen{min-height:100vh}.w-3{width:.75rem}.w-4{width:1rem}.w-48{width:12rem}.w-6{width:1.5rem}.w-auto{width:auto}.w-full{width:100%}.max-w-7xl{max-width:80rem}.max-w-screen-xl{max-width:1280px}.flex-auto{flex:1 1 auto}.flex-none{flex:none}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.flex-grow,.grow{flex-grow:1}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.cursor-help{cursor:help}.cursor-pointer{cursor:pointer}.resize{resize:both}.list-inside{list-style-position:inside}.list-disc{list-style-type:disc}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.gap-4{gap:1rem}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(.5rem*var(--tw-space-x-reverse));margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)))}.space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(1rem*var(--tw-space-x-reverse));margin-left:calc(1rem*(1 - var(--tw-space-x-reverse)))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem*var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem*var(--tw-space-y-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-top-width:calc(1px*(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px*var(--tw-divide-y-reverse))}.divide-gray-100>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgb(243 244 246/var(--tw-divide-opacity))}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-y-scroll{overflow-y:scroll}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rounded{border-radius:.25rem}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-l-lg{border-top-left-radius:.5rem;border-bottom-left-radius:.5rem}.rounded-r-md{border-top-right-radius:.375rem;border-bottom-right-radius:.375rem}.rounded-t{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.rounded-tr-lg{border-top-right-radius:.5rem}.border{border-width:1px}.border-x{border-left-width:1px;border-right-width:1px}.border-b{border-bottom-width:1px}.border-t{border-top-width:1px}.border-blue-800{--tw-border-opacity:1;border-color:rgb(30 64 175/var(--tw-border-opacity))}.border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity))}.border-red-400{--tw-border-opacity:1;border-color:rgb(248 113 113/var(--tw-border-opacity))}.border-seqblue{--tw-border-opacity:1;border-color:rgb(27 85 122/var(--tw-border-opacity))}.border-seqorange{--tw-border-opacity:1;border-color:rgb(199 79 19/var(--tw-border-opacity))}.border-transparent{border-color:#0000}.bg-blue-100{--tw-bg-opacity:1;background-color:rgb(219 234 254/var(--tw-bg-opacity))}.bg-blue-300{--tw-bg-opacity:1;background-color:rgb(147 197 253/var(--tw-bg-opacity))}.bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity))}.bg-gray-200{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity))}.bg-gray-50{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity))}.bg-gray-500{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity))}.bg-red-100{--tw-bg-opacity:1;background-color:rgb(254 226 226/var(--tw-bg-opacity))}.bg-seqblue{--tw-bg-opacity:1;background-color:rgb(27 85 122/var(--tw-bg-opacity))}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.bg-yellow-100{--tw-bg-opacity:1;background-color:rgb(254 249 195/var(--tw-bg-opacity))}.bg-opacity-75{--tw-bg-opacity:0.75}.bg-gradient-to-t{background-image:linear-gradient(to top,var(--tw-gradient-stops))}.from-white\/90{--tw-gradient-from:#ffffffe6 var(--tw-gradient-from-position);--tw-gradient-to:#fff0 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.to-gray-100\/90{--tw-gradient-to:#f3f4f6e6 var(--tw-gradient-to-position)}.fill-current{fill:currentColor}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-4{padding:1rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-16{padding-left:4rem;padding-right:4rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-8{padding-left:2rem;padding-right:2rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.pb-20{padding-bottom:5rem}.pb-4{padding-bottom:1rem}.pr-2{padding-right:.5rem}.pt-2{padding-top:.5rem}.pt-4{padding-top:1rem}.pt-5{padding-top:1.25rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.align-bottom{vertical-align:bottom}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-2xl{font-size:1.5rem;line-height:2rem}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-thin{font-weight:100}.uppercase{text-transform:uppercase}.lowercase{text-transform:lowercase}.capitalize{text-transform:capitalize}.italic{font-style:italic}.ordinal{--tw-ordinal:ordinal;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-6{line-height:1.5rem}.text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}.text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}.text-gray-800{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity))}.text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity))}.text-red-700{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity))}.text-red-800{--tw-text-opacity:1;color:rgb(153 27 27/var(--tw-text-opacity))}.text-seqblue{--tw-text-opacity:1;color:rgb(27 85 122/var(--tw-text-opacity))}.text-seqorange{--tw-text-opacity:1;color:rgb(199 79 19/var(--tw-text-opacity))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.underline{-webkit-text-decoration-line:underline;text-decoration-line:underline}.\!shadow{--tw-shadow:0 1px 3px 0 #0000001a,0 1px 2px -1px #0000001a!important;--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)!important;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)!important}.shadow{--tw-shadow:0 1px 3px 0 #0000001a,0 1px 2px -1px #0000001a;--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.shadow,.shadow-2xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-2xl{--tw-shadow:0 25px 50px -12px #00000040;--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color)}.shadow-lg{--tw-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a;--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.shadow-lg,.shadow-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 2px 0 #0000000d;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.shadow-xl{--tw-shadow:0 20px 25px -5px #0000001a,0 8px 10px -6px #0000001a;--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color),0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid #0000;outline-offset:2px}.outline{outline-style:solid}.ring{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.blur{--tw-blur:blur(8px);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.\!invert{--tw-invert:invert(100%)!important;filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)!important}.invert{--tw-invert:invert(100%);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.\!filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)!important}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.\!transition{transition-property:color,background-color,border-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-text-decoration-color,-webkit-backdrop-filter!important;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter!important;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-text-decoration-color,-webkit-backdrop-filter!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important;transition-duration:.15s!important}.transition{transition-property:color,background-color,border-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.tooltip{position:absolute;z-index:1070;display:block;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-style:normal;font-weight:400;line-height:1.42857143;line-break:auto;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;font-size:12px;filter:alpha(opacity=0);opacity:0}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px}.tooltip.top-left .tooltip-arrow,.tooltip.top-right .tooltip-arrow{bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{left:5px}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:#0000;border-style:solid}.hover\:bg-blue-400:hover{--tw-bg-opacity:1;background-color:rgb(96 165 250/var(--tw-bg-opacity))}.hover\:bg-gray-200:hover{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity))}.hover\:bg-gray-300:hover{--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity))}.hover\:bg-red-600:hover{--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity))}.hover\:bg-seqorange:hover{--tw-bg-opacity:1;background-color:rgb(199 79 19/var(--tw-bg-opacity))}.hover\:bg-sky-400:hover{--tw-bg-opacity:1;background-color:rgb(56 189 248/var(--tw-bg-opacity))}.hover\:bg-sky-500:hover{--tw-bg-opacity:1;background-color:rgb(14 165 233/var(--tw-bg-opacity))}.hover\:bg-yellow-100:hover{--tw-bg-opacity:1;background-color:rgb(254 249 195/var(--tw-bg-opacity))}.hover\:font-bold:hover{font-weight:700}.hover\:text-white:hover{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.focus\:outline-none:focus{outline:2px solid #0000;outline-offset:2px}.focus\:ring-1:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:ring-1:focus,.focus\:ring-2:focus{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:ring-seqorange:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(199 79 19/var(--tw-ring-opacity))}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px}.group:hover .group-hover\:visible{visibility:visible}@media (min-width:640px){.sm\:my-8{margin-top:2rem;margin-bottom:2rem}.sm\:ml-3{margin-left:.75rem}.sm\:mt-0{margin-top:0}.sm\:block{display:block}.sm\:inline-block{display:inline-block}.sm\:flex{display:flex}.sm\:h-screen{height:100vh}.sm\:w-auto{width:auto}.sm\:w-full{width:100%}.sm\:max-w-screen-md{max-width:768px}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:flex-row-reverse{flex-direction:row-reverse}.sm\:items-center{align-items:center}.sm\:p-0{padding:0}.sm\:p-6{padding:1.5rem}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:pb-4{padding-bottom:1rem}.sm\:align-middle{vertical-align:middle}.sm\:text-sm{font-size:.875rem;line-height:1.25rem}}@media (min-width:768px){.md\:my-2{margin-top:.5rem;margin-bottom:.5rem}.md\:flex{display:flex}.md\:w-auto{width:auto}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(1rem*var(--tw-space-x-reverse));margin-left:calc(1rem*(1 - var(--tw-space-x-reverse)))}.md\:divide-x>:not([hidden])~:not([hidden]){--tw-divide-x-reverse:0;border-right-width:calc(1px*var(--tw-divide-x-reverse));border-left-width:calc(1px*(1 - var(--tw-divide-x-reverse)))}.md\:divide-y-0>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-top-width:calc(0px*(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(0px*var(--tw-divide-y-reverse))}.md\:pl-2{padding-left:.5rem}.md\:pt-0{padding-top:0}}@media (min-width:1024px){.lg\:px-8{padding-left:2rem;padding-right:2rem}}
@@ -5,7 +5,6 @@
5
5
  @import url('../vendor/github/nicgirault/circosJs@1.7.0/dist/colorBrewer.css');
6
6
  @import url('../vendor/github/twbs/bootstrap@3.3.5/css/bootstrap.min.css');
7
7
  @import url('../vendor/npm/font-awesome@4.4.0/css/font-awesome.min.css');
8
- @import url('../vendor/github/vakata/jstree@3.3.8/dist/themes/default/style.min.css');
9
8
  @import url('grapher.css');
10
9
  @import url('fonts.css');
11
10
 
@@ -162,29 +161,6 @@ a.disabled:hover,
162
161
  padding: 0 0 0 1px;
163
162
  }
164
163
 
165
- /**
166
- * Take out border, cut down margin and padding, and remove background color
167
- * from panel.
168
- */
169
- .panel {
170
- border: none;
171
- -webkit-box-shadow: none;
172
- -moz-box-shadow: none;
173
- box-shadow: none;
174
- }
175
-
176
- .panel .panel-heading {
177
- padding: 0;
178
- background-color: inherit;
179
- border-bottom: 1px solid #c74f14;
180
- }
181
-
182
- .panel .panel-heading h4 {
183
- margin: 0;
184
- font-size: 16px;
185
- font-weight: bold;
186
- }
187
-
188
164
  /**
189
165
  * Take padding-right out of .control-label and keep padding of .input-group.
190
166
  * Works better when browser is resized to smaller width.
@@ -350,11 +326,6 @@ td.nowrap-ellipsis {
350
326
  background-color: red;
351
327
  }
352
328
 
353
- .dnd-errors {
354
- color: red;
355
- font-size: 18px;
356
- }
357
-
358
329
  .modal-error {
359
330
  color: red;
360
331
  font-size: 18px;
@@ -372,89 +343,6 @@ td.nowrap-ellipsis {
372
343
  background-color: inherit;
373
344
  }
374
345
 
375
- .query-container {
376
- margin-top: 35px;
377
- margin-bottom: 35px;
378
- position: relative;
379
- }
380
-
381
- .notifications {
382
- position: fixed;
383
- top: 0;
384
- left: 0;
385
- width: 100%;
386
- height: 32px;
387
- padding-right: 35px;
388
- padding-left: 35px;
389
- }
390
-
391
- .notification {
392
- margin-top: 6px;
393
- }
394
-
395
- .notification .alert-info,
396
- .notification .alert-danger {
397
- -webkit-border-radius: 6px;
398
- -moz-border-radius: 6px;
399
- border-radius: 6px;
400
- -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
401
- -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
402
- box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
403
- font-weight: bold;
404
- text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
405
- text-align: center;
406
- padding: 6px 12px 6px 12px;
407
- }
408
-
409
- .databases .list-group-item {
410
- border: none;
411
- padding: 1px 0 0;
412
- }
413
-
414
- #help pre:hover {
415
- background-color: #ffc;
416
- }
417
-
418
- label[for="advanced"] {
419
- font-size: 16px;
420
- display: table-cell;
421
- width: 1%;
422
- white-space: nowrap;
423
- vertical-align: middle;
424
- padding: 5px 12px 5px 0;
425
- cursor: default;
426
- pointer-events: none;
427
- }
428
-
429
- input[name="advanced"] {
430
- border-top-left-radius: 4px !important;
431
- border-bottom-left-radius: 4px !important;
432
- }
433
-
434
- input[type=checkbox] {
435
- vertical-align: top;
436
- }
437
-
438
- #method {
439
- letter-spacing: 1px;
440
- }
441
-
442
- #methods li {
443
- cursor: pointer;
444
- text-align: center;
445
- padding-top: 4px;
446
- padding-bottom: 4px;
447
- letter-spacing: 1px;
448
- }
449
-
450
- .dropdown-menu li {
451
- border-bottom: 1px solid #ccc;
452
- }
453
-
454
- .dropdown-menu li:last-child {
455
- border-bottom: 0;
456
- }
457
-
458
346
  /**********************
459
347
  Sidebar
460
348
  **********************/
@@ -575,28 +463,6 @@ input[type=checkbox] {
575
463
  vertical-align: super;
576
464
  }
577
465
 
578
- .dnd-overlay {
579
- position: absolute;
580
- top: 51px;
581
- left: 0;
582
- right: 0;
583
- bottom: 0;
584
- z-index: 1000;
585
- background-color: rgba(255, 255, 255, 0.75);
586
- }
587
-
588
- .dnd-overlay * {
589
- pointer-events: none;
590
- }
591
-
592
- .dnd-overlay-container {
593
- padding-top: 72px;
594
- }
595
-
596
- .dnd-overlay-container p {
597
- font-size: 48px;
598
- }
599
-
600
466
  /* higlight when hit is selected */
601
467
  .glow {
602
468
  border-left: 2px solid #c74f14;
@@ -649,20 +515,6 @@ input[type=checkbox] {
649
515
  display: table-cell;
650
516
  }
651
517
 
652
-
653
- /** For advanced params dropdown **/
654
- .input-group-btn {
655
- vertical-align: top;
656
- }
657
- #advanced-params-dropdown {
658
- padding: 0;
659
- }
660
- #advanced-params-dropdown li {
661
- padding: 10px;
662
- cursor: pointer;
663
- letter-spacing: 1px;
664
- }
665
-
666
518
  .share-url-component input[type="text"] {
667
519
  width: 100%;
668
520
  }