sequenceserver 3.0.1 → 3.1.1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of sequenceserver might be problematic. Click here for more details.

Files changed (62) hide show
  1. checksums.yaml +4 -4
  2. data/bin/sequenceserver +2 -2
  3. data/lib/sequenceserver/api_errors.rb +32 -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/config.rb +54 -20
  8. data/lib/sequenceserver/makeblastdb.rb +16 -2
  9. data/lib/sequenceserver/report.rb +0 -6
  10. data/lib/sequenceserver/routes.rb +66 -25
  11. data/lib/sequenceserver/sequence.rb +35 -7
  12. data/lib/sequenceserver/server.rb +1 -1
  13. data/lib/sequenceserver/version.rb +1 -1
  14. data/lib/sequenceserver.rb +1 -1
  15. data/public/404.html +1 -1
  16. data/public/css/app.css +121 -0
  17. data/public/css/app.min.css +1 -0
  18. data/public/css/sequenceserver.css +0 -148
  19. data/public/css/sequenceserver.min.css +3 -3
  20. data/public/js/circos.js +2 -2
  21. data/public/js/collapse_preferences.js +37 -0
  22. data/public/js/databases.js +65 -37
  23. data/public/js/databases_tree.js +2 -1
  24. data/public/js/dnd.js +37 -50
  25. data/public/js/download_fasta.js +1 -0
  26. data/public/js/form.js +79 -50
  27. data/public/js/grapher.js +23 -37
  28. data/public/js/hits_overview.js +2 -2
  29. data/public/js/kablammo.js +2 -2
  30. data/public/js/length_distribution.js +3 -3
  31. data/public/js/null_plugins/grapher/histogram.js +25 -0
  32. data/public/js/null_plugins/options.js +3 -0
  33. data/public/js/null_plugins/query_stats.js +11 -0
  34. data/public/js/null_plugins/report_plugins.js +6 -1
  35. data/public/js/null_plugins/search_header_plugin.js +4 -0
  36. data/public/js/options.js +161 -56
  37. data/public/js/query.js +85 -59
  38. data/public/js/report.js +1 -1
  39. data/public/js/search.js +2 -0
  40. data/public/js/search_button.js +67 -56
  41. data/public/js/sidebar.js +10 -1
  42. data/public/js/tests/database.spec.js +5 -5
  43. data/public/js/tests/form.spec.js +98 -0
  44. data/public/js/tests/mock_data/databases.json +5 -5
  45. data/public/js/tests/mocks/circos.js +6 -0
  46. data/public/js/tests/report.spec.js +4 -3
  47. data/public/js/tests/search_query.spec.js +16 -6
  48. data/public/sequenceserver-report.min.js +46 -24
  49. data/public/sequenceserver-search.min.js +57 -13
  50. data/public/sequenceserver_logo.webp +0 -0
  51. data/views/blastn_options.erb +66 -66
  52. data/views/blastp_options.erb +59 -59
  53. data/views/blastx_options.erb +68 -68
  54. data/views/layout.erb +61 -3
  55. data/views/search.erb +33 -38
  56. data/views/search_layout.erb +153 -0
  57. data/views/tblastn_options.erb +57 -57
  58. data/views/tblastx_options.erb +64 -64
  59. metadata +51 -22
  60. data/lib/sequenceserver/makeblastdb-modified-with-cache.rb +0 -345
  61. data/public/SequenceServer_logo.png +0 -0
  62. 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,38 @@ 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
+ valid_id_regex = /\A[a-zA-Z0-9-_.:*#|\[\]]+\z/
236
+ invalid_sequence_ids = sequence_ids.reject do |id|
237
+ id =~ valid_id_regex
238
+ end
226
239
 
227
- fail DatabaseUnreachableError, 'Database id should be one of:' \
228
- " #{ids.join("\n")}"
240
+ unless invalid_sequence_ids.empty?
241
+ fail(
242
+ InvalidSequenceIdError,
243
+ "Invalid sequence id(s): #{invalid_sequence_ids.join(', ')}"
244
+ )
245
+ end
246
+
247
+ true
248
+ end
249
+
250
+ ##
251
+ # Create a temporary file containing sequence ids to fetch.
252
+ def create_entry_batch_file
253
+ @batch_file = Tempfile.new("#{Time.now}_batch").tap do |f|
254
+ f.write(sequence_ids.join("\n"))
255
+ f.flush
256
+ end
229
257
  end
230
258
 
231
259
  # 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.1'.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
  }