sequenceserver 1.0.3 → 1.0.4
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.
- checksums.yaml +4 -4
- data/.rubocop.yml +6 -0
- data/bin/sequenceserver +45 -19
- data/lib/sequenceserver/blast/constants.rb +3 -0
- data/lib/sequenceserver/blast/exceptions.rb +1 -1
- data/lib/sequenceserver/blast/formatter.rb +1 -1
- data/lib/sequenceserver/blast/hit.rb +1 -1
- data/lib/sequenceserver/blast/hsp.rb +2 -0
- data/lib/sequenceserver/blast/query.rb +2 -1
- data/lib/sequenceserver/database.rb +22 -7
- data/lib/sequenceserver/links.rb +15 -1
- data/lib/sequenceserver/routes.rb +1 -1
- data/lib/sequenceserver/version.rb +1 -1
- data/public/dist/js/sequenceserver.min.js +1 -1
- data/public/dist/js/sequenceserver.min.js.gz +0 -0
- data/public/js/sequenceserver.js +1 -1
- data/sequenceserver.gemspec +1 -1
- data/views/result.erb +2 -0
- metadata +7 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9040c6020c1e07fdb573d72393de66c9db7fc48c
|
4
|
+
data.tar.gz: 6d42a977fd1d4a26528f60738b35c3155eb65c12
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5f23f8d52e26144ce797c833bcad02bb278da705aae2c6acd58d857973895c4845287d5b2fd2010ba1cd661f15a38a59437713a4fb2f8ee5dcba145d83767c26
|
7
|
+
data.tar.gz: d0d705074535ea97e6935e4e098aade727dad62b3aa641b3028da10309c959eb0b3a7726dfa02ec4f427b1317f42a23bb30eefbf24f24aad86523c92abe52b3e
|
data/.rubocop.yml
CHANGED
data/bin/sequenceserver
CHANGED
@@ -8,6 +8,18 @@ ENV['RACK_ENV'] ||= 'production'
|
|
8
8
|
# display name for tools like `ps`
|
9
9
|
$PROGRAM_NAME = 'sequenceserver'
|
10
10
|
|
11
|
+
# Given a url downloads the archive into a temporary file
|
12
|
+
# and and extratcs it into ~/.sequenceserver
|
13
|
+
def download_from_url(url)
|
14
|
+
archive = File.join('/tmp', File.basename(url))
|
15
|
+
# -ip4 is required to avoid this curl bug http://sourceforge.net/p/curl/bugs/1424/?limit=25
|
16
|
+
# see also https://github.com/yannickwurm/sequenceserver/issues/139
|
17
|
+
cmd = "curl -ip4 -C - #{url} -o #{archive} && " \
|
18
|
+
'mkdir -p ~/.sequenceserver && ' \
|
19
|
+
"tar xvf #{archive} -C ~/.sequenceserver"
|
20
|
+
system cmd
|
21
|
+
end
|
22
|
+
|
11
23
|
begin
|
12
24
|
Slop.parse!(:strict => true, :help => true) do
|
13
25
|
banner <<BANNER
|
@@ -19,31 +31,40 @@ USAGE
|
|
19
31
|
|
20
32
|
sequenceserver [options]
|
21
33
|
|
22
|
-
|
34
|
+
EXAMPLE
|
23
35
|
|
24
|
-
#
|
36
|
+
# Launch SequenceServer. This will read configuration from
|
37
|
+
# ~/.sequenceserver.conf, if present.
|
38
|
+
$ sequenceserver
|
39
|
+
|
40
|
+
# Use a different config file.
|
25
41
|
$ sequenceserver -c ~/.sequenceserver.ants.conf
|
26
42
|
|
27
|
-
#
|
28
|
-
#
|
43
|
+
# Set number of threads to use. This will save the number
|
44
|
+
# of threads to use in config file.
|
45
|
+
$ sequenceserver -s -n 16
|
46
|
+
|
47
|
+
# See if you have FASTA files in database dir that haven't
|
48
|
+
# been converted into BLAST database.
|
49
|
+
$ sequenceserver -u
|
50
|
+
|
51
|
+
# Search for FASTA files in database dir that haven't been
|
52
|
+
# converted into BLAST database yet, and convert them.
|
29
53
|
$ sequenceserver -m
|
30
54
|
|
31
55
|
DESCRIPTION
|
32
56
|
|
33
57
|
SequenceServer lets you rapidly set up a BLAST+ server with an intuitive user
|
34
|
-
interface for use locally or over the web.
|
35
|
-
|
36
|
-
|
37
|
-
BLAST+ for you.
|
38
|
-
|
39
|
-
You should only ever have to point it to a directory of FASTA files.
|
58
|
+
interface for use locally or over the web. If BLAST+ is not installed on your
|
59
|
+
system, SequenceServer will offer to install BLAST+ for you. You should only
|
60
|
+
ever have to point it to a directory of FASTA files / BLAST+ databases.
|
40
61
|
|
41
62
|
In a given directory, SequenceServer is able to tell FASTA files that are yet
|
42
63
|
to be formatted for use with BLAST+ and format them, and FASTA files that are
|
43
64
|
already formatted for use with BLAST+, heuristically skipping all other files
|
44
65
|
in the directory. Directories are scanned recursively. Type of sequences in a
|
45
|
-
FASTA file is detected automagically. `parse_seqids`
|
46
|
-
used to create BLAST+ databases.
|
66
|
+
FASTA file is detected automagically. `parse_seqids` and `hash_index` options
|
67
|
+
of `makeblastdb` are used to create BLAST+ databases.
|
47
68
|
BANNER
|
48
69
|
|
49
70
|
on 'c', 'config_file=',
|
@@ -83,6 +104,9 @@ BANNER
|
|
83
104
|
on 'm', 'make-blast-databases',
|
84
105
|
'Create BLAST databases'
|
85
106
|
|
107
|
+
on 'download-taxdb',
|
108
|
+
'Download the taxdb files'
|
109
|
+
|
86
110
|
on 'l', 'list_databases',
|
87
111
|
'List BLAST databases'
|
88
112
|
|
@@ -248,13 +272,7 @@ https://github.com/yannickwurm/sequenceserver/issues
|
|
248
272
|
|
249
273
|
ERR
|
250
274
|
end
|
251
|
-
|
252
|
-
archive = File.join('/tmp', File.basename(url))
|
253
|
-
# -ip4 is required to avoid this curl bug http://sourceforge.net/p/curl/bugs/1424/?limit=25
|
254
|
-
# see also https://github.com/yannickwurm/sequenceserver/issues/139
|
255
|
-
system "curl -ip4 -C - #{url} -o #{archive} && " \
|
256
|
-
'mkdir -p ~/.sequenceserver && ' \
|
257
|
-
"tar xvf #{archive} -C ~/.sequenceserver"
|
275
|
+
download_from_url(url)
|
258
276
|
unless $CHILD_STATUS.success?
|
259
277
|
puts 'Failed to install BLAST+.'
|
260
278
|
puts ' You may need to download BLAST+ from - '
|
@@ -381,6 +399,14 @@ MSG
|
|
381
399
|
exit
|
382
400
|
end
|
383
401
|
|
402
|
+
if download_taxdb?
|
403
|
+
download_from_url('ftp://ftp.ncbi.nlm.nih.gov/blast/db/'\
|
404
|
+
'taxdb.tar.gz')
|
405
|
+
puts
|
406
|
+
puts 'taxdb downloaded!'
|
407
|
+
exit
|
408
|
+
end
|
409
|
+
|
384
410
|
if set?
|
385
411
|
SequenceServer.config.write_config_file
|
386
412
|
exit
|
@@ -1,4 +1,7 @@
|
|
1
|
+
# Define constants used by SequenceServer module
|
1
2
|
module SequenceServer
|
3
|
+
# Constant for denoting the path ~/.sequenceserver
|
4
|
+
DOTDIR = File.expand_path('~/.sequenceserver')
|
2
5
|
# Define constanst used by BLAST module.
|
3
6
|
module BLAST
|
4
7
|
ERROR_LINE = /\(CArgException.*\)\s(.*)/
|
@@ -11,7 +11,7 @@ module SequenceServer
|
|
11
11
|
# RuntimeError is raised when BLAST+'s exits status is one of 2, 3, 4, or
|
12
12
|
# 255; see [1]. These are rare, infrastructure errors, used internally,
|
13
13
|
# and of concern only to the admins/developers.
|
14
|
-
class RuntimeError
|
14
|
+
class RuntimeError < RuntimeError
|
15
15
|
def initialize(status, message)
|
16
16
|
@status = status
|
17
17
|
@message = message
|
@@ -41,7 +41,7 @@ module SequenceServer
|
|
41
41
|
" -outfmt '#{format} #{specifiers}'" \
|
42
42
|
" -out '#{file.path}' 2> /dev/null"
|
43
43
|
logger.debug("Executing: #{command}")
|
44
|
-
system
|
44
|
+
system(command, :chdir => (File.exist?(DOTDIR) && DOTDIR || Dir.pwd))
|
45
45
|
end
|
46
46
|
|
47
47
|
def validate
|
@@ -26,7 +26,7 @@ module SequenceServer
|
|
26
26
|
def links
|
27
27
|
links = Links.instance_methods.map { |m| send m }
|
28
28
|
links.compact!
|
29
|
-
links.sort_by { |link| link[:order] }
|
29
|
+
links.sort_by { |link| [link[:order], link[:title]] }
|
30
30
|
end
|
31
31
|
|
32
32
|
# Returns an array of database objects which contain the queried sequence
|
@@ -27,6 +27,7 @@ module SequenceServer
|
|
27
27
|
# Returns a Hash of stats common to all BLAST algorithms. Subclasses must
|
28
28
|
# update the returned Hash to add relevant stats of their own.
|
29
29
|
#
|
30
|
+
# rubocop:disable Metrics/AbcSize
|
30
31
|
def stats
|
31
32
|
{
|
32
33
|
'Score' => [in_twodecimal(bit_score), score],
|
@@ -37,6 +38,7 @@ module SequenceServer
|
|
37
38
|
in_percentage(gaps, length)]
|
38
39
|
}
|
39
40
|
end
|
41
|
+
# rubocop:enable Metrics/AbcSize
|
40
42
|
|
41
43
|
# Returns pretty formatted alignment String.
|
42
44
|
#
|
@@ -96,6 +96,8 @@ module SequenceServer
|
|
96
96
|
end
|
97
97
|
|
98
98
|
# Recurisvely scan `database_dir` for blast databases.
|
99
|
+
#
|
100
|
+
# rubocop:disable Metrics/AbcSize, Metrics/MethodLength
|
99
101
|
def scan_databases_dir
|
100
102
|
cmd = "blastdbcmd -recursive -list #{config[:database_dir]}" \
|
101
103
|
' -list_outfmt "%f %t %p %n %l %d"'
|
@@ -115,6 +117,7 @@ module SequenceServer
|
|
115
117
|
throw_scan_error(cmd, out, err, $CHILD_STATUS)
|
116
118
|
end
|
117
119
|
end
|
120
|
+
# rubocop:enable Metrics/AbcSize, Metrics/MethodLength
|
118
121
|
|
119
122
|
def throw_scan_error(cmd, out, err, child_status)
|
120
123
|
errpat = /BLAST Database error/
|
@@ -156,12 +159,14 @@ module SequenceServer
|
|
156
159
|
def make_blast_database(file, type)
|
157
160
|
return unless make_blast_database? file, type
|
158
161
|
title = get_database_title(file)
|
159
|
-
|
162
|
+
taxid = fetch_tax_id
|
163
|
+
_make_blast_database(file, type, title, taxid)
|
160
164
|
end
|
161
165
|
|
162
|
-
def _make_blast_database(file, type, title, quiet = false)
|
166
|
+
def _make_blast_database(file, type, title, taxid, quiet = false)
|
163
167
|
cmd = 'makeblastdb -parse_seqids -hash_index ' \
|
164
|
-
"-in #{file} -dbtype #{type.to_s.slice(0, 4)} -title '#{title}'"
|
168
|
+
"-in #{file} -dbtype #{type.to_s.slice(0, 4)} -title '#{title}'" \
|
169
|
+
" -taxid #{taxid}"
|
165
170
|
cmd << ' &> /dev/null' if quiet
|
166
171
|
system cmd
|
167
172
|
end
|
@@ -176,7 +181,6 @@ module SequenceServer
|
|
176
181
|
puts "FASTA file: #{file}"
|
177
182
|
puts "FASTA type: #{type}"
|
178
183
|
print 'Proceed? [y/n] (Default: y): '
|
179
|
-
|
180
184
|
response = STDIN.gets.to_s.strip
|
181
185
|
!response.match(/n/i)
|
182
186
|
end
|
@@ -188,8 +192,19 @@ module SequenceServer
|
|
188
192
|
def get_database_title(path)
|
189
193
|
default = make_db_title(File.basename(path))
|
190
194
|
print "Enter a database title or will use '#{default}': "
|
191
|
-
from_user = STDIN.gets.to_s
|
192
|
-
from_user.
|
195
|
+
from_user = STDIN.gets.to_s.strip
|
196
|
+
from_user.empty? && default || from_user
|
197
|
+
end
|
198
|
+
|
199
|
+
# Get taxid from the user. Returns user input or 0.
|
200
|
+
#
|
201
|
+
# Using 0 as taxid is equivalent to not setting taxid for the database
|
202
|
+
# that will be created.
|
203
|
+
def fetch_tax_id
|
204
|
+
default = 0
|
205
|
+
print 'Enter taxid (optional): '
|
206
|
+
response_user = STDIN.gets.to_s.strip
|
207
|
+
response_user.empty? && default || response_user
|
193
208
|
end
|
194
209
|
|
195
210
|
# Returns true if the database name appears to be a multi-part database
|
@@ -200,7 +215,7 @@ module SequenceServer
|
|
200
215
|
# /home/ben/pd.ben/sequenceserver/db/nr => no
|
201
216
|
# /home/ben/pd.ben/sequenceserver/db/img3.5.finished.faa.01 => yes
|
202
217
|
def multipart_database_name?(db_name)
|
203
|
-
!(db_name.match(
|
218
|
+
!(db_name.match(%r{.+/\S+\d{2}$}).nil?)
|
204
219
|
end
|
205
220
|
|
206
221
|
# Returns true if first character of the file is '>'.
|
data/lib/sequenceserver/links.rb
CHANGED
@@ -8,7 +8,8 @@ module SequenceServer
|
|
8
8
|
#
|
9
9
|
alias_method :encode, :url_encode
|
10
10
|
|
11
|
-
NCBI_ID_PATTERN
|
11
|
+
NCBI_ID_PATTERN = /gi\|(\d+)\|/
|
12
|
+
UNIPROT_ID_PATTERN = /sp\|(\w+)\|/
|
12
13
|
|
13
14
|
# Link generators return a Hash like below.
|
14
15
|
#
|
@@ -101,6 +102,19 @@ module SequenceServer
|
|
101
102
|
:icon => 'fa-external-link'
|
102
103
|
}
|
103
104
|
end
|
105
|
+
|
106
|
+
def uniprot
|
107
|
+
return nil unless id.match(UNIPROT_ID_PATTERN)
|
108
|
+
uniprot_id = Regexp.last_match[1]
|
109
|
+
uniprot_id = encode uniprot_id
|
110
|
+
url = "http://www.uniprot.org/uniprot/#{uniprot_id}"
|
111
|
+
{
|
112
|
+
:order => 2,
|
113
|
+
:title => 'Uniprot',
|
114
|
+
:url => url,
|
115
|
+
:icon => 'fa-external-link'
|
116
|
+
}
|
117
|
+
end
|
104
118
|
end
|
105
119
|
end
|
106
120
|
|
@@ -15,4 +15,4 @@ r.has(q)?p[d]=e:r.set(q,e),t.push(q);for(d=-1;++d<l;)q=b.call(c,f=c[d],d),(e=r.g
|
|
15
15
|
b.P=null,b.N=a,a.P=a.L=b,c=a):(b.P=b.N=null,this._=b,c=null);for(b.L=b.R=null,b.U=c,b.C=!0,a=b;c&&c.C;)d=c.U,c===d.L?(e=d.R,e&&e.C?(c.C=e.C=!1,d.C=!0,a=d):(a===c.R&&($c(this,c),a=c,c=a.U),c.C=!1,d.C=!0,_c(this,d))):(e=d.L,e&&e.C?(c.C=e.C=!1,d.C=!0,a=d):(a===c.L&&(_c(this,c),a=c,c=a.U),c.C=!1,d.C=!0,$c(this,d))),c=a.U;this._.C=!1},remove:function(a){a.N&&(a.N.P=a.P),a.P&&(a.P.N=a.N),a.N=a.P=null;var b,c,d,e=a.U,f=a.L,g=a.R;if(c=f?g?ad(g):f:g,e?e.L===a?e.L=c:e.R=c:this._=c,f&&g?(d=c.C,c.C=a.C,c.L=f,f.U=c,c!==g?(e=c.U,c.U=a.U,a=c.R,e.L=a,c.R=g,g.U=c):(c.U=e,e=c,a=c.R)):(d=a.C,a=c),a&&(a.U=e),!d){if(a&&a.C)return void(a.C=!1);do{if(a===this._)break;if(a===e.L){if(b=e.R,b.C&&(b.C=!1,e.C=!0,$c(this,e),b=e.R),b.L&&b.L.C||b.R&&b.R.C){b.R&&b.R.C||(b.L.C=!1,b.C=!0,_c(this,b),b=e.R),b.C=e.C,e.C=b.R.C=!1,$c(this,e),a=this._;break}}else if(b=e.L,b.C&&(b.C=!1,e.C=!0,_c(this,e),b=e.L),b.L&&b.L.C||b.R&&b.R.C){b.L&&b.L.C||(b.R.C=!1,b.C=!0,$c(this,b),b=e.L),b.C=e.C,e.C=b.L.C=!1,_c(this,e),a=this._;break}b.C=!0,a=e,e=e.U}while(!a.C);a&&(a.C=!1)}}},Sf.geom.voronoi=function(a){function b(a){var b=new Array(a.length),d=h[0][0],e=h[0][1],f=h[1][0],g=h[1][1];return bd(c(a),h).cells.forEach(function(c,h){var i=c.edges,j=c.site,k=b[h]=i.length?i.map(function(a){var b=a.start();return[b.x,b.y]}):j.x>=d&&j.x<=f&&j.y>=e&&j.y<=g?[[d,g],[f,g],[f,e],[d,e]]:[];k.point=a[h]}),b}function c(a){return a.map(function(a,b){return{x:Math.round(f(a,b)/zg)*zg,y:Math.round(g(a,b)/zg)*zg,i:b}})}var d=xc,e=yc,f=d,g=e,h=Yh;return a?b(a):(b.links=function(a){return bd(c(a)).edges.filter(function(a){return a.l&&a.r}).map(function(b){return{source:a[b.l.i],target:a[b.r.i]}})},b.triangles=function(a){var b=[];return bd(c(a)).cells.forEach(function(c,d){for(var e,f,g=c.site,h=c.edges.sort(Nc),i=-1,j=h.length,k=h[j-1].edge,l=k.l===g?k.r:k.l;++i<j;)e=k,f=l,k=h[i].edge,l=k.l===g?k.r:k.l,d<f.i&&d<l.i&&dd(g,f,l)<0&&b.push([a[d],a[f.i],a[l.i]])}),b},b.x=function(a){return arguments.length?(f=wa(d=a),b):d},b.y=function(a){return arguments.length?(g=wa(e=a),b):e},b.clipExtent=function(a){return arguments.length?(h=null==a?Yh:a,b):h===Yh?null:h},b.size=function(a){return arguments.length?b.clipExtent(a&&[[0,0],a]):h===Yh?null:h&&h[1]},b)};var Yh=[[-1e6,-1e6],[1e6,1e6]];Sf.geom.delaunay=function(a){return Sf.geom.voronoi().triangles(a)},Sf.geom.quadtree=function(a,b,c,d,e){function f(a){function f(a,b,c,d,e,f,g,h){if(!isNaN(c)&&!isNaN(d))if(a.leaf){var i=a.x,k=a.y;if(null!=i)if(eg(i-c)+eg(k-d)<.01)j(a,b,c,d,e,f,g,h);else{var l=a.point;a.x=a.y=a.point=null,j(a,l,i,k,e,f,g,h),j(a,b,c,d,e,f,g,h)}else a.x=c,a.y=d,a.point=b}else j(a,b,c,d,e,f,g,h)}function j(a,b,c,d,e,g,h,i){var j=.5*(e+h),k=.5*(g+i),l=c>=j,m=d>=k,n=(m<<1)+l;a.leaf=!1,a=a.nodes[n]||(a.nodes[n]=gd()),l?e=j:h=j,m?g=k:i=k,f(a,b,c,d,e,g,h,i)}var k,l,m,n,o,p,q,r,s,t=wa(h),u=wa(i);if(null!=b)p=b,q=c,r=d,s=e;else if(r=s=-(p=q=1/0),l=[],m=[],o=a.length,g)for(n=0;o>n;++n)k=a[n],k.x<p&&(p=k.x),k.y<q&&(q=k.y),k.x>r&&(r=k.x),k.y>s&&(s=k.y),l.push(k.x),m.push(k.y);else for(n=0;o>n;++n){var v=+t(k=a[n],n),w=+u(k,n);p>v&&(p=v),q>w&&(q=w),v>r&&(r=v),w>s&&(s=w),l.push(v),m.push(w)}var x=r-p,y=s-q;x>y?s=q+x:r=p+y;var z=gd();if(z.add=function(a){f(z,a,+t(a,++n),+u(a,n),p,q,r,s)},z.visit=function(a){hd(a,z,p,q,r,s)},n=-1,null==b){for(;++n<o;)f(z,a[n],l[n],m[n],p,q,r,s);--n}else a.forEach(z.add);return l=m=a=k=null,z}var g,h=xc,i=yc;return(g=arguments.length)?(h=ed,i=fd,3===g&&(e=c,d=b,c=b=0),f(a)):(f.x=function(a){return arguments.length?(h=a,f):h},f.y=function(a){return arguments.length?(i=a,f):i},f.extent=function(a){return arguments.length?(null==a?b=c=d=e=null:(b=+a[0][0],c=+a[0][1],d=+a[1][0],e=+a[1][1]),f):null==b?null:[[b,c],[d,e]]},f.size=function(a){return arguments.length?(null==a?b=c=d=e=null:(b=c=0,d=+a[0],e=+a[1]),f):null==b?null:[d-b,e-c]},f)},Sf.interpolateRgb=id,Sf.interpolateObject=jd,Sf.interpolateNumber=kd,Sf.interpolateString=ld;var Zh=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,$h=new RegExp(Zh.source,"g");Sf.interpolate=md,Sf.interpolators=[function(a,b){var c=typeof b;return("string"===c?Rg.has(b)||/^(#|rgb\(|hsl\()/.test(b)?id:ld:b instanceof ca?id:Array.isArray(b)?nd:"object"===c&&isNaN(b)?jd:kd)(a,b)}],Sf.interpolateArray=nd;var _h=function(){return xa},ai=Sf.map({linear:_h,poly:ud,quad:function(){return rd},cubic:function(){return sd},sin:function(){return vd},exp:function(){return wd},circle:function(){return xd},elastic:yd,back:zd,bounce:function(){return Ad}}),bi=Sf.map({"in":xa,out:pd,"in-out":qd,"out-in":function(a){return qd(pd(a))}});Sf.ease=function(a){var b=a.indexOf("-"),c=b>=0?a.substring(0,b):a,d=b>=0?a.substring(b+1):"in";return c=ai.get(c)||_h,d=bi.get(d)||xa,od(d(c.apply(null,Tf.call(arguments,1))))},Sf.interpolateHcl=Bd,Sf.interpolateHsl=Cd,Sf.interpolateLab=Dd,Sf.interpolateRound=Ed,Sf.transform=function(a){var b=Vf.createElementNS(Sf.ns.prefix.svg,"g");return(Sf.transform=function(a){if(null!=a){b.setAttribute("transform",a);var c=b.transform.baseVal.consolidate()}return new Fd(c?c.matrix:ci)})(a)},Fd.prototype.toString=function(){return"translate("+this.translate+")rotate("+this.rotate+")skewX("+this.skew+")scale("+this.scale+")"};var ci={a:1,b:0,c:0,d:1,e:0,f:0};Sf.interpolateTransform=Jd,Sf.layout={},Sf.layout.bundle=function(){return function(a){for(var b=[],c=-1,d=a.length;++c<d;)b.push(Md(a[c]));return b}},Sf.layout.chord=function(){function a(){var a,j,l,m,n,o={},p=[],q=Sf.range(f),r=[];for(c=[],d=[],a=0,m=-1;++m<f;){for(j=0,n=-1;++n<f;)j+=e[m][n];p.push(j),r.push(Sf.range(f)),a+=j}for(g&&q.sort(function(a,b){return g(p[a],p[b])}),h&&r.forEach(function(a,b){a.sort(function(a,c){return h(e[b][a],e[b][c])})}),a=(xg-k*f)/a,j=0,m=-1;++m<f;){for(l=j,n=-1;++n<f;){var s=q[m],t=r[s][n],u=e[s][t],v=j,w=j+=u*a;o[s+"-"+t]={index:s,subindex:t,startAngle:v,endAngle:w,value:u}}d[s]={index:s,startAngle:l,endAngle:j,value:(j-l)/a},j+=k}for(m=-1;++m<f;)for(n=m-1;++n<f;){var x=o[m+"-"+n],y=o[n+"-"+m];(x.value||y.value)&&c.push(x.value<y.value?{source:y,target:x}:{source:x,target:y})}i&&b()}function b(){c.sort(function(a,b){return i((a.source.value+a.target.value)/2,(b.source.value+b.target.value)/2)})}var c,d,e,f,g,h,i,j={},k=0;return j.matrix=function(a){return arguments.length?(f=(e=a)&&e.length,c=d=null,j):e},j.padding=function(a){return arguments.length?(k=a,c=d=null,j):k},j.sortGroups=function(a){return arguments.length?(g=a,c=d=null,j):g},j.sortSubgroups=function(a){return arguments.length?(h=a,c=null,j):h},j.sortChords=function(a){return arguments.length?(i=a,c&&b(),j):i},j.chords=function(){return c||a(),c},j.groups=function(){return d||a(),d},j},Sf.layout.force=function(){function a(a){return function(b,c,d,e){if(b.point!==a){var f=b.cx-a.x,g=b.cy-a.y,h=e-c,i=f*f+g*g;if(i>h*h/q){if(o>i){var j=b.charge/i;a.px-=f*j,a.py-=g*j}return!0}if(b.point&&i&&o>i){var j=b.pointCharge/i;a.px-=f*j,a.py-=g*j}}return!b.charge}}function b(a){a.px=Sf.event.x,a.py=Sf.event.y,h.resume()}var c,d,e,f,g,h={},i=Sf.dispatch("start","tick","end"),j=[1,1],k=.9,l=di,m=ei,n=-30,o=fi,p=.1,q=.64,r=[],s=[];return h.tick=function(){if((d*=.99)<.005)return i.end({type:"end",alpha:d=0}),!0;var b,c,h,l,m,o,q,t,u,v=r.length,w=s.length;for(c=0;w>c;++c)h=s[c],l=h.source,m=h.target,t=m.x-l.x,u=m.y-l.y,(o=t*t+u*u)&&(o=d*f[c]*((o=Math.sqrt(o))-e[c])/o,t*=o,u*=o,m.x-=t*(q=l.weight/(m.weight+l.weight)),m.y-=u*q,l.x+=t*(q=1-q),l.y+=u*q);if((q=d*p)&&(t=j[0]/2,u=j[1]/2,c=-1,q))for(;++c<v;)h=r[c],h.x+=(t-h.x)*q,h.y+=(u-h.y)*q;if(n)for(Td(b=Sf.geom.quadtree(r),d,g),c=-1;++c<v;)(h=r[c]).fixed||b.visit(a(h));for(c=-1;++c<v;)h=r[c],h.fixed?(h.x=h.px,h.y=h.py):(h.x-=(h.px-(h.px=h.x))*k,h.y-=(h.py-(h.py=h.y))*k);i.tick({type:"tick",alpha:d})},h.nodes=function(a){return arguments.length?(r=a,h):r},h.links=function(a){return arguments.length?(s=a,h):s},h.size=function(a){return arguments.length?(j=a,h):j},h.linkDistance=function(a){return arguments.length?(l="function"==typeof a?a:+a,h):l},h.distance=h.linkDistance,h.linkStrength=function(a){return arguments.length?(m="function"==typeof a?a:+a,h):m},h.friction=function(a){return arguments.length?(k=+a,h):k},h.charge=function(a){return arguments.length?(n="function"==typeof a?a:+a,h):n},h.chargeDistance=function(a){return arguments.length?(o=a*a,h):Math.sqrt(o)},h.gravity=function(a){return arguments.length?(p=+a,h):p},h.theta=function(a){return arguments.length?(q=a*a,h):Math.sqrt(q)},h.alpha=function(a){return arguments.length?(a=+a,d?d=a>0?a:0:a>0&&(i.start({type:"start",alpha:d=a}),Sf.timer(h.tick)),h):d},h.start=function(){function a(a,d){if(!c){for(c=new Array(i),h=0;i>h;++h)c[h]=[];for(h=0;j>h;++h){var e=s[h];c[e.source.index].push(e.target),c[e.target.index].push(e.source)}}for(var f,g=c[b],h=-1,j=g.length;++h<j;)if(!isNaN(f=g[h][a]))return f;return Math.random()*d}var b,c,d,i=r.length,k=s.length,o=j[0],p=j[1];for(b=0;i>b;++b)(d=r[b]).index=b,d.weight=0;for(b=0;k>b;++b)d=s[b],"number"==typeof d.source&&(d.source=r[d.source]),"number"==typeof d.target&&(d.target=r[d.target]),++d.source.weight,++d.target.weight;for(b=0;i>b;++b)d=r[b],isNaN(d.x)&&(d.x=a("x",o)),isNaN(d.y)&&(d.y=a("y",p)),isNaN(d.px)&&(d.px=d.x),isNaN(d.py)&&(d.py=d.y);if(e=[],"function"==typeof l)for(b=0;k>b;++b)e[b]=+l.call(this,s[b],b);else for(b=0;k>b;++b)e[b]=l;if(f=[],"function"==typeof m)for(b=0;k>b;++b)f[b]=+m.call(this,s[b],b);else for(b=0;k>b;++b)f[b]=m;if(g=[],"function"==typeof n)for(b=0;i>b;++b)g[b]=+n.call(this,r[b],b);else for(b=0;i>b;++b)g[b]=n;return h.resume()},h.resume=function(){return h.alpha(.1)},h.stop=function(){return h.alpha(0)},h.drag=function(){return c||(c=Sf.behavior.drag().origin(xa).on("dragstart.force",Pd).on("drag.force",b).on("dragend.force",Qd)),arguments.length?void this.on("mouseover.force",Rd).on("mouseout.force",Sd).call(c):c},Sf.rebind(h,i,"on")};var di=20,ei=1,fi=1/0;Sf.layout.hierarchy=function(){function a(e){var f,g=[e],h=[];for(e.depth=0;null!=(f=g.pop());)if(h.push(f),(j=c.call(a,f,f.depth))&&(i=j.length)){for(var i,j,k;--i>=0;)g.push(k=j[i]),k.parent=f,k.depth=f.depth+1;d&&(f.value=0),f.children=j}else d&&(f.value=+d.call(a,f,f.depth)||0),delete f.children;return Wd(e,function(a){var c,e;b&&(c=a.children)&&c.sort(b),d&&(e=a.parent)&&(e.value+=a.value)}),h}var b=Zd,c=Xd,d=Yd;return a.sort=function(c){return arguments.length?(b=c,a):b},a.children=function(b){return arguments.length?(c=b,a):c},a.value=function(b){return arguments.length?(d=b,a):d},a.revalue=function(b){return d&&(Vd(b,function(a){a.children&&(a.value=0)}),Wd(b,function(b){var c;b.children||(b.value=+d.call(a,b,b.depth)||0),(c=b.parent)&&(c.value+=b.value)})),b},a},Sf.layout.partition=function(){function a(b,c,d,e){var f=b.children;if(b.x=c,b.y=b.depth*e,b.dx=d,b.dy=e,f&&(g=f.length)){var g,h,i,j=-1;for(d=b.value?d/b.value:0;++j<g;)a(h=f[j],c,i=h.value*d,e),c+=i}}function b(a){var c=a.children,d=0;if(c&&(e=c.length))for(var e,f=-1;++f<e;)d=Math.max(d,b(c[f]));return 1+d}function c(c,f){var g=d.call(this,c,f);return a(g[0],0,e[0],e[1]/b(g[0])),g}var d=Sf.layout.hierarchy(),e=[1,1];return c.size=function(a){return arguments.length?(e=a,c):e},Ud(c,d)},Sf.layout.pie=function(){function a(f){var g=f.map(function(c,d){return+b.call(a,c,d)}),h=+("function"==typeof d?d.apply(this,arguments):d),i=(("function"==typeof e?e.apply(this,arguments):e)-h)/Sf.sum(g),j=Sf.range(f.length);null!=c&&j.sort(c===gi?function(a,b){return g[b]-g[a]}:function(a,b){return c(f[a],f[b])});var k=[];return j.forEach(function(a){var b;k[a]={data:f[a],value:b=g[a],startAngle:h,endAngle:h+=b*i}}),k}var b=Number,c=gi,d=0,e=xg;return a.value=function(c){return arguments.length?(b=c,a):b},a.sort=function(b){return arguments.length?(c=b,a):c},a.startAngle=function(b){return arguments.length?(d=b,a):d},a.endAngle=function(b){return arguments.length?(e=b,a):e},a};var gi={};Sf.layout.stack=function(){function a(h,i){var j=h.map(function(c,d){return b.call(a,c,d)}),k=j.map(function(b){return b.map(function(b,c){return[f.call(a,b,c),g.call(a,b,c)]})}),l=c.call(a,k,i);j=Sf.permute(j,l),k=Sf.permute(k,l);var m,n,o,p=d.call(a,k,i),q=j.length,r=j[0].length;for(n=0;r>n;++n)for(e.call(a,j[0][n],o=p[n],k[0][n][1]),m=1;q>m;++m)e.call(a,j[m][n],o+=k[m-1][n][1],k[m][n][1]);return h}var b=xa,c=ce,d=de,e=be,f=_d,g=ae;return a.values=function(c){return arguments.length?(b=c,a):b},a.order=function(b){return arguments.length?(c="function"==typeof b?b:hi.get(b)||ce,a):c},a.offset=function(b){return arguments.length?(d="function"==typeof b?b:ii.get(b)||de,a):d},a.x=function(b){return arguments.length?(f=b,a):f},a.y=function(b){return arguments.length?(g=b,a):g},a.out=function(b){return arguments.length?(e=b,a):e},a};var hi=Sf.map({"inside-out":function(a){var b,c,d=a.length,e=a.map(ee),f=a.map(fe),g=Sf.range(d).sort(function(a,b){return e[a]-e[b]}),h=0,i=0,j=[],k=[];for(b=0;d>b;++b)c=g[b],i>h?(h+=f[c],j.push(c)):(i+=f[c],k.push(c));return k.reverse().concat(j)},reverse:function(a){return Sf.range(a.length).reverse()},"default":ce}),ii=Sf.map({silhouette:function(a){var b,c,d,e=a.length,f=a[0].length,g=[],h=0,i=[];for(c=0;f>c;++c){for(b=0,d=0;e>b;b++)d+=a[b][c][1];d>h&&(h=d),g.push(d)}for(c=0;f>c;++c)i[c]=(h-g[c])/2;return i},wiggle:function(a){var b,c,d,e,f,g,h,i,j,k=a.length,l=a[0],m=l.length,n=[];for(n[0]=i=j=0,c=1;m>c;++c){for(b=0,e=0;k>b;++b)e+=a[b][c][1];for(b=0,f=0,h=l[c][0]-l[c-1][0];k>b;++b){for(d=0,g=(a[b][c][1]-a[b][c-1][1])/(2*h);b>d;++d)g+=(a[d][c][1]-a[d][c-1][1])/h;f+=g*a[b][c][1]}n[c]=i-=e?f/e*h:0,j>i&&(j=i)}for(c=0;m>c;++c)n[c]-=j;return n},expand:function(a){var b,c,d,e=a.length,f=a[0].length,g=1/e,h=[];for(c=0;f>c;++c){for(b=0,d=0;e>b;b++)d+=a[b][c][1];if(d)for(b=0;e>b;b++)a[b][c][1]/=d;else for(b=0;e>b;b++)a[b][c][1]=g}for(c=0;f>c;++c)h[c]=0;return h},zero:de});Sf.layout.histogram=function(){function a(a,f){for(var g,h,i=[],j=a.map(c,this),k=d.call(this,j,f),l=e.call(this,k,j,f),f=-1,m=j.length,n=l.length-1,o=b?1:1/m;++f<n;)g=i[f]=[],g.dx=l[f+1]-(g.x=l[f]),g.y=0;if(n>0)for(f=-1;++f<m;)h=j[f],h>=k[0]&&h<=k[1]&&(g=i[Sf.bisect(l,h,1,n)-1],g.y+=o,g.push(a[f]));return i}var b=!0,c=Number,d=je,e=he;return a.value=function(b){return arguments.length?(c=b,a):c},a.range=function(b){return arguments.length?(d=wa(b),a):d},a.bins=function(b){return arguments.length?(e="number"==typeof b?function(a){return ie(a,b)}:wa(b),a):e},a.frequency=function(c){return arguments.length?(b=!!c,a):b},a},Sf.layout.pack=function(){function a(a,f){var g=c.call(this,a,f),h=g[0],i=e[0],j=e[1],k=null==b?Math.sqrt:"function"==typeof b?b:function(){return b};if(h.x=h.y=0,Wd(h,function(a){a.r=+k(a.value)}),Wd(h,oe),d){var l=d*(b?1:Math.max(2*h.r/i,2*h.r/j))/2;Wd(h,function(a){a.r+=l}),Wd(h,oe),Wd(h,function(a){a.r-=l})}return re(h,i/2,j/2,b?1:1/Math.max(2*h.r/i,2*h.r/j)),g}var b,c=Sf.layout.hierarchy().sort(ke),d=0,e=[1,1];return a.size=function(b){return arguments.length?(e=b,a):e},a.radius=function(c){return arguments.length?(b=null==c||"function"==typeof c?c:+c,a):b},a.padding=function(b){return arguments.length?(d=+b,a):d},Ud(a,c)},Sf.layout.tree=function(){function a(a,e){var k=g.call(this,a,e),l=k[0],m=b(l);if(Wd(m,c),m.parent.m=-m.z,Vd(m,d),j)Vd(l,f);else{var n=l,o=l,p=l;Vd(l,function(a){a.x<n.x&&(n=a),a.x>o.x&&(o=a),a.depth>p.depth&&(p=a)});var q=h(n,o)/2-n.x,r=i[0]/(o.x+h(o,n)/2+q),s=i[1]/(p.depth||1);Vd(l,function(a){a.x=(a.x+q)*r,a.y=a.depth*s})}return k}function b(a){for(var b,c={A:null,children:[a]},d=[c];null!=(b=d.pop());)for(var e,f=b.children,g=0,h=f.length;h>g;++g)d.push((f[g]=e={_:f[g],parent:b,children:(e=f[g].children)&&e.slice()||[],A:null,a:null,z:0,m:0,c:0,s:0,t:null,i:g}).a=e);return c.children[0]}function c(a){var b=a.children,c=a.parent.children,d=a.i?c[a.i-1]:null;if(b.length){xe(a);var f=(b[0].z+b[b.length-1].z)/2;d?(a.z=d.z+h(a._,d._),a.m=a.z-f):a.z=f}else d&&(a.z=d.z+h(a._,d._));a.parent.A=e(a,d,a.parent.A||c[0])}function d(a){a._.x=a.z+a.parent.m,a.m+=a.parent.m}function e(a,b,c){if(b){for(var d,e=a,f=a,g=b,i=e.parent.children[0],j=e.m,k=f.m,l=g.m,m=i.m;g=ve(g),e=ue(e),g&&e;)i=ue(i),f=ve(f),f.a=a,d=g.z+l-e.z-j+h(g._,e._),d>0&&(we(ye(g,a,c),a,d),j+=d,k+=d),l+=g.m,j+=e.m,m+=i.m,k+=f.m;g&&!ve(f)&&(f.t=g,f.m+=l-k),e&&!ue(i)&&(i.t=e,i.m+=j-m,c=a)}return c}function f(a){a.x*=i[0],a.y=a.depth*i[1]}var g=Sf.layout.hierarchy().sort(null).value(null),h=te,i=[1,1],j=null;return a.separation=function(b){return arguments.length?(h=b,a):h},a.size=function(b){return arguments.length?(j=null==(i=b)?f:null,a):j?null:i},a.nodeSize=function(b){return arguments.length?(j=null==(i=b)?null:f,a):j?i:null},Ud(a,g)},Sf.layout.cluster=function(){function a(a,f){var g,h=b.call(this,a,f),i=h[0],j=0;Wd(i,function(a){var b=a.children;b&&b.length?(a.x=Ae(b),a.y=ze(b)):(a.x=g?j+=c(a,g):0,a.y=0,g=a)});var k=Be(i),l=Ce(i),m=k.x-c(k,l)/2,n=l.x+c(l,k)/2;return Wd(i,e?function(a){a.x=(a.x-i.x)*d[0],a.y=(i.y-a.y)*d[1]}:function(a){a.x=(a.x-m)/(n-m)*d[0],a.y=(1-(i.y?a.y/i.y:1))*d[1]}),h}var b=Sf.layout.hierarchy().sort(null).value(null),c=te,d=[1,1],e=!1;return a.separation=function(b){return arguments.length?(c=b,a):c},a.size=function(b){return arguments.length?(e=null==(d=b),a):e?null:d},a.nodeSize=function(b){return arguments.length?(e=null!=(d=b),a):e?d:null},Ud(a,b)},Sf.layout.treemap=function(){function a(a,b){for(var c,d,e=-1,f=a.length;++e<f;)d=(c=a[e]).value*(0>b?0:b),c.area=isNaN(d)||0>=d?0:d}function b(c){var f=c.children;if(f&&f.length){var g,h,i,j=l(c),k=[],m=f.slice(),o=1/0,p="slice"===n?j.dx:"dice"===n?j.dy:"slice-dice"===n?1&c.depth?j.dy:j.dx:Math.min(j.dx,j.dy);for(a(m,j.dx*j.dy/c.value),k.area=0;(i=m.length)>0;)k.push(g=m[i-1]),k.area+=g.area,"squarify"!==n||(h=d(k,p))<=o?(m.pop(),o=h):(k.area-=k.pop().area,e(k,p,j,!1),p=Math.min(j.dx,j.dy),k.length=k.area=0,o=1/0);k.length&&(e(k,p,j,!0),k.length=k.area=0),f.forEach(b)}}function c(b){var d=b.children;if(d&&d.length){var f,g=l(b),h=d.slice(),i=[];for(a(h,g.dx*g.dy/b.value),i.area=0;f=h.pop();)i.push(f),i.area+=f.area,null!=f.z&&(e(i,f.z?g.dx:g.dy,g,!h.length),i.length=i.area=0);d.forEach(c)}}function d(a,b){for(var c,d=a.area,e=0,f=1/0,g=-1,h=a.length;++g<h;)(c=a[g].area)&&(f>c&&(f=c),c>e&&(e=c));return d*=d,b*=b,d?Math.max(b*e*o/d,d/(b*f*o)):1/0}function e(a,b,c,d){var e,f=-1,g=a.length,h=c.x,j=c.y,k=b?i(a.area/b):0;if(b==c.dx){for((d||k>c.dy)&&(k=c.dy);++f<g;)e=a[f],e.x=h,e.y=j,e.dy=k,h+=e.dx=Math.min(c.x+c.dx-h,k?i(e.area/k):0);e.z=!0,e.dx+=c.x+c.dx-h,c.y+=k,c.dy-=k}else{for((d||k>c.dx)&&(k=c.dx);++f<g;)e=a[f],e.x=h,e.y=j,e.dx=k,j+=e.dy=Math.min(c.y+c.dy-j,k?i(e.area/k):0);e.z=!1,e.dy+=c.y+c.dy-j,c.x+=k,c.dx-=k}}function f(d){var e=g||h(d),f=e[0];return f.x=0,f.y=0,f.dx=j[0],f.dy=j[1],g&&h.revalue(f),a([f],f.dx*f.dy/f.value),(g?c:b)(f),m&&(g=e),e}var g,h=Sf.layout.hierarchy(),i=Math.round,j=[1,1],k=null,l=De,m=!1,n="squarify",o=.5*(1+Math.sqrt(5));return f.size=function(a){return arguments.length?(j=a,f):j},f.padding=function(a){function b(b){var c=a.call(f,b,b.depth);return null==c?De(b):Ee(b,"number"==typeof c?[c,c,c,c]:c)}function c(b){return Ee(b,a)}if(!arguments.length)return k;var d;return l=null==(k=a)?De:"function"==(d=typeof a)?b:"number"===d?(a=[a,a,a,a],c):c,f},f.round=function(a){return arguments.length?(i=a?Math.round:Number,f):i!=Number},f.sticky=function(a){return arguments.length?(m=a,g=null,f):m},f.ratio=function(a){return arguments.length?(o=a,f):o},f.mode=function(a){return arguments.length?(n=a+"",f):n},Ud(f,h)},Sf.random={normal:function(a,b){var c=arguments.length;return 2>c&&(b=1),1>c&&(a=0),function(){var c,d,e;do c=2*Math.random()-1,d=2*Math.random()-1,e=c*c+d*d;while(!e||e>1);return a+b*c*Math.sqrt(-2*Math.log(e)/e)}},logNormal:function(){var a=Sf.random.normal.apply(Sf,arguments);return function(){return Math.exp(a())}},bates:function(a){var b=Sf.random.irwinHall(a);return function(){return b()/a}},irwinHall:function(a){return function(){for(var b=0,c=0;a>c;c++)b+=Math.random();return b}}},Sf.scale={};var ji={floor:xa,ceil:xa};Sf.scale.linear=function(){return Le([0,1],[0,1],md,!1)};var ki={s:1,g:1,p:1,r:1,e:1};Sf.scale.log=function(){return Te(Sf.scale.linear().domain([0,1]),10,!0,[1,10])};var li=Sf.format(".0e"),mi={floor:function(a){return-Math.ceil(-a)},ceil:function(a){return-Math.floor(-a)}};Sf.scale.pow=function(){return Ue(Sf.scale.linear(),1,[0,1])},Sf.scale.sqrt=function(){return Sf.scale.pow().exponent(.5)},Sf.scale.ordinal=function(){return We([],{t:"range",a:[[]]})},Sf.scale.category10=function(){return Sf.scale.ordinal().range(ni)},Sf.scale.category20=function(){return Sf.scale.ordinal().range(oi)},Sf.scale.category20b=function(){return Sf.scale.ordinal().range(pi)},Sf.scale.category20c=function(){return Sf.scale.ordinal().range(qi)};var ni=[2062260,16744206,2924588,14034728,9725885,9197131,14907330,8355711,12369186,1556175].map(pa),oi=[2062260,11454440,16744206,16759672,2924588,10018698,14034728,16750742,9725885,12955861,9197131,12885140,14907330,16234194,8355711,13092807,12369186,14408589,1556175,10410725].map(pa),pi=[3750777,5395619,7040719,10264286,6519097,9216594,11915115,13556636,9202993,12426809,15186514,15190932,8666169,11356490,14049643,15177372,8077683,10834324,13528509,14589654].map(pa),qi=[3244733,7057110,10406625,13032431,15095053,16616764,16625259,16634018,3253076,7652470,10607003,13101504,7695281,10394312,12369372,14342891,6513507,9868950,12434877,14277081].map(pa);Sf.scale.quantile=function(){return Xe([],[])},Sf.scale.quantize=function(){return Ye(0,1,[0,1])},Sf.scale.threshold=function(){return Ze([.5],[0,1])},Sf.scale.identity=function(){return $e([0,1])},Sf.svg={},Sf.svg.arc=function(){function a(){var a=b.apply(this,arguments),f=c.apply(this,arguments),g=d.apply(this,arguments)+ri,h=e.apply(this,arguments)+ri,i=(g>h&&(i=g,g=h,h=i),h-g),j=wg>i?"0":"1",k=Math.cos(g),l=Math.sin(g),m=Math.cos(h),n=Math.sin(h);return i>=si?a?"M0,"+f+"A"+f+","+f+" 0 1,1 0,"+-f+"A"+f+","+f+" 0 1,1 0,"+f+"M0,"+a+"A"+a+","+a+" 0 1,0 0,"+-a+"A"+a+","+a+" 0 1,0 0,"+a+"Z":"M0,"+f+"A"+f+","+f+" 0 1,1 0,"+-f+"A"+f+","+f+" 0 1,1 0,"+f+"Z":a?"M"+f*k+","+f*l+"A"+f+","+f+" 0 "+j+",1 "+f*m+","+f*n+"L"+a*m+","+a*n+"A"+a+","+a+" 0 "+j+",0 "+a*k+","+a*l+"Z":"M"+f*k+","+f*l+"A"+f+","+f+" 0 "+j+",1 "+f*m+","+f*n+"L0,0Z"}var b=_e,c=af,d=bf,e=cf;return a.innerRadius=function(c){return arguments.length?(b=wa(c),a):b},a.outerRadius=function(b){return arguments.length?(c=wa(b),a):c},a.startAngle=function(b){return arguments.length?(d=wa(b),a):d},a.endAngle=function(b){return arguments.length?(e=wa(b),a):e},a.centroid=function(){var a=(b.apply(this,arguments)+c.apply(this,arguments))/2,f=(d.apply(this,arguments)+e.apply(this,arguments))/2+ri;return[Math.cos(f)*a,Math.sin(f)*a]},a};var ri=-yg,si=xg-zg;Sf.svg.line=function(){return df(xa)};var ti=Sf.map({linear:ef,"linear-closed":ff,step:gf,"step-before":hf,"step-after":jf,basis:pf,"basis-open":qf,"basis-closed":rf,bundle:sf,cardinal:mf,"cardinal-open":kf,"cardinal-closed":lf,monotone:yf});ti.forEach(function(a,b){b.key=a,b.closed=/-closed$/.test(a)});var ui=[0,2/3,1/3,0],vi=[0,1/3,2/3,0],wi=[0,1/6,2/3,1/6];Sf.svg.line.radial=function(){var a=df(zf);return a.radius=a.x,delete a.x,a.angle=a.y,delete a.y,a},hf.reverse=jf,jf.reverse=hf,Sf.svg.area=function(){return Af(xa)},Sf.svg.area.radial=function(){var a=Af(zf);return a.radius=a.x,delete a.x,a.innerRadius=a.x0,delete a.x0,a.outerRadius=a.x1,delete a.x1,a.angle=a.y,delete a.y,a.startAngle=a.y0,delete a.y0,a.endAngle=a.y1,delete a.y1,a},Sf.svg.chord=function(){function a(a,h){var i=b(this,f,a,h),j=b(this,g,a,h);return"M"+i.p0+d(i.r,i.p1,i.a1-i.a0)+(c(i,j)?e(i.r,i.p1,i.r,i.p0):e(i.r,i.p1,j.r,j.p0)+d(j.r,j.p1,j.a1-j.a0)+e(j.r,j.p1,i.r,i.p0))+"Z"}function b(a,b,c,d){var e=b.call(a,c,d),f=h.call(a,e,d),g=i.call(a,e,d)+ri,k=j.call(a,e,d)+ri;return{r:f,a0:g,a1:k,p0:[f*Math.cos(g),f*Math.sin(g)],p1:[f*Math.cos(k),f*Math.sin(k)]}}function c(a,b){return a.a0==b.a0&&a.a1==b.a1}function d(a,b,c){return"A"+a+","+a+" 0 "+ +(c>wg)+",1 "+b}function e(a,b,c,d){return"Q 0,0 "+d}var f=nc,g=oc,h=Bf,i=bf,j=cf;return a.radius=function(b){return arguments.length?(h=wa(b),a):h},a.source=function(b){return arguments.length?(f=wa(b),a):f},a.target=function(b){return arguments.length?(g=wa(b),a):g},a.startAngle=function(b){return arguments.length?(i=wa(b),a):i},a.endAngle=function(b){return arguments.length?(j=wa(b),a):j},a},Sf.svg.diagonal=function(){function a(a,e){var f=b.call(this,a,e),g=c.call(this,a,e),h=(f.y+g.y)/2,i=[f,{x:f.x,y:h},{x:g.x,y:h},g];return i=i.map(d),"M"+i[0]+"C"+i[1]+" "+i[2]+" "+i[3]}var b=nc,c=oc,d=Cf;return a.source=function(c){return arguments.length?(b=wa(c),a):b},a.target=function(b){return arguments.length?(c=wa(b),a):c},a.projection=function(b){return arguments.length?(d=b,a):d},a},Sf.svg.diagonal.radial=function(){var a=Sf.svg.diagonal(),b=Cf,c=a.projection;return a.projection=function(a){return arguments.length?c(Df(b=a)):b},a},Sf.svg.symbol=function(){function a(a,d){return(xi.get(b.call(this,a,d))||Gf)(c.call(this,a,d))}var b=Ff,c=Ef;return a.type=function(c){return arguments.length?(b=wa(c),a):b},a.size=function(b){return arguments.length?(c=wa(b),a):c},a};var xi=Sf.map({circle:Gf,cross:function(a){var b=Math.sqrt(a/5)/2;return"M"+-3*b+","+-b+"H"+-b+"V"+-3*b+"H"+b+"V"+-b+"H"+3*b+"V"+b+"H"+b+"V"+3*b+"H"+-b+"V"+b+"H"+-3*b+"Z"},diamond:function(a){var b=Math.sqrt(a/(2*Bi)),c=b*Bi;return"M0,"+-b+"L"+c+",0 0,"+b+" "+-c+",0Z"},square:function(a){var b=Math.sqrt(a)/2;return"M"+-b+","+-b+"L"+b+","+-b+" "+b+","+b+" "+-b+","+b+"Z"},"triangle-down":function(a){var b=Math.sqrt(a/Ai),c=b*Ai/2;return"M0,"+c+"L"+b+","+-c+" "+-b+","+-c+"Z"},"triangle-up":function(a){var b=Math.sqrt(a/Ai),c=b*Ai/2;return"M0,"+-c+"L"+b+","+c+" "+-b+","+c+"Z"}});Sf.svg.symbolTypes=xi.keys();var yi,zi,Ai=Math.sqrt(3),Bi=Math.tan(30*Bg),Ci=[],Di=0;Ci.call=og.call,Ci.empty=og.empty,Ci.node=og.node,Ci.size=og.size,Sf.transition=function(a){return arguments.length?yi?a.transition():a:rg.transition()},Sf.transition.prototype=Ci,Ci.select=function(a){var b,c,d,e=this.id,f=[];a=w(a);for(var g=-1,h=this.length;++g<h;){f.push(b=[]);for(var i=this[g],j=-1,k=i.length;++j<k;)(d=i[j])&&(c=a.call(d,d.__data__,j,g))?("__data__"in d&&(c.__data__=d.__data__),Kf(c,j,e,d.__transition__[e]),b.push(c)):b.push(null)}return Hf(f,e)},Ci.selectAll=function(a){var b,c,d,e,f,g=this.id,h=[];a=x(a);for(var i=-1,j=this.length;++i<j;)for(var k=this[i],l=-1,m=k.length;++l<m;)if(d=k[l]){f=d.__transition__[g],c=a.call(d,d.__data__,l,i),h.push(b=[]);for(var n=-1,o=c.length;++n<o;)(e=c[n])&&Kf(e,n,g,f),b.push(e)}return Hf(h,g)},Ci.filter=function(a){var b,c,d,e=[];"function"!=typeof a&&(a=I(a));for(var f=0,g=this.length;g>f;f++){e.push(b=[]);for(var c=this[f],h=0,i=c.length;i>h;h++)(d=c[h])&&a.call(d,d.__data__,h,f)&&b.push(d)}return Hf(e,this.id)},Ci.tween=function(a,b){var c=this.id;return arguments.length<2?this.node().__transition__[c].tween.get(a):K(this,null==b?function(b){b.__transition__[c].tween.remove(a)}:function(d){d.__transition__[c].tween.set(a,b)})},Ci.attr=function(a,b){function c(){this.removeAttribute(h)}function d(){this.removeAttributeNS(h.space,h.local)}function e(a){return null==a?c:(a+="",function(){var b,c=this.getAttribute(h);return c!==a&&(b=g(c,a),function(a){this.setAttribute(h,b(a))})})}function f(a){return null==a?d:(a+="",function(){var b,c=this.getAttributeNS(h.space,h.local);return c!==a&&(b=g(c,a),function(a){this.setAttributeNS(h.space,h.local,b(a))})})}if(arguments.length<2){for(b in a)this.attr(b,a[b]);return this}var g="transform"==a?Jd:md,h=Sf.ns.qualify(a);return If(this,"attr."+a,b,h.local?f:e)},Ci.attrTween=function(a,b){function c(a,c){var d=b.call(this,a,c,this.getAttribute(e));return d&&function(a){this.setAttribute(e,d(a))}}function d(a,c){var d=b.call(this,a,c,this.getAttributeNS(e.space,e.local));return d&&function(a){this.setAttributeNS(e.space,e.local,d(a))}}var e=Sf.ns.qualify(a);return this.tween("attr."+a,e.local?d:c)},Ci.style=function(a,b,c){function d(){this.style.removeProperty(a)}function e(b){return null==b?d:(b+="",function(){var d,e=Xf.getComputedStyle(this,null).getPropertyValue(a);return e!==b&&(d=md(e,b),function(b){this.style.setProperty(a,d(b),c)})})}var f=arguments.length;if(3>f){if("string"!=typeof a){2>f&&(b="");for(c in a)this.style(c,a[c],b);return this}c=""}return If(this,"style."+a,b,e)},Ci.styleTween=function(a,b,c){function d(d,e){var f=b.call(this,d,e,Xf.getComputedStyle(this,null).getPropertyValue(a));return f&&function(b){this.style.setProperty(a,f(b),c)}}return arguments.length<3&&(c=""),this.tween("style."+a,d)},Ci.text=function(a){return If(this,"text",a,Jf)},Ci.remove=function(){return this.each("end.transition",function(){var a;this.__transition__.count<2&&(a=this.parentNode)&&a.removeChild(this)})},Ci.ease=function(a){var b=this.id;return arguments.length<1?this.node().__transition__[b].ease:("function"!=typeof a&&(a=Sf.ease.apply(Sf,arguments)),K(this,function(c){c.__transition__[b].ease=a}))},Ci.delay=function(a){var b=this.id;return arguments.length<1?this.node().__transition__[b].delay:K(this,"function"==typeof a?function(c,d,e){c.__transition__[b].delay=+a.call(c,c.__data__,d,e)}:(a=+a,function(c){c.__transition__[b].delay=a}))},Ci.duration=function(a){var b=this.id;return arguments.length<1?this.node().__transition__[b].duration:K(this,"function"==typeof a?function(c,d,e){c.__transition__[b].duration=Math.max(1,a.call(c,c.__data__,d,e))}:(a=Math.max(1,a),function(c){c.__transition__[b].duration=a}))},Ci.each=function(a,b){var c=this.id;if(arguments.length<2){var d=zi,e=yi;yi=c,K(this,function(b,d,e){zi=b.__transition__[c],a.call(b,b.__data__,d,e)}),zi=d,yi=e}else K(this,function(d){var e=d.__transition__[c];(e.event||(e.event=Sf.dispatch("start","end"))).on(a,b)});return this},Ci.transition=function(){for(var a,b,c,d,e=this.id,f=++Di,g=[],h=0,i=this.length;i>h;h++){g.push(a=[]);for(var b=this[h],j=0,k=b.length;k>j;j++)(c=b[j])&&(d=Object.create(c.__transition__[e]),d.delay+=d.duration,Kf(c,j,f,d)),a.push(c)}return Hf(g,f)},Sf.svg.axis=function(){function a(a){a.each(function(){var a,j=Sf.select(this),k=this.__chart__||c,l=this.__chart__=c.copy(),m=null==i?l.ticks?l.ticks.apply(l,h):l.domain():i,n=null==b?l.tickFormat?l.tickFormat.apply(l,h):xa:b,o=j.selectAll(".tick").data(m,l),p=o.enter().insert("g",".domain").attr("class","tick").style("opacity",zg),q=Sf.transition(o.exit()).style("opacity",zg).remove(),r=Sf.transition(o.order()).style("opacity",1),s=Ge(l),t=j.selectAll(".domain").data([0]),u=(t.enter().append("path").attr("class","domain"),Sf.transition(t));p.append("line"),p.append("text");var v=p.select("line"),w=r.select("line"),x=o.select("text").text(n),y=p.select("text"),z=r.select("text");switch(d){case"bottom":a=Lf,v.attr("y2",e),y.attr("y",Math.max(e,0)+g),w.attr("x2",0).attr("y2",e),z.attr("x",0).attr("y",Math.max(e,0)+g),x.attr("dy",".71em").style("text-anchor","middle"),u.attr("d","M"+s[0]+","+f+"V0H"+s[1]+"V"+f);break;case"top":a=Lf,v.attr("y2",-e),y.attr("y",-(Math.max(e,0)+g)),w.attr("x2",0).attr("y2",-e),z.attr("x",0).attr("y",-(Math.max(e,0)+g)),x.attr("dy","0em").style("text-anchor","middle"),u.attr("d","M"+s[0]+","+-f+"V0H"+s[1]+"V"+-f);break;case"left":a=Mf,v.attr("x2",-e),y.attr("x",-(Math.max(e,0)+g)),w.attr("x2",-e).attr("y2",0),z.attr("x",-(Math.max(e,0)+g)).attr("y",0),x.attr("dy",".32em").style("text-anchor","end"),u.attr("d","M"+-f+","+s[0]+"H0V"+s[1]+"H"+-f);break;case"right":a=Mf,v.attr("x2",e),y.attr("x",Math.max(e,0)+g),w.attr("x2",e).attr("y2",0),z.attr("x",Math.max(e,0)+g).attr("y",0),x.attr("dy",".32em").style("text-anchor","start"),u.attr("d","M"+f+","+s[0]+"H0V"+s[1]+"H"+f)}if(l.rangeBand){var A=l,B=A.rangeBand()/2;k=l=function(a){return A(a)+B}}else k.rangeBand?k=l:q.call(a,l);p.call(a,k),r.call(a,l)})}var b,c=Sf.scale.linear(),d=Ei,e=6,f=6,g=3,h=[10],i=null;return a.scale=function(b){return arguments.length?(c=b,a):c},a.orient=function(b){return arguments.length?(d=b in Fi?b+"":Ei,a):d},a.ticks=function(){return arguments.length?(h=arguments,a):h},a.tickValues=function(b){return arguments.length?(i=b,a):i},a.tickFormat=function(c){return arguments.length?(b=c,a):b},a.tickSize=function(b){var c=arguments.length;return c?(e=+b,
|
16
16
|
f=+arguments[c-1],a):e},a.innerTickSize=function(b){return arguments.length?(e=+b,a):e},a.outerTickSize=function(b){return arguments.length?(f=+b,a):f},a.tickPadding=function(b){return arguments.length?(g=+b,a):g},a.tickSubdivide=function(){return arguments.length&&a},a};var Ei="bottom",Fi={top:1,right:1,bottom:1,left:1};Sf.svg.brush=function(){function a(f){f.each(function(){var f=Sf.select(this).style("pointer-events","all").style("-webkit-tap-highlight-color","rgba(0,0,0,0)").on("mousedown.brush",e).on("touchstart.brush",e),g=f.selectAll(".background").data([0]);g.enter().append("rect").attr("class","background").style("visibility","hidden").style("cursor","crosshair"),f.selectAll(".extent").data([0]).enter().append("rect").attr("class","extent").style("cursor","move");var h=f.selectAll(".resize").data(o,xa);h.exit().remove(),h.enter().append("g").attr("class",function(a){return"resize "+a}).style("cursor",function(a){return Gi[a]}).append("rect").attr("x",function(a){return/[ew]$/.test(a)?-3:null}).attr("y",function(a){return/^[ns]/.test(a)?-3:null}).attr("width",6).attr("height",6).style("visibility","hidden"),h.style("display",a.empty()?"none":null);var k,l=Sf.transition(f),m=Sf.transition(g);i&&(k=Ge(i),m.attr("x",k[0]).attr("width",k[1]-k[0]),c(l)),j&&(k=Ge(j),m.attr("y",k[0]).attr("height",k[1]-k[0]),d(l)),b(l)})}function b(a){a.selectAll(".resize").attr("transform",function(a){return"translate("+k[+/e$/.test(a)]+","+l[+/^s/.test(a)]+")"})}function c(a){a.select(".extent").attr("x",k[0]),a.selectAll(".extent,.n>rect,.s>rect").attr("width",k[1]-k[0])}function d(a){a.select(".extent").attr("y",l[0]),a.selectAll(".extent,.e>rect,.w>rect").attr("height",l[1]-l[0])}function e(){function e(){32==Sf.event.keyCode&&(C||(t=null,E[0]-=k[1],E[1]-=l[1],C=2),s())}function o(){32==Sf.event.keyCode&&2==C&&(E[0]+=k[1],E[1]+=l[1],C=0,s())}function p(){var a=Sf.mouse(v),e=!1;u&&(a[0]+=u[0],a[1]+=u[1]),C||(Sf.event.altKey?(t||(t=[(k[0]+k[1])/2,(l[0]+l[1])/2]),E[0]=k[+(a[0]<t[0])],E[1]=l[+(a[1]<t[1])]):t=null),A&&q(a,i,0)&&(c(y),e=!0),B&&q(a,j,1)&&(d(y),e=!0),e&&(b(y),x({type:"brush",mode:C?"move":"resize"}))}function q(a,b,c){var d,e,h=Ge(b),i=h[0],j=h[1],o=E[c],p=c?l:k,q=p[1]-p[0];return C&&(i-=o,j-=q+o),d=(c?n:m)?Math.max(i,Math.min(j,a[c])):a[c],C?e=(d+=o)+q:(t&&(o=Math.max(i,Math.min(j,2*t[c]-d))),d>o?(e=d,d=o):e=o),p[0]!=d||p[1]!=e?(c?g=null:f=null,p[0]=d,p[1]=e,!0):void 0}function r(){p(),y.style("pointer-events","all").selectAll(".resize").style("display",a.empty()?"none":null),Sf.select("body").style("cursor",null),F.on("mousemove.brush",null).on("mouseup.brush",null).on("touchmove.brush",null).on("touchend.brush",null).on("keydown.brush",null).on("keyup.brush",null),D(),x({type:"brushend"})}var t,u,v=this,w=Sf.select(Sf.event.target),x=h.of(v,arguments),y=Sf.select(v),z=w.datum(),A=!/^(n|s)$/.test(z)&&i,B=!/^(e|w)$/.test(z)&&j,C=w.classed("extent"),D=R(),E=Sf.mouse(v),F=Sf.select(Xf).on("keydown.brush",e).on("keyup.brush",o);if(Sf.event.changedTouches?F.on("touchmove.brush",p).on("touchend.brush",r):F.on("mousemove.brush",p).on("mouseup.brush",r),y.interrupt().selectAll("*").interrupt(),C)E[0]=k[0]-E[0],E[1]=l[0]-E[1];else if(z){var G=+/w$/.test(z),H=+/^n/.test(z);u=[k[1-G]-E[0],l[1-H]-E[1]],E[0]=k[G],E[1]=l[H]}else Sf.event.altKey&&(t=E.slice());y.style("pointer-events","none").selectAll(".resize").style("display",null),Sf.select("body").style("cursor",w.style("cursor")),x({type:"brushstart"}),p()}var f,g,h=u(a,"brushstart","brush","brushend"),i=null,j=null,k=[0,0],l=[0,0],m=!0,n=!0,o=Hi[0];return a.event=function(a){a.each(function(){var a=h.of(this,arguments),b={x:k,y:l,i:f,j:g},c=this.__chart__||b;this.__chart__=b,yi?Sf.select(this).transition().each("start.brush",function(){f=c.i,g=c.j,k=c.x,l=c.y,a({type:"brushstart"})}).tween("brush:brush",function(){var c=nd(k,b.x),d=nd(l,b.y);return f=g=null,function(e){k=b.x=c(e),l=b.y=d(e),a({type:"brush",mode:"resize"})}}).each("end.brush",function(){f=b.i,g=b.j,a({type:"brush",mode:"resize"}),a({type:"brushend"})}):(a({type:"brushstart"}),a({type:"brush",mode:"resize"}),a({type:"brushend"}))})},a.x=function(b){return arguments.length?(i=b,o=Hi[!i<<1|!j],a):i},a.y=function(b){return arguments.length?(j=b,o=Hi[!i<<1|!j],a):j},a.clamp=function(b){return arguments.length?(i&&j?(m=!!b[0],n=!!b[1]):i?m=!!b:j&&(n=!!b),a):i&&j?[m,n]:i?m:j?n:null},a.extent=function(b){var c,d,e,h,m;return arguments.length?(i&&(c=b[0],d=b[1],j&&(c=c[0],d=d[0]),f=[c,d],i.invert&&(c=i(c),d=i(d)),c>d&&(m=c,c=d,d=m),(c!=k[0]||d!=k[1])&&(k=[c,d])),j&&(e=b[0],h=b[1],i&&(e=e[1],h=h[1]),g=[e,h],j.invert&&(e=j(e),h=j(h)),e>h&&(m=e,e=h,h=m),(e!=l[0]||h!=l[1])&&(l=[e,h])),a):(i&&(f?(c=f[0],d=f[1]):(c=k[0],d=k[1],i.invert&&(c=i.invert(c),d=i.invert(d)),c>d&&(m=c,c=d,d=m))),j&&(g?(e=g[0],h=g[1]):(e=l[0],h=l[1],j.invert&&(e=j.invert(e),h=j.invert(h)),e>h&&(m=e,e=h,h=m))),i&&j?[[c,e],[d,h]]:i?[c,d]:j&&[e,h])},a.clear=function(){return a.empty()||(k=[0,0],l=[0,0],f=g=null),a},a.empty=function(){return!!i&&k[0]==k[1]||!!j&&l[0]==l[1]},Sf.rebind(a,h,"on")};var Gi={n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"},Hi=[["n","e","s","w","nw","ne","se","sw"],["e","w"],["n","s"],[]],Ii=_g.format=fh.timeFormat,Ji=Ii.utc,Ki=Ji("%Y-%m-%dT%H:%M:%S.%LZ");Ii.iso=Date.prototype.toISOString&&+new Date("2000-01-01T00:00:00.000Z")?Nf:Ki,Nf.parse=function(a){var b=new Date(a);return isNaN(b)?null:b},Nf.toString=Ki.toString,_g.second=Ja(function(a){return new ah(1e3*Math.floor(a/1e3))},function(a,b){a.setTime(a.getTime()+1e3*Math.floor(b))},function(a){return a.getSeconds()}),_g.seconds=_g.second.range,_g.seconds.utc=_g.second.utc.range,_g.minute=Ja(function(a){return new ah(6e4*Math.floor(a/6e4))},function(a,b){a.setTime(a.getTime()+6e4*Math.floor(b))},function(a){return a.getMinutes()}),_g.minutes=_g.minute.range,_g.minutes.utc=_g.minute.utc.range,_g.hour=Ja(function(a){var b=a.getTimezoneOffset()/60;return new ah(36e5*(Math.floor(a/36e5-b)+b))},function(a,b){a.setTime(a.getTime()+36e5*Math.floor(b))},function(a){return a.getHours()}),_g.hours=_g.hour.range,_g.hours.utc=_g.hour.utc.range,_g.month=Ja(function(a){return a=_g.day(a),a.setDate(1),a},function(a,b){a.setMonth(a.getMonth()+b)},function(a){return a.getMonth()}),_g.months=_g.month.range,_g.months.utc=_g.month.utc.range;var Li=[1e3,5e3,15e3,3e4,6e4,3e5,9e5,18e5,36e5,108e5,216e5,432e5,864e5,1728e5,6048e5,2592e6,7776e6,31536e6],Mi=[[_g.second,1],[_g.second,5],[_g.second,15],[_g.second,30],[_g.minute,1],[_g.minute,5],[_g.minute,15],[_g.minute,30],[_g.hour,1],[_g.hour,3],[_g.hour,6],[_g.hour,12],[_g.day,1],[_g.day,2],[_g.week,1],[_g.month,1],[_g.month,3],[_g.year,1]],Ni=Ii.multi([[".%L",function(a){return a.getMilliseconds()}],[":%S",function(a){return a.getSeconds()}],["%I:%M",function(a){return a.getMinutes()}],["%I %p",function(a){return a.getHours()}],["%a %d",function(a){return a.getDay()&&1!=a.getDate()}],["%b %d",function(a){return 1!=a.getDate()}],["%B",function(a){return a.getMonth()}],["%Y",xb]]),Oi={range:function(a,b,c){return Sf.range(Math.ceil(a/c)*c,+b,c).map(Pf)},floor:xa,ceil:xa};Mi.year=_g.year,_g.scale=function(){return Of(Sf.scale.linear(),Mi,Ni)};var Pi=Mi.map(function(a){return[a[0].utc,a[1]]}),Qi=Ji.multi([[".%L",function(a){return a.getUTCMilliseconds()}],[":%S",function(a){return a.getUTCSeconds()}],["%I:%M",function(a){return a.getUTCMinutes()}],["%I %p",function(a){return a.getUTCHours()}],["%a %d",function(a){return a.getUTCDay()&&1!=a.getUTCDate()}],["%b %d",function(a){return 1!=a.getUTCDate()}],["%B",function(a){return a.getUTCMonth()}],["%Y",xb]]);Pi.year=_g.year.utc,_g.scale.utc=function(){return Of(Sf.scale.linear(),Pi,Qi)},Sf.text=ya(function(a){return a.responseText}),Sf.json=function(a,b){return za(a,"application/json",Qf,b)},Sf.html=function(a,b){return za(a,"text/html",Rf,b)},Sf.xml=ya(function(a){return a.responseXML}),"function"==typeof define&&define.amd?define(Sf):"object"==typeof module&&module.exports&&(module.exports=Sf),this.d3=Sf}(),require=function c(a,b,d){function e(g,h){if(!b[g]){if(!a[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);var j=new Error("Cannot find module '"+g+"'");throw j.code="MODULE_NOT_FOUND",j}var k=b[g]={exports:{}};a[g][0].call(k.exports,function(b){var c=a[g][1][b];return e(c?c:b)},k,k.exports,c,a,b,d)}return b[g].exports}for(var f="function"==typeof require&&require,g=0;g<d.length;g++)e(d[g]);return e}({1:[function(c,d){$.browser=c("jquery-browser-plugin");var e=c("js-class"),f="onSelectionChange",g="onSelectionChanged",h="onAnnotationClicked";Sequence=e({constructor:function(a){var b=this;this.opt=jQuery.extend(this.opt,a),this._container=jQuery(this.opt.target),0==this._container.length&&(this._container=jQuery("#"+this.opt.target)),0==this._container.length&&console.log("empty target container"),this.opt.target=this._container[0].id,this._container.ready(function(){b._initialize()})},opt:{sequence:"",id:"",target:"",format:"FASTA",selection:{start:0,end:0},columns:{size:35,spacedEach:10},highlights:[],annotations:[],sequenceUrl:"http://www.ebi.ac.uk/das-srv/uniprot/das/uniprot/sequence",selectionColor:"Yellow",selectionFontColor:"black",highlightFontColor:"red",highlightBackgroundColor:"white",fontColor:"inherit",backgroundColor:"inherit",width:void 0,height:void 0,formatSelectorVisible:!0},eventTypes:["onSelectionChanged","onSelectionChange","onAnnotationClicked"],getId:function(){return this.opt.id},_headerDiv:null,_contentDiv:null,_initialize:function(){void 0!==this.opt.width&&this._container.width(this.opt.width),void 0!==this.opt.height&&this._container.height(this.opt.height),this._buildFormatSelector(),this._contentDiv=jQuery("<div/>").appendTo(this._container),this._highlights=this.opt.highlights,this._annotations=this.opt.annotations;var a="sequenceTip"+this.opt.target;jQuery('<div id="'+a+'"></div>').css({position:"absolute","z-index":"999999",color:"#fff","font-size":"12px",width:"auto",display:"none"}).addClass("tooltip").appendTo("body").hide(),this.opt._tooltip=document.getElementById(a),this.opt.sequence?this._redraw():this.opt.id?this._requestSequence(this.opt.id):this.clearSequence("No sequence available","../biojs/css/images/warning_icon.png")},setSequence:function(a,b){a.match(/^([A-N,R-Z][0-9][A-Z][A-Z, 0-9][A-Z, 0-9][0-9])|([O,P,Q][0-9][A-Z, 0-9][A-Z, 0-9][A-Z, 0-9][0-9])(\.\d+)?$/i)?this._requestSequence(arguments[0]):(this.opt.sequence=a,this.opt.id=b,this._highlights=[],this._highlightsCount=0,this.opt.selection={start:0,end:0},this._annotations=[],this._contentDiv.children().remove(),this._redraw())},_requestSequence:function(a){var b=this;console.log("Requesting sequence for: "+a),jQuery.ajax({url:b.opt.sequenceUrl,dataType:"xml",data:{segment:a},success:function(a){try{var c=jQuery(a).find("SEQUENCE:first");b.setSequence(c.text(),c.attr("id"),c.attr("label"))}catch(d){console.log("Error decoding response data: "+d.message),b.clearSequence("No sequence available","../biojs/css/images/warning_icon.png")}},error:function(a,c){console.log("Error decoding response data: "+c),b.clearSequence("Error requesting the sequence to the server "+this.url,"../biojs/css/images/warning_icon.png")}})},clearSequence:function(a,b){var c=void 0;this.opt.sequence="",this.opt.id="",this._highlights=[],this._highlightsCount=0,this.opt.selection={start:0,end:0},this._annotations=[],this._contentDiv.children().remove(),this._headerDiv.hide(),void 0!==a&&(c=jQuery("<div>"+a+"</div>").appendTo(this._contentDiv).addClass("message"),void 0!==b&&c.css({background:'transparent url("'+b+'") no-repeat center left',"padding-left":"20px"}))},setSelection:function(a,b){if(a>b){var c=b;b=a,a=c}(a!=this.opt.selection.start||b!=this.opt.selection.end)&&(this._setSelection(a,b),this.trigger(g,{start:a,end:b}))},_buildFormatSelector:function(){var a=this;this._headerDiv=jQuery("<div></div>").appendTo(this._container),this._headerDiv.append("Format: "),this._formatSelector=jQuery('<select> <option value="FASTA">FASTA</option><option value="CODATA">CODATA</option><option value="PRIDE">PRIDE</option><option value="RAW">RAW</option></select>').appendTo(a._headerDiv),this._formatSelector.change(function(){a.opt.format=jQuery(this).val(),a._redraw()}),this._formatSelector.val(a.opt.format),this.formatSelectorVisible(this.opt.formatSelectorVisible)},addHighlight:function(a){var b="-1",c="",d="",e={};return a instanceof Object&&a.start<=a.end&&(c="string"==typeof a.color?a.color:this.opt.highlightFontColor,d="string"==typeof a.background?a.background:this.opt.highlightBackgroundColor,b="string"==typeof a.id?a.id:new Number(this._highlightsCount++).toString(),e={start:a.start,end:a.end,color:c,background:d,id:b},this._highlights.push(e),this._applyHighlight(e),this._restoreSelection(a.start,a.end)),b},_applyHighlight:function(a){for(var b=this._contentDiv.find(".sequence"),c=a.start-1;c<a.end;c++)zindex=jQuery(b[c]).css("z-index"),"auto"==zindex?(z=1,o=1):(z=0,o=.5),jQuery(b[c]).css({color:a.color,"background-color":a.background,"z-index":z,opacity:o}).addClass("highlighted")},_applyHighlights:function(a){for(var b in a)this._applyHighlight(a[b])},_restoreHighlights:function(c,d){var e=this._highlights;this._applyHighlight({start:c,end:d,color:this.opt.fontColor,background:this.opt.backgroundColor});for(var f in e)e[f].start>d||e[f].end<c||(a=e[f].start<c?c:e[f].start,b=e[f].end>d?d:e[f].end,this._applyHighlight({start:a,end:b,color:e[f].color,background:e[f].background}))},_restoreSelection:function(c,d){var e=this.opt.selection;c>e.end||d<e.start||(a=c<e.start?e.start:c,b=d>e.end?e.end:d,this._applyHighlight({start:a,end:b,color:this.opt.selectionFontColor,background:this.opt.selectionColor}))},removeHighlight:function(a){var b=this._highlights;for(i in b)if(b[i].id==a){start=b[i].start,end=b[i].end,b.splice(i,1),this._restoreHighlights(start,end),this._restoreSelection(start,end);break}},removeAllHighlights:function(){this._highlights=[],this._restoreHighlights(1,this.opt.sequence.length),this._restoreSelection(1,this.opt.sequence.length)},setFormat:function(a){this.opt.format!=a.toUpperCase()&&(this.opt.format=a.toUpperCase(),this._redraw());var b=this;this._headerDiv.find("option").each(function(){jQuery(this).val()==b.opt.format.toUpperCase()&&jQuery(this).attr("selected","selected")})},setNumCols:function(a){this.opt.columns.size=a,this._redraw()},formatSelectorVisible:function(a){a?this._headerDiv.show():this._headerDiv.hide()},showFormatSelector:function(){this._headerDiv.show()},hideFormatSelector:function(){this._headerDiv.hide()},hide:function(){this._headerDiv.hide(),this._contentDiv.hide()},show:function(){this._headerDiv.show(),this._contentDiv.show()},_setSelection:function(a,b){var c=this.opt.selection,d={};c.start==a?c.end<b?(d.start=c.end,d.end=b):this._restoreHighlights(b+1,c.end):c.end==b?c.start>a?(d.start=a,d.end=c.start):this._restoreHighlights(c.start,a-1):(this._restoreHighlights(c.start,c.end),d.start=a,d.end=b),c.start=a,c.end=b},_repaintSelection:function(){var a=this.opt.selection;this._setSelection(0,0),this._setSelection(a.start,a.end)},_redraw:function(){this._contentDiv.children().remove(),"RAW"==this.opt.format?this._drawRaw():"CODATA"==this.opt.format?this._drawCodata():"FASTA"==this.opt.format?this._drawFasta():(this.opt.format="PRIDE",this._drawPride()),this._applyHighlights(this._highlights),this._repaintSelection(),this._addSpanEvents()},_drawFasta:function(){var a=this.opt.sequence.toUpperCase().split(""),b=jQuery("<pre></pre>").appendTo(this._contentDiv),c=">"+this.opt.id+" "+a.length+" bp<br/>",d=this.opt.columns.size;this.opt.sequence.length<this.opt.columns.size&&(d=this.opt.sequence.length);var e={numCols:d,numColsForSpace:0};c+=this._drawSequence(a,e),b.html(c),this._drawAnnotations(e)},_drawCodata:function(){var a=this.opt.sequence.toUpperCase().split("");if(void 0!==this.opt.formatOptions&&void 0!==this.opt.formatOptions.title&&0!=this.opt.formatOptions.title){var b=$("<pre/>").addClass("header").appendTo(this._contentDiv);b.html("ENTRY "+this.opt.id+"<br/>SEQUENCE<br/>")}var c=this.opt.columns.size;this.opt.sequence.length<this.opt.columns.size&&(c=this.opt.sequence.length);var d={numLeft:!0,numLeftSize:7,numLeftPad:" ",numTop:!0,numTopEach:5,numCols:c,numColsForSpace:0,spaceBetweenChars:!0};if(this._drawSequence(a,d),void 0!==this.opt.formatOptions&&void 0!==this.opt.formatOptions.footer&&0!=this.opt.formatOptions.footer){var e=$("<pre/>").addClass("footer").appendTo(this._contentDiv);e.html("<br/>///")}this._drawAnnotations(d)},_drawAnnotations:function(a){var b=this,c=this.opt.sequence.toLowerCase().split(""),d=this._annotations,e="",f="",g="";a.numLeft&&(e+=this._formatIndex(" ",a.numLeftSize+2," "));for(var i=0;i<c.length;i+=a.numCols){f="";for(var j in d)d[j].id=this.getId()+"_"+j,g=this._getHTMLRowAnnot(i+1,d[j],a),g.length>0&&(f+="<br/>",f+=e,f+=g,f+="<br/>");var k=a.numCols,l=c.length-i;k>l&&(k=l),jQuery(f).insertAfter(a.numRight?"div#"+b.opt.target+" div pre span#numRight_"+this.getId()+"_"+(i+k):"div#"+b.opt.target+" div pre span#"+this.getId()+"_"+(i+k))}jQuery(this._contentDiv).find(".annotation").each(function(){b._addToolTip(this,function(){return b._getAnnotationString(jQuery(this).attr("id"))}),jQuery(this).mouseover(function(a){jQuery(".annotation."+jQuery(a.target).attr("id")).each(function(){jQuery(this).css("background-color",jQuery(this).attr("color"))})}).mouseout(function(){jQuery(".annotation").css("background-color","transparent")}).click(function(a){for(var c=void 0,d=jQuery(a.target).attr("id"),e=0;e<b._annotations.length;e++)b._annotations[e].id!=d||(c=b._annotations[e].name);b.trigger(h,{name:c})})})},_getAnnotationString:function(a){var b=this._annotations[a.substr(a.indexOf("_")+1)];return b.name+"<br/>"+(b.html?b.html:"")},_getHTMLRowAnnot:function(a,b,c){for(var d="border-left:1px solid; border-bottom:1px solid; border-color:",e="border-bottom:1px solid; border-color:",f="border-bottom:1px solid; border-right:1px solid; border-color:",g="border-left:1px solid; border-right:1px solid; border-bottom:1px solid; border-color:",h=[],i=a+c.numCols,j=c.spaceBetweenChars?" ":"",k=b.color,l=b.id,m=a;i>m;m++)for(var n in b.regions)region=b.regions[n],spaceAfter="",spaceAfter+=m%c.numColsForSpace==0?" ":"",spaceAfter+=j,color=region.color?region.color:k,data='class="annotation '+l+'" id="'+l+'" color="'+color+'" pos="'+m+'"',m==region.start&&m==region.end?(h[m]='<span style="'+g+color+'" '+data+"> ",h[m]+=spaceAfter,h[m]+="</span>"):m==region.start?(h[m]='<span style="'+d+color+'" '+data+"> ",h[m]+=spaceAfter,h[m]+="</span>"):m==region.end?(h[m]='<span style="'+f+color+' " '+data+"> ",h[m]+="</span>"):m>region.start&&m<region.end?(h[m]='<span style="'+e+color+'" '+data+"> ",h[m]+=spaceAfter,h[m]+="</span>"):h[m]||(h[m]=" ",h[m]+=spaceAfter);var o=h.join("");return-1==o.indexOf("span")?"":o},_drawRaw:function(){var a=this.opt.sequence.toLowerCase().split(""),b=jQuery("<pre></pre>").appendTo(this._contentDiv),c=this.opt.columns.size;this.opt.sequence.length<this.opt.columns.size&&(c=this.opt.sequence.length);var d={numCols:c};b.html(this._drawSequence(a,d)),this._drawAnnotations(d)},_drawPride:function(){var a=this.opt.sequence.toUpperCase().split(""),b=this.opt.columns.size;this.opt.sequence.length<this.opt.columns.size&&(b=this.opt.sequence.length),opt={numLeft:!0,numLeftSize:5,numLeftPad:" ",numRight:!1,numRightSize:5,numRightPad:"",numCols:b,numColsForSpace:this.opt.columns.spacedEach},this._drawSequence(a,opt),this._drawAnnotations(opt)},_drawSequence:function(a,b){var c="",d="",e="\n",f="";if(b.numTop){d+='<span class="numTop pos-marker">';var g=b.spaceBetweenChars?2*b.numTopEach:b.numTopEach;b.numLeft&&(d+=this._formatIndex(" ",b.numLeftSize," ")),d+=this._formatIndex(" ",g," ");for(var h=b.numTopEach;h<b.numCols;h+=b.numTopEach)d+=this._formatIndex(h,g," ",!0);d+="</span>"}b.numLeft&&(c+='<span id="numLeft_'+this.getId()+'_0"',c+='class="pos-marker">',c+=this._formatIndex(1,b.numLeftSize,b.numLeftPad),c+=" ",c+="</span>",c+="\n");for(var i=1,j=1;j<=a.length;j++)if(j%b.numCols==0){f+='<span class="sequence" id="'+this.getId()+"_"+j+'">'+a[j-1]+"</span>",b.numRight&&(e+='<span id="numRight_'+this.getId()+"_"+j+'"',e+='class="pos-marker">',e+=" ",e+=this._formatIndex(j,b.numRightSize,b.numRightPad),e+="</span>",e+="\n"),f+="<br/>";var k=a.length-j;b.numLeft&&k>0&&(c+='<span id="numLeft_'+this.getId()+"_"+j+'"',c+='class="pos-marker">',c+=this._formatIndex(j+1,b.numLeftSize,b.numLeftPad),c+=" ",c+="</span>",c+="\n"),i=1}else f+='<span class="sequence" id="'+this.getId()+"_"+j+'"',f+=i%b.numColsForSpace==0?' style="letter-spacing: 1em;"':"",f+=b.spaceBetweenChars?' style="letter-spacing: 1em;"':"",f+='">'+a[j-1],f+="</span>",i++;f+="<br/>",jQuery.browser.msie&&(f="<pre>"+f+"</pre>");return b.numTop&&$("<pre/>").html(d).addClass("indT").css({color:"#aaa"}).appendTo(this._contentDiv),b.numLeft&&$("<pre/>").html(c).addClass("indL").css({color:"#aaa",display:"inline-block"}).appendTo(this._contentDiv),$("<pre/>").html(f).addClass("seqF").css({display:"inline-block"}).appendTo(this._contentDiv),b.numRight&&$("<pre/>").html(e).addClass("indR").css({color:"#aaa",display:"inline-block"}).appendTo(this._contentDiv),f},_formatIndex:function(a,b,c,d){var e=a.toString(),f="",g=b-e.length;if(g>0){for(;g-->0;)f+="<span>"+c+"</span>";e=d?a+f:f+a}return e},_addSpanEvents:function(){var a,b,c=this,d=!1;c._contentDiv.find(".sequence").each(function(){jQuery(this).mousedown(function(){var e=jQuery(this).attr("id");b=parseInt(e.substr(e.indexOf("_")+1)),a=b,c._setSelection(a,b),d=!0,c.trigger(f,{start:c.opt.selection.start,end:c.opt.selection.end})}).mouseover(function(){var e=jQuery(this).attr("id");b=parseInt(e.substr(e.indexOf("_")+1)),d&&(b>a?c._setSelection(a,b):c._setSelection(b,a),c.trigger(f,{start:c.opt.selection.start,end:c.opt.selection.end}))}).mouseup(function(){d=!1,c.trigger(g,{start:c.opt.selection.start,end:c.opt.selection.end})}),c._addToolTip.call(c,this,function(){return d?"["+c.opt.selection.start+", "+c.opt.selection.end+"]":b})}).css("cursor","pointer")},_addToolTip:function(a,b){var c=this.opt._tooltip;jQuery(a).mouseover(function(d){var e=jQuery(d.target).offset();jQuery(c).is(":visible")||jQuery(c).css({"background-color":"#000",padding:"3px 10px 3px 10px",top:e.top+jQuery(d.target).height()+"px",left:e.left+jQuery(d.target).width()+"px"}).animate({opacity:"0.85"},10).html(b.call(a)).show()}).mouseout(function(){jQuery(c).hide()})},addAnnotation:function(a){this._annotations.push(a),this._redraw()},removeAnnotation:function(a){for(var b=0;b<this._annotations.length;b++)if(a!=this._annotations[b].name){this._annotations.splice(b,1),this._redraw();break}},removeAllAnnotations:function(){this._annotations=[],this._redraw()}}),c("biojs-events").mixin(Sequence.prototype),d.exports=Sequence},{"biojs-events":2,"jquery-browser-plugin":20,"js-class":22}],2:[function(a,b){var c=a("backbone-events-standalone");c.onAll=function(a,b){return this.on("all",a,b),this},c.oldMixin=c.mixin,c.mixin=function(a){c.oldMixin(a);for(var b=["onAll"],d=0;d<b.length;d++){var e=b[d];a[e]=this[e]}return a},b.exports=c},{"backbone-events-standalone":4}],3:[function(a,b,c){!function(){function a(){return{keys:Object.keys||function(a){if("object"!=typeof a&&"function"!=typeof a||null===a)throw new TypeError("keys() called on a non-object");var b,c=[];for(b in a)a.hasOwnProperty(b)&&(c[c.length]=b);return c},uniqueId:function(a){var b=++j+"";return a?a+b:b},has:function(a,b){return h.call(a,b)},each:function(a,b,c){if(null!=a)if(g&&a.forEach===g)a.forEach(b,c);else if(a.length===+a.length){for(var d=0,e=a.length;e>d;d++)if(b.call(c,a[d],d,a)===f)return}else for(var h in a)if(this.has(a,h)&&b.call(c,a[h],h,a)===f)return},once:function(a){var b,c=!1;return function(){return c?b:(c=!0,b=a.apply(this,arguments),a=null,b)}}}}var d,e=this,f={},g=Array.prototype.forEach,h=Object.prototype.hasOwnProperty,i=Array.prototype.slice,j=0,k=a();d={on:function(a,b,c){if(!m(this,"on",a,[b,c])||!b)return this;this._events||(this._events={});var d=this._events[a]||(this._events[a]=[]);return d.push({callback:b,context:c,ctx:c||this}),this},once:function(a,b,c){if(!m(this,"once",a,[b,c])||!b)return this;var d=this,e=k.once(function(){d.off(a,e),b.apply(this,arguments)});return e._callback=b,this.on(a,e,c)},off:function(a,b,c){var d,e,f,g,h,i,j,l;if(!this._events||!m(this,"off",a,[b,c]))return this;if(!a&&!b&&!c)return this._events={},this;for(g=a?[a]:k.keys(this._events),h=0,i=g.length;i>h;h++)if(a=g[h],f=this._events[a]){if(this._events[a]=d=[],b||c)for(j=0,l=f.length;l>j;j++)e=f[j],(b&&b!==e.callback&&b!==e.callback._callback||c&&c!==e.context)&&d.push(e);d.length||delete this._events[a]}return this},trigger:function(a){if(!this._events)return this;var b=i.call(arguments,1);if(!m(this,"trigger",a,b))return this;var c=this._events[a],d=this._events.all;return c&&n(c,b),d&&n(d,arguments),this},stopListening:function(a,b,c){var d=this._listeners;if(!d)return this;var e=!b&&!c;"object"==typeof b&&(c=this),a&&((d={})[a._listenerId]=a);for(var f in d)d[f].off(b,c,this),e&&delete this._listeners[f];return this}};var l=/\s+/,m=function(a,b,c,d){if(!c)return!0;if("object"==typeof c){for(var e in c)a[b].apply(a,[e,c[e]].concat(d));return!1}if(l.test(c)){for(var f=c.split(l),g=0,h=f.length;h>g;g++)a[b].apply(a,[f[g]].concat(d));return!1}return!0},n=function(a,b){var c,d=-1,e=a.length,f=b[0],g=b[1],h=b[2];switch(b.length){case 0:for(;++d<e;)(c=a[d]).callback.call(c.ctx);return;case 1:for(;++d<e;)(c=a[d]).callback.call(c.ctx,f);return;case 2:for(;++d<e;)(c=a[d]).callback.call(c.ctx,f,g);return;case 3:for(;++d<e;)(c=a[d]).callback.call(c.ctx,f,g,h);return;default:for(;++d<e;)(c=a[d]).callback.apply(c.ctx,b)}},o={listenTo:"on",listenToOnce:"once"};k.each(o,function(a,b){d[b]=function(b,c,d){var e=this._listeners||(this._listeners={}),f=b._listenerId||(b._listenerId=k.uniqueId("l"));return e[f]=b,"object"==typeof c&&(d=this),b[a](c,d,this),this}}),d.bind=d.on,d.unbind=d.off,d.mixin=function(a){var b=["on","once","off","trigger","stopListening","listenTo","listenToOnce","bind","unbind"];return k.each(b,function(b){a[b]=this[b]},this),a},"function"==typeof define?define(function(){return d}):"undefined"!=typeof c?("undefined"!=typeof b&&b.exports&&(c=b.exports=d),c.BackboneEvents=d):e.BackboneEvents=d}(this)},{}],4:[function(a,b){b.exports=a("./backbone-events-standalone")},{"./backbone-events-standalone":3}],5:[function(a,b){var c,d;d=a("nets"),b.exports=c=function(){function a(){}return a.read=function(a,b){var c;return c=function(a){return function(c,d,e){return a._onRetrieval(e,b)}}(this),d(a,c)},a._onRetrieval=function(a,b){var c;return c=this.parse(a),b(c)},a}()},{nets:12}],6:[function(a,b){var c,d,e,f,g={}.hasOwnProperty,h=function(a,b){function c(){this.constructor=a}for(var d in b)g.call(b,d)&&(a[d]=b[d]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a};f=a("./strings"),d=a("./generic_reader"),e=a("biojs-model").seq,b.exports=c=function(a){function b(){return b.__super__.constructor.apply(this,arguments)}return h(b,a),b.parse=function(a){var b,c,d,g,h,i,j,k,l,m;for(k=[],"[object Array]"!==Object.prototype.toString.call(a)&&(a=a.split("\n")),l=0,m=a.length;m>l;l++)if(j=a[l],">"===j[0]||";"===j[0]){if(i=j.slice(1),b=new e("",i,k.length),k.push(b),f.contains("|",j)){for(g=i.split("|"),h=1;h<g.length;)c=g[h],d=g[h+1],b.meta[c]=d,h+=2;b.name=g[g.length-1]}}else b.seq+=j;return k},b}(d)},{"./generic_reader":5,"./strings":7,"biojs-model":10}],7:[function(a,b){var c;c={contains:function(a,b){return-1!=="".indexOf.call(a,b,0)}},b.exports=c},{}],8:[function(a,b){var c;c={},c.splitNChars=function(a,b){var c,d,e,f;for(d=[],c=e=0,f=a.length-1;b>0?f>=e:e>=f;c=e+=b)d.push(a.substr(c,b));return d},b.exports=c},{}],9:[function(a,b){var c,d;d=a("./utils"),b.exports=c=function(){function a(){}return a["export"]=function(a,b){var c,e,f,g;for(e="",f=0,g=a.length;g>f;f++)c=a[f],null!=b&&(c=b(c)),e+=">"+c.name+"\n",e+=d.splitNChars(c.seq,80).join("\n"),e+="\n";return e},a}()},{"./utils":8}],10:[function(a,b){b.exports.seq=a("./seq")},{"./seq":11}],11:[function(a,b){b.exports=function(a,b,c){this.seq=a,this.name=b,this.id=c,this.meta={}}},{}],12:[function(a,b){function c(a,b,c){d(a,b,c)}var d=a("request");b.exports=c},{request:13}],13:[function(a,b){function c(a,b){function c(){4===p.readyState&&x()}function e(){var a=null;if(p.response?a=p.response:"text"!==p.responseType&&p.responseType||(a=p.responseText||p.responseXML),w)try{a=JSON.parse(a)}catch(b){}return a}function k(){return 1223===p.status?204:p.status}function l(a,b){var c=null;if(0===a||a>=400&&600>a){var d=("string"==typeof b?b:!1)||h[String(a).charAt(0)];c=new Error(d),c.statusCode=a}return c}function m(){var a=k(),c=e(),d=l(a,c),f={body:c,statusCode:a,statusText:p.statusText,raw:p};f.headers=p.getAllResponseHeaders?g(p.getAllResponseHeaders()):{},b(d,f,f.body)}function n(){var a=k(),c=l(a);p.status=p.statusCode=a,p.body=e(),p.headers=g(p.getAllResponseHeaders()),b(c,p,p.body)}function o(a){b(a,p)}"string"==typeof a&&(a={uri:a}),a=a||{},b=f(b);var p=a.xhr||null;p||(p=a.cors||a.useXDR?new j:new i);var q,r=p.url=a.uri||a.url,s=p.method=a.method||"GET",t=a.body||a.data,u=p.headers=a.headers||{},v=!!a.sync,w=!1,x=a.response?m:n;if("json"in a&&(w=!0,u.Accept="application/json","GET"!==s&&"HEAD"!==s&&(u["Content-Type"]="application/json",t=JSON.stringify(a.json))),p.onreadystatechange=c,p.onload=x,p.onerror=o,p.onprogress=function(){},p.ontimeout=d,p.open(s,r,!v),(a.withCredentials||a.cors&&a.withCredentials!==!1)&&(p.withCredentials=!0),v||(p.timeout="timeout"in a?a.timeout:5e3),p.setRequestHeader)for(q in u)u.hasOwnProperty(q)&&p.setRequestHeader(q,u[q]);else if(a.headers)throw new Error("Headers cannot be set on an XDomainRequest object");return"responseType"in a&&(p.responseType=a.responseType),"beforeSend"in a&&"function"==typeof a.beforeSend&&a.beforeSend(p),p.send(t),p}function d(){}var e=a("global/window"),f=a("once"),g=a("parse-headers"),h={0:"Internal XMLHttpRequest Error",4:"4xx Client Error",5:"5xx Server Error"},i=e.XMLHttpRequest||d,j="withCredentials"in new i?i:e.XDomainRequest;b.exports=c},{"global/window":14,once:15,"parse-headers":19}],14:[function(a,b){(function(a){b.exports="undefined"!=typeof window?window:"undefined"!=typeof a?a:"undefined"!=typeof self?self:{}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],15:[function(a,b){function c(a){var b=!1;return function(){return b?void 0:(b=!0,a.apply(this,arguments))}}b.exports=c,c.proto=c(function(){Object.defineProperty(Function.prototype,"once",{value:function(){return c(this)},configurable:!0})})},{}],16:[function(a,b){function c(a,b,c){if(!g(b))throw new TypeError("iterator must be a function");arguments.length<3&&(c=this),"[object Array]"===h.call(a)?d(a,b,c):"string"==typeof a?e(a,b,c):f(a,b,c)}function d(a,b,c){for(var d=0,e=a.length;e>d;d++)i.call(a,d)&&b.call(c,a[d],d,a)}function e(a,b,c){for(var d=0,e=a.length;e>d;d++)b.call(c,a.charAt(d),d,a)}function f(a,b,c){for(var d in a)i.call(a,d)&&b.call(c,a[d],d,a)}var g=a("is-function");b.exports=c;var h=Object.prototype.toString,i=Object.prototype.hasOwnProperty},{"is-function":17}],17:[function(a,b){function c(a){var b=d.call(a);return"[object Function]"===b||"function"==typeof a&&"[object RegExp]"!==b||"undefined"!=typeof window&&(a===window.setTimeout||a===window.alert||a===window.confirm||a===window.prompt)}b.exports=c;var d=Object.prototype.toString},{}],18:[function(a,b,c){function d(a){return a.replace(/^\s*|\s*$/g,"")}c=b.exports=d,c.left=function(a){return a.replace(/^\s*/,"")},c.right=function(a){return a.replace(/\s*$/,"")}},{}],19:[function(a,b){var c=a("trim"),d=a("for-each"),e=function(a){return"[object Array]"===Object.prototype.toString.call(a)};b.exports=function(a){if(!a)return{};
|
17
17
|
|
18
|
-
var b={};return d(c(a).split("\n"),function(a){var d=a.indexOf(":"),f=c(a.slice(0,d)).toLowerCase(),g=c(a.slice(d+1));"undefined"==typeof b[f]?b[f]=g:e(b[f])?b[f].push(g):b[f]=[b[f],g]}),b}},{"for-each":16,trim:18}],20:[function(a,b){b.exports=a("./jquery.browser")},{"./jquery.browser":21}],21:[function(a,b){var c,d,e=function(a){a=a.toLowerCase();var b=/(opr)[\/]([\w.]+)/.exec(a)||/(chrome)[ \/]([\w.]+)/.exec(a)||/(version)[ \/]([\w.]+).*(safari)[ \/]([\w.]+)/.exec(a)||/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||a.indexOf("trident")>=0&&/(rv)(?::| )([\w.]+)/.exec(a)||a.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(a)||[],c=/(ipad)/.exec(a)||/(iphone)/.exec(a)||/(android)/.exec(a)||/(windows phone)/.exec(a)||/(win)/.exec(a)||/(mac)/.exec(a)||/(linux)/.exec(a)||/(cros)/i.exec(a)||[];return{browser:b[3]||b[1]||"",version:b[2]||"0",platform:c[0]||""}};if(c=e(window.navigator.userAgent),d={},d.uaMatch=e,c.browser&&(d[c.browser]=!0,d.version=c.version,d.versionNumber=parseInt(c.version)),c.platform&&(d[c.platform]=!0),(d.android||d.ipad||d.iphone||d["windows phone"])&&(d.mobile=!0),(d.cros||d.mac||d.linux||d.win)&&(d.desktop=!0),(d.chrome||d.opr||d.safari)&&(d.webkit=!0),d.rv){var f="msie";c.browser=f,d[f]=!0}if(d.opr){var g="opera";c.browser=g,d[g]=!0}if(d.safari&&d.android){var h="android";c.browser=h,d[h]=!0}d.name=c.browser,d.platform=c.platform,b.exports=d},{}],22:[function(a,b){(function(a){function c(a,b,c){for(;b&&b!==Object.prototype&&(Object.getOwnPropertyNames(b).forEach(function(c){if(".class"!=c&&!a.hasOwnProperty(c)){var d=Object.getOwnPropertyDescriptor(b,c);Object.defineProperty(a,c,d)}}),!c);)b=b.__proto__;return a}function d(a,b){for(;a;){if(a.type.prototype===b.prototype)return!0;for(var c in a["implements"]){var e=a["implements"][c],f=e[".class.meta"];if(f){if(d(f,b))return!0}else for(var g=e.prototype;g;g=g.__proto__)if(g===b.prototype)return!0}a=a.base?a.base[".class.meta"]:void 0}return!1}var e=function(a,b,c){"function"!=typeof a&&(c=b,b=a,a=Object),b||(b={}),c||(c={});var d={name:c.name,base:a,"implements":[]},f=e.clone(b);c["implements"]&&(Array.isArray(c["implements"])?c["implements"]:[c["implements"]]).forEach(function(a){"function"==typeof a&&a.prototype&&(d["implements"].push(a),e.extend(f,a.prototype))}),f.__proto__=a.prototype;var g=function(){"function"==typeof this.constructor&&this.constructor.apply(this,arguments)};return d.type=g,g.prototype=f,Object.defineProperty(g,".class.meta",{value:d,enumerable:!1,configurable:!1,writable:!1}),Object.defineProperty(f,".class",{value:g,enumerable:!1,configurable:!1,writable:!1}),c.statics&&e.extend(g,c.statics),g};e.extend=c,e.clone=function(a){return c({},a)};var f=e({constructor:function(a){this.object=a},typeOf:function(a){if(this.object instanceof a)return!0;var b=e.typeInfo(this.object);return b&&d(b,a)}});f.prototype.a=f.prototype.typeOf,f.prototype.an=f.prototype.typeOf,e.is=function(a){return new f(a)},e.typeInfo=function(a){var b=a.__proto__[".class"];return b?b[".class.meta"]:void 0},e.VERSION=[0,0,2],b?b.exports=e:a.Class=e}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],"biojs-io-fasta":[function(a,b){b.exports.parse=a("./parser"),b.exports.writer=a("./writer")},{"./parser":6,"./writer":9}],"biojs-vis-sequence":[function(a,b){b.exports=a("./lib/index")},{"./lib/index":1}]},{},["biojs-vis-sequence"]),$.webshims.polyfill("forms"),function(a){a.fn.disable=function(){return this.prop("disabled",!0).addClass("disabled")},a.fn.enable=function(){return this.prop("disabled",!1).removeClass("disabled")},a.fn.check=function(){return this.prop("checked",!0)},a.fn.uncheck=function(){return this.prop("checked",!1)},a.fn._tooltip=a.fn.tooltip,a.fn.tooltip=function(b){return this._tooltip("destroy")._tooltip(a.extend({container:"body",placement:"left"},b))},a.modalActive=function(){var b=!1;return a(".modal").each(function(){var c=a(this).data("bs.modal");return c?(b=c.isShown,!b):void 0}),b},a.fn.wiggle=function(){this.finish().effect("bounce",{direction:"left",distance:24,times:4},250)},a.fn.poll=function(){var a,b=this,c=null;return function d(){a=b.val(),a!=c&&(c=a,b.change()),setTimeout(d,100)}(),this}}(jQuery);var SS;SS||(SS={}),function(){SS.FASTA_FORMAT=/^>/,SS.decorate=function(a){return a.match(/(.?)(blast)(.?)/).slice(1).map(function(a){return a?"blast"!==a?"<strong>"+a+"</strong>":a:void 0}).join("")},SS.onedb=function(){var a=$(".databases input:checkbox");1===a.length&&a.check()},SS.generateGraphicalOverview=function(){$("[data-graphit='overview']").each(function(){var a=$(this),b=$("<div/>").addClass("graphical-overview");a.children().eq(1).children().eq(0).before(b),$.graphIt(a,b,0,20)})},SS.updateDownloadFastaOfAllLink=function(){var a=$(".hitn").length,b=$(".download-fasta-of-all");if(a>=1&&30>=a){var c=$(".hitn :checkbox").map(function(){return this.value}).get();return void b.enable().attr("href",SS.generateURI(c,b.data().databases)).tooltip({title:a+" hit(s)."})}0===a&&b.tooltip({title:"No hit to download."}),a>30&&b.tooltip({title:"Can't download more than 30 hits."}),b.disable().removeAttr("href")},SS.updateDownloadFastaOfSelectedLink=function(){var a=$(".hitn :checkbox:checked").length,b=$(".download-fasta-of-selected"),c=b.find("span");if(a>=1&&30>=a){var d=$(".hitn :checkbox:checked").map(function(){return this.value}).get();return void b.enable().attr("href",SS.generateURI(d,b.data().databases)).tooltip({title:a+" hit(s) selected."}).find("span").html(a)}0===a&&(c.empty(),b.tooltip({title:"No hit selected."})),a>30&&b.tooltip({title:"Can't download more than 30 hits."}),b.disable().removeAttr("href")},SS.updateSequenceViewerLinks=function(){var a=1e4;$(".view-sequence").each(function(){var b=$(this),c=b.closest(".hitn");c.data().hitLen>a&&b.disable().removeAttr("href").tooltip({title:"Sequence too long to show. Please view it locally after download."})})},SS.setupTooltips=function(){$(".pos-label").each(function(){$(this).tooltip({placement:"right"})}),$(".downloads a").each(function(){$(this).tooltip()})},SS.setupDownloadLinks=function(){$(".download").on("click",function(a){if(a.preventDefault(),a.stopPropagation(),!a.target.disabled){var b=this.href;$.get(b).done(function(){window.location.href=b}).fail(function(a){SS.showErrorModal(a,function(){})})}})},SS.generateURI=function(a,b){a=encodeURIComponent(a.join(" ")),b=encodeURIComponent(b);var c="get_sequence/?sequence_ids="+a+"&database_ids="+b+"&download=fasta";return c},SS.showErrorModal=function(a,b){setTimeout(function(){b(),a.responseText?$("#error").html(a.responseText).modal():$("#error-no-response").modal()},500)},SS.init=function(){this.$sequence=$("#sequence"),this.$sequenceFile=$("#sequence-file"),this.$sequenceControls=$(".sequence-controls"),SS.blast.init()}}(),SS.selectHit=function(a){if(a&&a.value){var b=$($(a).data("target"));a.checked?b.addClass("glow").find(":checkbox").not(a).check():b.removeClass("glow").find(":checkbox").not(a).uncheck(),this.updateDownloadFastaOfSelectedLink()}},SS.showSequenceViewer=function(){var a=$("#sequence-viewer"),b=$(".spinner",a),c=$(".modal-body",a),d=$(".modal-footer",a),e="biojs-vis-sequence",f=function(e){c.empty(),d.empty(),g(e),b.show(),a.modal("show")},g=function(a){var b=a.parent().clone(),c=b.find(".view-sequence"),e=$(c[0].nextSibling);c.remove(),e.remove(),d.empty().append(b)},h=function(a,b){a.forEach(j),b.forEach(i)},i=function(a){var b=a.id+"<small> "+a.title+"</small>",d=e+(new Date).getUTCMilliseconds();c.append($("<div/>").addClass("fastan").append($("<div/>").addClass("page-header").append($("<h4/>").html(b)),$("<div/>").attr("id",d).addClass(e).addClass("page-content")));var f=new Sequence({sequence:a.value,target:d,format:"PRIDE",columns:{size:40,spacedEach:5},formatOptions:{title:!1,footer:!1}});f.hideFormatSelector()},j=function(a){c.append($("<div/>").addClass("page-header").append($("<h4/>").html(a[0])),$("<div/>").addClass("page-content").append($("<pre/>").addClass("pre-reset").html(a[1])),$("<br>"))};return function(c){var d=$(c);f(d);var e=d.attr("href");$.getJSON(e).done(function(a){h(a.error_msgs,a.sequences),b.hide()}).fail(function(b){SS.showErrorModal(b,function(){a.modal("hide")})})}}(),$(document).ready(function(){SS.init();var a,b=$(".dnd-overlay"),c=$("#sequence"),d=function(a){$(".dnd-error").hide(),$("#"+a+"-notification").show(),b.effect("fade",2500)};$(document).on("dragenter",function(a){if(!$.modalActive){var d=a.originalEvent.dataTransfer,e=d.types&&(d.types.indexOf&&-1!=d.types.indexOf("Files")||d.types.contains&&d.types.contains("application/x-moz-file"));e&&($(".dnd-error").hide(),b.stop(!0,!0),b.show(),d.effectAllowed="copy",""===c.val()?($(".dnd-overlay-overwrite").hide(),$(".dnd-overlay-drop").show("drop",{direction:"down"},"fast")):($(".dnd-overlay-drop").hide(),$(".dnd-overlay-overwrite").show("drop",{direction:"down"},"fast")))}}).on("dragleave",".dnd-overlay",function(){b.hide(),$(".dnd-overlay-drop").hide(),$(".dnd-overlay-overwrite").hide()}).on("dragover",".dnd-overlay",function(a){a.originalEvent.dataTransfer.dropEffect="copy",a.preventDefault()}).on("drop",".dnd-overlay",function(a){a.preventDefault(),a.stopPropagation();var c=$("#sequence"),e=$("#sequence-file");c.focus();var f=a.originalEvent.dataTransfer.files;if(f.length>1)return void d("dnd-multi");var g=f[0];if(g.size>10485760)return void d("dnd-large-file");var h=new FileReader;h.onload=function(a){var f=a.target.result;SS.FASTA_FORMAT.test(f)?(c.val(f),e.text(g.name),b.hide()):d("dnd-format")},h.onerror=function(){d("dnd-format")},h.readAsText(g)}),SS.$sequence.change(function(){if(SS.$sequence.val()){var a=SS.$sequence[0].offsetWidth-SS.$sequence[0].clientWidth;SS.$sequenceControls.css("right",a+17),SS.$sequenceControls.removeClass("hidden")}else SS.$sequenceFile.empty(),SS.$sequenceControls.addClass("hidden"),SS.$sequence.parent().removeClass("has-error")}),$("#btn-sequence-clear").click(function(){$("#sequence").val("").focus()}),SS.onedb(),$("#methods").tooltip({title:function(){var a=$(".databases input:checkbox:checked");return 0===a.length?"You must select one or more databases above before you can run a search!":void 0}}),$("#method").tooltip({title:function(){var a="Click to BLAST or press Ctrl+Enter.";return 0!==$(this).siblings().length&&(a+=" Click dropdown button on the right for other BLAST algorithms that can be used."),a},delay:{show:1e3,hide:0}}),$(document).bind("keydown",function(a){a.ctrlKey&&13===a.keyCode&&!$("#method").is(":disabled")&&$("#method").trigger("submit")}),$("#sequence").on("sequence_type_changed",function(b,c){clearTimeout(a),$(this).parent().removeClass("has-error"),$(".notifications .active").hide().removeClass("active"),c&&($("#"+c+"-sequence-notification").show("drop",{direction:"up"}).addClass("active"),a=setTimeout(function(){$(".notifications .active").hide("drop",{direction:"up"}).removeClass("active")},5e3),"mixed"===c&&$(this).parent().addClass("has-error"))}),$("body").click(function(){$(".notifications .active").hide("drop",{direction:"up"}).removeClass("active")}),$(".databases").on("database_type_changed",function(a,b){switch(b){case"protein":$(".databases.nucleotide input:checkbox").disable(),$(".databases.nucleotide .checkbox").addClass("disabled");break;case"nucleotide":$(".databases.protein input:checkbox").disable(),$(".databases.protein .checkbox").addClass("disabled");break;default:$(".databases input:checkbox").enable(),$(".databases .checkbox").removeClass("disabled")}}),$("form").on("blast_method_changed",function(a,b){if($("#method").disable().val("").html("blast"),$("#methods").removeClass("input-group").children().not("#method").remove(),b.length>0){var c=b.shift();$("#method").enable().val(c).html(SS.decorate(c)),b.length>=1&&$("#methods").addClass("input-group").append($("<div/>").addClass("input-group-btn").append($("<button/>").attr("type","button").addClass("btn btn-primary dropdown-toggle").attr("data-toggle","dropdown").append($("<span/>").addClass("caret")),$("<ul/>").addClass("dropdown-menu dropdown-menu-right").append($.map(b,function(a){return $("<li/>").html(SS.decorate(a))})))),$("#methods").wiggle()}}),$(document).on("click","#methods .dropdown-menu li",function(){var a=$(this),b=$("#method"),c=b.text(),d=a.text();a.html(SS.decorate(c)),b.val(d).html(SS.decorate(d)),$("#methods").wiggle()}),$(".result").on("mousedown",".hitn > .page-header > h4",function(){var a=$(this);a.on("mouseup mousemove",function b(c){"mouseup"===c.type?(a.attr("data-toggle","collapse"),a.find(".fa-chevron-down").toggleClass("fa-rotate-270")):a.attr("data-toggle",""),a.off("mouseup mousemove",b)})}),$(".result").on("click",".view-sequence",function(a){a.preventDefault(),a.stopPropagation(),a.target.disabled||SS.showSequenceViewer(a.target)}),$(document).on("change",".hitn :checkbox",function(a){a.stopPropagation(),SS.selectHit(this)}),$("#blast").submit(function(){var a=$(this).attr("action"),b=a.indexOf("#"),c=a.slice(0,b),d=a.slice(b,a.length);location.hash="",$("#spinner").modal();var e=$(this).serialize()+"&method="+$("#method").val();return $.post(c,e).done(function(a){$(".result").html(a).show();var b=$(".sidebar");0!==b.length&&b.affix({offset:{top:b.offset().top}}).width(b.width()),location.hash=d,SS.generateGraphicalOverview(),SS.updateDownloadFastaOfAllLink(),SS.updateDownloadFastaOfSelectedLink(),SS.updateSequenceViewerLinks(),SS.setupTooltips(),SS.setupDownloadLinks(),$("body").scrollspy({target:".sidebar"}),$("#spinner").modal("hide")}).fail(function(a){SS.showErrorModal(a,function(){$("#spinner").modal("hide")})}),!1}),SS.$sequence.poll()}),function(a){var b=function(){a('[data-toggle="tooltip"]').tooltip({placement:"top",container:"body",html:"true","white-space":"nowrap"})},c=function(b){a("a",b).click(function(b){b.preventDefault(),b.stopPropagation(),window.location.hash=a(this).attr("href")})},d=function(b,c,d,e){var f=a(window).width(),g=_.debounce(function(){if(f!==a(window).width()){var g=b.find(".ghit > g").length;a.graphIt(b,c,g,d,e),f=a(window).width()}},125);a(window).resize(g)},e=function(c,d,e){var f,g,h,i,j=20,k=function(){f=c.data().hitCount,g=c.find(".ghit > g").length},l=function(b,c){c.append(a("<button/>").addClass("btn btn-link more").attr("type","button").attr("data-parent-query",b.attr("id")).html("View More ").append(a("<i/>").addClass("fa fa-angle-double-down")),a("<button/>").addClass("btn btn-link less").attr("type","button").attr("data-parent-query",b.attr("id")).html("View Less ").append(a("<i/>").addClass("fa fa-angle-double-up"))),h=a(".less",c),i=a(".more",c)},m=function(){k(),f===j||j>g?(h.hide(),i.hide()):g===f?(i.hide(),h.show()):g===j?(h.hide(),i.show()):(h.show(),i.show())};e===!0&&(l(c,d),m()),i.on("click",function(e){k(),a.graphIt(c,d,g,j),m(),b(),e.stopPropagation()}),h.on("click",function(e){k();var f=g-j;f>=j?(a.graphIt(c,d,g,-j),m()):0!==f&&(a.graphIt(c,d,g,j-g),m()),b(),e.stopPropagation()})},f=function(b,c,d){var e,f=[];return e=b.find(".hitn").slice(0,c+d),e.map(function(){var b=a(this),c=[];b.find(".hsp").each(function(){var b=[];b=a(this).data(),b.hspId=this.id,c.push(b)}),c.hitId=b.attr("id"),c.hitDef=b.data().hitDef,c.hitEvalue=b.data().hitEvalue,f.push(c)}),f},g=function(a,b,c,d){var e=a.append("g").attr("transform","translate(0,"+(d-b.margin-1.25*b.legend)+")");e.append("rect").attr("x",7*(c-2*b.margin)/10).attr("width",2*(c-4*b.margin)/10).attr("height",b.legend).attr("fill","url(#legend-grad)"),e.append("text").attr("transform","translate(0, "+b.legend+")").attr("x",6*(c-2*b.margin)/10-b.margin/2).text("Weaker hits"),e.append("text").attr("transform","translate(0, "+b.legend+")").attr("x",9*(c-2*b.margin)/10+b.margin/2).text("Stronger hits"),a.append("linearGradient").attr("id","legend-grad").selectAll("stop").data([{offset:"0%",color:"#ccc"},{offset:"50%",color:"#888"},{offset:"100%",color:"#000"}]).enter().append("stop").attr("offset",function(a){return a.offset}).attr("stop-color",function(a){return a.color})};a.extend({graphIt:function(h,i,j,k,l){var m={barHeight:4,barPadding:5,legend:10,margin:20},n=a.extend(m,l),o=f(h,j,k);if(o.length<1)return!1;0!==j&&i.find("svg").remove();var p=h.data().queryLen,q=h.attr("id"),r=i.width(),s=o.length*(n.barHeight+n.barPadding)+5*n.margin+3*n.legend,t=d3.select(i[0]).selectAll("svg").data([o]).enter().insert("svg",":first-child").attr("width",r).attr("height",s).append("g").attr("transform","translate("+n.margin/4+", "+n.margin/4+")"),u=d3.scale.linear().range([0,r-n.margin]);u.domain([1,p]);var v=u.ticks(11);v.pop();var w=d3.svg.axis().scale(u).orient("top").tickValues(v.concat([1,p]));t.append("g").attr("transform","translate(0, "+n.margin+")").append("g").attr("class","x axis").call(w);var x=d3.scale.ordinal().rangeBands([0,s-3*n.margin-2*n.legend],.3);x.domain(o.map(function(a){return a.hitId}));var y=d3.scale.log().domain([d3.min([1e-5,d3.min(o.map(function(a){return 0===parseFloat(a.hitEvalue)?void 0:a.hitEvalue}))]),d3.max(o.map(function(a){return a.hitEvalue}))]).range([40,150]);t.append("g").attr("class","ghit").attr("transform","translate(0, "+(2*n.margin-n.legend)+")").selectAll(".hits").data(o).enter().append("g").attr("data-toggle","tooltip").attr("title",function(a){var b=/(\d*\.\d*)e?([+-]\d*)?/,c=b.exec(a.hitEvalue),d=parseFloat(c[1]).toFixed(3),e=a.hitDef+"<br><strong>E value:</strong> "+d;return void 0!==c[2]&&(e+=" × 10<sup>"+c[2]+"</sup>"),e}).each(function(a,b){var c=b+1,d=a,e=a.hitId,f=a.length;d3.select(this).selectAll(".hsp").data(a).enter().append("a").each(function(a,b){var g=x(e)+n.barHeight/2,h=d3.rgb(y(d.hitEvalue),y(d.hitEvalue),y(d.hitEvalue));f>b+1&&(d[b].hspEnd<=d[b+1].hspStart?d3.select(this.parentNode).append("line").attr("x1",u(d[b].hspEnd)).attr("y1",g).attr("x2",u(d[b+1].hspStart)).attr("y2",g).attr("stroke",h):d[b].hspStart>d[b+1].hspEnd&&d3.select(this.parentNode).append("line").attr("x1",u(d[b+1].hspEnd)).attr("y1",g).attr("x2",u(d[b].hspStart)).attr("y2",g).attr("stroke",h)),d3.select(this).attr("xlink:href","#"+q+"_hit_"+c).append("rect").attr("x",function(a){return u(a.hspStart)}).attr("y",x(e)).attr("width",function(a){return u(a.hspEnd-a.hspStart+1)}).attr("height",n.barHeight).attr("fill",d3.rgb(h))})}),o.length>1&&g(t,n,r,s),0===j&&(e(h,i,!0),d(h,i,j,l)),b(),c(i)}})}(jQuery),SS.blast=function(){var a=function(a){if(a=a.replace(/[^A-Z]/gi,""),a=a.replace(/[NX]/gi,""),a.length<10)return void 0;var b,c,d;for(b=0,c=.9*a.length,d=0;d<a.length;d++)a[d].match(/[ACGTU]/i)&&(b+=1);return b>c?"nucleotide":"protein"},b=function(){var b,c,d,e=$("#sequence").val().split(/>.*/);for(d=0;d<e.length;d++)if(c=a(e[d]))if(b){if(c!==b)return"mixed"}else b=c;return b},c=function(){return $(".databases input:checked").data("type")},d=function(){return $("#sequence").val()&&$(".databases input:checked").val()?!0:!1},e=function(){var a,c;$("#sequence").change(function(){c=b(),c&&c===a||(a=c,$(this).trigger("sequence_type_changed",a))})},f=function(){var a,b=c();$(".databases input").change(function(){a=c(),a!=b&&(b=a,$(this).trigger("database_type_changed",b))})},g=function(){var a,b;$("#blast").on("sequence_type_changed database_type_changed",function(){b=h(),_.isEqual(b,a)||(a=b,$(this).trigger("blast_method_changed",[a.slice()]))})},h=function(){if(!d())return[];var a=c(),e=b();switch(a){case"protein":switch(e){case void 0:return["blastp","blastx"];case"protein":return["blastp"];case"nucleotide":return["blastx"]}break;case"nucleotide":switch(e){case void 0:return["tblastn","blastn","tblastx"];case"protein":return["tblastn"];case"nucleotide":return["blastn","tblastx"]}}return[]},i=function(){return void 0};return i.init=function(){e(),f(),g()},i}();
|
18
|
+
var b={};return d(c(a).split("\n"),function(a){var d=a.indexOf(":"),f=c(a.slice(0,d)).toLowerCase(),g=c(a.slice(d+1));"undefined"==typeof b[f]?b[f]=g:e(b[f])?b[f].push(g):b[f]=[b[f],g]}),b}},{"for-each":16,trim:18}],20:[function(a,b){b.exports=a("./jquery.browser")},{"./jquery.browser":21}],21:[function(a,b){var c,d,e=function(a){a=a.toLowerCase();var b=/(opr)[\/]([\w.]+)/.exec(a)||/(chrome)[ \/]([\w.]+)/.exec(a)||/(version)[ \/]([\w.]+).*(safari)[ \/]([\w.]+)/.exec(a)||/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||a.indexOf("trident")>=0&&/(rv)(?::| )([\w.]+)/.exec(a)||a.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(a)||[],c=/(ipad)/.exec(a)||/(iphone)/.exec(a)||/(android)/.exec(a)||/(windows phone)/.exec(a)||/(win)/.exec(a)||/(mac)/.exec(a)||/(linux)/.exec(a)||/(cros)/i.exec(a)||[];return{browser:b[3]||b[1]||"",version:b[2]||"0",platform:c[0]||""}};if(c=e(window.navigator.userAgent),d={},d.uaMatch=e,c.browser&&(d[c.browser]=!0,d.version=c.version,d.versionNumber=parseInt(c.version)),c.platform&&(d[c.platform]=!0),(d.android||d.ipad||d.iphone||d["windows phone"])&&(d.mobile=!0),(d.cros||d.mac||d.linux||d.win)&&(d.desktop=!0),(d.chrome||d.opr||d.safari)&&(d.webkit=!0),d.rv){var f="msie";c.browser=f,d[f]=!0}if(d.opr){var g="opera";c.browser=g,d[g]=!0}if(d.safari&&d.android){var h="android";c.browser=h,d[h]=!0}d.name=c.browser,d.platform=c.platform,b.exports=d},{}],22:[function(a,b){(function(a){function c(a,b,c){for(;b&&b!==Object.prototype&&(Object.getOwnPropertyNames(b).forEach(function(c){if(".class"!=c&&!a.hasOwnProperty(c)){var d=Object.getOwnPropertyDescriptor(b,c);Object.defineProperty(a,c,d)}}),!c);)b=b.__proto__;return a}function d(a,b){for(;a;){if(a.type.prototype===b.prototype)return!0;for(var c in a["implements"]){var e=a["implements"][c],f=e[".class.meta"];if(f){if(d(f,b))return!0}else for(var g=e.prototype;g;g=g.__proto__)if(g===b.prototype)return!0}a=a.base?a.base[".class.meta"]:void 0}return!1}var e=function(a,b,c){"function"!=typeof a&&(c=b,b=a,a=Object),b||(b={}),c||(c={});var d={name:c.name,base:a,"implements":[]},f=e.clone(b);c["implements"]&&(Array.isArray(c["implements"])?c["implements"]:[c["implements"]]).forEach(function(a){"function"==typeof a&&a.prototype&&(d["implements"].push(a),e.extend(f,a.prototype))}),f.__proto__=a.prototype;var g=function(){"function"==typeof this.constructor&&this.constructor.apply(this,arguments)};return d.type=g,g.prototype=f,Object.defineProperty(g,".class.meta",{value:d,enumerable:!1,configurable:!1,writable:!1}),Object.defineProperty(f,".class",{value:g,enumerable:!1,configurable:!1,writable:!1}),c.statics&&e.extend(g,c.statics),g};e.extend=c,e.clone=function(a){return c({},a)};var f=e({constructor:function(a){this.object=a},typeOf:function(a){if(this.object instanceof a)return!0;var b=e.typeInfo(this.object);return b&&d(b,a)}});f.prototype.a=f.prototype.typeOf,f.prototype.an=f.prototype.typeOf,e.is=function(a){return new f(a)},e.typeInfo=function(a){var b=a.__proto__[".class"];return b?b[".class.meta"]:void 0},e.VERSION=[0,0,2],b?b.exports=e:a.Class=e}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],"biojs-io-fasta":[function(a,b){b.exports.parse=a("./parser"),b.exports.writer=a("./writer")},{"./parser":6,"./writer":9}],"biojs-vis-sequence":[function(a,b){b.exports=a("./lib/index")},{"./lib/index":1}]},{},["biojs-vis-sequence"]),$.webshims.polyfill("forms"),function(a){a.fn.disable=function(){return this.prop("disabled",!0).addClass("disabled")},a.fn.enable=function(){return this.prop("disabled",!1).removeClass("disabled")},a.fn.check=function(){return this.prop("checked",!0)},a.fn.uncheck=function(){return this.prop("checked",!1)},a.fn._tooltip=a.fn.tooltip,a.fn.tooltip=function(b){return this._tooltip("destroy")._tooltip(a.extend({container:"body",placement:"left"},b))},a.modalActive=function(){var b=!1;return a(".modal").each(function(){var c=a(this).data("bs.modal");return c?(b=c.isShown,!b):void 0}),b},a.fn.wiggle=function(){this.finish().effect("bounce",{direction:"left",distance:24,times:4},250)},a.fn.poll=function(){var a,b=this,c=null;return function d(){a=b.val(),a!=c&&(c=a,b.change()),setTimeout(d,100)}(),this}}(jQuery);var SS;SS||(SS={}),function(){SS.FASTA_FORMAT=/^>/,SS.decorate=function(a){return a.match(/(.?)(blast)(.?)/).slice(1).map(function(a){return a?"blast"!==a?"<strong>"+a+"</strong>":a:void 0}).join("")},SS.onedb=function(){var a=$(".databases input:checkbox");1===a.length&&a.check()},SS.generateGraphicalOverview=function(){$("[data-graphit='overview']").each(function(){var a=$(this),b=$("<div/>").addClass("graphical-overview");a.children().eq(1).children().eq(0).before(b),$.graphIt(a,b,0,20)})},SS.updateDownloadFastaOfAllLink=function(){var a=$(".hitn").length,b=$(".download-fasta-of-all");if(a>=1&&30>=a){var c=$(".hitn :checkbox").map(function(){return this.value}).get();return void b.enable().attr("href",SS.generateURI(c,b.data().databases)).tooltip({title:a+" hit(s)."})}0===a&&b.tooltip({title:"No hit to download."}),a>30&&b.tooltip({title:"Can't download more than 30 hits."}),b.disable().removeAttr("href")},SS.updateDownloadFastaOfSelectedLink=function(){var a=$(".hitn :checkbox:checked").length,b=$(".download-fasta-of-selected"),c=b.find("span");if(a>=1&&30>=a){var d=$(".hitn :checkbox:checked").map(function(){return this.value}).get();return void b.enable().attr("href",SS.generateURI(d,b.data().databases)).tooltip({title:a+" hit(s) selected."}).find("span").html(a)}0===a&&(c.empty(),b.tooltip({title:"No hit selected."})),a>30&&b.tooltip({title:"Can't download more than 30 hits."}),b.disable().removeAttr("href")},SS.updateSequenceViewerLinks=function(){var a=1e4;$(".view-sequence").each(function(){var b=$(this),c=b.closest(".hitn");c.data().hitLen>a&&b.disable().removeAttr("href").tooltip({title:"Sequence too long to show. Please view it locally after download."})})},SS.setupTooltips=function(){$(".pos-label").each(function(){$(this).tooltip({placement:"right"})}),$(".downloads a").each(function(){$(this).tooltip()})},SS.setupDownloadLinks=function(){$(".download").on("click",function(a){if(a.preventDefault(),a.stopPropagation(),!a.target.disabled){var b=this.href;$.get(b).done(function(){window.location.href=b}).fail(function(a){SS.showErrorModal(a,function(){})})}})},SS.generateURI=function(a,b){a=encodeURIComponent(a.join(" ")),b=encodeURIComponent(b);var c="get_sequence/?sequence_ids="+a+"&database_ids="+b+"&download=fasta";return c},SS.showErrorModal=function(a,b){setTimeout(function(){b(),a.responseText?$("#error").html(a.responseText).modal():$("#error-no-response").modal()},500)},SS.init=function(){this.$sequence=$("#sequence"),this.$sequenceFile=$("#sequence-file"),this.$sequenceControls=$(".sequence-controls"),SS.blast.init()}}(),SS.selectHit=function(a){if(a&&a.value){var b=$($(a).data("target"));a.checked?b.addClass("glow").find(":checkbox").not(a).check():b.removeClass("glow").find(":checkbox").not(a).uncheck(),this.updateDownloadFastaOfSelectedLink()}},SS.showSequenceViewer=function(){var a=$("#sequence-viewer"),b=$(".spinner",a),c=$(".modal-body",a),d=$(".modal-footer",a),e="biojs-vis-sequence",f=function(e){c.empty(),d.empty(),g(e),b.show(),a.modal("show")},g=function(a){var b=a.parent().clone(),c=b.find(".view-sequence"),e=$(c[0].nextSibling);c.remove(),e.remove(),d.empty().append(b)},h=function(a,b){a.forEach(j),b.forEach(i)},i=function(a){var b=a.id+"<small> "+a.title+"</small>",d=e+(new Date).getUTCMilliseconds();c.append($("<div/>").addClass("fastan").append($("<div/>").addClass("page-header").append($("<h4/>").html(b)),$("<div/>").attr("id",d).addClass(e).addClass("page-content")));var f=new Sequence({sequence:a.value,target:d,format:"PRIDE",columns:{size:40,spacedEach:5},formatOptions:{title:!1,footer:!1}});f.hideFormatSelector()},j=function(a){c.append($("<div/>").addClass("page-header").append($("<h4/>").html(a[0])),$("<div/>").addClass("page-content").append($("<pre/>").addClass("pre-reset").html(a[1])),$("<br>"))};return function(c){var d=$(c);f(d);var e=d.attr("href");$.getJSON(e).done(function(a){h(a.error_msgs,a.sequences),b.hide()}).fail(function(b){SS.showErrorModal(b,function(){a.modal("hide")})})}}(),$(document).ready(function(){SS.init();var a,b=$(".dnd-overlay"),c=$("#sequence"),d=function(a){$(".dnd-error").hide(),$("#"+a+"-notification").show(),b.effect("fade",2500)};$(document).on("dragenter",function(a){if(!$.modalActive()){var d=a.originalEvent.dataTransfer,e=d.types&&(d.types.indexOf&&-1!=d.types.indexOf("Files")||d.types.contains&&d.types.contains("application/x-moz-file"));e&&($(".dnd-error").hide(),b.stop(!0,!0),b.show(),d.effectAllowed="copy",""===c.val()?($(".dnd-overlay-overwrite").hide(),$(".dnd-overlay-drop").show("drop",{direction:"down"},"fast")):($(".dnd-overlay-drop").hide(),$(".dnd-overlay-overwrite").show("drop",{direction:"down"},"fast")))}}).on("dragleave",".dnd-overlay",function(){b.hide(),$(".dnd-overlay-drop").hide(),$(".dnd-overlay-overwrite").hide()}).on("dragover",".dnd-overlay",function(a){a.originalEvent.dataTransfer.dropEffect="copy",a.preventDefault()}).on("drop",".dnd-overlay",function(a){a.preventDefault(),a.stopPropagation();var c=$("#sequence"),e=$("#sequence-file");c.focus();var f=a.originalEvent.dataTransfer.files;if(f.length>1)return void d("dnd-multi");var g=f[0];if(g.size>10485760)return void d("dnd-large-file");var h=new FileReader;h.onload=function(a){var f=a.target.result;SS.FASTA_FORMAT.test(f)?(c.val(f),e.text(g.name),b.hide()):d("dnd-format")},h.onerror=function(){d("dnd-format")},h.readAsText(g)}),SS.$sequence.change(function(){if(SS.$sequence.val()){var a=SS.$sequence[0].offsetWidth-SS.$sequence[0].clientWidth;SS.$sequenceControls.css("right",a+17),SS.$sequenceControls.removeClass("hidden")}else SS.$sequenceFile.empty(),SS.$sequenceControls.addClass("hidden"),SS.$sequence.parent().removeClass("has-error")}),$("#btn-sequence-clear").click(function(){$("#sequence").val("").focus()}),SS.onedb(),$("#methods").tooltip({title:function(){var a=$(".databases input:checkbox:checked");return 0===a.length?"You must select one or more databases above before you can run a search!":void 0}}),$("#method").tooltip({title:function(){var a="Click to BLAST or press Ctrl+Enter.";return 0!==$(this).siblings().length&&(a+=" Click dropdown button on the right for other BLAST algorithms that can be used."),a},delay:{show:1e3,hide:0}}),$(document).bind("keydown",function(a){a.ctrlKey&&13===a.keyCode&&!$("#method").is(":disabled")&&$("#method").trigger("submit")}),$("#sequence").on("sequence_type_changed",function(b,c){clearTimeout(a),$(this).parent().removeClass("has-error"),$(".notifications .active").hide().removeClass("active"),c&&($("#"+c+"-sequence-notification").show("drop",{direction:"up"}).addClass("active"),a=setTimeout(function(){$(".notifications .active").hide("drop",{direction:"up"}).removeClass("active")},5e3),"mixed"===c&&$(this).parent().addClass("has-error"))}),$("body").click(function(){$(".notifications .active").hide("drop",{direction:"up"}).removeClass("active")}),$(".databases").on("database_type_changed",function(a,b){switch(b){case"protein":$(".databases.nucleotide input:checkbox").disable(),$(".databases.nucleotide .checkbox").addClass("disabled");break;case"nucleotide":$(".databases.protein input:checkbox").disable(),$(".databases.protein .checkbox").addClass("disabled");break;default:$(".databases input:checkbox").enable(),$(".databases .checkbox").removeClass("disabled")}}),$("form").on("blast_method_changed",function(a,b){if($("#method").disable().val("").html("blast"),$("#methods").removeClass("input-group").children().not("#method").remove(),b.length>0){var c=b.shift();$("#method").enable().val(c).html(SS.decorate(c)),b.length>=1&&$("#methods").addClass("input-group").append($("<div/>").addClass("input-group-btn").append($("<button/>").attr("type","button").addClass("btn btn-primary dropdown-toggle").attr("data-toggle","dropdown").append($("<span/>").addClass("caret")),$("<ul/>").addClass("dropdown-menu dropdown-menu-right").append($.map(b,function(a){return $("<li/>").html(SS.decorate(a))})))),$("#methods").wiggle()}}),$(document).on("click","#methods .dropdown-menu li",function(){var a=$(this),b=$("#method"),c=b.text(),d=a.text();a.html(SS.decorate(c)),b.val(d).html(SS.decorate(d)),$("#methods").wiggle()}),$(".result").on("mousedown",".hitn > .page-header > h4",function(){var a=$(this);a.on("mouseup mousemove",function b(c){"mouseup"===c.type?(a.attr("data-toggle","collapse"),a.find(".fa-chevron-down").toggleClass("fa-rotate-270")):a.attr("data-toggle",""),a.off("mouseup mousemove",b)})}),$(".result").on("click",".view-sequence",function(a){a.preventDefault(),a.stopPropagation(),a.target.disabled||SS.showSequenceViewer(a.target)}),$(document).on("change",".hitn :checkbox",function(a){a.stopPropagation(),SS.selectHit(this)}),$("#blast").submit(function(){var a=$(this).attr("action"),b=a.indexOf("#"),c=a.slice(0,b),d=a.slice(b,a.length);location.hash="",$("#spinner").modal();var e=$(this).serialize()+"&method="+$("#method").val();return $.post(c,e).done(function(a){$(".result").html(a).show();var b=$(".sidebar");0!==b.length&&b.affix({offset:{top:b.offset().top}}).width(b.width()),location.hash=d,SS.generateGraphicalOverview(),SS.updateDownloadFastaOfAllLink(),SS.updateDownloadFastaOfSelectedLink(),SS.updateSequenceViewerLinks(),SS.setupTooltips(),SS.setupDownloadLinks(),$("body").scrollspy({target:".sidebar"}),$("#spinner").modal("hide")}).fail(function(a){SS.showErrorModal(a,function(){$("#spinner").modal("hide")})}),!1}),SS.$sequence.poll()}),function(a){var b=function(){a('[data-toggle="tooltip"]').tooltip({placement:"top",container:"body",html:"true","white-space":"nowrap"})},c=function(b){a("a",b).click(function(b){b.preventDefault(),b.stopPropagation(),window.location.hash=a(this).attr("href")})},d=function(b,c,d,e){var f=a(window).width(),g=_.debounce(function(){if(f!==a(window).width()){var g=b.find(".ghit > g").length;a.graphIt(b,c,g,d,e),f=a(window).width()}},125);a(window).resize(g)},e=function(c,d,e){var f,g,h,i,j=20,k=function(){f=c.data().hitCount,g=c.find(".ghit > g").length},l=function(b,c){c.append(a("<button/>").addClass("btn btn-link more").attr("type","button").attr("data-parent-query",b.attr("id")).html("View More ").append(a("<i/>").addClass("fa fa-angle-double-down")),a("<button/>").addClass("btn btn-link less").attr("type","button").attr("data-parent-query",b.attr("id")).html("View Less ").append(a("<i/>").addClass("fa fa-angle-double-up"))),h=a(".less",c),i=a(".more",c)},m=function(){k(),f===j||j>g?(h.hide(),i.hide()):g===f?(i.hide(),h.show()):g===j?(h.hide(),i.show()):(h.show(),i.show())};e===!0&&(l(c,d),m()),i.on("click",function(e){k(),a.graphIt(c,d,g,j),m(),b(),e.stopPropagation()}),h.on("click",function(e){k();var f=g-j;f>=j?(a.graphIt(c,d,g,-j),m()):0!==f&&(a.graphIt(c,d,g,j-g),m()),b(),e.stopPropagation()})},f=function(b,c,d){var e,f=[];return e=b.find(".hitn").slice(0,c+d),e.map(function(){var b=a(this),c=[];b.find(".hsp").each(function(){var b=[];b=a(this).data(),b.hspId=this.id,c.push(b)}),c.hitId=b.attr("id"),c.hitDef=b.data().hitDef,c.hitEvalue=b.data().hitEvalue,f.push(c)}),f},g=function(a,b,c,d){var e=a.append("g").attr("transform","translate(0,"+(d-b.margin-1.25*b.legend)+")");e.append("rect").attr("x",7*(c-2*b.margin)/10).attr("width",2*(c-4*b.margin)/10).attr("height",b.legend).attr("fill","url(#legend-grad)"),e.append("text").attr("transform","translate(0, "+b.legend+")").attr("x",6*(c-2*b.margin)/10-b.margin/2).text("Weaker hits"),e.append("text").attr("transform","translate(0, "+b.legend+")").attr("x",9*(c-2*b.margin)/10+b.margin/2).text("Stronger hits"),a.append("linearGradient").attr("id","legend-grad").selectAll("stop").data([{offset:"0%",color:"#ccc"},{offset:"50%",color:"#888"},{offset:"100%",color:"#000"}]).enter().append("stop").attr("offset",function(a){return a.offset}).attr("stop-color",function(a){return a.color})};a.extend({graphIt:function(h,i,j,k,l){var m={barHeight:4,barPadding:5,legend:10,margin:20},n=a.extend(m,l),o=f(h,j,k);if(o.length<1)return!1;0!==j&&i.find("svg").remove();var p=h.data().queryLen,q=h.attr("id"),r=i.width(),s=o.length*(n.barHeight+n.barPadding)+5*n.margin+3*n.legend,t=d3.select(i[0]).selectAll("svg").data([o]).enter().insert("svg",":first-child").attr("width",r).attr("height",s).append("g").attr("transform","translate("+n.margin/4+", "+n.margin/4+")"),u=d3.scale.linear().range([0,r-n.margin]);u.domain([1,p]);var v=u.ticks(11);v.pop();var w=d3.svg.axis().scale(u).orient("top").tickValues(v.concat([1,p]));t.append("g").attr("transform","translate(0, "+n.margin+")").append("g").attr("class","x axis").call(w);var x=d3.scale.ordinal().rangeBands([0,s-3*n.margin-2*n.legend],.3);x.domain(o.map(function(a){return a.hitId}));var y=d3.scale.log().domain([d3.min([1e-5,d3.min(o.map(function(a){return 0===parseFloat(a.hitEvalue)?void 0:a.hitEvalue}))]),d3.max(o.map(function(a){return a.hitEvalue}))]).range([40,150]);t.append("g").attr("class","ghit").attr("transform","translate(0, "+(2*n.margin-n.legend)+")").selectAll(".hits").data(o).enter().append("g").attr("data-toggle","tooltip").attr("title",function(a){var b=/(\d*\.\d*)e?([+-]\d*)?/,c=b.exec(a.hitEvalue),d=parseFloat(c[1]).toFixed(3),e=a.hitDef+"<br><strong>E value:</strong> "+d;return void 0!==c[2]&&(e+=" × 10<sup>"+c[2]+"</sup>"),e}).each(function(a,b){var c=b+1,d=a,e=a.hitId,f=a.length;d3.select(this).selectAll(".hsp").data(a).enter().append("a").each(function(a,b){var g=x(e)+n.barHeight/2,h=d3.rgb(y(d.hitEvalue),y(d.hitEvalue),y(d.hitEvalue));f>b+1&&(d[b].hspEnd<=d[b+1].hspStart?d3.select(this.parentNode).append("line").attr("x1",u(d[b].hspEnd)).attr("y1",g).attr("x2",u(d[b+1].hspStart)).attr("y2",g).attr("stroke",h):d[b].hspStart>d[b+1].hspEnd&&d3.select(this.parentNode).append("line").attr("x1",u(d[b+1].hspEnd)).attr("y1",g).attr("x2",u(d[b].hspStart)).attr("y2",g).attr("stroke",h)),d3.select(this).attr("xlink:href","#"+q+"_hit_"+c).append("rect").attr("x",function(a){return u(a.hspStart)}).attr("y",x(e)).attr("width",function(a){return u(a.hspEnd-a.hspStart+1)}).attr("height",n.barHeight).attr("fill",d3.rgb(h))})}),o.length>1&&g(t,n,r,s),0===j&&(e(h,i,!0),d(h,i,j,l)),b(),c(i)}})}(jQuery),SS.blast=function(){var a=function(a){if(a=a.replace(/[^A-Z]/gi,""),a=a.replace(/[NX]/gi,""),a.length<10)return void 0;var b,c,d;for(b=0,c=.9*a.length,d=0;d<a.length;d++)a[d].match(/[ACGTU]/i)&&(b+=1);return b>c?"nucleotide":"protein"},b=function(){var b,c,d,e=$("#sequence").val().split(/>.*/);for(d=0;d<e.length;d++)if(c=a(e[d]))if(b){if(c!==b)return"mixed"}else b=c;return b},c=function(){return $(".databases input:checked").data("type")},d=function(){return $("#sequence").val()&&$(".databases input:checked").val()?!0:!1},e=function(){var a,c;$("#sequence").change(function(){c=b(),c&&c===a||(a=c,$(this).trigger("sequence_type_changed",a))})},f=function(){var a,b=c();$(".databases input").change(function(){a=c(),a!=b&&(b=a,$(this).trigger("database_type_changed",b))})},g=function(){var a,b;$("#blast").on("sequence_type_changed database_type_changed",function(){b=h(),_.isEqual(b,a)||(a=b,$(this).trigger("blast_method_changed",[a.slice()]))})},h=function(){if(!d())return[];var a=c(),e=b();switch(a){case"protein":switch(e){case void 0:return["blastp","blastx"];case"protein":return["blastp"];case"nucleotide":return["blastx"]}break;case"nucleotide":switch(e){case void 0:return["tblastn","blastn","tblastx"];case"protein":return["tblastn"];case"nucleotide":return["blastn","tblastx"]}}return[]},i=function(){return void 0};return i.init=function(){e(),f(),g()},i}();
|
Binary file
|
data/public/js/sequenceserver.js
CHANGED
@@ -479,7 +479,7 @@ $(document).ready(function(){
|
|
479
479
|
$(document)
|
480
480
|
.on('dragenter', function (evt) {
|
481
481
|
// Do not activate DnD if a modal is active.
|
482
|
-
if ($.modalActive) return;
|
482
|
+
if ($.modalActive()) return;
|
483
483
|
|
484
484
|
// Based on http://stackoverflow.com/a/8494918/1205465.
|
485
485
|
// Contrary to what the above link says, the snippet below can't
|
data/sequenceserver.gemspec
CHANGED
@@ -25,7 +25,7 @@ DESC
|
|
25
25
|
s.add_development_dependency('rack-test', '~> 0.6', '>= 0.6.2')
|
26
26
|
s.add_development_dependency('rspec', '~> 2.8', '>= 2.8.0')
|
27
27
|
s.add_development_dependency('rake', '~> 10.3', '>= 10.3.2')
|
28
|
-
s.add_development_dependency('rubocop', '~> 0.
|
28
|
+
s.add_development_dependency('rubocop', '~> 0.31', '>= 0.31.0')
|
29
29
|
s.add_development_dependency('capybara', '~> 2.4', '>= 2.4.4')
|
30
30
|
s.add_development_dependency('capybara-webkit', '~> 1.3', '>= 1.3.0')
|
31
31
|
s.add_development_dependency('codeclimate-test-reporter',
|
data/views/result.erb
CHANGED
@@ -42,6 +42,7 @@
|
|
42
42
|
<th>Sequences producing significant alignments</th>
|
43
43
|
<th class="text-right"> Total score </th>
|
44
44
|
<th class="text-right"> E value </th>
|
45
|
+
<th class="text-right"> Length </th>
|
45
46
|
</thead>
|
46
47
|
<tbody>
|
47
48
|
<% query.hits.each_with_index do |hit, h| %>
|
@@ -50,6 +51,7 @@
|
|
50
51
|
<td> <a href="<%="#Query_#{query.number}_hit_#{hit.number}"%>"><%= "#{hit.id}" %></a> </td>
|
51
52
|
<td class="text-right"><%= prettify hit.score %></td>
|
52
53
|
<td class="text-right"><%= prettify hit.evalue %></td>
|
54
|
+
<td class="text-right"><%= prettify hit.length %></td>
|
53
55
|
</tr>
|
54
56
|
<% end %>
|
55
57
|
</tbody>
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sequenceserver
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Anurag Priyam
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2015-05-
|
14
|
+
date: 2015-05-18 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: sinatra
|
@@ -159,20 +159,20 @@ dependencies:
|
|
159
159
|
requirements:
|
160
160
|
- - "~>"
|
161
161
|
- !ruby/object:Gem::Version
|
162
|
-
version: '0.
|
162
|
+
version: '0.31'
|
163
163
|
- - ">="
|
164
164
|
- !ruby/object:Gem::Version
|
165
|
-
version: 0.
|
165
|
+
version: 0.31.0
|
166
166
|
type: :development
|
167
167
|
prerelease: false
|
168
168
|
version_requirements: !ruby/object:Gem::Requirement
|
169
169
|
requirements:
|
170
170
|
- - "~>"
|
171
171
|
- !ruby/object:Gem::Version
|
172
|
-
version: '0.
|
172
|
+
version: '0.31'
|
173
173
|
- - ">="
|
174
174
|
- !ruby/object:Gem::Version
|
175
|
-
version: 0.
|
175
|
+
version: 0.31.0
|
176
176
|
- !ruby/object:Gem::Dependency
|
177
177
|
name: capybara
|
178
178
|
requirement: !ruby/object:Gem::Requirement
|
@@ -689,3 +689,4 @@ signing_key:
|
|
689
689
|
specification_version: 4
|
690
690
|
summary: BLAST search made easy!
|
691
691
|
test_files: []
|
692
|
+
has_rdoc:
|