annotate test-data/test3_report.html @ 0:5367786dc871 draft default tip

Uploaded
author greg
date Tue, 14 Mar 2023 15:21:14 +0000
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
5367786dc871 Uploaded
greg
parents:
diff changeset
1 <!DOCTYPE html>
5367786dc871 Uploaded
greg
parents:
diff changeset
2 <html lang="en">
5367786dc871 Uploaded
greg
parents:
diff changeset
3 <head>
5367786dc871 Uploaded
greg
parents:
diff changeset
4 <meta http-equiv="Content-Type" content="text/html;charset=utf-8" >
5367786dc871 Uploaded
greg
parents:
diff changeset
5
5367786dc871 Uploaded
greg
parents:
diff changeset
6 <style rel="stylesheet">
5367786dc871 Uploaded
greg
parents:
diff changeset
7 /*!
5367786dc871 Uploaded
greg
parents:
diff changeset
8 * Bootstrap v2.0.4
5367786dc871 Uploaded
greg
parents:
diff changeset
9 *
5367786dc871 Uploaded
greg
parents:
diff changeset
10 * Copyright 2012 Twitter, Inc
5367786dc871 Uploaded
greg
parents:
diff changeset
11 * Licensed under the Apache License v2.0
5367786dc871 Uploaded
greg
parents:
diff changeset
12 * http://www.apache.org/licenses/LICENSE-2.0
5367786dc871 Uploaded
greg
parents:
diff changeset
13 *
5367786dc871 Uploaded
greg
parents:
diff changeset
14 * Designed and built with all the love in the world @twitter by @mdo and @fat.
5367786dc871 Uploaded
greg
parents:
diff changeset
15 */
5367786dc871 Uploaded
greg
parents:
diff changeset
16 .clearfix{*zoom:1;}.clearfix:before,.clearfix:after{display:table;content:"";}
5367786dc871 Uploaded
greg
parents:
diff changeset
17 .clearfix:after{clear:both;}
5367786dc871 Uploaded
greg
parents:
diff changeset
18 .hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0;}
5367786dc871 Uploaded
greg
parents:
diff changeset
19 .input-block-level{display:block;width:100%;min-height:28px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;}
5367786dc871 Uploaded
greg
parents:
diff changeset
20 .tooltip{position:absolute;z-index:1020;display:block;visibility:visible;padding:5px;font-size:11px;opacity:0;filter:alpha(opacity=0);}.tooltip.in{opacity:0.8;filter:alpha(opacity=80);}
5367786dc871 Uploaded
greg
parents:
diff changeset
21 .tooltip.top{margin-top:-2px;}
5367786dc871 Uploaded
greg
parents:
diff changeset
22 .tooltip.right{margin-left:2px;}
5367786dc871 Uploaded
greg
parents:
diff changeset
23 .tooltip.bottom{margin-top:2px;}
5367786dc871 Uploaded
greg
parents:
diff changeset
24 .tooltip.left{margin-left:-2px;}
5367786dc871 Uploaded
greg
parents:
diff changeset
25 .tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid #000000;}
5367786dc871 Uploaded
greg
parents:
diff changeset
26 .tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:5px solid #000000;}
5367786dc871 Uploaded
greg
parents:
diff changeset
27 .tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-bottom:5px solid #000000;}
5367786dc871 Uploaded
greg
parents:
diff changeset
28 .tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-right:5px solid #000000;}
5367786dc871 Uploaded
greg
parents:
diff changeset
29 .tooltip-inner{max-width:200px;padding:3px 8px;color:#ffffff;text-align:center;text-decoration:none;background-color:#000000;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}
5367786dc871 Uploaded
greg
parents:
diff changeset
30 .tooltip-arrow{position:absolute;width:0;height:0;}
5367786dc871 Uploaded
greg
parents:
diff changeset
31
5367786dc871 Uploaded
greg
parents:
diff changeset
32 </style>
5367786dc871 Uploaded
greg
parents:
diff changeset
33
5367786dc871 Uploaded
greg
parents:
diff changeset
34 <style rel="stylesheet">
5367786dc871 Uploaded
greg
parents:
diff changeset
35 /* Main things */
5367786dc871 Uploaded
greg
parents:
diff changeset
36 html, body, div, span, h1, h3, h4, h5, h6, blockquote, pre,
5367786dc871 Uploaded
greg
parents:
diff changeset
37 em, sub, sup, dl, dt, dd, ol, ul, li,
5367786dc871 Uploaded
greg
parents:
diff changeset
38 fieldset, form, label,
5367786dc871 Uploaded
greg
parents:
diff changeset
39 table, caption, tbody, tfoot, thead,
5367786dc871 Uploaded
greg
parents:
diff changeset
40 article, aside, canvas, details, figure, figcaption, footer, header, hgroup,
5367786dc871 Uploaded
greg
parents:
diff changeset
41 menu, nav, output, section, time {
5367786dc871 Uploaded
greg
parents:
diff changeset
42 margin: 0;
5367786dc871 Uploaded
greg
parents:
diff changeset
43 padding: 0;
5367786dc871 Uploaded
greg
parents:
diff changeset
44 border: 0;
5367786dc871 Uploaded
greg
parents:
diff changeset
45 font-size: 100%;
5367786dc871 Uploaded
greg
parents:
diff changeset
46 font: inherit;
5367786dc871 Uploaded
greg
parents:
diff changeset
47 vertical-align: baseline;
5367786dc871 Uploaded
greg
parents:
diff changeset
48 }
5367786dc871 Uploaded
greg
parents:
diff changeset
49 body {
5367786dc871 Uploaded
greg
parents:
diff changeset
50 margin: 0;
5367786dc871 Uploaded
greg
parents:
diff changeset
51 font-family: Lucida Grande, Verdana, Arial, sans-serif;
5367786dc871 Uploaded
greg
parents:
diff changeset
52 font-size: 12px;
5367786dc871 Uploaded
greg
parents:
diff changeset
53 color: black;
5367786dc871 Uploaded
greg
parents:
diff changeset
54 padding-bottom: 30px;
5367786dc871 Uploaded
greg
parents:
diff changeset
55 }
5367786dc871 Uploaded
greg
parents:
diff changeset
56 a {
5367786dc871 Uploaded
greg
parents:
diff changeset
57 text-decoration: none;
5367786dc871 Uploaded
greg
parents:
diff changeset
58 /*color: #0c4f72;*/
5367786dc871 Uploaded
greg
parents:
diff changeset
59 color: #0077B5;
5367786dc871 Uploaded
greg
parents:
diff changeset
60 border-bottom: 1px solid #487b95;
5367786dc871 Uploaded
greg
parents:
diff changeset
61 border-color: #487b95; /* #487b95 */
5367786dc871 Uploaded
greg
parents:
diff changeset
62 border-color: rgba(12, 79, 114, 0.2); /* #0c4f72; */ /* #a0d2eb; */ /*rgba(0, 88, cc, 0.3);*/
5367786dc871 Uploaded
greg
parents:
diff changeset
63 }
5367786dc871 Uploaded
greg
parents:
diff changeset
64 a:visited {
5367786dc871 Uploaded
greg
parents:
diff changeset
65 text-decoration: none;
5367786dc871 Uploaded
greg
parents:
diff changeset
66 color: #8C66B2;
5367786dc871 Uploaded
greg
parents:
diff changeset
67 border-bottom: 1px solid #8c66b2;
5367786dc871 Uploaded
greg
parents:
diff changeset
68 border-color: #8c66b2;
5367786dc871 Uploaded
greg
parents:
diff changeset
69 border-color: rgba(102, 51, 153, 0.2);
5367786dc871 Uploaded
greg
parents:
diff changeset
70 }
5367786dc871 Uploaded
greg
parents:
diff changeset
71 a:hover {
5367786dc871 Uploaded
greg
parents:
diff changeset
72 text-decoration: none;
5367786dc871 Uploaded
greg
parents:
diff changeset
73 color: #b33; /* #0088cc; */
5367786dc871 Uploaded
greg
parents:
diff changeset
74 border-bottom: 1px solid #ffcccc;
5367786dc871 Uploaded
greg
parents:
diff changeset
75 border-color: #ffcccc;
5367786dc871 Uploaded
greg
parents:
diff changeset
76 border-color: rgba(255, 0, 0, 0.2); /* #55b2e0; */ /*#005580;*/
5367786dc871 Uploaded
greg
parents:
diff changeset
77 }
5367786dc871 Uploaded
greg
parents:
diff changeset
78 a.dark_bg_link {
5367786dc871 Uploaded
greg
parents:
diff changeset
79 color: white; /* #0088cc; */
5367786dc871 Uploaded
greg
parents:
diff changeset
80 border-bottom: 1px solid #cccccc;
5367786dc871 Uploaded
greg
parents:
diff changeset
81 border-color: #cccccc;
5367786dc871 Uploaded
greg
parents:
diff changeset
82 }
5367786dc871 Uploaded
greg
parents:
diff changeset
83 a.dark_bg_link:hover {
5367786dc871 Uploaded
greg
parents:
diff changeset
84 color: white; /* #0088cc; */
5367786dc871 Uploaded
greg
parents:
diff changeset
85 border-bottom: 1px solid white;
5367786dc871 Uploaded
greg
parents:
diff changeset
86 }
5367786dc871 Uploaded
greg
parents:
diff changeset
87
5367786dc871 Uploaded
greg
parents:
diff changeset
88 .leading_link_dot {
5367786dc871 Uploaded
greg
parents:
diff changeset
89 border-bottom: white solid 1px;
5367786dc871 Uploaded
greg
parents:
diff changeset
90 }
5367786dc871 Uploaded
greg
parents:
diff changeset
91
5367786dc871 Uploaded
greg
parents:
diff changeset
92 a.header_link, a.header_link:hover, a.header_link:visited {
5367786dc871 Uploaded
greg
parents:
diff changeset
93 color: black;
5367786dc871 Uploaded
greg
parents:
diff changeset
94 border-bottom: 1px solid #bbb;
5367786dc871 Uploaded
greg
parents:
diff changeset
95 }
5367786dc871 Uploaded
greg
parents:
diff changeset
96
5367786dc871 Uploaded
greg
parents:
diff changeset
97
5367786dc871 Uploaded
greg
parents:
diff changeset
98 .dotted-link {
5367786dc871 Uploaded
greg
parents:
diff changeset
99 cursor: pointer;
5367786dc871 Uploaded
greg
parents:
diff changeset
100 text-decoration: none;
5367786dc871 Uploaded
greg
parents:
diff changeset
101 /*color: #0c4f72;*/
5367786dc871 Uploaded
greg
parents:
diff changeset
102 color: #0077B5;
5367786dc871 Uploaded
greg
parents:
diff changeset
103 border-bottom: 1px dashed #487b95;
5367786dc871 Uploaded
greg
parents:
diff changeset
104 border-color: #487b95; /* #487b95 */
5367786dc871 Uploaded
greg
parents:
diff changeset
105 border-color: rgba(12, 79, 114, 0.2);
5367786dc871 Uploaded
greg
parents:
diff changeset
106 }
5367786dc871 Uploaded
greg
parents:
diff changeset
107 .dotted-link:hover {
5367786dc871 Uploaded
greg
parents:
diff changeset
108 text-decoration: none;
5367786dc871 Uploaded
greg
parents:
diff changeset
109 color: #b33 !important;
5367786dc871 Uploaded
greg
parents:
diff changeset
110 border-bottom: 1px dashed #b33 !important;
5367786dc871 Uploaded
greg
parents:
diff changeset
111 border-color: rgba(255, 0, 0, 0.2) !important;
5367786dc871 Uploaded
greg
parents:
diff changeset
112 }
5367786dc871 Uploaded
greg
parents:
diff changeset
113 .js:visited {
5367786dc871 Uploaded
greg
parents:
diff changeset
114 color: #0077B5;
5367786dc871 Uploaded
greg
parents:
diff changeset
115 border-bottom: 1px dashed #487b95;
5367786dc871 Uploaded
greg
parents:
diff changeset
116 border-color: #487b95;
5367786dc871 Uploaded
greg
parents:
diff changeset
117 border-color: rgba(12, 79, 114, 0.2);
5367786dc871 Uploaded
greg
parents:
diff changeset
118 }
5367786dc871 Uploaded
greg
parents:
diff changeset
119
5367786dc871 Uploaded
greg
parents:
diff changeset
120 .selected-switch {
5367786dc871 Uploaded
greg
parents:
diff changeset
121 background-color: #fafad2;
5367786dc871 Uploaded
greg
parents:
diff changeset
122 }
5367786dc871 Uploaded
greg
parents:
diff changeset
123
5367786dc871 Uploaded
greg
parents:
diff changeset
124 .json-code {
5367786dc871 Uploaded
greg
parents:
diff changeset
125 display: none;
5367786dc871 Uploaded
greg
parents:
diff changeset
126 }
5367786dc871 Uploaded
greg
parents:
diff changeset
127 .smallcapitals {
5367786dc871 Uploaded
greg
parents:
diff changeset
128 font-size: .875em;
5367786dc871 Uploaded
greg
parents:
diff changeset
129 letter-spacing: .15em;
5367786dc871 Uploaded
greg
parents:
diff changeset
130 margin-right: -.15em;
5367786dc871 Uploaded
greg
parents:
diff changeset
131 }
5367786dc871 Uploaded
greg
parents:
diff changeset
132 .highlight {
5367786dc871 Uploaded
greg
parents:
diff changeset
133 background-color:#FFF9B5;
5367786dc871 Uploaded
greg
parents:
diff changeset
134 padding: 0 3px;
5367786dc871 Uploaded
greg
parents:
diff changeset
135 margin-left: -3px;
5367786dc871 Uploaded
greg
parents:
diff changeset
136 }
5367786dc871 Uploaded
greg
parents:
diff changeset
137
5367786dc871 Uploaded
greg
parents:
diff changeset
138 ul.list {
5367786dc871 Uploaded
greg
parents:
diff changeset
139 list-style-type: none;
5367786dc871 Uploaded
greg
parents:
diff changeset
140 padding: 0 0 0 2em;
5367786dc871 Uploaded
greg
parents:
diff changeset
141 margin: -0.5em 0 0 0;
5367786dc871 Uploaded
greg
parents:
diff changeset
142 }
5367786dc871 Uploaded
greg
parents:
diff changeset
143 ul.list li {
5367786dc871 Uploaded
greg
parents:
diff changeset
144 margin-bottom: 0.7em;
5367786dc871 Uploaded
greg
parents:
diff changeset
145 }
5367786dc871 Uploaded
greg
parents:
diff changeset
146
5367786dc871 Uploaded
greg
parents:
diff changeset
147 ul.mdash {
5367786dc871 Uploaded
greg
parents:
diff changeset
148 margin: -1em 0 0 0;
5367786dc871 Uploaded
greg
parents:
diff changeset
149 padding: 0 0 0 2em;
5367786dc871 Uploaded
greg
parents:
diff changeset
150 }
5367786dc871 Uploaded
greg
parents:
diff changeset
151 ul.mdash li {
5367786dc871 Uploaded
greg
parents:
diff changeset
152 margin-bottom: 0.7em;
5367786dc871 Uploaded
greg
parents:
diff changeset
153 list-style-type: none;
5367786dc871 Uploaded
greg
parents:
diff changeset
154 text-indent: -1.3em;
5367786dc871 Uploaded
greg
parents:
diff changeset
155 behavior: expression(!this.before ? this.before = this.innerHTML = '&mdash;&nbsp;' + this.innerHTML : '');
5367786dc871 Uploaded
greg
parents:
diff changeset
156 }
5367786dc871 Uploaded
greg
parents:
diff changeset
157 ul.mdash li:before {
5367786dc871 Uploaded
greg
parents:
diff changeset
158 content: '\2014\a0';
5367786dc871 Uploaded
greg
parents:
diff changeset
159 }
5367786dc871 Uploaded
greg
parents:
diff changeset
160
5367786dc871 Uploaded
greg
parents:
diff changeset
161 .small_line_indent {
5367786dc871 Uploaded
greg
parents:
diff changeset
162 height: 0;
5367786dc871 Uploaded
greg
parents:
diff changeset
163 margin-top: -7px;
5367786dc871 Uploaded
greg
parents:
diff changeset
164 }
5367786dc871 Uploaded
greg
parents:
diff changeset
165 /************/
5367786dc871 Uploaded
greg
parents:
diff changeset
166
5367786dc871 Uploaded
greg
parents:
diff changeset
167 /* Tooltips */
5367786dc871 Uploaded
greg
parents:
diff changeset
168 .tooltip {
5367786dc871 Uploaded
greg
parents:
diff changeset
169 font-size: 0.9em;
5367786dc871 Uploaded
greg
parents:
diff changeset
170 margin-bottom: 5px;
5367786dc871 Uploaded
greg
parents:
diff changeset
171 }
5367786dc871 Uploaded
greg
parents:
diff changeset
172 .tooltip.in {
5367786dc871 Uploaded
greg
parents:
diff changeset
173 opacity: 1;
5367786dc871 Uploaded
greg
parents:
diff changeset
174 }
5367786dc871 Uploaded
greg
parents:
diff changeset
175 .tooltip-inner {
5367786dc871 Uploaded
greg
parents:
diff changeset
176 text-align: left;
5367786dc871 Uploaded
greg
parents:
diff changeset
177 }
5367786dc871 Uploaded
greg
parents:
diff changeset
178 .tooltip-link,
5367786dc871 Uploaded
greg
parents:
diff changeset
179 .tooltip-link:visited {
5367786dc871 Uploaded
greg
parents:
diff changeset
180 text-decoration: none;
5367786dc871 Uploaded
greg
parents:
diff changeset
181 color: #000;
5367786dc871 Uploaded
greg
parents:
diff changeset
182 border-bottom: 1px dashed #bbb;
5367786dc871 Uploaded
greg
parents:
diff changeset
183 cursor: hand;
5367786dc871 Uploaded
greg
parents:
diff changeset
184 }
5367786dc871 Uploaded
greg
parents:
diff changeset
185 .tooltip-link:hover {
5367786dc871 Uploaded
greg
parents:
diff changeset
186 text-decoration: none;
5367786dc871 Uploaded
greg
parents:
diff changeset
187 color: #b33;
5367786dc871 Uploaded
greg
parents:
diff changeset
188 border-bottom: 1px dashed #b33;
5367786dc871 Uploaded
greg
parents:
diff changeset
189 }
5367786dc871 Uploaded
greg
parents:
diff changeset
190 /************/
5367786dc871 Uploaded
greg
parents:
diff changeset
191
5367786dc871 Uploaded
greg
parents:
diff changeset
192 /*********/
5367786dc871 Uploaded
greg
parents:
diff changeset
193
5367786dc871 Uploaded
greg
parents:
diff changeset
194 .hs {
5367786dc871 Uploaded
greg
parents:
diff changeset
195 /* Полупробел для
5367786dc871 Uploaded
greg
parents:
diff changeset
196 разделения разрядов чисел:
5367786dc871 Uploaded
greg
parents:
diff changeset
197 10<span class="hs"></span>000 */
5367786dc871 Uploaded
greg
parents:
diff changeset
198 margin-left: .2em;
5367786dc871 Uploaded
greg
parents:
diff changeset
199 }
5367786dc871 Uploaded
greg
parents:
diff changeset
200
5367786dc871 Uploaded
greg
parents:
diff changeset
201 .rhs {
5367786dc871 Uploaded
greg
parents:
diff changeset
202 /* Полупробел на случай,
5367786dc871 Uploaded
greg
parents:
diff changeset
203 если реальный пробел важен,
5367786dc871 Uploaded
greg
parents:
diff changeset
204 например между ценой и валютой:
5367786dc871 Uploaded
greg
parents:
diff changeset
205 1<span class="rhs">&nbsp;</span>$ */
5367786dc871 Uploaded
greg
parents:
diff changeset
206 font-size: 50%;
5367786dc871 Uploaded
greg
parents:
diff changeset
207 line-height: 1;
5367786dc871 Uploaded
greg
parents:
diff changeset
208 }
5367786dc871 Uploaded
greg
parents:
diff changeset
209
5367786dc871 Uploaded
greg
parents:
diff changeset
210 /*9490<span class="rhs"> </span>€<br/>*/
5367786dc871 Uploaded
greg
parents:
diff changeset
211 /*12<span class="hs"></span>650<span class="rhs"> </span>$<br/>*/
5367786dc871 Uploaded
greg
parents:
diff changeset
212 /*379<span class="hs"></span>000<span*/
5367786dc871 Uploaded
greg
parents:
diff changeset
213 /*class="rhs"> </span><span class="b-rub">Р</span><br/>*/
5367786dc871 Uploaded
greg
parents:
diff changeset
214 /*100<span class="hs"></span>500<span class="rhs"> </span>+*/
5367786dc871 Uploaded
greg
parents:
diff changeset
215
5367786dc871 Uploaded
greg
parents:
diff changeset
216 /* for wrapping long words with no spaces */
5367786dc871 Uploaded
greg
parents:
diff changeset
217 /* http://stackoverflow.com/questions/3247358/css-how-do-i-wrap-text-with-no-whitespace-inside-a-td */
5367786dc871 Uploaded
greg
parents:
diff changeset
218 .wrapword {
5367786dc871 Uploaded
greg
parents:
diff changeset
219 white-space: -moz-pre-wrap !important; /* Mozilla, since 1999 */
5367786dc871 Uploaded
greg
parents:
diff changeset
220 white-space: -pre-wrap; /* Opera 4-6 */
5367786dc871 Uploaded
greg
parents:
diff changeset
221 white-space: -o-pre-wrap; /* Opera 7 */
5367786dc871 Uploaded
greg
parents:
diff changeset
222 white-space: pre-wrap; /* css-3 */
5367786dc871 Uploaded
greg
parents:
diff changeset
223 word-wrap: break-word; /* Internet Explorer 5.5+ */
5367786dc871 Uploaded
greg
parents:
diff changeset
224 word-break: break-all;
5367786dc871 Uploaded
greg
parents:
diff changeset
225 white-space: normal;
5367786dc871 Uploaded
greg
parents:
diff changeset
226 }
5367786dc871 Uploaded
greg
parents:
diff changeset
227
5367786dc871 Uploaded
greg
parents:
diff changeset
228
5367786dc871 Uploaded
greg
parents:
diff changeset
229 .space_1px {
5367786dc871 Uploaded
greg
parents:
diff changeset
230 height: 1px;
5367786dc871 Uploaded
greg
parents:
diff changeset
231 }
5367786dc871 Uploaded
greg
parents:
diff changeset
232 .space_2px {
5367786dc871 Uploaded
greg
parents:
diff changeset
233 height: 2px;
5367786dc871 Uploaded
greg
parents:
diff changeset
234 }
5367786dc871 Uploaded
greg
parents:
diff changeset
235 .space_3px {
5367786dc871 Uploaded
greg
parents:
diff changeset
236 height: 3px;
5367786dc871 Uploaded
greg
parents:
diff changeset
237 }
5367786dc871 Uploaded
greg
parents:
diff changeset
238 .space_4px {
5367786dc871 Uploaded
greg
parents:
diff changeset
239 height: 4px;
5367786dc871 Uploaded
greg
parents:
diff changeset
240 }
5367786dc871 Uploaded
greg
parents:
diff changeset
241 .space_5px {
5367786dc871 Uploaded
greg
parents:
diff changeset
242 height: 5px;
5367786dc871 Uploaded
greg
parents:
diff changeset
243 }
5367786dc871 Uploaded
greg
parents:
diff changeset
244 .space_6px {
5367786dc871 Uploaded
greg
parents:
diff changeset
245 height: 6px;
5367786dc871 Uploaded
greg
parents:
diff changeset
246 }
5367786dc871 Uploaded
greg
parents:
diff changeset
247 .space_7px {
5367786dc871 Uploaded
greg
parents:
diff changeset
248 height: 7px;
5367786dc871 Uploaded
greg
parents:
diff changeset
249 }
5367786dc871 Uploaded
greg
parents:
diff changeset
250 .space_8px {
5367786dc871 Uploaded
greg
parents:
diff changeset
251 height: 8px;
5367786dc871 Uploaded
greg
parents:
diff changeset
252 }
5367786dc871 Uploaded
greg
parents:
diff changeset
253 .space_9px {
5367786dc871 Uploaded
greg
parents:
diff changeset
254 height: 9px;
5367786dc871 Uploaded
greg
parents:
diff changeset
255 }
5367786dc871 Uploaded
greg
parents:
diff changeset
256 .space_10px {
5367786dc871 Uploaded
greg
parents:
diff changeset
257 height: 10px;
5367786dc871 Uploaded
greg
parents:
diff changeset
258 }
5367786dc871 Uploaded
greg
parents:
diff changeset
259 .layout-table {
5367786dc871 Uploaded
greg
parents:
diff changeset
260 width: 99%;
5367786dc871 Uploaded
greg
parents:
diff changeset
261 border-spacing: 0;
5367786dc871 Uploaded
greg
parents:
diff changeset
262 }
5367786dc871 Uploaded
greg
parents:
diff changeset
263
5367786dc871 Uploaded
greg
parents:
diff changeset
264 .layout-table td.layout-table-td {
5367786dc871 Uploaded
greg
parents:
diff changeset
265 vertical-align: top;
5367786dc871 Uploaded
greg
parents:
diff changeset
266 padding: 0;
5367786dc871 Uploaded
greg
parents:
diff changeset
267 }
5367786dc871 Uploaded
greg
parents:
diff changeset
268 .layout-table td.layout-table-fst-td {
5367786dc871 Uploaded
greg
parents:
diff changeset
269 min-width: 400px;
5367786dc871 Uploaded
greg
parents:
diff changeset
270 padding-right: 50px;
5367786dc871 Uploaded
greg
parents:
diff changeset
271 }
5367786dc871 Uploaded
greg
parents:
diff changeset
272 .layout-table td.layout-table-snd-td {
5367786dc871 Uploaded
greg
parents:
diff changeset
273 min-width: 200px;
5367786dc871 Uploaded
greg
parents:
diff changeset
274 }
5367786dc871 Uploaded
greg
parents:
diff changeset
275 .layout-table td.layout-table-trd-td {
5367786dc871 Uploaded
greg
parents:
diff changeset
276 }
5367786dc871 Uploaded
greg
parents:
diff changeset
277
5367786dc871 Uploaded
greg
parents:
diff changeset
278 .top-panel {
5367786dc871 Uploaded
greg
parents:
diff changeset
279 background-color: #444;
5367786dc871 Uploaded
greg
parents:
diff changeset
280 color: white;
5367786dc871 Uploaded
greg
parents:
diff changeset
281 min-width: 650px;
5367786dc871 Uploaded
greg
parents:
diff changeset
282 padding: 8px 10px 0 147px;
5367786dc871 Uploaded
greg
parents:
diff changeset
283 min-height: 70px;
5367786dc871 Uploaded
greg
parents:
diff changeset
284 text-shadow: -1px -1px 0 #111;
5367786dc871 Uploaded
greg
parents:
diff changeset
285 }
5367786dc871 Uploaded
greg
parents:
diff changeset
286 .top-panel span {
5367786dc871 Uploaded
greg
parents:
diff changeset
287 color: white;
5367786dc871 Uploaded
greg
parents:
diff changeset
288 }
5367786dc871 Uploaded
greg
parents:
diff changeset
289 .top-panel a {
5367786dc871 Uploaded
greg
parents:
diff changeset
290 color: white;
5367786dc871 Uploaded
greg
parents:
diff changeset
291 border-bottom: 1px solid white;
5367786dc871 Uploaded
greg
parents:
diff changeset
292 }
5367786dc871 Uploaded
greg
parents:
diff changeset
293 #to_main_menu_button a {
5367786dc871 Uploaded
greg
parents:
diff changeset
294 border-bottom: none;
5367786dc871 Uploaded
greg
parents:
diff changeset
295 }
5367786dc871 Uploaded
greg
parents:
diff changeset
296 .page_title {
5367786dc871 Uploaded
greg
parents:
diff changeset
297 margin-top: -3px;
5367786dc871 Uploaded
greg
parents:
diff changeset
298 margin-bottom: -3px;
5367786dc871 Uploaded
greg
parents:
diff changeset
299 color: white;
5367786dc871 Uploaded
greg
parents:
diff changeset
300 }
5367786dc871 Uploaded
greg
parents:
diff changeset
301 .page_subtitle {
5367786dc871 Uploaded
greg
parents:
diff changeset
302 line-height: 100%;
5367786dc871 Uploaded
greg
parents:
diff changeset
303 white-space: nowrap;
5367786dc871 Uploaded
greg
parents:
diff changeset
304 }
5367786dc871 Uploaded
greg
parents:
diff changeset
305 .content {
5367786dc871 Uploaded
greg
parents:
diff changeset
306 margin-left: 147px;
5367786dc871 Uploaded
greg
parents:
diff changeset
307 width: 90%;
5367786dc871 Uploaded
greg
parents:
diff changeset
308 /*padding-top: 20px;*/
5367786dc871 Uploaded
greg
parents:
diff changeset
309 margin-bottom: 0;
5367786dc871 Uploaded
greg
parents:
diff changeset
310 /*padding-bottom: 50px;*/
5367786dc871 Uploaded
greg
parents:
diff changeset
311 /*{# padding-right: 20px;#}*/
5367786dc871 Uploaded
greg
parents:
diff changeset
312 }
5367786dc871 Uploaded
greg
parents:
diff changeset
313 .p_after_content {
5367786dc871 Uploaded
greg
parents:
diff changeset
314 margin-left: 147px;
5367786dc871 Uploaded
greg
parents:
diff changeset
315 }
5367786dc871 Uploaded
greg
parents:
diff changeset
316 .links_after_content{
5367786dc871 Uploaded
greg
parents:
diff changeset
317 font-size: 14px;
5367786dc871 Uploaded
greg
parents:
diff changeset
318 }
5367786dc871 Uploaded
greg
parents:
diff changeset
319
5367786dc871 Uploaded
greg
parents:
diff changeset
320 p {
5367786dc871 Uploaded
greg
parents:
diff changeset
321 display: block;
5367786dc871 Uploaded
greg
parents:
diff changeset
322 font-size: 12px;
5367786dc871 Uploaded
greg
parents:
diff changeset
323 }
5367786dc871 Uploaded
greg
parents:
diff changeset
324
5367786dc871 Uploaded
greg
parents:
diff changeset
325 h1 {
5367786dc871 Uploaded
greg
parents:
diff changeset
326 display: block;
5367786dc871 Uploaded
greg
parents:
diff changeset
327 font-size: 26px;
5367786dc871 Uploaded
greg
parents:
diff changeset
328 padding: 0 -3px 0 5px;
5367786dc871 Uploaded
greg
parents:
diff changeset
329 -webkit-margin-before: 5px;
5367786dc871 Uploaded
greg
parents:
diff changeset
330 -webkit-margin-after: 0px;
5367786dc871 Uploaded
greg
parents:
diff changeset
331 -webkit-margin-start: 0px;
5367786dc871 Uploaded
greg
parents:
diff changeset
332 -webkit-margin-end: 0px;
5367786dc871 Uploaded
greg
parents:
diff changeset
333 font-weight: bold;
5367786dc871 Uploaded
greg
parents:
diff changeset
334 }
5367786dc871 Uploaded
greg
parents:
diff changeset
335
5367786dc871 Uploaded
greg
parents:
diff changeset
336 #header {
5367786dc871 Uploaded
greg
parents:
diff changeset
337 display: block;
5367786dc871 Uploaded
greg
parents:
diff changeset
338 width: 100%;
5367786dc871 Uploaded
greg
parents:
diff changeset
339 margin-bottom: 10px;
5367786dc871 Uploaded
greg
parents:
diff changeset
340 }
5367786dc871 Uploaded
greg
parents:
diff changeset
341
5367786dc871 Uploaded
greg
parents:
diff changeset
342 .logo_img {
5367786dc871 Uploaded
greg
parents:
diff changeset
343 height: 40px;
5367786dc871 Uploaded
greg
parents:
diff changeset
344 margin-bottom: -10px;
5367786dc871 Uploaded
greg
parents:
diff changeset
345 margin-left: -6px;
5367786dc871 Uploaded
greg
parents:
diff changeset
346 margin-right: -7px;
5367786dc871 Uploaded
greg
parents:
diff changeset
347 }
5367786dc871 Uploaded
greg
parents:
diff changeset
348 </style>
5367786dc871 Uploaded
greg
parents:
diff changeset
349
5367786dc871 Uploaded
greg
parents:
diff changeset
350 <style rel="stylesheet">
5367786dc871 Uploaded
greg
parents:
diff changeset
351 .report-and-plots {
5367786dc871 Uploaded
greg
parents:
diff changeset
352 margin-top: 15px;
5367786dc871 Uploaded
greg
parents:
diff changeset
353 }
5367786dc871 Uploaded
greg
parents:
diff changeset
354
5367786dc871 Uploaded
greg
parents:
diff changeset
355 /****************/
5367786dc871 Uploaded
greg
parents:
diff changeset
356 /* REPORT TABLE */
5367786dc871 Uploaded
greg
parents:
diff changeset
357 .report {
5367786dc871 Uploaded
greg
parents:
diff changeset
358 margin: 0 100px 50px 0;
5367786dc871 Uploaded
greg
parents:
diff changeset
359 float: left;
5367786dc871 Uploaded
greg
parents:
diff changeset
360 font-size: 1em;
5367786dc871 Uploaded
greg
parents:
diff changeset
361 }
5367786dc871 Uploaded
greg
parents:
diff changeset
362
5367786dc871 Uploaded
greg
parents:
diff changeset
363 #main_report {
5367786dc871 Uploaded
greg
parents:
diff changeset
364 /*min-width: 600px;*/
5367786dc871 Uploaded
greg
parents:
diff changeset
365 }
5367786dc871 Uploaded
greg
parents:
diff changeset
366
5367786dc871 Uploaded
greg
parents:
diff changeset
367 /*#extended_link {*/
5367786dc871 Uploaded
greg
parents:
diff changeset
368 /*margin-top: 5px;*/
5367786dc871 Uploaded
greg
parents:
diff changeset
369 /*}*/
5367786dc871 Uploaded
greg
parents:
diff changeset
370
5367786dc871 Uploaded
greg
parents:
diff changeset
371 #ref_report {
5367786dc871 Uploaded
greg
parents:
diff changeset
372 /*min-width: 300px;*/
5367786dc871 Uploaded
greg
parents:
diff changeset
373 margin-right: 0;
5367786dc871 Uploaded
greg
parents:
diff changeset
374 margin-bottom: 20px;
5367786dc871 Uploaded
greg
parents:
diff changeset
375 /*margin-right: 200px;*/
5367786dc871 Uploaded
greg
parents:
diff changeset
376 }
5367786dc871 Uploaded
greg
parents:
diff changeset
377
5367786dc871 Uploaded
greg
parents:
diff changeset
378 .report td {
5367786dc871 Uploaded
greg
parents:
diff changeset
379 margin: 0;
5367786dc871 Uploaded
greg
parents:
diff changeset
380 padding: 2px 0.6em 0 14px;
5367786dc871 Uploaded
greg
parents:
diff changeset
381 /*min-width: 100px;*/
5367786dc871 Uploaded
greg
parents:
diff changeset
382 max-width: 400px;
5367786dc871 Uploaded
greg
parents:
diff changeset
383 white-space: nowrap;
5367786dc871 Uploaded
greg
parents:
diff changeset
384 }
5367786dc871 Uploaded
greg
parents:
diff changeset
385 .report td.number {
5367786dc871 Uploaded
greg
parents:
diff changeset
386 text-align: right;
5367786dc871 Uploaded
greg
parents:
diff changeset
387 }
5367786dc871 Uploaded
greg
parents:
diff changeset
388
5367786dc871 Uploaded
greg
parents:
diff changeset
389 .report tr.top_row_tr td,
5367786dc871 Uploaded
greg
parents:
diff changeset
390 .report tr.group_header td {
5367786dc871 Uploaded
greg
parents:
diff changeset
391 font-weight: bold;
5367786dc871 Uploaded
greg
parents:
diff changeset
392 border-bottom: 1px solid #ddd;
5367786dc871 Uploaded
greg
parents:
diff changeset
393 }
5367786dc871 Uploaded
greg
parents:
diff changeset
394 .report tr.group_header td {
5367786dc871 Uploaded
greg
parents:
diff changeset
395 height: 20px;
5367786dc871 Uploaded
greg
parents:
diff changeset
396 vertical-align: bottom;
5367786dc871 Uploaded
greg
parents:
diff changeset
397 }
5367786dc871 Uploaded
greg
parents:
diff changeset
398
5367786dc871 Uploaded
greg
parents:
diff changeset
399 #ref_report tr.top_row_tr td,
5367786dc871 Uploaded
greg
parents:
diff changeset
400 #ref_report tr.group_header td {
5367786dc871 Uploaded
greg
parents:
diff changeset
401 font-weight: normal;
5367786dc871 Uploaded
greg
parents:
diff changeset
402 }
5367786dc871 Uploaded
greg
parents:
diff changeset
403
5367786dc871 Uploaded
greg
parents:
diff changeset
404 .report tr td:first-child {
5367786dc871 Uploaded
greg
parents:
diff changeset
405 padding-left: 0;
5367786dc871 Uploaded
greg
parents:
diff changeset
406 }
5367786dc871 Uploaded
greg
parents:
diff changeset
407 .report tr td:last-child {
5367786dc871 Uploaded
greg
parents:
diff changeset
408 padding-right: 0;
5367786dc871 Uploaded
greg
parents:
diff changeset
409 }
5367786dc871 Uploaded
greg
parents:
diff changeset
410
5367786dc871 Uploaded
greg
parents:
diff changeset
411 .report tr.row_hidden, tr.group_empty {
5367786dc871 Uploaded
greg
parents:
diff changeset
412 display: none;
5367786dc871 Uploaded
greg
parents:
diff changeset
413 }
5367786dc871 Uploaded
greg
parents:
diff changeset
414
5367786dc871 Uploaded
greg
parents:
diff changeset
415 .report tr.secondary_hidden {
5367786dc871 Uploaded
greg
parents:
diff changeset
416 display: none;
5367786dc871 Uploaded
greg
parents:
diff changeset
417 }
5367786dc871 Uploaded
greg
parents:
diff changeset
418
5367786dc871 Uploaded
greg
parents:
diff changeset
419 /*.report td.secondary_td {*/
5367786dc871 Uploaded
greg
parents:
diff changeset
420 /*padding-left: 10px !important;*/
5367786dc871 Uploaded
greg
parents:
diff changeset
421 /*}*/
5367786dc871 Uploaded
greg
parents:
diff changeset
422
5367786dc871 Uploaded
greg
parents:
diff changeset
423 span.heatmap_legend {
5367786dc871 Uploaded
greg
parents:
diff changeset
424 font-size: 11px;
5367786dc871 Uploaded
greg
parents:
diff changeset
425 display: inline-block;
5367786dc871 Uploaded
greg
parents:
diff changeset
426 }
5367786dc871 Uploaded
greg
parents:
diff changeset
427
5367786dc871 Uploaded
greg
parents:
diff changeset
428 #heatmap_header {
5367786dc871 Uploaded
greg
parents:
diff changeset
429 margin-right: 30px;
5367786dc871 Uploaded
greg
parents:
diff changeset
430 }
5367786dc871 Uploaded
greg
parents:
diff changeset
431
5367786dc871 Uploaded
greg
parents:
diff changeset
432 #combined_reference_length {
5367786dc871 Uploaded
greg
parents:
diff changeset
433 padding-top: 1px;
5367786dc871 Uploaded
greg
parents:
diff changeset
434 padding-bottom: 15px;
5367786dc871 Uploaded
greg
parents:
diff changeset
435 }
5367786dc871 Uploaded
greg
parents:
diff changeset
436
5367786dc871 Uploaded
greg
parents:
diff changeset
437 span.metric-name.expandable {
5367786dc871 Uploaded
greg
parents:
diff changeset
438 margin-left: -13px;
5367786dc871 Uploaded
greg
parents:
diff changeset
439 }
5367786dc871 Uploaded
greg
parents:
diff changeset
440
5367786dc871 Uploaded
greg
parents:
diff changeset
441 span.metric-name.secondary {
5367786dc871 Uploaded
greg
parents:
diff changeset
442 margin-left: 13px;
5367786dc871 Uploaded
greg
parents:
diff changeset
443 }
5367786dc871 Uploaded
greg
parents:
diff changeset
444
5367786dc871 Uploaded
greg
parents:
diff changeset
445 span.metric-name.expandable.collapsed::before {
5367786dc871 Uploaded
greg
parents:
diff changeset
446 content: '+ ';
5367786dc871 Uploaded
greg
parents:
diff changeset
447 color: #CCC;
5367786dc871 Uploaded
greg
parents:
diff changeset
448 cursor: pointer;
5367786dc871 Uploaded
greg
parents:
diff changeset
449 }
5367786dc871 Uploaded
greg
parents:
diff changeset
450
5367786dc871 Uploaded
greg
parents:
diff changeset
451 span.metric-name.expandable.expanded::before {
5367786dc871 Uploaded
greg
parents:
diff changeset
452 content: '\2212\a0'; /* &minus&nbsp */
5367786dc871 Uploaded
greg
parents:
diff changeset
453 color: #CCC;
5367786dc871 Uploaded
greg
parents:
diff changeset
454 cursor: pointer;
5367786dc871 Uploaded
greg
parents:
diff changeset
455 }
5367786dc871 Uploaded
greg
parents:
diff changeset
456
5367786dc871 Uploaded
greg
parents:
diff changeset
457 .report_legend {
5367786dc871 Uploaded
greg
parents:
diff changeset
458 padding-left: 15px; /* compensate drag handles */
5367786dc871 Uploaded
greg
parents:
diff changeset
459 }
5367786dc871 Uploaded
greg
parents:
diff changeset
460
5367786dc871 Uploaded
greg
parents:
diff changeset
461 #contigs_are_ordered {
5367786dc871 Uploaded
greg
parents:
diff changeset
462 z-index: 0;
5367786dc871 Uploaded
greg
parents:
diff changeset
463 position: relative;
5367786dc871 Uploaded
greg
parents:
diff changeset
464 }
5367786dc871 Uploaded
greg
parents:
diff changeset
465
5367786dc871 Uploaded
greg
parents:
diff changeset
466
5367786dc871 Uploaded
greg
parents:
diff changeset
467 /*.report .report-table-header {
5367786dc871 Uploaded
greg
parents:
diff changeset
468 font-weight: bold;
5367786dc871 Uploaded
greg
parents:
diff changeset
469 }*/
5367786dc871 Uploaded
greg
parents:
diff changeset
470
5367786dc871 Uploaded
greg
parents:
diff changeset
471 /*.report thead td {
5367786dc871 Uploaded
greg
parents:
diff changeset
472 border-bottom: 1px solid #bbb;
5367786dc871 Uploaded
greg
parents:
diff changeset
473 }*/
5367786dc871 Uploaded
greg
parents:
diff changeset
474
5367786dc871 Uploaded
greg
parents:
diff changeset
475
5367786dc871 Uploaded
greg
parents:
diff changeset
476 /*************/
5367786dc871 Uploaded
greg
parents:
diff changeset
477 /* Draggable */
5367786dc871 Uploaded
greg
parents:
diff changeset
478 table.moving_table {
5367786dc871 Uploaded
greg
parents:
diff changeset
479 box-shadow: -0px 0px 5px 1px #888888;
5367786dc871 Uploaded
greg
parents:
diff changeset
480 -moz-box-shadow: -0px 0px 5px 1px #888888;
5367786dc871 Uploaded
greg
parents:
diff changeset
481 -webkit-box-shadow: -0px 0px 5px 1px #888888;
5367786dc871 Uploaded
greg
parents:
diff changeset
482 /*outline: 1px solid #888888;*/
5367786dc871 Uploaded
greg
parents:
diff changeset
483 background-color: white;
5367786dc871 Uploaded
greg
parents:
diff changeset
484 z-index: 3 !important;
5367786dc871 Uploaded
greg
parents:
diff changeset
485 }
5367786dc871 Uploaded
greg
parents:
diff changeset
486
5367786dc871 Uploaded
greg
parents:
diff changeset
487 table.draggable .drag_handle {
5367786dc871 Uploaded
greg
parents:
diff changeset
488 padding: 2px 1px 0 1px;
5367786dc871 Uploaded
greg
parents:
diff changeset
489 margin: 0 2px 0 1px;
5367786dc871 Uploaded
greg
parents:
diff changeset
490
5367786dc871 Uploaded
greg
parents:
diff changeset
491 cursor: grab;
5367786dc871 Uploaded
greg
parents:
diff changeset
492 cursor: -moz-grab;
5367786dc871 Uploaded
greg
parents:
diff changeset
493 cursor: -webkit-grab;
5367786dc871 Uploaded
greg
parents:
diff changeset
494 }
5367786dc871 Uploaded
greg
parents:
diff changeset
495
5367786dc871 Uploaded
greg
parents:
diff changeset
496 table.draggable .drag_handle .drag_image {
5367786dc871 Uploaded
greg
parents:
diff changeset
497 height: 9px;
5367786dc871 Uploaded
greg
parents:
diff changeset
498 width: 9px;
5367786dc871 Uploaded
greg
parents:
diff changeset
499 display: inline-block;
5367786dc871 Uploaded
greg
parents:
diff changeset
500 background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAIAAABv85FHAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAiElEQVQImV2OsQ3FIAxEz2AhCAukyATZf5ZMQI8okZUjhfWj6F/pd09n6b1f1wUgxkgSAACS53lqSmnfdxHBLyJCMucsc877vv201nobKSUl2VoLIeATksdxKEmf+UqOxczGGDHGP7Ztm5qZmfmkYx8upehaq/fu4P2WZK1VAdRaAbjqXghBVR9BvlQcgtQsKgAAAABJRU5ErkJggg==") no-repeat;
5367786dc871 Uploaded
greg
parents:
diff changeset
501 }
5367786dc871 Uploaded
greg
parents:
diff changeset
502
5367786dc871 Uploaded
greg
parents:
diff changeset
503 table.draggable .drag_handle:active,
5367786dc871 Uploaded
greg
parents:
diff changeset
504 table.draggable td.cell_of_moving_table .drag_handle {
5367786dc871 Uploaded
greg
parents:
diff changeset
505 cursor: grabbing !important;
5367786dc871 Uploaded
greg
parents:
diff changeset
506 cursor: -moz-grabbing !important;
5367786dc871 Uploaded
greg
parents:
diff changeset
507 cursor: -webkit-grabbing !important;
5367786dc871 Uploaded
greg
parents:
diff changeset
508 }
5367786dc871 Uploaded
greg
parents:
diff changeset
509
5367786dc871 Uploaded
greg
parents:
diff changeset
510 /* Override the styles for the first and the last columns of the table.report.
5367786dc871 Uploaded
greg
parents:
diff changeset
511 The cloned table contains a single column which is both first and last,
5367786dc871 Uploaded
greg
parents:
diff changeset
512 and we don't need it to inherit those styles. */
5367786dc871 Uploaded
greg
parents:
diff changeset
513 table.draggable td.cell_of_moving_table {
5367786dc871 Uploaded
greg
parents:
diff changeset
514 padding-left: 14px !important;
5367786dc871 Uploaded
greg
parents:
diff changeset
515 padding-right: 0.6em !important;
5367786dc871 Uploaded
greg
parents:
diff changeset
516 }
5367786dc871 Uploaded
greg
parents:
diff changeset
517
5367786dc871 Uploaded
greg
parents:
diff changeset
518 table.draggable td.hovered_column_td {
5367786dc871 Uploaded
greg
parents:
diff changeset
519 background-color: #cccccc;
5367786dc871 Uploaded
greg
parents:
diff changeset
520 }
5367786dc871 Uploaded
greg
parents:
diff changeset
521
5367786dc871 Uploaded
greg
parents:
diff changeset
522 table.draggable td.second_through_last_col_headers_td {
5367786dc871 Uploaded
greg
parents:
diff changeset
523 padding-left: 0 !important; /* compensate handle images */
5367786dc871 Uploaded
greg
parents:
diff changeset
524 }
5367786dc871 Uploaded
greg
parents:
diff changeset
525
5367786dc871 Uploaded
greg
parents:
diff changeset
526 table.draggable td.cell_of_empty_space * {
5367786dc871 Uploaded
greg
parents:
diff changeset
527 visibility: hidden;
5367786dc871 Uploaded
greg
parents:
diff changeset
528 }
5367786dc871 Uploaded
greg
parents:
diff changeset
529
5367786dc871 Uploaded
greg
parents:
diff changeset
530 table.draggable td.cell_of_empty_space {
5367786dc871 Uploaded
greg
parents:
diff changeset
531 border: none !important;
5367786dc871 Uploaded
greg
parents:
diff changeset
532 /*border-left: 1px solid #888888;
5367786dc871 Uploaded
greg
parents:
diff changeset
533 border-right: 1px solid #888888;
5367786dc871 Uploaded
greg
parents:
diff changeset
534 margin-right: -1px !important;
5367786dc871 Uploaded
greg
parents:
diff changeset
535 margin-left: -1px !important; */
5367786dc871 Uploaded
greg
parents:
diff changeset
536 }
5367786dc871 Uploaded
greg
parents:
diff changeset
537
5367786dc871 Uploaded
greg
parents:
diff changeset
538 /*table.draggable td.bottom_cell_of_empty_space {
5367786dc871 Uploaded
greg
parents:
diff changeset
539 border-bottom: 1px solid #888888 !important;
5367786dc871 Uploaded
greg
parents:
diff changeset
540 }
5367786dc871 Uploaded
greg
parents:
diff changeset
541
5367786dc871 Uploaded
greg
parents:
diff changeset
542 table.draggable td.top_cell_of_empty_space {
5367786dc871 Uploaded
greg
parents:
diff changeset
543 border-top: 1px solid #888888 !important;
5367786dc871 Uploaded
greg
parents:
diff changeset
544 /*margin-top: -1px;
5367786dc871 Uploaded
greg
parents:
diff changeset
545 }*/
5367786dc871 Uploaded
greg
parents:
diff changeset
546
5367786dc871 Uploaded
greg
parents:
diff changeset
547 table.draggable td.top_cell_of_empty_space {
5367786dc871 Uploaded
greg
parents:
diff changeset
548 }
5367786dc871 Uploaded
greg
parents:
diff changeset
549
5367786dc871 Uploaded
greg
parents:
diff changeset
550 table.draggable td.left_to_cell_of_empty_space {
5367786dc871 Uploaded
greg
parents:
diff changeset
551 /*outline-left: 1px solid #888888;*/
5367786dc871 Uploaded
greg
parents:
diff changeset
552 }
5367786dc871 Uploaded
greg
parents:
diff changeset
553
5367786dc871 Uploaded
greg
parents:
diff changeset
554 table.draggable td.right_to_cell_of_empty_space {
5367786dc871 Uploaded
greg
parents:
diff changeset
555 /*outline-right: 1px solid #888888;*/
5367786dc871 Uploaded
greg
parents:
diff changeset
556 }
5367786dc871 Uploaded
greg
parents:
diff changeset
557
5367786dc871 Uploaded
greg
parents:
diff changeset
558 /********/
5367786dc871 Uploaded
greg
parents:
diff changeset
559 /* META */
5367786dc871 Uploaded
greg
parents:
diff changeset
560 #main_ref_genome {
5367786dc871 Uploaded
greg
parents:
diff changeset
561
5367786dc871 Uploaded
greg
parents:
diff changeset
562 }
5367786dc871 Uploaded
greg
parents:
diff changeset
563
5367786dc871 Uploaded
greg
parents:
diff changeset
564 table#refgenome td.last_row {
5367786dc871 Uploaded
greg
parents:
diff changeset
565 border-top: 1px solid #ddd;
5367786dc871 Uploaded
greg
parents:
diff changeset
566 }
5367786dc871 Uploaded
greg
parents:
diff changeset
567
5367786dc871 Uploaded
greg
parents:
diff changeset
568 /************/
5367786dc871 Uploaded
greg
parents:
diff changeset
569 /* PLOTTING */
5367786dc871 Uploaded
greg
parents:
diff changeset
570 .plot-switch {
5367786dc871 Uploaded
greg
parents:
diff changeset
571 margin-left: 10px;
5367786dc871 Uploaded
greg
parents:
diff changeset
572 }
5367786dc871 Uploaded
greg
parents:
diff changeset
573
5367786dc871 Uploaded
greg
parents:
diff changeset
574 .plot-mis-type-switch {
5367786dc871 Uploaded
greg
parents:
diff changeset
575 margin-left: 23px;
5367786dc871 Uploaded
greg
parents:
diff changeset
576 }
5367786dc871 Uploaded
greg
parents:
diff changeset
577
5367786dc871 Uploaded
greg
parents:
diff changeset
578 .plot-wrapper {
5367786dc871 Uploaded
greg
parents:
diff changeset
579 padding-right: 80px;
5367786dc871 Uploaded
greg
parents:
diff changeset
580 }
5367786dc871 Uploaded
greg
parents:
diff changeset
581
5367786dc871 Uploaded
greg
parents:
diff changeset
582 .plot-header {
5367786dc871 Uploaded
greg
parents:
diff changeset
583 margin-left: 0;
5367786dc871 Uploaded
greg
parents:
diff changeset
584 font-weight: bold;
5367786dc871 Uploaded
greg
parents:
diff changeset
585 height: 1.5em;
5367786dc871 Uploaded
greg
parents:
diff changeset
586 display: block;
5367786dc871 Uploaded
greg
parents:
diff changeset
587 }
5367786dc871 Uploaded
greg
parents:
diff changeset
588
5367786dc871 Uploaded
greg
parents:
diff changeset
589 .plots {
5367786dc871 Uploaded
greg
parents:
diff changeset
590 margin-left: -30px;
5367786dc871 Uploaded
greg
parents:
diff changeset
591 margin-right: 70px;
5367786dc871 Uploaded
greg
parents:
diff changeset
592 margin-top: 2px;
5367786dc871 Uploaded
greg
parents:
diff changeset
593 margin-bottom: 50px;
5367786dc871 Uploaded
greg
parents:
diff changeset
594 float: left;
5367786dc871 Uploaded
greg
parents:
diff changeset
595 }
5367786dc871 Uploaded
greg
parents:
diff changeset
596 .plots td {
5367786dc871 Uploaded
greg
parents:
diff changeset
597 vertical-align: top;
5367786dc871 Uploaded
greg
parents:
diff changeset
598 white-space: nowrap;
5367786dc871 Uploaded
greg
parents:
diff changeset
599 }
5367786dc871 Uploaded
greg
parents:
diff changeset
600
5367786dc871 Uploaded
greg
parents:
diff changeset
601 .plots div#plots-switches, tr#plots-into-tr p {
5367786dc871 Uploaded
greg
parents:
diff changeset
602 padding-left: 30px;
5367786dc871 Uploaded
greg
parents:
diff changeset
603 }
5367786dc871 Uploaded
greg
parents:
diff changeset
604
5367786dc871 Uploaded
greg
parents:
diff changeset
605 #legend-placeholder {
5367786dc871 Uploaded
greg
parents:
diff changeset
606 min-width: 80px;
5367786dc871 Uploaded
greg
parents:
diff changeset
607 margin-top: -2px;
5367786dc871 Uploaded
greg
parents:
diff changeset
608 margin-left: -5px;
5367786dc871 Uploaded
greg
parents:
diff changeset
609 position: relative;
5367786dc871 Uploaded
greg
parents:
diff changeset
610 z-index: 0;
5367786dc871 Uploaded
greg
parents:
diff changeset
611 }
5367786dc871 Uploaded
greg
parents:
diff changeset
612
5367786dc871 Uploaded
greg
parents:
diff changeset
613 .legendColorBox div {
5367786dc871 Uploaded
greg
parents:
diff changeset
614 display: none;
5367786dc871 Uploaded
greg
parents:
diff changeset
615 }
5367786dc871 Uploaded
greg
parents:
diff changeset
616
5367786dc871 Uploaded
greg
parents:
diff changeset
617 #legend-placeholder td {
5367786dc871 Uploaded
greg
parents:
diff changeset
618 vertical-align: top;
5367786dc871 Uploaded
greg
parents:
diff changeset
619 white-space: nowrap;
5367786dc871 Uploaded
greg
parents:
diff changeset
620 }
5367786dc871 Uploaded
greg
parents:
diff changeset
621
5367786dc871 Uploaded
greg
parents:
diff changeset
622 #plot-placeholder {
5367786dc871 Uploaded
greg
parents:
diff changeset
623 width: 986px;
5367786dc871 Uploaded
greg
parents:
diff changeset
624 height: 600px;
5367786dc871 Uploaded
greg
parents:
diff changeset
625
5367786dc871 Uploaded
greg
parents:
diff changeset
626 /* for auto sizing plots when resizing the page
5367786dc871 Uploaded
greg
parents:
diff changeset
627 min-width: 500px;
5367786dc871 Uploaded
greg
parents:
diff changeset
628 min-height: 500px;
5367786dc871 Uploaded
greg
parents:
diff changeset
629 width: 100%;
5367786dc871 Uploaded
greg
parents:
diff changeset
630 min-height: 400px;
5367786dc871 Uploaded
greg
parents:
diff changeset
631 height: 50%; */
5367786dc871 Uploaded
greg
parents:
diff changeset
632
5367786dc871 Uploaded
greg
parents:
diff changeset
633 margin-left: -55px;
5367786dc871 Uploaded
greg
parents:
diff changeset
634 margin-right: 20px;
5367786dc871 Uploaded
greg
parents:
diff changeset
635 float: left;
5367786dc871 Uploaded
greg
parents:
diff changeset
636
5367786dc871 Uploaded
greg
parents:
diff changeset
637 z-index: 2;
5367786dc871 Uploaded
greg
parents:
diff changeset
638 }
5367786dc871 Uploaded
greg
parents:
diff changeset
639
5367786dc871 Uploaded
greg
parents:
diff changeset
640 #change-assembly {
5367786dc871 Uploaded
greg
parents:
diff changeset
641 white-space: nowrap;
5367786dc871 Uploaded
greg
parents:
diff changeset
642 width: 0;
5367786dc871 Uploaded
greg
parents:
diff changeset
643 }
5367786dc871 Uploaded
greg
parents:
diff changeset
644
5367786dc871 Uploaded
greg
parents:
diff changeset
645 /*************/
5367786dc871 Uploaded
greg
parents:
diff changeset
646 /* Plot tips */
5367786dc871 Uploaded
greg
parents:
diff changeset
647 #plot_tip {
5367786dc871 Uploaded
greg
parents:
diff changeset
648 position: absolute;
5367786dc871 Uploaded
greg
parents:
diff changeset
649 opacity: 1;
5367786dc871 Uploaded
greg
parents:
diff changeset
650 padding: 2px 5px 2px 5px;
5367786dc871 Uploaded
greg
parents:
diff changeset
651
5367786dc871 Uploaded
greg
parents:
diff changeset
652 z-index: 1;
5367786dc871 Uploaded
greg
parents:
diff changeset
653 }
5367786dc871 Uploaded
greg
parents:
diff changeset
654
5367786dc871 Uploaded
greg
parents:
diff changeset
655 #plot_tip_vertical_rule, #plot_tip_horizontal_rule {
5367786dc871 Uploaded
greg
parents:
diff changeset
656 position: absolute;
5367786dc871 Uploaded
greg
parents:
diff changeset
657 border: 1px solid #BBB;
5367786dc871 Uploaded
greg
parents:
diff changeset
658 z-index: -2;
5367786dc871 Uploaded
greg
parents:
diff changeset
659 }
5367786dc871 Uploaded
greg
parents:
diff changeset
660
5367786dc871 Uploaded
greg
parents:
diff changeset
661 #plot_tip_vertical_rule {
5367786dc871 Uploaded
greg
parents:
diff changeset
662 border-left: 1px;
5367786dc871 Uploaded
greg
parents:
diff changeset
663 }
5367786dc871 Uploaded
greg
parents:
diff changeset
664
5367786dc871 Uploaded
greg
parents:
diff changeset
665 #plot_tip_horizontal_rule {
5367786dc871 Uploaded
greg
parents:
diff changeset
666 border-top: 1px;
5367786dc871 Uploaded
greg
parents:
diff changeset
667 }
5367786dc871 Uploaded
greg
parents:
diff changeset
668
5367786dc871 Uploaded
greg
parents:
diff changeset
669 .white_stroked {
5367786dc871 Uploaded
greg
parents:
diff changeset
670 color: black;
5367786dc871 Uploaded
greg
parents:
diff changeset
671 background-color: white;
5367786dc871 Uploaded
greg
parents:
diff changeset
672 text-shadow:
5367786dc871 Uploaded
greg
parents:
diff changeset
673 -3px -3px 0 white,
5367786dc871 Uploaded
greg
parents:
diff changeset
674 3px -3px 0 white,
5367786dc871 Uploaded
greg
parents:
diff changeset
675 -3px 3px 0 white,
5367786dc871 Uploaded
greg
parents:
diff changeset
676 3px 3px 0 white;
5367786dc871 Uploaded
greg
parents:
diff changeset
677 }
5367786dc871 Uploaded
greg
parents:
diff changeset
678
5367786dc871 Uploaded
greg
parents:
diff changeset
679 img.icon_plot {
5367786dc871 Uploaded
greg
parents:
diff changeset
680 width: 14px;
5367786dc871 Uploaded
greg
parents:
diff changeset
681 height: 12px;
5367786dc871 Uploaded
greg
parents:
diff changeset
682 display: inline-block;
5367786dc871 Uploaded
greg
parents:
diff changeset
683 content: '';
5367786dc871 Uploaded
greg
parents:
diff changeset
684 background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAANCAYAAACZ3F9/AAAACXBIWXMAAAsTAAALEwEAmpwYAAA7oGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS41LWMwMjEgNzkuMTU1NzcyLCAyMDE0LzAxLzEzLTE5OjQ0OjAwICAgICAgICAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgICAgICAgICAgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgMjAxNCAoTWFjaW50b3NoKTwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8eG1wOkNyZWF0ZURhdGU+MjAxNS0wOC0wN1QxNjowMzowNCswMzowMDwveG1wOkNyZWF0ZURhdGU+CiAgICAgICAgIDx4bXA6TW9kaWZ5RGF0ZT4yMDE1LTA4LTA3VDIxOjE2OjMyKzAzOjAwPC94bXA6TW9kaWZ5RGF0ZT4KICAgICAgICAgPHhtcDpNZXRhZGF0YURhdGU+MjAxNS0wOC0wN1QyMToxNjozMiswMzowMDwveG1wOk1ldGFkYXRhRGF0ZT4KICAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9wbmc8L2RjOmZvcm1hdD4KICAgICAgICAgPHBob3Rvc2hvcDpDb2xvck1vZGU+MzwvcGhvdG9zaG9wOkNvbG9yTW9kZT4KICAgICAgICAgPHhtcE1NOkluc3RhbmNlSUQ+eG1wLmlpZDphYjJhNzRkZi04MjcxLTQ1NjctOTgxNy0zNTVkNTAwNmQ5OTk8L3htcE1NOkluc3RhbmNlSUQ+CiAgICAgICAgIDx4bXBNTTpEb2N1bWVudElEPnhtcC5kaWQ6ZWUxMmZkZGQtZWQ3OC00MTliLTk5MDctZTQ5OTkyZDUyNjRiPC94bXBNTTpEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06T3JpZ2luYWxEb2N1bWVudElEPnhtcC5kaWQ6ZWUxMmZkZGQtZWQ3OC00MTliLTk5MDctZTQ5OTkyZDUyNjRiPC94bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpIaXN0b3J5PgogICAgICAgICAgICA8cmRmOlNlcT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24+Y3JlYXRlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOmVlMTJmZGRkLWVkNzgtNDE5Yi05OTA3LWU0OTk5MmQ1MjY0Yjwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAxNS0wOC0wN1QxNjowMzowNCswMzowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9zaG9wIENDIDIwMTQgKE1hY2ludG9zaCk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5zYXZlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjQzY2E0MmJhLWQ2YmItNGQ5MC05MDQ0LTc2NDJiMjgxNGVjZTwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAxNS0wOC0wN1QyMTowMjo1NSswMzowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9zaG9wIENDIDIwMTQgKE1hY2ludG9zaCk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpjaGFuZ2VkPi88L3N0RXZ0OmNoYW5nZWQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5zYXZlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOmFiMmE3NGRmLTgyNzEtNDU2Ny05ODE3LTM1NWQ1MDA2ZDk5OTwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAxNS0wOC0wN1QyMToxNjozMiswMzowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9zaG9wIENDIDIwMTQgKE1hY2ludG9zaCk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpjaGFuZ2VkPi88L3N0RXZ0OmNoYW5nZWQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpTZXE+CiAgICAgICAgIDwveG1wTU06SGlzdG9yeT4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WFJlc29sdXRpb24+NzIwMDAwLzEwMDAwPC90aWZmOlhSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpZUmVzb2x1dGlvbj43MjAwMDAvMTAwMDA8L3RpZmY6WVJlc29sdXRpb24+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDxleGlmOkNvbG9yU3BhY2U+NjU1MzU8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjE0PC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjEzPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz6T8SobAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAD7SURBVHjaYvz//z8DOYCJgUxAHY393d3PGRgYPqDjG4sWfnh348ZzZLUsyJz///5JwNjPP/1guPbuG4MJ63cGtn9/GQSlpfhx2sjCx/ft8apVDF/OnmF4zcjG8OL7H4YDxy8wfPcMYnjNyv0Np8bf378xiGqpMzz9/Z/h7c6dDKab5jA4mOsyPPr+n+Hhq/cMOJ3K9OMbw0cdfYY3nxkYDPlvMHxh/MbALyvH4IklcFA0sjAzc737ysAg9vc3g4CmBoOApgayNBcyhxE5ASRERDwX4OXk5GDnYPjy8xcDAyMjA8P//wy/f/1mUFRW/l5RVy+JVePgTjmAAQCr211NDit/xwAAAABJRU5ErkJggg==");
5367786dc871 Uploaded
greg
parents:
diff changeset
685 }
5367786dc871 Uploaded
greg
parents:
diff changeset
686
5367786dc871 Uploaded
greg
parents:
diff changeset
687 #sortRefsBtn label {
5367786dc871 Uploaded
greg
parents:
diff changeset
688 display: block;
5367786dc871 Uploaded
greg
parents:
diff changeset
689 margin-left: 20px;
5367786dc871 Uploaded
greg
parents:
diff changeset
690 }
5367786dc871 Uploaded
greg
parents:
diff changeset
691 #sortRefsBtn input {
5367786dc871 Uploaded
greg
parents:
diff changeset
692 float: left;
5367786dc871 Uploaded
greg
parents:
diff changeset
693 margin-left: -20px;
5367786dc871 Uploaded
greg
parents:
diff changeset
694 margin-right: 7px;
5367786dc871 Uploaded
greg
parents:
diff changeset
695 }
5367786dc871 Uploaded
greg
parents:
diff changeset
696
5367786dc871 Uploaded
greg
parents:
diff changeset
697 #mincontig {
5367786dc871 Uploaded
greg
parents:
diff changeset
698 margin-bottom: 0;
5367786dc871 Uploaded
greg
parents:
diff changeset
699 }
5367786dc871 Uploaded
greg
parents:
diff changeset
700 </style>
5367786dc871 Uploaded
greg
parents:
diff changeset
701
5367786dc871 Uploaded
greg
parents:
diff changeset
702
5367786dc871 Uploaded
greg
parents:
diff changeset
703 <script type="text/javascript">
5367786dc871 Uploaded
greg
parents:
diff changeset
704 /*! jQuery v1.8.2 jquery.com | jquery.org/license */
5367786dc871 Uploaded
greg
parents:
diff changeset
705 (function(a,b){function G(a){var b=F[a]={};return p.each(a.split(s),function(a,c){b[c]=!0}),b}function J(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(I,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:+d+""===d?+d:H.test(d)?p.parseJSON(d):d}catch(f){}p.data(a,c,d)}else d=b}return d}function K(a){var b;for(b in a){if(b==="data"&&p.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function ba(){return!1}function bb(){return!0}function bh(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function bi(a,b){do a=a[b];while(a&&a.nodeType!==1);return a}function bj(a,b,c){b=b||0;if(p.isFunction(b))return p.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return p.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=p.grep(a,function(a){return a.nodeType===1});if(be.test(b))return p.filter(b,d,!c);b=p.filter(b,d)}return p.grep(a,function(a,d){return p.inArray(a,b)>=0===c})}function bk(a){var b=bl.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function bC(a,b){return a.getElementsByTagName(b)[0]||a.appendChild(a.ownerDocument.createElement(b))}function bD(a,b){if(b.nodeType!==1||!p.hasData(a))return;var c,d,e,f=p._data(a),g=p._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;d<e;d++)p.event.add(b,c,h[c][d])}g.data&&(g.data=p.extend({},g.data))}function bE(a,b){var c;if(b.nodeType!==1)return;b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase(),c==="object"?(b.parentNode&&(b.outerHTML=a.outerHTML),p.support.html5Clone&&a.innerHTML&&!p.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):c==="input"&&bv.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):c==="option"?b.selected=a.defaultSelected:c==="input"||c==="textarea"?b.defaultValue=a.defaultValue:c==="script"&&b.text!==a.text&&(b.text=a.text),b.removeAttribute(p.expando)}function bF(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bG(a){bv.test(a.type)&&(a.defaultChecked=a.checked)}function bY(a,b){if(b in a)return b;var c=b.charAt(0).toUpperCase()+b.slice(1),d=b,e=bW.length;while(e--){b=bW[e]+c;if(b in a)return b}return d}function bZ(a,b){return a=b||a,p.css(a,"display")==="none"||!p.contains(a.ownerDocument,a)}function b$(a,b){var c,d,e=[],f=0,g=a.length;for(;f<g;f++){c=a[f];if(!c.style)continue;e[f]=p._data(c,"olddisplay"),b?(!e[f]&&c.style.display==="none"&&(c.style.display=""),c.style.display===""&&bZ(c)&&(e[f]=p._data(c,"olddisplay",cc(c.nodeName)))):(d=bH(c,"display"),!e[f]&&d!=="none"&&p._data(c,"olddisplay",d))}for(f=0;f<g;f++){c=a[f];if(!c.style)continue;if(!b||c.style.display==="none"||c.style.display==="")c.style.display=b?e[f]||"":"none"}return a}function b_(a,b,c){var d=bP.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function ca(a,b,c,d){var e=c===(d?"border":"content")?4:b==="width"?1:0,f=0;for(;e<4;e+=2)c==="margin"&&(f+=p.css(a,c+bV[e],!0)),d?(c==="content"&&(f-=parseFloat(bH(a,"padding"+bV[e]))||0),c!=="margin"&&(f-=parseFloat(bH(a,"border"+bV[e]+"Width"))||0)):(f+=parseFloat(bH(a,"padding"+bV[e]))||0,c!=="padding"&&(f+=parseFloat(bH(a,"border"+bV[e]+"Width"))||0));return f}function cb(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=!0,f=p.support.boxSizing&&p.css(a,"boxSizing")==="border-box";if(d<=0||d==null){d=bH(a,b);if(d<0||d==null)d=a.style[b];if(bQ.test(d))return d;e=f&&(p.support.boxSizingReliable||d===a.style[b]),d=parseFloat(d)||0}return d+ca(a,b,c||(f?"border":"content"),e)+"px"}function cc(a){if(bS[a])return bS[a];var b=p("<"+a+">").appendTo(e.body),c=b.css("display");b.remove();if(c==="none"||c===""){bI=e.body.appendChild(bI||p.extend(e.createElement("iframe"),{frameBorder:0,width:0,height:0}));if(!bJ||!bI.createElement)bJ=(bI.contentWindow||bI.contentDocument).document,bJ.write("<!doctype html><html><body>"),bJ.close();b=bJ.body.appendChild(bJ.createElement(a)),c=bH(b,"display"),e.body.removeChild(bI)}return bS[a]=c,c}function ci(a,b,c,d){var e;if(p.isArray(b))p.each(b,function(b,e){c||ce.test(a)?d(a,e):ci(a+"["+(typeof e=="object"?b:"")+"]",e,c,d)});else if(!c&&p.type(b)==="object")for(e in b)ci(a+"["+e+"]",b[e],c,d);else d(a,b)}function cz(a){return function(b,c){typeof b!="string"&&(c=b,b="*");var d,e,f,g=b.toLowerCase().split(s),h=0,i=g.length;if(p.isFunction(c))for(;h<i;h++)d=g[h],f=/^\+/.test(d),f&&(d=d.substr(1)||"*"),e=a[d]=a[d]||[],e[f?"unshift":"push"](c)}}function cA(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h,i=a[f],j=0,k=i?i.length:0,l=a===cv;for(;j<k&&(l||!h);j++)h=i[j](c,d,e),typeof h=="string"&&(!l||g[h]?h=b:(c.dataTypes.unshift(h),h=cA(a,c,d,e,h,g)));return(l||!h)&&!g["*"]&&(h=cA(a,c,d,e,"*",g)),h}function cB(a,c){var d,e,f=p.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((f[d]?a:e||(e={}))[d]=c[d]);e&&p.extend(!0,a,e)}function cC(a,c,d){var e,f,g,h,i=a.contents,j=a.dataTypes,k=a.responseFields;for(f in k)f in d&&(c[k[f]]=d[f]);while(j[0]==="*")j.shift(),e===b&&(e=a.mimeType||c.getResponseHeader("content-type"));if(e)for(f in i)if(i[f]&&i[f].test(e)){j.unshift(f);break}if(j[0]in d)g=j[0];else{for(f in d){if(!j[0]||a.converters[f+" "+j[0]]){g=f;break}h||(h=f)}g=g||h}if(g)return g!==j[0]&&j.unshift(g),d[g]}function cD(a,b){var c,d,e,f,g=a.dataTypes.slice(),h=g[0],i={},j=0;a.dataFilter&&(b=a.dataFilter(b,a.dataType));if(g[1])for(c in a.converters)i[c.toLowerCase()]=a.converters[c];for(;e=g[++j];)if(e!=="*"){if(h!=="*"&&h!==e){c=i[h+" "+e]||i["* "+e];if(!c)for(d in i){f=d.split(" ");if(f[1]===e){c=i[h+" "+f[0]]||i["* "+f[0]];if(c){c===!0?c=i[d]:i[d]!==!0&&(e=f[0],g.splice(j--,0,e));break}}}if(c!==!0)if(c&&a["throws"])b=c(b);else try{b=c(b)}catch(k){return{state:"parsererror",error:c?k:"No conversion from "+h+" to "+e}}}h=e}return{state:"success",data:b}}function cL(){try{return new a.XMLHttpRequest}catch(b){}}function cM(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function cU(){return setTimeout(function(){cN=b},0),cN=p.now()}function cV(a,b){p.each(b,function(b,c){var d=(cT[b]||[]).concat(cT["*"]),e=0,f=d.length;for(;e<f;e++)if(d[e].call(a,b,c))return})}function cW(a,b,c){var d,e=0,f=0,g=cS.length,h=p.Deferred().always(function(){delete i.elem}),i=function(){var b=cN||cU(),c=Math.max(0,j.startTime+j.duration-b),d=1-(c/j.duration||0),e=0,f=j.tweens.length;for(;e<f;e++)j.tweens[e].run(d);return h.notifyWith(a,[j,d,c]),d<1&&f?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:p.extend({},b),opts:p.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:cN||cU(),duration:c.duration,tweens:[],createTween:function(b,c,d){var e=p.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(e),e},stop:function(b){var c=0,d=b?j.tweens.length:0;for(;c<d;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;cX(k,j.opts.specialEasing);for(;e<g;e++){d=cS[e].call(j,a,k,j.opts);if(d)return d}return cV(j,k),p.isFunction(j.opts.start)&&j.opts.start.call(a,j),p.fx.timer(p.extend(i,{anim:j,queue:j.opts.queue,elem:a})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}function cX(a,b){var c,d,e,f,g;for(c in a){d=p.camelCase(c),e=b[d],f=a[c],p.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=p.cssHooks[d];if(g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}}function cY(a,b,c){var d,e,f,g,h,i,j,k,l=this,m=a.style,n={},o=[],q=a.nodeType&&bZ(a);c.queue||(j=p._queueHooks(a,"fx"),j.unqueued==null&&(j.unqueued=0,k=j.empty.fire,j.empty.fire=function(){j.unqueued||k()}),j.unqueued++,l.always(function(){l.always(function(){j.unqueued--,p.queue(a,"fx").length||j.empty.fire()})})),a.nodeType===1&&("height"in b||"width"in b)&&(c.overflow=[m.overflow,m.overflowX,m.overflowY],p.css(a,"display")==="inline"&&p.css(a,"float")==="none"&&(!p.support.inlineBlockNeedsLayout||cc(a.nodeName)==="inline"?m.display="inline-block":m.zoom=1)),c.overflow&&(m.overflow="hidden",p.support.shrinkWrapBlocks||l.done(function(){m.overflow=c.overflow[0],m.overflowX=c.overflow[1],m.overflowY=c.overflow[2]}));for(d in b){f=b[d];if(cP.exec(f)){delete b[d];if(f===(q?"hide":"show"))continue;o.push(d)}}g=o.length;if(g){h=p._data(a,"fxshow")||p._data(a,"fxshow",{}),q?p(a).show():l.done(function(){p(a).hide()}),l.done(function(){var b;p.removeData(a,"fxshow",!0);for(b in n)p.style(a,b,n[b])});for(d=0;d<g;d++)e=o[d],i=l.createTween(e,q?h[e]:0),n[e]=h[e]||p.style(a,e),e in h||(h[e]=i.start,q&&(i.end=i.start,i.start=e==="width"||e==="height"?1:0))}}function cZ(a,b,c,d,e){return new cZ.prototype.init(a,b,c,d,e)}function c$(a,b){var c,d={height:a},e=0;b=b?1:0;for(;e<4;e+=2-b)c=bV[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function da(a){return p.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}var c,d,e=a.document,f=a.location,g=a.navigator,h=a.jQuery,i=a.$,j=Array.prototype.push,k=Array.prototype.slice,l=Array.prototype.indexOf,m=Object.prototype.toString,n=Object.prototype.hasOwnProperty,o=String.prototype.trim,p=function(a,b){return new p.fn.init(a,b,c)},q=/[\-+]?(?:\d*\.|)\d+(?:[eE][\-+]?\d+|)/.source,r=/\S/,s=/\s+/,t=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,u=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^[\],:{}\s]*$/,x=/(?:^|:|,)(?:\s*\[)+/g,y=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,z=/"[^"\\\r\n]*"|true|false|null|-?(?:\d\d*\.|)\d+(?:[eE][\-+]?\d+|)/g,A=/^-ms-/,B=/-([\da-z])/gi,C=function(a,b){return(b+"").toUpperCase()},D=function(){e.addEventListener?(e.removeEventListener("DOMContentLoaded",D,!1),p.ready()):e.readyState==="complete"&&(e.detachEvent("onreadystatechange",D),p.ready())},E={};p.fn=p.prototype={constructor:p,init:function(a,c,d){var f,g,h,i;if(!a)return this;if(a.nodeType)return this.context=this[0]=a,this.length=1,this;if(typeof a=="string"){a.charAt(0)==="<"&&a.charAt(a.length-1)===">"&&a.length>=3?f=[null,a,null]:f=u.exec(a);if(f&&(f[1]||!c)){if(f[1])return c=c instanceof p?c[0]:c,i=c&&c.nodeType?c.ownerDocument||c:e,a=p.parseHTML(f[1],i,!0),v.test(f[1])&&p.isPlainObject(c)&&this.attr.call(a,c,!0),p.merge(this,a);g=e.getElementById(f[2]);if(g&&g.parentNode){if(g.id!==f[2])return d.find(a);this.length=1,this[0]=g}return this.context=e,this.selector=a,this}return!c||c.jquery?(c||d).find(a):this.constructor(c).find(a)}return p.isFunction(a)?d.ready(a):(a.selector!==b&&(this.selector=a.selector,this.context=a.context),p.makeArray(a,this))},selector:"",jquery:"1.8.2",length:0,size:function(){return this.length},toArray:function(){return k.call(this)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=p.merge(this.constructor(),a);return d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")"),d},each:function(a,b){return p.each(this,a,b)},ready:function(a){return p.ready.promise().done(a),this},eq:function(a){return a=+a,a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(k.apply(this,arguments),"slice",k.call(arguments).join(","))},map:function(a){return this.pushStack(p.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:j,sort:[].sort,splice:[].splice},p.fn.init.prototype=p.fn,p.extend=p.fn.extend=function(){var a,c,d,e,f,g,h=arguments[0]||{},i=1,j=arguments.length,k=!1;typeof h=="boolean"&&(k=h,h=arguments[1]||{},i=2),typeof h!="object"&&!p.isFunction(h)&&(h={}),j===i&&(h=this,--i);for(;i<j;i++)if((a=arguments[i])!=null)for(c in a){d=h[c],e=a[c];if(h===e)continue;k&&e&&(p.isPlainObject(e)||(f=p.isArray(e)))?(f?(f=!1,g=d&&p.isArray(d)?d:[]):g=d&&p.isPlainObject(d)?d:{},h[c]=p.extend(k,g,e)):e!==b&&(h[c]=e)}return h},p.extend({noConflict:function(b){return a.$===p&&(a.$=i),b&&a.jQuery===p&&(a.jQuery=h),p},isReady:!1,readyWait:1,holdReady:function(a){a?p.readyWait++:p.ready(!0)},ready:function(a){if(a===!0?--p.readyWait:p.isReady)return;if(!e.body)return setTimeout(p.ready,1);p.isReady=!0;if(a!==!0&&--p.readyWait>0)return;d.resolveWith(e,[p]),p.fn.trigger&&p(e).trigger("ready").off("ready")},isFunction:function(a){return p.type(a)==="function"},isArray:Array.isArray||function(a){return p.type(a)==="array"},isWindow:function(a){return a!=null&&a==a.window},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):E[m.call(a)]||"object"},isPlainObject:function(a){if(!a||p.type(a)!=="object"||a.nodeType||p.isWindow(a))return!1;try{if(a.constructor&&!n.call(a,"constructor")&&!n.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||n.call(a,d)},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},error:function(a){throw new Error(a)},parseHTML:function(a,b,c){var d;return!a||typeof a!="string"?null:(typeof b=="boolean"&&(c=b,b=0),b=b||e,(d=v.exec(a))?[b.createElement(d[1])]:(d=p.buildFragment([a],b,c?null:[]),p.merge([],(d.cacheable?p.clone(d.fragment):d.fragment).childNodes)))},parseJSON:function(b){if(!b||typeof b!="string")return null;b=p.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(w.test(b.replace(y,"@").replace(z,"]").replace(x,"")))return(new Function("return "+b))();p.error("Invalid JSON: "+b)},parseXML:function(c){var d,e;if(!c||typeof c!="string")return null;try{a.DOMParser?(e=new DOMParser,d=e.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(f){d=b}return(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&p.error("Invalid XML: "+c),d},noop:function(){},globalEval:function(b){b&&r.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(A,"ms-").replace(B,C)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,c,d){var e,f=0,g=a.length,h=g===b||p.isFunction(a);if(d){if(h){for(e in a)if(c.apply(a[e],d)===!1)break}else for(;f<g;)if(c.apply(a[f++],d)===!1)break}else if(h){for(e in a)if(c.call(a[e],e,a[e])===!1)break}else for(;f<g;)if(c.call(a[f],f,a[f++])===!1)break;return a},trim:o&&!o.call(" ")?function(a){return a==null?"":o.call(a)}:function(a){return a==null?"":(a+"").replace(t,"")},makeArray:function(a,b){var c,d=b||[];return a!=null&&(c=p.type(a),a.length==null||c==="string"||c==="function"||c==="regexp"||p.isWindow(a)?j.call(d,a):p.merge(d,a)),d},inArray:function(a,b,c){var d;if(b){if(l)return l.call(b,a,c);d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=c.length,e=a.length,f=0;if(typeof d=="number")for(;f<d;f++)a[e++]=c[f];else while(c[f]!==b)a[e++]=c[f++];return a.length=e,a},grep:function(a,b,c){var d,e=[],f=0,g=a.length;c=!!c;for(;f<g;f++)d=!!b(a[f],f),c!==d&&e.push(a[f]);return e},map:function(a,c,d){var e,f,g=[],h=0,i=a.length,j=a instanceof p||i!==b&&typeof i=="number"&&(i>0&&a[0]&&a[i-1]||i===0||p.isArray(a));if(j)for(;h<i;h++)e=c(a[h],h,d),e!=null&&(g[g.length]=e);else for(f in a)e=c(a[f],f,d),e!=null&&(g[g.length]=e);return g.concat.apply([],g)},guid:1,proxy:function(a,c){var d,e,f;return typeof c=="string"&&(d=a[c],c=a,a=d),p.isFunction(a)?(e=k.call(arguments,2),f=function(){return a.apply(c,e.concat(k.call(arguments)))},f.guid=a.guid=a.guid||p.guid++,f):b},access:function(a,c,d,e,f,g,h){var i,j=d==null,k=0,l=a.length;if(d&&typeof d=="object"){for(k in d)p.access(a,c,k,d[k],1,g,e);f=1}else if(e!==b){i=h===b&&p.isFunction(e),j&&(i?(i=c,c=function(a,b,c){return i.call(p(a),c)}):(c.call(a,e),c=null));if(c)for(;k<l;k++)c(a[k],d,i?e.call(a[k],k,c(a[k],d)):e,h);f=1}return f?a:j?c.call(a):l?c(a[0],d):g},now:function(){return(new Date).getTime()}}),p.ready.promise=function(b){if(!d){d=p.Deferred();if(e.readyState==="complete")setTimeout(p.ready,1);else if(e.addEventListener)e.addEventListener("DOMContentLoaded",D,!1),a.addEventListener("load",p.ready,!1);else{e.attachEvent("onreadystatechange",D),a.attachEvent("onload",p.ready);var c=!1;try{c=a.frameElement==null&&e.documentElement}catch(f){}c&&c.doScroll&&function g(){if(!p.isReady){try{c.doScroll("left")}catch(a){return setTimeout(g,50)}p.ready()}}()}}return d.promise(b)},p.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){E["[object "+b+"]"]=b.toLowerCase()}),c=p(e);var F={};p.Callbacks=function(a){a=typeof a=="string"?F[a]||G(a):p.extend({},a);var c,d,e,f,g,h,i=[],j=!a.once&&[],k=function(b){c=a.memory&&b,d=!0,h=f||0,f=0,g=i.length,e=!0;for(;i&&h<g;h++)if(i[h].apply(b[0],b[1])===!1&&a.stopOnFalse){c=!1;break}e=!1,i&&(j?j.length&&k(j.shift()):c?i=[]:l.disable())},l={add:function(){if(i){var b=i.length;(function d(b){p.each(b,function(b,c){var e=p.type(c);e==="function"&&(!a.unique||!l.has(c))?i.push(c):c&&c.length&&e!=="string"&&d(c)})})(arguments),e?g=i.length:c&&(f=b,k(c))}return this},remove:function(){return i&&p.each(arguments,function(a,b){var c;while((c=p.inArray(b,i,c))>-1)i.splice(c,1),e&&(c<=g&&g--,c<=h&&h--)}),this},has:function(a){return p.inArray(a,i)>-1},empty:function(){return i=[],this},disable:function(){return i=j=c=b,this},disabled:function(){return!i},lock:function(){return j=b,c||l.disable(),this},locked:function(){return!j},fireWith:function(a,b){return b=b||[],b=[a,b.slice?b.slice():b],i&&(!d||j)&&(e?j.push(b):k(b)),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!d}};return l},p.extend({Deferred:function(a){var b=[["resolve","done",p.Callbacks("once memory"),"resolved"],["reject","fail",p.Callbacks("once memory"),"rejected"],["notify","progress",p.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return p.Deferred(function(c){p.each(b,function(b,d){var f=d[0],g=a[b];e[d[1]](p.isFunction(g)?function(){var a=g.apply(this,arguments);a&&p.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f+"With"](this===e?c:this,[a])}:c[f])}),a=null}).promise()},promise:function(a){return a!=null?p.extend(a,d):d}},e={};return d.pipe=d.then,p.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[a^1][2].disable,b[2][2].lock),e[f[0]]=g.fire,e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=k.call(arguments),d=c.length,e=d!==1||a&&p.isFunction(a.promise)?d:0,f=e===1?a:p.Deferred(),g=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?k.call(arguments):d,c===h?f.notifyWith(b,c):--e||f.resolveWith(b,c)}},h,i,j;if(d>1){h=new Array(d),i=new Array(d),j=new Array(d);for(;b<d;b++)c[b]&&p.isFunction(c[b].promise)?c[b].promise().done(g(b,j,c)).fail(f.reject).progress(g(b,i,h)):--e}return e||f.resolveWith(j,c),f.promise()}}),p.support=function(){var b,c,d,f,g,h,i,j,k,l,m,n=e.createElement("div");n.setAttribute("className","t"),n.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",c=n.getElementsByTagName("*"),d=n.getElementsByTagName("a")[0],d.style.cssText="top:1px;float:left;opacity:.5";if(!c||!c.length)return{};f=e.createElement("select"),g=f.appendChild(e.createElement("option")),h=n.getElementsByTagName("input")[0],b={leadingWhitespace:n.firstChild.nodeType===3,tbody:!n.getElementsByTagName("tbody").length,htmlSerialize:!!n.getElementsByTagName("link").length,style:/top/.test(d.getAttribute("style")),hrefNormalized:d.getAttribute("href")==="/a",opacity:/^0.5/.test(d.style.opacity),cssFloat:!!d.style.cssFloat,checkOn:h.value==="on",optSelected:g.selected,getSetAttribute:n.className!=="t",enctype:!!e.createElement("form").enctype,html5Clone:e.createElement("nav").cloneNode(!0).outerHTML!=="<:nav></:nav>",boxModel:e.compatMode==="CSS1Compat",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},h.checked=!0,b.noCloneChecked=h.cloneNode(!0).checked,f.disabled=!0,b.optDisabled=!g.disabled;try{delete n.test}catch(o){b.deleteExpando=!1}!n.addEventListener&&n.attachEvent&&n.fireEvent&&(n.attachEvent("onclick",m=function(){b.noCloneEvent=!1}),n.cloneNode(!0).fireEvent("onclick"),n.detachEvent("onclick",m)),h=e.createElement("input"),h.value="t",h.setAttribute("type","radio"),b.radioValue=h.value==="t",h.setAttribute("checked","checked"),h.setAttribute("name","t"),n.appendChild(h),i=e.createDocumentFragment(),i.appendChild(n.lastChild),b.checkClone=i.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=h.checked,i.removeChild(h),i.appendChild(n);if(n.attachEvent)for(k in{submit:!0,change:!0,focusin:!0})j="on"+k,l=j in n,l||(n.setAttribute(j,"return;"),l=typeof n[j]=="function"),b[k+"Bubbles"]=l;return p(function(){var c,d,f,g,h="padding:0;margin:0;border:0;display:block;overflow:hidden;",i=e.getElementsByTagName("body")[0];if(!i)return;c=e.createElement("div"),c.style.cssText="visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px",i.insertBefore(c,i.firstChild),d=e.createElement("div"),c.appendChild(d),d.innerHTML="<table><tr><td></td><td>t</td></tr></table>",f=d.getElementsByTagName("td"),f[0].style.cssText="padding:0;margin:0;border:0;display:none",l=f[0].offsetHeight===0,f[0].style.display="",f[1].style.display="none",b.reliableHiddenOffsets=l&&f[0].offsetHeight===0,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",b.boxSizing=d.offsetWidth===4,b.doesNotIncludeMarginInBodyOffset=i.offsetTop!==1,a.getComputedStyle&&(b.pixelPosition=(a.getComputedStyle(d,null)||{}).top!=="1%",b.boxSizingReliable=(a.getComputedStyle(d,null)||{width:"4px"}).width==="4px",g=e.createElement("div"),g.style.cssText=d.style.cssText=h,g.style.marginRight=g.style.width="0",d.style.width="1px",d.appendChild(g),b.reliableMarginRight=!parseFloat((a.getComputedStyle(g,null)||{}).marginRight)),typeof d.style.zoom!="undefined"&&(d.innerHTML="",d.style.cssText=h+"width:1px;padding:1px;display:inline;zoom:1",b.inlineBlockNeedsLayout=d.offsetWidth===3,d.style.display="block",d.style.overflow="visible",d.innerHTML="<div></div>",d.firstChild.style.width="5px",b.shrinkWrapBlocks=d.offsetWidth!==3,c.style.zoom=1),i.removeChild(c),c=d=f=g=null}),i.removeChild(n),c=d=f=g=h=i=n=null,b}();var H=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,I=/([A-Z])/g;p.extend({cache:{},deletedIds:[],uuid:0,expando:"jQuery"+(p.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){return a=a.nodeType?p.cache[a[p.expando]]:a[p.expando],!!a&&!K(a)},data:function(a,c,d,e){if(!p.acceptData(a))return;var f,g,h=p.expando,i=typeof c=="string",j=a.nodeType,k=j?p.cache:a,l=j?a[h]:a[h]&&h;if((!l||!k[l]||!e&&!k[l].data)&&i&&d===b)return;l||(j?a[h]=l=p.deletedIds.pop()||p.guid++:l=h),k[l]||(k[l]={},j||(k[l].toJSON=p.noop));if(typeof c=="object"||typeof c=="function")e?k[l]=p.extend(k[l],c):k[l].data=p.extend(k[l].data,c);return f=k[l],e||(f.data||(f.data={}),f=f.data),d!==b&&(f[p.camelCase(c)]=d),i?(g=f[c],g==null&&(g=f[p.camelCase(c)])):g=f,g},removeData:function(a,b,c){if(!p.acceptData(a))return;var d,e,f,g=a.nodeType,h=g?p.cache:a,i=g?a[p.expando]:p.expando;if(!h[i])return;if(b){d=c?h[i]:h[i].data;if(d){p.isArray(b)||(b in d?b=[b]:(b=p.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,f=b.length;e<f;e++)delete d[b[e]];if(!(c?K:p.isEmptyObject)(d))return}}if(!c){delete h[i].data;if(!K(h[i]))return}g?p.cleanData([a],!0):p.support.deleteExpando||h!=h.window?delete h[i]:h[i]=null},_data:function(a,b,c){return p.data(a,b,c,!0)},acceptData:function(a){var b=a.nodeName&&p.noData[a.nodeName.toLowerCase()];return!b||b!==!0&&a.getAttribute("classid")===b}}),p.fn.extend({data:function(a,c){var d,e,f,g,h,i=this[0],j=0,k=null;if(a===b){if(this.length){k=p.data(i);if(i.nodeType===1&&!p._data(i,"parsedAttrs")){f=i.attributes;for(h=f.length;j<h;j++)g=f[j].name,g.indexOf("data-")||(g=p.camelCase(g.substring(5)),J(i,g,k[g]));p._data(i,"parsedAttrs",!0)}}return k}return typeof a=="object"?this.each(function(){p.data(this,a)}):(d=a.split(".",2),d[1]=d[1]?"."+d[1]:"",e=d[1]+"!",p.access(this,function(c){if(c===b)return k=this.triggerHandler("getData"+e,[d[0]]),k===b&&i&&(k=p.data(i,a),k=J(i,a,k)),k===b&&d[1]?this.data(d[0]):k;d[1]=c,this.each(function(){var b=p(this);b.triggerHandler("setData"+e,d),p.data(this,a,c),b.triggerHandler("changeData"+e,d)})},null,c,arguments.length>1,null,!1))},removeData:function(a){return this.each(function(){p.removeData(this,a)})}}),p.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=p._data(a,b),c&&(!d||p.isArray(c)?d=p._data(a,b,p.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=p.queue(a,b),d=c.length,e=c.shift(),f=p._queueHooks(a,b),g=function(){p.dequeue(a,b)};e==="inprogress"&&(e=c.shift(),d--),e&&(b==="fx"&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return p._data(a,c)||p._data(a,c,{empty:p.Callbacks("once memory").add(function(){p.removeData(a,b+"queue",!0),p.removeData(a,c,!0)})})}}),p.fn.extend({queue:function(a,c){var d=2;return typeof a!="string"&&(c=a,a="fx",d--),arguments.length<d?p.queue(this[0],a):c===b?this:this.each(function(){var b=p.queue(this,a,c);p._queueHooks(this,a),a==="fx"&&b[0]!=="inprogress"&&p.dequeue(this,a)})},dequeue:function(a){return this.each(function(){p.dequeue(this,a)})},delay:function(a,b){return a=p.fx?p.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){var d,e=1,f=p.Deferred(),g=this,h=this.length,i=function(){--e||f.resolveWith(g,[g])};typeof a!="string"&&(c=a,a=b),a=a||"fx";while(h--)d=p._data(g[h],a+"queueHooks"),d&&d.empty&&(e++,d.empty.add(i));return i(),f.promise(c)}});var L,M,N,O=/[\t\r\n]/g,P=/\r/g,Q=/^(?:button|input)$/i,R=/^(?:button|input|object|select|textarea)$/i,S=/^a(?:rea|)$/i,T=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,U=p.support.getSetAttribute;p.fn.extend({attr:function(a,b){return p.access(this,p.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){p.removeAttr(this,a)})},prop:function(a,b){return p.access(this,p.prop,a,b,arguments.length>1)},removeProp:function(a){return a=p.propFix[a]||a,this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,f,g,h;if(p.isFunction(a))return this.each(function(b){p(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(s);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{f=" "+e.className+" ";for(g=0,h=b.length;g<h;g++)f.indexOf(" "+b[g]+" ")<0&&(f+=b[g]+" ");e.className=p.trim(f)}}}return this},removeClass:function(a){var c,d,e,f,g,h,i;if(p.isFunction(a))return this.each(function(b){p(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(s);for(h=0,i=this.length;h<i;h++){e=this[h];if(e.nodeType===1&&e.className){d=(" "+e.className+" ").replace(O," ");for(f=0,g=c.length;f<g;f++)while(d.indexOf(" "+c[f]+" ")>=0)d=d.replace(" "+c[f]+" "," ");e.className=a?p.trim(d):""}}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";return p.isFunction(a)?this.each(function(c){p(this).toggleClass(a.call(this,c,this.className,b),b)}):this.each(function(){if(c==="string"){var e,f=0,g=p(this),h=b,i=a.split(s);while(e=i[f++])h=d?h:!g.hasClass(e),g[h?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&p._data(this,"__className__",this.className),this.className=this.className||a===!1?"":p._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(O," ").indexOf(b)>=0)return!0;return!1},val:function(a){var c,d,e,f=this[0];if(!arguments.length){if(f)return c=p.valHooks[f.type]||p.valHooks[f.nodeName.toLowerCase()],c&&"get"in c&&(d=c.get(f,"value"))!==b?d:(d=f.value,typeof d=="string"?d.replace(P,""):d==null?"":d);return}return e=p.isFunction(a),this.each(function(d){var f,g=p(this);if(this.nodeType!==1)return;e?f=a.call(this,d,g.val()):f=a,f==null?f="":typeof f=="number"?f+="":p.isArray(f)&&(f=p.map(f,function(a){return a==null?"":a+""})),c=p.valHooks[this.type]||p.valHooks[this.nodeName.toLowerCase()];if(!c||!("set"in c)||c.set(this,f,"value")===b)this.value=f})}}),p.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,f=a.selectedIndex,g=[],h=a.options,i=a.type==="select-one";if(f<0)return null;c=i?f:0,d=i?f+1:h.length;for(;c<d;c++){e=h[c];if(e.selected&&(p.support.optDisabled?!e.disabled:e.getAttribute("disabled")===null)&&(!e.parentNode.disabled||!p.nodeName(e.parentNode,"optgroup"))){b=p(e).val();if(i)return b;g.push(b)}}return i&&!g.length&&h.length?p(h[f]).val():g},set:function(a,b){var c=p.makeArray(b);return p(a).find("option").each(function(){this.selected=p.inArray(p(this).val(),c)>=0}),c.length||(a.selectedIndex=-1),c}}},attrFn:{},attr:function(a,c,d,e){var f,g,h,i=a.nodeType;if(!a||i===3||i===8||i===2)return;if(e&&p.isFunction(p.fn[c]))return p(a)[c](d);if(typeof a.getAttribute=="undefined")return p.prop(a,c,d);h=i!==1||!p.isXMLDoc(a),h&&(c=c.toLowerCase(),g=p.attrHooks[c]||(T.test(c)?M:L));if(d!==b){if(d===null){p.removeAttr(a,c);return}return g&&"set"in g&&h&&(f=g.set(a,d,c))!==b?f:(a.setAttribute(c,d+""),d)}return g&&"get"in g&&h&&(f=g.get(a,c))!==null?f:(f=a.getAttribute(c),f===null?b:f)},removeAttr:function(a,b){var c,d,e,f,g=0;if(b&&a.nodeType===1){d=b.split(s);for(;g<d.length;g++)e=d[g],e&&(c=p.propFix[e]||e,f=T.test(e),f||p.attr(a,e,""),a.removeAttribute(U?e:c),f&&c in a&&(a[c]=!1))}},attrHooks:{type:{set:function(a,b){if(Q.test(a.nodeName)&&a.parentNode)p.error("type property can't be changed");else if(!p.support.radioValue&&b==="radio"&&p.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}},value:{get:function(a,b){return L&&p.nodeName(a,"button")?L.get(a,b):b in a?a.value:null},set:function(a,b,c){if(L&&p.nodeName(a,"button"))return L.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e,f,g,h=a.nodeType;if(!a||h===3||h===8||h===2)return;return g=h!==1||!p.isXMLDoc(a),g&&(c=p.propFix[c]||c,f=p.propHooks[c]),d!==b?f&&"set"in f&&(e=f.set(a,d,c))!==b?e:a[c]=d:f&&"get"in f&&(e=f.get(a,c))!==null?e:a[c]},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):R.test(a.nodeName)||S.test(a.nodeName)&&a.href?0:b}}}}),M={get:function(a,c){var d,e=p.prop(a,c);return e===!0||typeof e!="boolean"&&(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;return b===!1?p.removeAttr(a,c):(d=p.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase())),c}},U||(N={name:!0,id:!0,coords:!0},L=p.valHooks.button={get:function(a,c){var d;return d=a.getAttributeNode(c),d&&(N[c]?d.value!=="":d.specified)?d.value:b},set:function(a,b,c){var d=a.getAttributeNode(c);return d||(d=e.createAttribute(c),a.setAttributeNode(d)),d.value=b+""}},p.each(["width","height"],function(a,b){p.attrHooks[b]=p.extend(p.attrHooks[b],{set:function(a,c){if(c==="")return a.setAttribute(b,"auto"),c}})}),p.attrHooks.contenteditable={get:L.get,set:function(a,b,c){b===""&&(b="false"),L.set(a,b,c)}}),p.support.hrefNormalized||p.each(["href","src","width","height"],function(a,c){p.attrHooks[c]=p.extend(p.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),p.support.style||(p.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=b+""}}),p.support.optSelected||(p.propHooks.selected=p.extend(p.propHooks.selected,{get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null}})),p.support.enctype||(p.propFix.enctype="encoding"),p.support.checkOn||p.each(["radio","checkbox"],function(){p.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),p.each(["radio","checkbox"],function(){p.valHooks[this]=p.extend(p.valHooks[this],{set:function(a,b){if(p.isArray(b))return a.checked=p.inArray(p(a).val(),b)>=0}})});var V=/^(?:textarea|input|select)$/i,W=/^([^\.]*|)(?:\.(.+)|)$/,X=/(?:^|\s)hover(\.\S+|)\b/,Y=/^key/,Z=/^(?:mouse|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=function(a){return p.event.special.hover?a:a.replace(X,"mouseenter$1 mouseleave$1")};p.event={add:function(a,c,d,e,f){var g,h,i,j,k,l,m,n,o,q,r;if(a.nodeType===3||a.nodeType===8||!c||!d||!(g=p._data(a)))return;d.handler&&(o=d,d=o.handler,f=o.selector),d.guid||(d.guid=p.guid++),i=g.events,i||(g.events=i={}),h=g.handle,h||(g.handle=h=function(a){return typeof p!="undefined"&&(!a||p.event.triggered!==a.type)?p.event.dispatch.apply(h.elem,arguments):b},h.elem=a),c=p.trim(_(c)).split(" ");for(j=0;j<c.length;j++){k=W.exec(c[j])||[],l=k[1],m=(k[2]||"").split(".").sort(),r=p.event.special[l]||{},l=(f?r.delegateType:r.bindType)||l,r=p.event.special[l]||{},n=p.extend({type:l,origType:k[1],data:e,handler:d,guid:d.guid,selector:f,needsContext:f&&p.expr.match.needsContext.test(f),namespace:m.join(".")},o),q=i[l];if(!q){q=i[l]=[],q.delegateCount=0;if(!r.setup||r.setup.call(a,e,m,h)===!1)a.addEventListener?a.addEventListener(l,h,!1):a.attachEvent&&a.attachEvent("on"+l,h)}r.add&&(r.add.call(a,n),n.handler.guid||(n.handler.guid=d.guid)),f?q.splice(q.delegateCount++,0,n):q.push(n),p.event.global[l]=!0}a=null},global:{},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,q,r=p.hasData(a)&&p._data(a);if(!r||!(m=r.events))return;b=p.trim(_(b||"")).split(" ");for(f=0;f<b.length;f++){g=W.exec(b[f])||[],h=i=g[1],j=g[2];if(!h){for(h in m)p.event.remove(a,h+b[f],c,d,!0);continue}n=p.event.special[h]||{},h=(d?n.delegateType:n.bindType)||h,o=m[h]||[],k=o.length,j=j?new RegExp("(^|\\.)"+j.split(".").sort().join("\\.(?:.*\\.|)")+"(\\.|$)"):null;for(l=0;l<o.length;l++)q=o[l],(e||i===q.origType)&&(!c||c.guid===q.guid)&&(!j||j.test(q.namespace))&&(!d||d===q.selector||d==="**"&&q.selector)&&(o.splice(l--,1),q.selector&&o.delegateCount--,n.remove&&n.remove.call(a,q));o.length===0&&k!==o.length&&((!n.teardown||n.teardown.call(a,j,r.handle)===!1)&&p.removeEvent(a,h,r.handle),delete m[h])}p.isEmptyObject(m)&&(delete r.handle,p.removeData(a,"events",!0))},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,f,g){if(!f||f.nodeType!==3&&f.nodeType!==8){var h,i,j,k,l,m,n,o,q,r,s=c.type||c,t=[];if($.test(s+p.event.triggered))return;s.indexOf("!")>=0&&(s=s.slice(0,-1),i=!0),s.indexOf(".")>=0&&(t=s.split("."),s=t.shift(),t.sort());if((!f||p.event.customEvent[s])&&!p.event.global[s])return;c=typeof c=="object"?c[p.expando]?c:new p.Event(s,c):new p.Event(s),c.type=s,c.isTrigger=!0,c.exclusive=i,c.namespace=t.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+t.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,m=s.indexOf(":")<0?"on"+s:"";if(!f){h=p.cache;for(j in h)h[j].events&&h[j].events[s]&&p.event.trigger(c,d,h[j].handle.elem,!0);return}c.result=b,c.target||(c.target=f),d=d!=null?p.makeArray(d):[],d.unshift(c),n=p.event.special[s]||{};if(n.trigger&&n.trigger.apply(f,d)===!1)return;q=[[f,n.bindType||s]];if(!g&&!n.noBubble&&!p.isWindow(f)){r=n.delegateType||s,k=$.test(r+s)?f:f.parentNode;for(l=f;k;k=k.parentNode)q.push([k,r]),l=k;l===(f.ownerDocument||e)&&q.push([l.defaultView||l.parentWindow||a,r])}for(j=0;j<q.length&&!c.isPropagationStopped();j++)k=q[j][0],c.type=q[j][1],o=(p._data(k,"events")||{})[c.type]&&p._data(k,"handle"),o&&o.apply(k,d),o=m&&k[m],o&&p.acceptData(k)&&o.apply&&o.apply(k,d)===!1&&c.preventDefault();return c.type=s,!g&&!c.isDefaultPrevented()&&(!n._default||n._default.apply(f.ownerDocument,d)===!1)&&(s!=="click"||!p.nodeName(f,"a"))&&p.acceptData(f)&&m&&f[s]&&(s!=="focus"&&s!=="blur"||c.target.offsetWidth!==0)&&!p.isWindow(f)&&(l=f[m],l&&(f[m]=null),p.event.triggered=s,f[s](),p.event.triggered=b,l&&(f[m]=l)),c.result}return},dispatch:function(c){c=p.event.fix(c||a.event);var d,e,f,g,h,i,j,l,m,n,o=(p._data(this,"events")||{})[c.type]||[],q=o.delegateCount,r=k.call(arguments),s=!c.exclusive&&!c.namespace,t=p.event.special[c.type]||{},u=[];r[0]=c,c.delegateTarget=this;if(t.preDispatch&&t.preDispatch.call(this,c)===!1)return;if(q&&(!c.button||c.type!=="click"))for(f=c.target;f!=this;f=f.parentNode||this)if(f.disabled!==!0||c.type!=="click"){h={},j=[];for(d=0;d<q;d++)l=o[d],m=l.selector,h[m]===b&&(h[m]=l.needsContext?p(m,this).index(f)>=0:p.find(m,this,null,[f]).length),h[m]&&j.push(l);j.length&&u.push({elem:f,matches:j})}o.length>q&&u.push({elem:this,matches:o.slice(q)});for(d=0;d<u.length&&!c.isPropagationStopped();d++){i=u[d],c.currentTarget=i.elem;for(e=0;e<i.matches.length&&!c.isImmediatePropagationStopped();e++){l=i.matches[e];if(s||!c.namespace&&!l.namespace||c.namespace_re&&c.namespace_re.test(l.namespace))c.data=l.data,c.handleObj=l,g=((p.event.special[l.origType]||{}).handle||l.handler).apply(i.elem,r),g!==b&&(c.result=g,g===!1&&(c.preventDefault(),c.stopPropagation()))}}return t.postDispatch&&t.postDispatch.call(this,c),c.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,c){var d,f,g,h=c.button,i=c.fromElement;return a.pageX==null&&c.clientX!=null&&(d=a.target.ownerDocument||e,f=d.documentElement,g=d.body,a.pageX=c.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=c.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?c.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0),a}},fix:function(a){if(a[p.expando])return a;var b,c,d=a,f=p.event.fixHooks[a.type]||{},g=f.props?this.props.concat(f.props):this.props;a=p.Event(d);for(b=g.length;b;)c=g[--b],a[c]=d[c];return a.target||(a.target=d.srcElement||e),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,f.filter?f.filter(a,d):a},special:{load:{noBubble:!0},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(a,b,c){p.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=p.extend(new p.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?p.event.trigger(e,null,b):p.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},p.event.handle=p.event.dispatch,p.removeEvent=e.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){var d="on"+b;a.detachEvent&&(typeof a[d]=="undefined"&&(a[d]=null),a.detachEvent(d,c))},p.Event=function(a,b){if(this instanceof p.Event)a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?bb:ba):this.type=a,b&&p.extend(this,b),this.timeStamp=a&&a.timeStamp||p.now(),this[p.expando]=!0;else return new p.Event(a,b)},p.Event.prototype={preventDefault:function(){this.isDefaultPrevented=bb;var a=this.originalEvent;if(!a)return;a.preventDefault?a.preventDefault():a.returnValue=!1},stopPropagation:function(){this.isPropagationStopped=bb;var a=this.originalEvent;if(!a)return;a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=bb,this.stopPropagation()},isDefaultPrevented:ba,isPropagationStopped:ba,isImmediatePropagationStopped:ba},p.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){p.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj,g=f.selector;if(!e||e!==d&&!p.contains(d,e))a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b;return c}}}),p.support.submitBubbles||(p.event.special.submit={setup:function(){if(p.nodeName(this,"form"))return!1;p.event.add(this,"click._submit keypress._submit",function(a){var c=a.target,d=p.nodeName(c,"input")||p.nodeName(c,"button")?c.form:b;d&&!p._data(d,"_submit_attached")&&(p.event.add(d,"submit._submit",function(a){a._submit_bubble=!0}),p._data(d,"_submit_attached",!0))})},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&p.event.simulate("submit",this.parentNode,a,!0))},teardown:function(){if(p.nodeName(this,"form"))return!1;p.event.remove(this,"._submit")}}),p.support.changeBubbles||(p.event.special.change={setup:function(){if(V.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")p.event.add(this,"propertychange._change",function(a){a.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),p.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1),p.event.simulate("change",this,a,!0)});return!1}p.event.add(this,"beforeactivate._change",function(a){var b=a.target;V.test(b.nodeName)&&!p._data(b,"_change_attached")&&(p.event.add(b,"change._change",function(a){this.parentNode&&!a.isSimulated&&!a.isTrigger&&p.event.simulate("change",this.parentNode,a,!0)}),p._data(b,"_change_attached",!0))})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!=="radio"&&b.type!=="checkbox")return a.handleObj.handler.apply(this,arguments)},teardown:function(){return p.event.remove(this,"._change"),!V.test(this.nodeName)}}),p.support.focusinBubbles||p.each({focus:"focusin",blur:"focusout"},function(a,b){var c=0,d=function(a){p.event.simulate(b,a.target,p.event.fix(a),!0)};p.event.special[b]={setup:function(){c++===0&&e.addEventListener(a,d,!0)},teardown:function(){--c===0&&e.removeEventListener(a,d,!0)}}}),p.fn.extend({on:function(a,c,d,e,f){var g,h;if(typeof a=="object"){typeof c!="string"&&(d=d||c,c=b);for(h in a)this.on(h,c,d,a[h],f);return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typeof c=="string"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1)e=ba;else if(!e)return this;return f===1&&(g=e,e=function(a){return p().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=p.guid++)),this.each(function(){p.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,c,d){var e,f;if(a&&a.preventDefault&&a.handleObj)return e=a.handleObj,p(a.delegateTarget).off(e.namespace?e.origType+"."+e.namespace:e.origType,e.selector,e.handler),this;if(typeof a=="object"){for(f in a)this.off(f,c,a[f]);return this}if(c===!1||typeof c=="function")d=c,c=b;return d===!1&&(d=ba),this.each(function(){p.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){return p(this.context).on(a,this.selector,b,c),this},die:function(a,b){return p(this.context).off(a,this.selector||"**",b),this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length===1?this.off(a,"**"):this.off(b,a||"**",c)},trigger:function(a,b){return this.each(function(){p.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return p.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||p.guid++,d=0,e=function(c){var e=(p._data(this,"lastToggle"+a.guid)||0)%d;return p._data(this,"lastToggle"+a.guid,e+1),c.preventDefault(),b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),p.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){p.fn[b]=function(a,c){return c==null&&(c=a,a=null),arguments.length>0?this.on(b,null,a,c):this.trigger(b)},Y.test(b)&&(p.event.fixHooks[b]=p.event.keyHooks),Z.test(b)&&(p.event.fixHooks[b]=p.event.mouseHooks)}),function(a,b){function bc(a,b,c,d){c=c||[],b=b||r;var e,f,i,j,k=b.nodeType;if(!a||typeof a!="string")return c;if(k!==1&&k!==9)return[];i=g(b);if(!i&&!d)if(e=P.exec(a))if(j=e[1]){if(k===9){f=b.getElementById(j);if(!f||!f.parentNode)return c;if(f.id===j)return c.push(f),c}else if(b.ownerDocument&&(f=b.ownerDocument.getElementById(j))&&h(b,f)&&f.id===j)return c.push(f),c}else{if(e[2])return w.apply(c,x.call(b.getElementsByTagName(a),0)),c;if((j=e[3])&&_&&b.getElementsByClassName)return w.apply(c,x.call(b.getElementsByClassName(j),0)),c}return bp(a.replace(L,"$1"),b,c,d,i)}function bd(a){return function(b){var c=b.nodeName.toLowerCase();return c==="input"&&b.type===a}}function be(a){return function(b){var c=b.nodeName.toLowerCase();return(c==="input"||c==="button")&&b.type===a}}function bf(a){return z(function(b){return b=+b,z(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function bg(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}function bh(a,b){var c,d,f,g,h,i,j,k=C[o][a];if(k)return b?0:k.slice(0);h=a,i=[],j=e.preFilter;while(h){if(!c||(d=M.exec(h)))d&&(h=h.slice(d[0].length)),i.push(f=[]);c=!1;if(d=N.exec(h))f.push(c=new q(d.shift())),h=h.slice(c.length),c.type=d[0].replace(L," ");for(g in e.filter)(d=W[g].exec(h))&&(!j[g]||(d=j[g](d,r,!0)))&&(f.push(c=new q(d.shift())),h=h.slice(c.length),c.type=g,c.matches=d);if(!c)break}return b?h.length:h?bc.error(a):C(a,i).slice(0)}function bi(a,b,d){var e=b.dir,f=d&&b.dir==="parentNode",g=u++;return b.first?function(b,c,d){while(b=b[e])if(f||b.nodeType===1)return a(b,c,d)}:function(b,d,h){if(!h){var i,j=t+" "+g+" ",k=j+c;while(b=b[e])if(f||b.nodeType===1){if((i=b[o])===k)return b.sizset;if(typeof i=="string"&&i.indexOf(j)===0){if(b.sizset)return b}else{b[o]=k;if(a(b,d,h))return b.sizset=!0,b;b.sizset=!1}}}else while(b=b[e])if(f||b.nodeType===1)if(a(b,d,h))return b}}function bj(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function bk(a,b,c,d,e){var f,g=[],h=0,i=a.length,j=b!=null;for(;h<i;h++)if(f=a[h])if(!c||c(f,d,e))g.push(f),j&&b.push(h);return g}function bl(a,b,c,d,e,f){return d&&!d[o]&&(d=bl(d)),e&&!e[o]&&(e=bl(e,f)),z(function(f,g,h,i){if(f&&e)return;var j,k,l,m=[],n=[],o=g.length,p=f||bo(b||"*",h.nodeType?[h]:h,[],f),q=a&&(f||!b)?bk(p,m,a,h,i):p,r=c?e||(f?a:o||d)?[]:g:q;c&&c(q,r,h,i);if(d){l=bk(r,n),d(l,[],h,i),j=l.length;while(j--)if(k=l[j])r[n[j]]=!(q[n[j]]=k)}if(f){j=a&&r.length;while(j--)if(k=r[j])f[m[j]]=!(g[m[j]]=k)}else r=bk(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):w.apply(g,r)})}function bm(a){var b,c,d,f=a.length,g=e.relative[a[0].type],h=g||e.relative[" "],i=g?1:0,j=bi(function(a){return a===b},h,!0),k=bi(function(a){return y.call(b,a)>-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==l)||((b=c).nodeType?j(a,c,d):k(a,c,d))}];for(;i<f;i++)if(c=e.relative[a[i].type])m=[bi(bj(m),c)];else{c=e.filter[a[i].type].apply(null,a[i].matches);if(c[o]){d=++i;for(;d<f;d++)if(e.relative[a[d].type])break;return bl(i>1&&bj(m),i>1&&a.slice(0,i-1).join("").replace(L,"$1"),c,i<d&&bm(a.slice(i,d)),d<f&&bm(a=a.slice(d)),d<f&&a.join(""))}m.push(c)}return bj(m)}function bn(a,b){var d=b.length>0,f=a.length>0,g=function(h,i,j,k,m){var n,o,p,q=[],s=0,u="0",x=h&&[],y=m!=null,z=l,A=h||f&&e.find.TAG("*",m&&i.parentNode||i),B=t+=z==null?1:Math.E;y&&(l=i!==r&&i,c=g.el);for(;(n=A[u])!=null;u++){if(f&&n){for(o=0;p=a[o];o++)if(p(n,i,j)){k.push(n);break}y&&(t=B,c=++g.el)}d&&((n=!p&&n)&&s--,h&&x.push(n))}s+=u;if(d&&u!==s){for(o=0;p=b[o];o++)p(x,q,i,j);if(h){if(s>0)while(u--)!x[u]&&!q[u]&&(q[u]=v.call(k));q=bk(q)}w.apply(k,q),y&&!h&&q.length>0&&s+b.length>1&&bc.uniqueSort(k)}return y&&(t=B,l=z),x};return g.el=0,d?z(g):g}function bo(a,b,c,d){var e=0,f=b.length;for(;e<f;e++)bc(a,b[e],c,d);return c}function bp(a,b,c,d,f){var g,h,j,k,l,m=bh(a),n=m.length;if(!d&&m.length===1){h=m[0]=m[0].slice(0);if(h.length>2&&(j=h[0]).type==="ID"&&b.nodeType===9&&!f&&e.relative[h[1].type]){b=e.find.ID(j.matches[0].replace(V,""),b,f)[0];if(!b)return c;a=a.slice(h.shift().length)}for(g=W.POS.test(a)?-1:h.length-1;g>=0;g--){j=h[g];if(e.relative[k=j.type])break;if(l=e.find[k])if(d=l(j.matches[0].replace(V,""),R.test(h[0].type)&&b.parentNode||b,f)){h.splice(g,1),a=d.length&&h.join("");if(!a)return w.apply(c,x.call(d,0)),c;break}}}return i(a,m)(d,b,f,c,R.test(a)),c}function bq(){}var c,d,e,f,g,h,i,j,k,l,m=!0,n="undefined",o=("sizcache"+Math.random()).replace(".",""),q=String,r=a.document,s=r.documentElement,t=0,u=0,v=[].pop,w=[].push,x=[].slice,y=[].indexOf||function(a){var b=0,c=this.length;for(;b<c;b++)if(this[b]===a)return b;return-1},z=function(a,b){return a[o]=b==null||b,a},A=function(){var a={},b=[];return z(function(c,d){return b.push(c)>e.cacheLength&&delete a[b.shift()],a[c]=d},a)},B=A(),C=A(),D=A(),E="[\\x20\\t\\r\\n\\f]",F="(?:\\\\.|[-\\w]|[^\\x00-\\xa0])+",G=F.replace("w","w#"),H="([*^$|!~]?=)",I="\\["+E+"*("+F+")"+E+"*(?:"+H+E+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+G+")|)|)"+E+"*\\]",J=":("+F+")(?:\\((?:(['\"])((?:\\\\.|[^\\\\])*?)\\2|([^()[\\]]*|(?:(?:"+I+")|[^:]|\\\\.)*|.*))\\)|)",K=":(even|odd|eq|gt|lt|nth|first|last)(?:\\("+E+"*((?:-\\d)?\\d*)"+E+"*\\)|)(?=[^-]|$)",L=new RegExp("^"+E+"+|((?:^|[^\\\\])(?:\\\\.)*)"+E+"+$","g"),M=new RegExp("^"+E+"*,"+E+"*"),N=new RegExp("^"+E+"*([\\x20\\t\\r\\n\\f>+~])"+E+"*"),O=new RegExp(J),P=/^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/,Q=/^:not/,R=/[\x20\t\r\n\f]*[+~]/,S=/:not\($/,T=/h\d/i,U=/input|select|textarea|button/i,V=/\\(?!\\)/g,W={ID:new RegExp("^#("+F+")"),CLASS:new RegExp("^\\.("+F+")"),NAME:new RegExp("^\\[name=['\"]?("+F+")['\"]?\\]"),TAG:new RegExp("^("+F.replace("w","w*")+")"),ATTR:new RegExp("^"+I),PSEUDO:new RegExp("^"+J),POS:new RegExp(K,"i"),CHILD:new RegExp("^:(only|nth|first|last)-child(?:\\("+E+"*(even|odd|(([+-]|)(\\d*)n|)"+E+"*(?:([+-]|)"+E+"*(\\d+)|))"+E+"*\\)|)","i"),needsContext:new RegExp("^"+E+"*[>+~]|"+K,"i")},X=function(a){var b=r.createElement("div");try{return a(b)}catch(c){return!1}finally{b=null}},Y=X(function(a){return a.appendChild(r.createComment("")),!a.getElementsByTagName("*").length}),Z=X(function(a){return a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!==n&&a.firstChild.getAttribute("href")==="#"}),$=X(function(a){a.innerHTML="<select></select>";var b=typeof a.lastChild.getAttribute("multiple");return b!=="boolean"&&b!=="string"}),_=X(function(a){return a.innerHTML="<div class='hidden e'></div><div class='hidden'></div>",!a.getElementsByClassName||!a.getElementsByClassName("e").length?!1:(a.lastChild.className="e",a.getElementsByClassName("e").length===2)}),ba=X(function(a){a.id=o+0,a.innerHTML="<a name='"+o+"'></a><div name='"+o+"'></div>",s.insertBefore(a,s.firstChild);var b=r.getElementsByName&&r.getElementsByName(o).length===2+r.getElementsByName(o+0).length;return d=!r.getElementById(o),s.removeChild(a),b});try{x.call(s.childNodes,0)[0].nodeType}catch(bb){x=function(a){var b,c=[];for(;b=this[a];a++)c.push(b);return c}}bc.matches=function(a,b){return bc(a,null,null,b)},bc.matchesSelector=function(a,b){return bc(b,null,null,[a]).length>0},f=bc.getText=function(a){var b,c="",d=0,e=a.nodeType;if(e){if(e===1||e===9||e===11){if(typeof a.textContent=="string")return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=f(a)}else if(e===3||e===4)return a.nodeValue}else for(;b=a[d];d++)c+=f(b);return c},g=bc.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?b.nodeName!=="HTML":!1},h=bc.contains=s.contains?function(a,b){var c=a.nodeType===9?a.documentElement:a,d=b&&b.parentNode;return a===d||!!(d&&d.nodeType===1&&c.contains&&c.contains(d))}:s.compareDocumentPosition?function(a,b){return b&&!!(a.compareDocumentPosition(b)&16)}:function(a,b){while(b=b.parentNode)if(b===a)return!0;return!1},bc.attr=function(a,b){var c,d=g(a);return d||(b=b.toLowerCase()),(c=e.attrHandle[b])?c(a):d||$?a.getAttribute(b):(c=a.getAttributeNode(b),c?typeof a[b]=="boolean"?a[b]?b:null:c.specified?c.value:null:null)},e=bc.selectors={cacheLength:50,createPseudo:z,match:W,attrHandle:Z?{}:{href:function(a){return a.getAttribute("href",2)},type:function(a){return a.getAttribute("type")}},find:{ID:d?function(a,b,c){if(typeof b.getElementById!==n&&!c){var d=b.getElementById(a);return d&&d.parentNode?[d]:[]}}:function(a,c,d){if(typeof c.getElementById!==n&&!d){var e=c.getElementById(a);return e?e.id===a||typeof e.getAttributeNode!==n&&e.getAttributeNode("id").value===a?[e]:b:[]}},TAG:Y?function(a,b){if(typeof b.getElementsByTagName!==n)return b.getElementsByTagName(a)}:function(a,b){var c=b.getElementsByTagName(a);if(a==="*"){var d,e=[],f=0;for(;d=c[f];f++)d.nodeType===1&&e.push(d);return e}return c},NAME:ba&&function(a,b){if(typeof b.getElementsByName!==n)return b.getElementsByName(name)},CLASS:_&&function(a,b,c){if(typeof b.getElementsByClassName!==n&&!c)return b.getElementsByClassName(a)}},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(V,""),a[3]=(a[4]||a[5]||"").replace(V,""),a[2]==="~="&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),a[1]==="nth"?(a[2]||bc.error(a[0]),a[3]=+(a[3]?a[4]+(a[5]||1):2*(a[2]==="even"||a[2]==="odd")),a[4]=+(a[6]+a[7]||a[2]==="odd")):a[2]&&bc.error(a[0]),a},PSEUDO:function(a){var b,c;if(W.CHILD.test(a[0]))return null;if(a[3])a[2]=a[3];else if(b=a[4])O.test(b)&&(c=bh(b,!0))&&(c=b.indexOf(")",b.length-c)-b.length)&&(b=b.slice(0,c),a[0]=a[0].slice(0,c)),a[2]=b;return a.slice(0,3)}},filter:{ID:d?function(a){return a=a.replace(V,""),function(b){return b.getAttribute("id")===a}}:function(a){return a=a.replace(V,""),function(b){var c=typeof b.getAttributeNode!==n&&b.getAttributeNode("id");return c&&c.value===a}},TAG:function(a){return a==="*"?function(){return!0}:(a=a.replace(V,"").toLowerCase(),function(b){return b.nodeName&&b.nodeName.toLowerCase()===a})},CLASS:function(a){var b=B[o][a];return b||(b=B(a,new RegExp("(^|"+E+")"+a+"("+E+"|$)"))),function(a){return b.test(a.className||typeof a.getAttribute!==n&&a.getAttribute("class")||"")}},ATTR:function(a,b,c){return function(d,e){var f=bc.attr(d,a);return f==null?b==="!=":b?(f+="",b==="="?f===c:b==="!="?f!==c:b==="^="?c&&f.indexOf(c)===0:b==="*="?c&&f.indexOf(c)>-1:b==="$="?c&&f.substr(f.length-c.length)===c:b==="~="?(" "+f+" ").indexOf(c)>-1:b==="|="?f===c||f.substr(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d){return a==="nth"?function(a){var b,e,f=a.parentNode;if(c===1&&d===0)return!0;if(f){e=0;for(b=f.firstChild;b;b=b.nextSibling)if(b.nodeType===1){e++;if(a===b)break}}return e-=d,e===c||e%c===0&&e/c>=0}:function(b){var c=b;switch(a){case"only":case"first":while(c=c.previousSibling)if(c.nodeType===1)return!1;if(a==="first")return!0;c=b;case"last":while(c=c.nextSibling)if(c.nodeType===1)return!1;return!0}}},PSEUDO:function(a,b){var c,d=e.pseudos[a]||e.setFilters[a.toLowerCase()]||bc.error("unsupported pseudo: "+a);return d[o]?d(b):d.length>1?(c=[a,a,"",b],e.setFilters.hasOwnProperty(a.toLowerCase())?z(function(a,c){var e,f=d(a,b),g=f.length;while(g--)e=y.call(a,f[g]),a[e]=!(c[e]=f[g])}):function(a){return d(a,0,c)}):d}},pseudos:{not:z(function(a){var b=[],c=[],d=i(a.replace(L,"$1"));return d[o]?z(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)if(f=g[h])a[h]=!(b[h]=f)}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:z(function(a){return function(b){return bc(a,b).length>0}}),contains:z(function(a){return function(b){return(b.textContent||b.innerText||f(b)).indexOf(a)>-1}}),enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&!!a.checked||b==="option"&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},parent:function(a){return!e.pseudos.empty(a)},empty:function(a){var b;a=a.firstChild;while(a){if(a.nodeName>"@"||(b=a.nodeType)===3||b===4)return!1;a=a.nextSibling}return!0},header:function(a){return T.test(a.nodeName)},text:function(a){var b,c;return a.nodeName.toLowerCase()==="input"&&(b=a.type)==="text"&&((c=a.getAttribute("type"))==null||c.toLowerCase()===b)},radio:bd("radio"),checkbox:bd("checkbox"),file:bd("file"),password:bd("password"),image:bd("image"),submit:be("submit"),reset:be("reset"),button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&a.type==="button"||b==="button"},input:function(a){return U.test(a.nodeName)},focus:function(a){var b=a.ownerDocument;return a===b.activeElement&&(!b.hasFocus||b.hasFocus())&&(!!a.type||!!a.href)},active:function(a){return a===a.ownerDocument.activeElement},first:bf(function(a,b,c){return[0]}),last:bf(function(a,b,c){return[b-1]}),eq:bf(function(a,b,c){return[c<0?c+b:c]}),even:bf(function(a,b,c){for(var d=0;d<b;d+=2)a.push(d);return a}),odd:bf(function(a,b,c){for(var d=1;d<b;d+=2)a.push(d);return a}),lt:bf(function(a,b,c){for(var d=c<0?c+b:c;--d>=0;)a.push(d);return a}),gt:bf(function(a,b,c){for(var d=c<0?c+b:c;++d<b;)a.push(d);return a})}},j=s.compareDocumentPosition?function(a,b){return a===b?(k=!0,0):(!a.compareDocumentPosition||!b.compareDocumentPosition?a.compareDocumentPosition:a.compareDocumentPosition(b)&4)?-1:1}:function(a,b){if(a===b)return k=!0,0;if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],g=a.parentNode,h=b.parentNode,i=g;if(g===h)return bg(a,b);if(!g)return-1;if(!h)return 1;while(i)e.unshift(i),i=i.parentNode;i=h;while(i)f.unshift(i),i=i.parentNode;c=e.length,d=f.length;for(var j=0;j<c&&j<d;j++)if(e[j]!==f[j])return bg(e[j],f[j]);return j===c?bg(a,f[j],-1):bg(e[j],b,1)},[0,0].sort(j),m=!k,bc.uniqueSort=function(a){var b,c=1;k=m,a.sort(j);if(k)for(;b=a[c];c++)b===a[c-1]&&a.splice(c--,1);return a},bc.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},i=bc.compile=function(a,b){var c,d=[],e=[],f=D[o][a];if(!f){b||(b=bh(a)),c=b.length;while(c--)f=bm(b[c]),f[o]?d.push(f):e.push(f);f=D(a,bn(e,d))}return f},r.querySelectorAll&&function(){var a,b=bp,c=/'|\\/g,d=/\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,e=[":focus"],f=[":active",":focus"],h=s.matchesSelector||s.mozMatchesSelector||s.webkitMatchesSelector||s.oMatchesSelector||s.msMatchesSelector;X(function(a){a.innerHTML="<select><option selected=''></option></select>",a.querySelectorAll("[selected]").length||e.push("\\["+E+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),a.querySelectorAll(":checked").length||e.push(":checked")}),X(function(a){a.innerHTML="<p test=''></p>",a.querySelectorAll("[test^='']").length&&e.push("[*^$]="+E+"*(?:\"\"|'')"),a.innerHTML="<input type='hidden'/>",a.querySelectorAll(":enabled").length||e.push(":enabled",":disabled")}),e=new RegExp(e.join("|")),bp=function(a,d,f,g,h){if(!g&&!h&&(!e||!e.test(a))){var i,j,k=!0,l=o,m=d,n=d.nodeType===9&&a;if(d.nodeType===1&&d.nodeName.toLowerCase()!=="object"){i=bh(a),(k=d.getAttribute("id"))?l=k.replace(c,"\\$&"):d.setAttribute("id",l),l="[id='"+l+"'] ",j=i.length;while(j--)i[j]=l+i[j].join("");m=R.test(a)&&d.parentNode||d,n=i.join(",")}if(n)try{return w.apply(f,x.call(m.querySelectorAll(n),0)),f}catch(p){}finally{k||d.removeAttribute("id")}}return b(a,d,f,g,h)},h&&(X(function(b){a=h.call(b,"div");try{h.call(b,"[test!='']:sizzle"),f.push("!=",J)}catch(c){}}),f=new RegExp(f.join("|")),bc.matchesSelector=function(b,c){c=c.replace(d,"='$1']");if(!g(b)&&!f.test(c)&&(!e||!e.test(c)))try{var i=h.call(b,c);if(i||a||b.document&&b.document.nodeType!==11)return i}catch(j){}return bc(c,null,null,[b]).length>0})}(),e.pseudos.nth=e.pseudos.eq,e.filters=bq.prototype=e.pseudos,e.setFilters=new bq,bc.attr=p.attr,p.find=bc,p.expr=bc.selectors,p.expr[":"]=p.expr.pseudos,p.unique=bc.uniqueSort,p.text=bc.getText,p.isXMLDoc=bc.isXML,p.contains=bc.contains}(a);var bc=/Until$/,bd=/^(?:parents|prev(?:Until|All))/,be=/^.[^:#\[\.,]*$/,bf=p.expr.match.needsContext,bg={children:!0,contents:!0,next:!0,prev:!0};p.fn.extend({find:function(a){var b,c,d,e,f,g,h=this;if(typeof a!="string")return p(a).filter(function(){for(b=0,c=h.length;b<c;b++)if(p.contains(h[b],this))return!0});g=this.pushStack("","find",a);for(b=0,c=this.length;b<c;b++){d=g.length,p.find(a,this[b],g);if(b>0)for(e=d;e<g.length;e++)for(f=0;f<d;f++)if(g[f]===g[e]){g.splice(e--,1);break}}return g},has:function(a){var b,c=p(a,this),d=c.length;return this.filter(function(){for(b=0;b<d;b++)if(p.contains(this,c[b]))return!0})},not:function(a){return this.pushStack(bj(this,a,!1),"not",a)},filter:function(a){return this.pushStack(bj(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?bf.test(a)?p(a,this.context).index(this[0])>=0:p.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c,d=0,e=this.length,f=[],g=bf.test(a)||typeof a!="string"?p(a,b||this.context):0;for(;d<e;d++){c=this[d];while(c&&c.ownerDocument&&c!==b&&c.nodeType!==11){if(g?g.index(c)>-1:p.find.matchesSelector(c,a)){f.push(c);break}c=c.parentNode}}return f=f.length>1?p.unique(f):f,this.pushStack(f,"closest",a)},index:function(a){return a?typeof a=="string"?p.inArray(this[0],p(a)):p.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.prevAll().length:-1},add:function(a,b){var c=typeof a=="string"?p(a,b):p.makeArray(a&&a.nodeType?[a]:a),d=p.merge(this.get(),c);return this.pushStack(bh(c[0])||bh(d[0])?d:p.unique(d))},addBack:function(a){return this.add(a==null?this.prevObject:this.prevObject.filter(a))}}),p.fn.andSelf=p.fn.addBack,p.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return p.dir(a,"parentNode")},parentsUntil:function(a,b,c){return p.dir(a,"parentNode",c)},next:function(a){return bi(a,"nextSibling")},prev:function(a){return bi(a,"previousSibling")},nextAll:function(a){return p.dir(a,"nextSibling")},prevAll:function(a){return p.dir(a,"previousSibling")},nextUntil:function(a,b,c){return p.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return p.dir(a,"previousSibling",c)},siblings:function(a){return p.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return p.sibling(a.firstChild)},contents:function(a){return p.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:p.merge([],a.childNodes)}},function(a,b){p.fn[a]=function(c,d){var e=p.map(this,b,c);return bc.test(a)||(d=c),d&&typeof d=="string"&&(e=p.filter(d,e)),e=this.length>1&&!bg[a]?p.unique(e):e,this.length>1&&bd.test(a)&&(e=e.reverse()),this.pushStack(e,a,k.call(arguments).join(","))}}),p.extend({filter:function(a,b,c){return c&&(a=":not("+a+")"),b.length===1?p.find.matchesSelector(b[0],a)?[b[0]]:[]:p.find.matches(a,b)},dir:function(a,c,d){var e=[],f=a[c];while(f&&f.nodeType!==9&&(d===b||f.nodeType!==1||!p(f).is(d)))f.nodeType===1&&e.push(f),f=f[c];return e},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var bl="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",bm=/ jQuery\d+="(?:null|\d+)"/g,bn=/^\s+/,bo=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bp=/<([\w:]+)/,bq=/<tbody/i,br=/<|&#?\w+;/,bs=/<(?:script|style|link)/i,bt=/<(?:script|object|embed|option|style)/i,bu=new RegExp("<(?:"+bl+")[\\s/>]","i"),bv=/^(?:checkbox|radio)$/,bw=/checked\s*(?:[^=]|=\s*.checked.)/i,bx=/\/(java|ecma)script/i,by=/^\s*<!(?:\[CDATA\[|\-\-)|[\]\-]{2}>\s*$/g,bz={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},bA=bk(e),bB=bA.appendChild(e.createElement("div"));bz.optgroup=bz.option,bz.tbody=bz.tfoot=bz.colgroup=bz.caption=bz.thead,bz.th=bz.td,p.support.htmlSerialize||(bz._default=[1,"X<div>","</div>"]),p.fn.extend({text:function(a){return p.access(this,function(a){return a===b?p.text(this):this.empty().append((this[0]&&this[0].ownerDocument||e).createTextNode(a))},null,a,arguments.length)},wrapAll:function(a){if(p.isFunction(a))return this.each(function(b){p(this).wrapAll(a.call(this,b))});if(this[0]){var b=p(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return p.isFunction(a)?this.each(function(b){p(this).wrapInner(a.call(this,b))}):this.each(function(){var b=p(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=p.isFunction(a);return this.each(function(c){p(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){p.nodeName(this,"body")||p(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){(this.nodeType===1||this.nodeType===11)&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){(this.nodeType===1||this.nodeType===11)&&this.insertBefore(a,this.firstChild)})},before:function(){if(!bh(this[0]))return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=p.clean(arguments);return this.pushStack(p.merge(a,this),"before",this.selector)}},after:function(){if(!bh(this[0]))return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=p.clean(arguments);return this.pushStack(p.merge(this,a),"after",this.selector)}},remove:function(a,b){var c,d=0;for(;(c=this[d])!=null;d++)if(!a||p.filter(a,[c]).length)!b&&c.nodeType===1&&(p.cleanData(c.getElementsByTagName("*")),p.cleanData([c])),c.parentNode&&c.parentNode.removeChild(c);return this},empty:function(){var a,b=0;for(;(a=this[b])!=null;b++){a.nodeType===1&&p.cleanData(a.getElementsByTagName("*"));while(a.firstChild)a.removeChild(a.firstChild)}return this},clone:function(a,b){return a=a==null?!1:a,b=b==null?a:b,this.map(function(){return p.clone(this,a,b)})},html:function(a){return p.access(this,function(a){var c=this[0]||{},d=0,e=this.length;if(a===b)return c.nodeType===1?c.innerHTML.replace(bm,""):b;if(typeof a=="string"&&!bs.test(a)&&(p.support.htmlSerialize||!bu.test(a))&&(p.support.leadingWhitespace||!bn.test(a))&&!bz[(bp.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(bo,"<$1></$2>");try{for(;d<e;d++)c=this[d]||{},c.nodeType===1&&(p.cleanData(c.getElementsByTagName("*")),c.innerHTML=a);c=0}catch(f){}}c&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(a){return bh(this[0])?this.length?this.pushStack(p(p.isFunction(a)?a():a),"replaceWith",a):this:p.isFunction(a)?this.each(function(b){var c=p(this),d=c.html();c.replaceWith(a.call(this,b,d))}):(typeof a!="string"&&(a=p(a).detach()),this.each(function(){var b=this.nextSibling,c=this.parentNode;p(this).remove(),b?p(b).before(a):p(c).append(a)}))},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){a=[].concat.apply([],a);var e,f,g,h,i=0,j=a[0],k=[],l=this.length;if(!p.support.checkClone&&l>1&&typeof j=="string"&&bw.test(j))return this.each(function(){p(this).domManip(a,c,d)});if(p.isFunction(j))return this.each(function(e){var f=p(this);a[0]=j.call(this,e,c?f.html():b),f.domManip(a,c,d)});if(this[0]){e=p.buildFragment(a,this,k),g=e.fragment,f=g.firstChild,g.childNodes.length===1&&(g=f);if(f){c=c&&p.nodeName(f,"tr");for(h=e.cacheable||l-1;i<l;i++)d.call(c&&p.nodeName(this[i],"table")?bC(this[i],"tbody"):this[i],i===h?g:p.clone(g,!0,!0))}g=f=null,k.length&&p.each(k,function(a,b){b.src?p.ajax?p.ajax({url:b.src,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0}):p.error("no ajax"):p.globalEval((b.text||b.textContent||b.innerHTML||"").replace(by,"")),b.parentNode&&b.parentNode.removeChild(b)})}return this}}),p.buildFragment=function(a,c,d){var f,g,h,i=a[0];return c=c||e,c=!c.nodeType&&c[0]||c,c=c.ownerDocument||c,a.length===1&&typeof i=="string"&&i.length<512&&c===e&&i.charAt(0)==="<"&&!bt.test(i)&&(p.support.checkClone||!bw.test(i))&&(p.support.html5Clone||!bu.test(i))&&(g=!0,f=p.fragments[i],h=f!==b),f||(f=c.createDocumentFragment(),p.clean(a,c,f,d),g&&(p.fragments[i]=h&&f)),{fragment:f,cacheable:g}},p.fragments={},p.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){p.fn[a]=function(c){var d,e=0,f=[],g=p(c),h=g.length,i=this.length===1&&this[0].parentNode;if((i==null||i&&i.nodeType===11&&i.childNodes.length===1)&&h===1)return g[b](this[0]),this;for(;e<h;e++)d=(e>0?this.clone(!0):this).get(),p(g[e])[b](d),f=f.concat(d);return this.pushStack(f,a,g.selector)}}),p.extend({clone:function(a,b,c){var d,e,f,g;p.support.html5Clone||p.isXMLDoc(a)||!bu.test("<"+a.nodeName+">")?g=a.cloneNode(!0):(bB.innerHTML=a.outerHTML,bB.removeChild(g=bB.firstChild));if((!p.support.noCloneEvent||!p.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!p.isXMLDoc(a)){bE(a,g),d=bF(a),e=bF(g);for(f=0;d[f];++f)e[f]&&bE(d[f],e[f])}if(b){bD(a,g);if(c){d=bF(a),e=bF(g);for(f=0;d[f];++f)bD(d[f],e[f])}}return d=e=null,g},clean:function(a,b,c,d){var f,g,h,i,j,k,l,m,n,o,q,r,s=b===e&&bA,t=[];if(!b||typeof b.createDocumentFragment=="undefined")b=e;for(f=0;(h=a[f])!=null;f++){typeof h=="number"&&(h+="");if(!h)continue;if(typeof h=="string")if(!br.test(h))h=b.createTextNode(h);else{s=s||bk(b),l=b.createElement("div"),s.appendChild(l),h=h.replace(bo,"<$1></$2>"),i=(bp.exec(h)||["",""])[1].toLowerCase(),j=bz[i]||bz._default,k=j[0],l.innerHTML=j[1]+h+j[2];while(k--)l=l.lastChild;if(!p.support.tbody){m=bq.test(h),n=i==="table"&&!m?l.firstChild&&l.firstChild.childNodes:j[1]==="<table>"&&!m?l.childNodes:[];for(g=n.length-1;g>=0;--g)p.nodeName(n[g],"tbody")&&!n[g].childNodes.length&&n[g].parentNode.removeChild(n[g])}!p.support.leadingWhitespace&&bn.test(h)&&l.insertBefore(b.createTextNode(bn.exec(h)[0]),l.firstChild),h=l.childNodes,l.parentNode.removeChild(l)}h.nodeType?t.push(h):p.merge(t,h)}l&&(h=l=s=null);if(!p.support.appendChecked)for(f=0;(h=t[f])!=null;f++)p.nodeName(h,"input")?bG(h):typeof h.getElementsByTagName!="undefined"&&p.grep(h.getElementsByTagName("input"),bG);if(c){q=function(a){if(!a.type||bx.test(a.type))return d?d.push(a.parentNode?a.parentNode.removeChild(a):a):c.appendChild(a)};for(f=0;(h=t[f])!=null;f++)if(!p.nodeName(h,"script")||!q(h))c.appendChild(h),typeof h.getElementsByTagName!="undefined"&&(r=p.grep(p.merge([],h.getElementsByTagName("script")),q),t.splice.apply(t,[f+1,0].concat(r)),f+=r.length)}return t},cleanData:function(a,b){var c,d,e,f,g=0,h=p.expando,i=p.cache,j=p.support.deleteExpando,k=p.event.special;for(;(e=a[g])!=null;g++)if(b||p.acceptData(e)){d=e[h],c=d&&i[d];if(c){if(c.events)for(f in c.events)k[f]?p.event.remove(e,f):p.removeEvent(e,f,c.handle);i[d]&&(delete i[d],j?delete e[h]:e.removeAttribute?e.removeAttribute(h):e[h]=null,p.deletedIds.push(d))}}}}),function(){var a,b;p.uaMatch=function(a){a=a.toLowerCase();var b=/(chrome)[ \/]([\w.]+)/.exec(a)||/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||a.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},a=p.uaMatch(g.userAgent),b={},a.browser&&(b[a.browser]=!0,b.version=a.version),b.chrome?b.webkit=!0:b.webkit&&(b.safari=!0),p.browser=b,p.sub=function(){function a(b,c){return new a.fn.init(b,c)}p.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function c(c,d){return d&&d instanceof p&&!(d instanceof a)&&(d=a(d)),p.fn.init.call(this,c,d,b)},a.fn.init.prototype=a.fn;var b=a(e);return a}}();var bH,bI,bJ,bK=/alpha\([^)]*\)/i,bL=/opacity=([^)]*)/,bM=/^(top|right|bottom|left)$/,bN=/^(none|table(?!-c[ea]).+)/,bO=/^margin/,bP=new RegExp("^("+q+")(.*)$","i"),bQ=new RegExp("^("+q+")(?!px)[a-z%]+$","i"),bR=new RegExp("^([-+])=("+q+")","i"),bS={},bT={position:"absolute",visibility:"hidden",display:"block"},bU={letterSpacing:0,fontWeight:400},bV=["Top","Right","Bottom","Left"],bW=["Webkit","O","Moz","ms"],bX=p.fn.toggle;p.fn.extend({css:function(a,c){return p.access(this,function(a,c,d){return d!==b?p.style(a,c,d):p.css(a,c)},a,c,arguments.length>1)},show:function(){return b$(this,!0)},hide:function(){return b$(this)},toggle:function(a,b){var c=typeof a=="boolean";return p.isFunction(a)&&p.isFunction(b)?bX.apply(this,arguments):this.each(function(){(c?a:bZ(this))?p(this).show():p(this).hide()})}}),p.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bH(a,"opacity");return c===""?"1":c}}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":p.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!a||a.nodeType===3||a.nodeType===8||!a.style)return;var f,g,h,i=p.camelCase(c),j=a.style;c=p.cssProps[i]||(p.cssProps[i]=bY(j,i)),h=p.cssHooks[c]||p.cssHooks[i];if(d===b)return h&&"get"in h&&(f=h.get(a,!1,e))!==b?f:j[c];g=typeof d,g==="string"&&(f=bR.exec(d))&&(d=(f[1]+1)*f[2]+parseFloat(p.css(a,c)),g="number");if(d==null||g==="number"&&isNaN(d))return;g==="number"&&!p.cssNumber[i]&&(d+="px");if(!h||!("set"in h)||(d=h.set(a,d,e))!==b)try{j[c]=d}catch(k){}},css:function(a,c,d,e){var f,g,h,i=p.camelCase(c);return c=p.cssProps[i]||(p.cssProps[i]=bY(a.style,i)),h=p.cssHooks[c]||p.cssHooks[i],h&&"get"in h&&(f=h.get(a,!0,e)),f===b&&(f=bH(a,c)),f==="normal"&&c in bU&&(f=bU[c]),d||e!==b?(g=parseFloat(f),d||p.isNumeric(g)?g||0:f):f},swap:function(a,b,c){var d,e,f={};for(e in b)f[e]=a.style[e],a.style[e]=b[e];d=c.call(a);for(e in b)a.style[e]=f[e];return d}}),a.getComputedStyle?bH=function(b,c){var d,e,f,g,h=a.getComputedStyle(b,null),i=b.style;return h&&(d=h[c],d===""&&!p.contains(b.ownerDocument,b)&&(d=p.style(b,c)),bQ.test(d)&&bO.test(c)&&(e=i.width,f=i.minWidth,g=i.maxWidth,i.minWidth=i.maxWidth=i.width=d,d=h.width,i.width=e,i.minWidth=f,i.maxWidth=g)),d}:e.documentElement.currentStyle&&(bH=function(a,b){var c,d,e=a.currentStyle&&a.currentStyle[b],f=a.style;return e==null&&f&&f[b]&&(e=f[b]),bQ.test(e)&&!bM.test(b)&&(c=f.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":e,e=f.pixelLeft+"px",f.left=c,d&&(a.runtimeStyle.left=d)),e===""?"auto":e}),p.each(["height","width"],function(a,b){p.cssHooks[b]={get:function(a,c,d){if(c)return a.offsetWidth===0&&bN.test(bH(a,"display"))?p.swap(a,bT,function(){return cb(a,b,d)}):cb(a,b,d)},set:function(a,c,d){return b_(a,c,d?ca(a,b,d,p.support.boxSizing&&p.css(a,"boxSizing")==="border-box"):0)}}}),p.support.opacity||(p.cssHooks.opacity={get:function(a,b){return bL.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=p.isNumeric(b)?"alpha(opacity="+b*100+")":"",f=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&p.trim(f.replace(bK,""))===""&&c.removeAttribute){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bK.test(f)?f.replace(bK,e):f+" "+e}}),p(function(){p.support.reliableMarginRight||(p.cssHooks.marginRight={get:function(a,b){return p.swap(a,{display:"inline-block"},function(){if(b)return bH(a,"marginRight")})}}),!p.support.pixelPosition&&p.fn.position&&p.each(["top","left"],function(a,b){p.cssHooks[b]={get:function(a,c){if(c){var d=bH(a,b);return bQ.test(d)?p(a).position()[b]+"px":d}}}})}),p.expr&&p.expr.filters&&(p.expr.filters.hidden=function(a){return a.offsetWidth===0&&a.offsetHeight===0||!p.support.reliableHiddenOffsets&&(a.style&&a.style.display||bH(a,"display"))==="none"},p.expr.filters.visible=function(a){return!p.expr.filters.hidden(a)}),p.each({margin:"",padding:"",border:"Width"},function(a,b){p.cssHooks[a+b]={expand:function(c){var d,e=typeof c=="string"?c.split(" "):[c],f={};for(d=0;d<4;d++)f[a+bV[d]+b]=e[d]||e[d-2]||e[0];return f}},bO.test(a)||(p.cssHooks[a+b].set=b_)});var cd=/%20/g,ce=/\[\]$/,cf=/\r?\n/g,cg=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,ch=/^(?:select|textarea)/i;p.fn.extend({serialize:function(){return p.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?p.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ch.test(this.nodeName)||cg.test(this.type))}).map(function(a,b){var c=p(this).val();return c==null?null:p.isArray(c)?p.map(c,function(a,c){return{name:b.name,value:a.replace(cf,"\r\n")}}):{name:b.name,value:c.replace(cf,"\r\n")}}).get()}}),p.param=function(a,c){var d,e=[],f=function(a,b){b=p.isFunction(b)?b():b==null?"":b,e[e.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=p.ajaxSettings&&p.ajaxSettings.traditional);if(p.isArray(a)||a.jquery&&!p.isPlainObject(a))p.each(a,function(){f(this.name,this.value)});else for(d in a)ci(d,a[d],c,f);return e.join("&").replace(cd,"+")};var cj,ck,cl=/#.*$/,cm=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,cn=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,co=/^(?:GET|HEAD)$/,cp=/^\/\//,cq=/\?/,cr=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,cs=/([?&])_=[^&]*/,ct=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,cu=p.fn.load,cv={},cw={},cx=["*/"]+["*"];try{ck=f.href}catch(cy){ck=e.createElement("a"),ck.href="",ck=ck.href}cj=ct.exec(ck.toLowerCase())||[],p.fn.load=function(a,c,d){if(typeof a!="string"&&cu)return cu.apply(this,arguments);if(!this.length)return this;var e,f,g,h=this,i=a.indexOf(" ");return i>=0&&(e=a.slice(i,a.length),a=a.slice(0,i)),p.isFunction(c)?(d=c,c=b):c&&typeof c=="object"&&(f="POST"),p.ajax({url:a,type:f,dataType:"html",data:c,complete:function(a,b){d&&h.each(d,g||[a.responseText,b,a])}}).done(function(a){g=arguments,h.html(e?p("<div>").append(a.replace(cr,"")).find(e):a)}),this},p.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){p.fn[b]=function(a){return this.on(b,a)}}),p.each(["get","post"],function(a,c){p[c]=function(a,d,e,f){return p.isFunction(d)&&(f=f||e,e=d,d=b),p.ajax({type:c,url:a,data:d,success:e,dataType:f})}}),p.extend({getScript:function(a,c){return p.get(a,b,c,"script")},getJSON:function(a,b,c){return p.get(a,b,c,"json")},ajaxSetup:function(a,b){return b?cB(a,p.ajaxSettings):(b=a,a=p.ajaxSettings),cB(a,b),a},ajaxSettings:{url:ck,isLocal:cn.test(cj[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded; charset=UTF-8",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":cx},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":p.parseJSON,"text xml":p.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:cz(cv),ajaxTransport:cz(cw),ajax:function(a,c){function y(a,c,f,i){var k,s,t,u,w,y=c;if(v===2)return;v=2,h&&clearTimeout(h),g=b,e=i||"",x.readyState=a>0?4:0,f&&(u=cC(l,x,f));if(a>=200&&a<300||a===304)l.ifModified&&(w=x.getResponseHeader("Last-Modified"),w&&(p.lastModified[d]=w),w=x.getResponseHeader("Etag"),w&&(p.etag[d]=w)),a===304?(y="notmodified",k=!0):(k=cD(l,u),y=k.state,s=k.data,t=k.error,k=!t);else{t=y;if(!y||a)y="error",a<0&&(a=0)}x.status=a,x.statusText=(c||y)+"",k?o.resolveWith(m,[s,y,x]):o.rejectWith(m,[x,y,t]),x.statusCode(r),r=b,j&&n.trigger("ajax"+(k?"Success":"Error"),[x,l,k?s:t]),q.fireWith(m,[x,y]),j&&(n.trigger("ajaxComplete",[x,l]),--p.active||p.event.trigger("ajaxStop"))}typeof a=="object"&&(c=a,a=b),c=c||{};var d,e,f,g,h,i,j,k,l=p.ajaxSetup({},c),m=l.context||l,n=m!==l&&(m.nodeType||m instanceof p)?p(m):p.event,o=p.Deferred(),q=p.Callbacks("once memory"),r=l.statusCode||{},t={},u={},v=0,w="canceled",x={readyState:0,setRequestHeader:function(a,b){if(!v){var c=a.toLowerCase();a=u[c]=u[c]||a,t[a]=b}return this},getAllResponseHeaders:function(){return v===2?e:null},getResponseHeader:function(a){var c;if(v===2){if(!f){f={};while(c=cm.exec(e))f[c[1].toLowerCase()]=c[2]}c=f[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){return v||(l.mimeType=a),this},abort:function(a){return a=a||w,g&&g.abort(a),y(0,a),this}};o.promise(x),x.success=x.done,x.error=x.fail,x.complete=q.add,x.statusCode=function(a){if(a){var b;if(v<2)for(b in a)r[b]=[r[b],a[b]];else b=a[x.status],x.always(b)}return this},l.url=((a||l.url)+"").replace(cl,"").replace(cp,cj[1]+"//"),l.dataTypes=p.trim(l.dataType||"*").toLowerCase().split(s),l.crossDomain==null&&(i=ct.exec(l.url.toLowerCase())||!1,l.crossDomain=i&&i.join(":")+(i[3]?"":i[1]==="http:"?80:443)!==cj.join(":")+(cj[3]?"":cj[1]==="http:"?80:443)),l.data&&l.processData&&typeof l.data!="string"&&(l.data=p.param(l.data,l.traditional)),cA(cv,l,c,x);if(v===2)return x;j=l.global,l.type=l.type.toUpperCase(),l.hasContent=!co.test(l.type),j&&p.active++===0&&p.event.trigger("ajaxStart");if(!l.hasContent){l.data&&(l.url+=(cq.test(l.url)?"&":"?")+l.data,delete l.data),d=l.url;if(l.cache===!1){var z=p.now(),A=l.url.replace(cs,"$1_="+z);l.url=A+(A===l.url?(cq.test(l.url)?"&":"?")+"_="+z:"")}}(l.data&&l.hasContent&&l.contentType!==!1||c.contentType)&&x.setRequestHeader("Content-Type",l.contentType),l.ifModified&&(d=d||l.url,p.lastModified[d]&&x.setRequestHeader("If-Modified-Since",p.lastModified[d]),p.etag[d]&&x.setRequestHeader("If-None-Match",p.etag[d])),x.setRequestHeader("Accept",l.dataTypes[0]&&l.accepts[l.dataTypes[0]]?l.accepts[l.dataTypes[0]]+(l.dataTypes[0]!=="*"?", "+cx+"; q=0.01":""):l.accepts["*"]);for(k in l.headers)x.setRequestHeader(k,l.headers[k]);if(!l.beforeSend||l.beforeSend.call(m,x,l)!==!1&&v!==2){w="abort";for(k in{success:1,error:1,complete:1})x[k](l[k]);g=cA(cw,l,c,x);if(!g)y(-1,"No Transport");else{x.readyState=1,j&&n.trigger("ajaxSend",[x,l]),l.async&&l.timeout>0&&(h=setTimeout(function(){x.abort("timeout")},l.timeout));try{v=1,g.send(t,y)}catch(B){if(v<2)y(-1,B);else throw B}}return x}return x.abort()},active:0,lastModified:{},etag:{}});var cE=[],cF=/\?/,cG=/(=)\?(?=&|$)|\?\?/,cH=p.now();p.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=cE.pop()||p.expando+"_"+cH++;return this[a]=!0,a}}),p.ajaxPrefilter("json jsonp",function(c,d,e){var f,g,h,i=c.data,j=c.url,k=c.jsonp!==!1,l=k&&cG.test(j),m=k&&!l&&typeof i=="string"&&!(c.contentType||"").indexOf("application/x-www-form-urlencoded")&&cG.test(i);if(c.dataTypes[0]==="jsonp"||l||m)return f=c.jsonpCallback=p.isFunction(c.jsonpCallback)?c.jsonpCallback():c.jsonpCallback,g=a[f],l?c.url=j.replace(cG,"$1"+f):m?c.data=i.replace(cG,"$1"+f):k&&(c.url+=(cF.test(j)?"&":"?")+c.jsonp+"="+f),c.converters["script json"]=function(){return h||p.error(f+" was not called"),h[0]},c.dataTypes[0]="json",a[f]=function(){h=arguments},e.always(function(){a[f]=g,c[f]&&(c.jsonpCallback=d.jsonpCallback,cE.push(f)),h&&p.isFunction(g)&&g(h[0]),h=g=b}),"script"}),p.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){return p.globalEval(a),a}}}),p.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),p.ajaxTransport("script",function(a){if(a.crossDomain){var c,d=e.head||e.getElementsByTagName("head")[0]||e.documentElement;return{send:function(f,g){c=e.createElement("script"),c.async="async",a.scriptCharset&&(c.charset=a.scriptCharset),c.src=a.url,c.onload=c.onreadystatechange=function(a,e){if(e||!c.readyState||/loaded|complete/.test(c.readyState))c.onload=c.onreadystatechange=null,d&&c.parentNode&&d.removeChild(c),c=b,e||g(200,"success")},d.insertBefore(c,d.firstChild)},abort:function(){c&&c.onload(0,1)}}}});var cI,cJ=a.ActiveXObject?function(){for(var a in cI)cI[a](0,1)}:!1,cK=0;p.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&cL()||cM()}:cL,function(a){p.extend(p.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(p.ajaxSettings.xhr()),p.support.ajax&&p.ajaxTransport(function(c){if(!c.crossDomain||p.support.cors){var d;return{send:function(e,f){var g,h,i=c.xhr();c.username?i.open(c.type,c.url,c.async,c.username,c.password):i.open(c.type,c.url,c.async);if(c.xhrFields)for(h in c.xhrFields)i[h]=c.xhrFields[h];c.mimeType&&i.overrideMimeType&&i.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(h in e)i.setRequestHeader(h,e[h])}catch(j){}i.send(c.hasContent&&c.data||null),d=function(a,e){var h,j,k,l,m;try{if(d&&(e||i.readyState===4)){d=b,g&&(i.onreadystatechange=p.noop,cJ&&delete cI[g]);if(e)i.readyState!==4&&i.abort();else{h=i.status,k=i.getAllResponseHeaders(),l={},m=i.responseXML,m&&m.documentElement&&(l.xml=m);try{l.text=i.responseText}catch(a){}try{j=i.statusText}catch(n){j=""}!h&&c.isLocal&&!c.crossDomain?h=l.text?200:404:h===1223&&(h=204)}}}catch(o){e||f(-1,o)}l&&f(h,j,l,k)},c.async?i.readyState===4?setTimeout(d,0):(g=++cK,cJ&&(cI||(cI={},p(a).unload(cJ)),cI[g]=d),i.onreadystatechange=d):d()},abort:function(){d&&d(0,1)}}}});var cN,cO,cP=/^(?:toggle|show|hide)$/,cQ=new RegExp("^(?:([-+])=|)("+q+")([a-z%]*)$","i"),cR=/queueHooks$/,cS=[cY],cT={"*":[function(a,b){var c,d,e=this.createTween(a,b),f=cQ.exec(b),g=e.cur(),h=+g||0,i=1,j=20;if(f){c=+f[2],d=f[3]||(p.cssNumber[a]?"":"px");if(d!=="px"&&h){h=p.css(e.elem,a,!0)||c||1;do i=i||".5",h=h/i,p.style(e.elem,a,h+d);while(i!==(i=e.cur()/g)&&i!==1&&--j)}e.unit=d,e.start=h,e.end=f[1]?h+(f[1]+1)*c:c}return e}]};p.Animation=p.extend(cW,{tweener:function(a,b){p.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");var c,d=0,e=a.length;for(;d<e;d++)c=a[d],cT[c]=cT[c]||[],cT[c].unshift(b)},prefilter:function(a,b){b?cS.unshift(a):cS.push(a)}}),p.Tween=cZ,cZ.prototype={constructor:cZ,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(p.cssNumber[c]?"":"px")},cur:function(){var a=cZ.propHooks[this.prop];return a&&a.get?a.get(this):cZ.propHooks._default.get(this)},run:function(a){var b,c=cZ.propHooks[this.prop];return this.options.duration?this.pos=b=p.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):cZ.propHooks._default.set(this),this}},cZ.prototype.init.prototype=cZ.prototype,cZ.propHooks={_default:{get:function(a){var b;return a.elem[a.prop]==null||!!a.elem.style&&a.elem.style[a.prop]!=null?(b=p.css(a.elem,a.prop,!1,""),!b||b==="auto"?0:b):a.elem[a.prop]},set:function(a){p.fx.step[a.prop]?p.fx.step[a.prop](a):a.elem.style&&(a.elem.style[p.cssProps[a.prop]]!=null||p.cssHooks[a.prop])?p.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},cZ.propHooks.scrollTop=cZ.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},p.each(["toggle","show","hide"],function(a,b){var c=p.fn[b];p.fn[b]=function(d,e,f){return d==null||typeof d=="boolean"||!a&&p.isFunction(d)&&p.isFunction(e)?c.apply(this,arguments):this.animate(c$(b,!0),d,e,f)}}),p.fn.extend({fadeTo:function(a,b,c,d){return this.filter(bZ).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=p.isEmptyObject(a),f=p.speed(b,c,d),g=function(){var b=cW(this,p.extend({},a),f);e&&b.stop(!0)};return e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,c,d){var e=function(a){var b=a.stop;delete a.stop,b(d)};return typeof a!="string"&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,c=a!=null&&a+"queueHooks",f=p.timers,g=p._data(this);if(c)g[c]&&g[c].stop&&e(g[c]);else for(c in g)g[c]&&g[c].stop&&cR.test(c)&&e(g[c]);for(c=f.length;c--;)f[c].elem===this&&(a==null||f[c].queue===a)&&(f[c].anim.stop(d),b=!1,f.splice(c,1));(b||!d)&&p.dequeue(this,a)})}}),p.each({slideDown:c$("show"),slideUp:c$("hide"),slideToggle:c$("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){p.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),p.speed=function(a,b,c){var d=a&&typeof a=="object"?p.extend({},a):{complete:c||!c&&b||p.isFunction(a)&&a,duration:a,easing:c&&b||b&&!p.isFunction(b)&&b};d.duration=p.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in p.fx.speeds?p.fx.speeds[d.duration]:p.fx.speeds._default;if(d.queue==null||d.queue===!0)d.queue="fx";return d.old=d.complete,d.complete=function(){p.isFunction(d.old)&&d.old.call(this),d.queue&&p.dequeue(this,d.queue)},d},p.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},p.timers=[],p.fx=cZ.prototype.init,p.fx.tick=function(){var a,b=p.timers,c=0;for(;c<b.length;c++)a=b[c],!a()&&b[c]===a&&b.splice(c--,1);b.length||p.fx.stop()},p.fx.timer=function(a){a()&&p.timers.push(a)&&!cO&&(cO=setInterval(p.fx.tick,p.fx.interval))},p.fx.interval=13,p.fx.stop=function(){clearInterval(cO),cO=null},p.fx.speeds={slow:600,fast:200,_default:400},p.fx.step={},p.expr&&p.expr.filters&&(p.expr.filters.animated=function(a){return p.grep(p.timers,function(b){return a===b.elem}).length});var c_=/^(?:body|html)$/i;p.fn.offset=function(a){if(arguments.length)return a===b?this:this.each(function(b){p.offset.setOffset(this,a,b)});var c,d,e,f,g,h,i,j={top:0,left:0},k=this[0],l=k&&k.ownerDocument;if(!l)return;return(d=l.body)===k?p.offset.bodyOffset(k):(c=l.documentElement,p.contains(c,k)?(typeof k.getBoundingClientRect!="undefined"&&(j=k.getBoundingClientRect()),e=da(l),f=c.clientTop||d.clientTop||0,g=c.clientLeft||d.clientLeft||0,h=e.pageYOffset||c.scrollTop,i=e.pageXOffset||c.scrollLeft,{top:j.top+h-f,left:j.left+i-g}):j)},p.offset={bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;return p.support.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(p.css(a,"marginTop"))||0,c+=parseFloat(p.css(a,"marginLeft"))||0),{top:b,left:c}},setOffset:function(a,b,c){var d=p.css(a,"position");d==="static"&&(a.style.position="relative");var e=p(a),f=e.offset(),g=p.css(a,"top"),h=p.css(a,"left"),i=(d==="absolute"||d==="fixed")&&p.inArray("auto",[g,h])>-1,j={},k={},l,m;i?(k=e.position(),l=k.top,m=k.left):(l=parseFloat(g)||0,m=parseFloat(h)||0),p.isFunction(b)&&(b=b.call(a,c,f)),b.top!=null&&(j.top=b.top-f.top+l),b.left!=null&&(j.left=b.left-f.left+m),"using"in b?b.using.call(a,j):e.css(j)}},p.fn.extend({position:function(){if(!this[0])return;var a=this[0],b=this.offsetParent(),c=this.offset(),d=c_.test(b[0].nodeName)?{top:0,left:0}:b.offset();return c.top-=parseFloat(p.css(a,"marginTop"))||0,c.left-=parseFloat(p.css(a,"marginLeft"))||0,d.top+=parseFloat(p.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(p.css(b[0],"borderLeftWidth"))||0,{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||e.body;while(a&&!c_.test(a.nodeName)&&p.css(a,"position")==="static")a=a.offsetParent;return a||e.body})}}),p.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,c){var d=/Y/.test(c);p.fn[a]=function(e){return p.access(this,function(a,e,f){var g=da(a);if(f===b)return g?c in g?g[c]:g.document.documentElement[e]:a[e];g?g.scrollTo(d?p(g).scrollLeft():f,d?f:p(g).scrollTop()):a[e]=f},a,e,arguments.length,null)}}),p.each({Height:"height",Width:"width"},function(a,c){p.each({padding:"inner"+a,content:c,"":"outer"+a},function(d,e){p.fn[e]=function(e,f){var g=arguments.length&&(d||typeof e!="boolean"),h=d||(e===!0||f===!0?"margin":"border");return p.access(this,function(c,d,e){var f;return p.isWindow(c)?c.document.documentElement["client"+a]:c.nodeType===9?(f=c.documentElement,Math.max(c.body["scroll"+a],f["scroll"+a],c.body["offset"+a],f["offset"+a],f["client"+a])):e===b?p.css(c,d,e,h):p.style(c,d,e,h)},c,g?e:b,g,null)}})}),a.jQuery=a.$=p,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return p})})(window);
5367786dc871 Uploaded
greg
parents:
diff changeset
706 </script>
5367786dc871 Uploaded
greg
parents:
diff changeset
707
5367786dc871 Uploaded
greg
parents:
diff changeset
708 <script type="text/javascript">
5367786dc871 Uploaded
greg
parents:
diff changeset
709 (function(b){b.color={};b.color.make=function(d,e,g,f){var c={};c.r=d||0;c.g=e||0;c.b=g||0;c.a=f!=null?f:1;c.add=function(h,j){for(var k=0;k<h.length;++k){c[h.charAt(k)]+=j}return c.normalize()};c.scale=function(h,j){for(var k=0;k<h.length;++k){c[h.charAt(k)]*=j}return c.normalize()};c.toString=function(){if(c.a>=1){return"rgb("+[c.r,c.g,c.b].join(",")+")"}else{return"rgba("+[c.r,c.g,c.b,c.a].join(",")+")"}};c.normalize=function(){function h(k,j,l){return j<k?k:(j>l?l:j)}c.r=h(0,parseInt(c.r),255);c.g=h(0,parseInt(c.g),255);c.b=h(0,parseInt(c.b),255);c.a=h(0,c.a,1);return c};c.clone=function(){return b.color.make(c.r,c.b,c.g,c.a)};return c.normalize()};b.color.extract=function(d,e){var c;do{c=d.css(e).toLowerCase();if(c!=""&&c!="transparent"){break}d=d.parent()}while(!b.nodeName(d.get(0),"body"));if(c=="rgba(0, 0, 0, 0)"){c="transparent"}return b.color.parse(c)};b.color.parse=function(c){var d,f=b.color.make;if(d=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(c)){return f(parseInt(d[1],10),parseInt(d[2],10),parseInt(d[3],10))}if(d=/rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(c)){return f(parseInt(d[1],10),parseInt(d[2],10),parseInt(d[3],10),parseFloat(d[4]))}if(d=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(c)){return f(parseFloat(d[1])*2.55,parseFloat(d[2])*2.55,parseFloat(d[3])*2.55)}if(d=/rgba\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(c)){return f(parseFloat(d[1])*2.55,parseFloat(d[2])*2.55,parseFloat(d[3])*2.55,parseFloat(d[4]))}if(d=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(c)){return f(parseInt(d[1],16),parseInt(d[2],16),parseInt(d[3],16))}if(d=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(c)){return f(parseInt(d[1]+d[1],16),parseInt(d[2]+d[2],16),parseInt(d[3]+d[3],16))}var e=b.trim(c).toLowerCase();if(e=="transparent"){return f(255,255,255,0)}else{d=a[e]||[0,0,0];return f(d[0],d[1],d[2])}};var a={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0]}})(jQuery);(function(c){function b(av,ai,J,af){var Q=[],O={colors:["#edc240","#afd8f8","#cb4b4b","#4da74d","#9440ed"],legend:{show:true,noColumns:1,labelFormatter:null,labelBoxBorderColor:"#ccc",container:null,position:"ne",margin:5,backgroundColor:null,backgroundOpacity:0.85},xaxis:{show:null,position:"bottom",mode:null,color:null,tickColor:null,transform:null,inverseTransform:null,min:null,max:null,autoscaleMargin:null,ticks:null,tickFormatter:null,labelWidth:null,labelHeight:null,reserveSpace:null,tickLength:null,alignTicksWithAxis:null,tickDecimals:null,tickSize:null,minTickSize:null,monthNames:null,timeformat:null,twelveHourClock:false},yaxis:{autoscaleMargin:0.02,position:"left"},xaxes:[],yaxes:[],series:{points:{show:false,radius:3,lineWidth:2,fill:true,fillColor:"#ffffff",symbol:"circle"},lines:{lineWidth:2,fill:false,fillColor:null,steps:false},bars:{show:false,lineWidth:2,barWidth:1,fill:true,fillColor:null,align:"left",horizontal:false},shadowSize:3},grid:{show:true,aboveData:false,color:"#545454",backgroundColor:null,borderColor:null,tickColor:null,labelMargin:5,axisMargin:8,borderWidth:2,minBorderMargin:null,markings:null,markingsColor:"#f4f4f4",markingsLineWidth:2,clickable:false,hoverable:false,autoHighlight:true,mouseActiveRadius:10},hooks:{}},az=null,ad=null,y=null,H=null,A=null,p=[],aw=[],q={left:0,right:0,top:0,bottom:0},G=0,I=0,h=0,w=0,ak={processOptions:[],processRawData:[],processDatapoints:[],drawSeries:[],draw:[],bindEvents:[],drawOverlay:[],shutdown:[]},aq=this;aq.setData=aj;aq.setupGrid=t;aq.draw=W;aq.getPlaceholder=function(){return av};aq.getCanvas=function(){return az};aq.getPlotOffset=function(){return q};aq.width=function(){return h};aq.height=function(){return w};aq.offset=function(){var aB=y.offset();aB.left+=q.left;aB.top+=q.top;return aB};aq.getData=function(){return Q};aq.getAxes=function(){var aC={},aB;c.each(p.concat(aw),function(aD,aE){if(aE){aC[aE.direction+(aE.n!=1?aE.n:"")+"axis"]=aE}});return aC};aq.getXAxes=function(){return p};aq.getYAxes=function(){return aw};aq.c2p=C;aq.p2c=ar;aq.getOptions=function(){return O};aq.highlight=x;aq.unhighlight=T;aq.triggerRedrawOverlay=f;aq.pointOffset=function(aB){return{left:parseInt(p[aA(aB,"x")-1].p2c(+aB.x)+q.left),top:parseInt(aw[aA(aB,"y")-1].p2c(+aB.y)+q.top)}};aq.shutdown=ag;aq.resize=function(){B();g(az);g(ad)};aq.hooks=ak;F(aq);Z(J);X();aj(ai);t();W();ah();function an(aD,aB){aB=[aq].concat(aB);for(var aC=0;aC<aD.length;++aC){aD[aC].apply(this,aB)}}function F(){for(var aB=0;aB<af.length;++aB){var aC=af[aB];aC.init(aq);if(aC.options){c.extend(true,O,aC.options)}}}function Z(aC){var aB;c.extend(true,O,aC);if(O.xaxis.color==null){O.xaxis.color=O.grid.color}if(O.yaxis.color==null){O.yaxis.color=O.grid.color}if(O.xaxis.tickColor==null){O.xaxis.tickColor=O.grid.tickColor}if(O.yaxis.tickColor==null){O.yaxis.tickColor=O.grid.tickColor}if(O.grid.borderColor==null){O.grid.borderColor=O.grid.color}if(O.grid.tickColor==null){O.grid.tickColor=c.color.parse(O.grid.color).scale("a",0.22).toString()}for(aB=0;aB<Math.max(1,O.xaxes.length);++aB){O.xaxes[aB]=c.extend(true,{},O.xaxis,O.xaxes[aB])}for(aB=0;aB<Math.max(1,O.yaxes.length);++aB){O.yaxes[aB]=c.extend(true,{},O.yaxis,O.yaxes[aB])}if(O.xaxis.noTicks&&O.xaxis.ticks==null){O.xaxis.ticks=O.xaxis.noTicks}if(O.yaxis.noTicks&&O.yaxis.ticks==null){O.yaxis.ticks=O.yaxis.noTicks}if(O.x2axis){O.xaxes[1]=c.extend(true,{},O.xaxis,O.x2axis);O.xaxes[1].position="top"}if(O.y2axis){O.yaxes[1]=c.extend(true,{},O.yaxis,O.y2axis);O.yaxes[1].position="right"}if(O.grid.coloredAreas){O.grid.markings=O.grid.coloredAreas}if(O.grid.coloredAreasColor){O.grid.markingsColor=O.grid.coloredAreasColor}if(O.lines){c.extend(true,O.series.lines,O.lines)}if(O.points){c.extend(true,O.series.points,O.points)}if(O.bars){c.extend(true,O.series.bars,O.bars)}if(O.shadowSize!=null){O.series.shadowSize=O.shadowSize}for(aB=0;aB<O.xaxes.length;++aB){V(p,aB+1).options=O.xaxes[aB]}for(aB=0;aB<O.yaxes.length;++aB){V(aw,aB+1).options=O.yaxes[aB]}for(var aD in ak){if(O.hooks[aD]&&O.hooks[aD].length){ak[aD]=ak[aD].concat(O.hooks[aD])}}an(ak.processOptions,[O])}function aj(aB){Q=Y(aB);ax();z()}function Y(aE){var aC=[];for(var aB=0;aB<aE.length;++aB){var aD=c.extend(true,{},O.series);if(aE[aB].data!=null){aD.data=aE[aB].data;delete aE[aB].data;c.extend(true,aD,aE[aB]);aE[aB].data=aD.data}else{aD.data=aE[aB]}aC.push(aD)}return aC}function aA(aC,aD){var aB=aC[aD+"axis"];if(typeof aB=="object"){aB=aB.n}if(typeof aB!="number"){aB=1}return aB}function m(){return c.grep(p.concat(aw),function(aB){return aB})}function C(aE){var aC={},aB,aD;for(aB=0;aB<p.length;++aB){aD=p[aB];if(aD&&aD.used){aC["x"+aD.n]=aD.c2p(aE.left)}}for(aB=0;aB<aw.length;++aB){aD=aw[aB];if(aD&&aD.used){aC["y"+aD.n]=aD.c2p(aE.top)}}if(aC.x1!==undefined){aC.x=aC.x1}if(aC.y1!==undefined){aC.y=aC.y1}return aC}function ar(aF){var aD={},aC,aE,aB;for(aC=0;aC<p.length;++aC){aE=p[aC];if(aE&&aE.used){aB="x"+aE.n;if(aF[aB]==null&&aE.n==1){aB="x"}if(aF[aB]!=null){aD.left=aE.p2c(aF[aB]);break}}}for(aC=0;aC<aw.length;++aC){aE=aw[aC];if(aE&&aE.used){aB="y"+aE.n;if(aF[aB]==null&&aE.n==1){aB="y"}if(aF[aB]!=null){aD.top=aE.p2c(aF[aB]);break}}}return aD}function V(aC,aB){if(!aC[aB-1]){aC[aB-1]={n:aB,direction:aC==p?"x":"y",options:c.extend(true,{},aC==p?O.xaxis:O.yaxis)}}return aC[aB-1]}function ax(){var aG;var aM=Q.length,aB=[],aE=[];for(aG=0;aG<Q.length;++aG){var aJ=Q[aG].color;if(aJ!=null){--aM;if(typeof aJ=="number"){aE.push(aJ)}else{aB.push(c.color.parse(Q[aG].color))}}}for(aG=0;aG<aE.length;++aG){aM=Math.max(aM,aE[aG]+1)}var aC=[],aF=0;aG=0;while(aC.length<aM){var aI;if(O.colors.length==aG){aI=c.color.make(100,100,100)}else{aI=c.color.parse(O.colors[aG])}var aD=aF%2==1?-1:1;aI.scale("rgb",1+aD*Math.ceil(aF/2)*0.2);aC.push(aI);++aG;if(aG>=O.colors.length){aG=0;++aF}}var aH=0,aN;for(aG=0;aG<Q.length;++aG){aN=Q[aG];if(aN.color==null){aN.color=aC[aH].toString();++aH}else{if(typeof aN.color=="number"){aN.color=aC[aN.color].toString()}}if(aN.lines.show==null){var aL,aK=true;for(aL in aN){if(aN[aL]&&aN[aL].show){aK=false;break}}if(aK){aN.lines.show=true}}aN.xaxis=V(p,aA(aN,"x"));aN.yaxis=V(aw,aA(aN,"y"))}}function z(){var aO=Number.POSITIVE_INFINITY,aI=Number.NEGATIVE_INFINITY,aB=Number.MAX_VALUE,aU,aS,aR,aN,aD,aJ,aT,aP,aH,aG,aC,a0,aX,aL;function aF(a3,a2,a1){if(a2<a3.datamin&&a2!=-aB){a3.datamin=a2}if(a1>a3.datamax&&a1!=aB){a3.datamax=a1}}c.each(m(),function(a1,a2){a2.datamin=aO;a2.datamax=aI;a2.used=false});for(aU=0;aU<Q.length;++aU){aJ=Q[aU];aJ.datapoints={points:[]};an(ak.processRawData,[aJ,aJ.data,aJ.datapoints])}for(aU=0;aU<Q.length;++aU){aJ=Q[aU];var aZ=aJ.data,aW=aJ.datapoints.format;if(!aW){aW=[];aW.push({x:true,number:true,required:true});aW.push({y:true,number:true,required:true});if(aJ.bars.show||(aJ.lines.show&&aJ.lines.fill)){aW.push({y:true,number:true,required:false,defaultValue:0});if(aJ.bars.horizontal){delete aW[aW.length-1].y;aW[aW.length-1].x=true}}aJ.datapoints.format=aW}if(aJ.datapoints.pointsize!=null){continue}aJ.datapoints.pointsize=aW.length;aP=aJ.datapoints.pointsize;aT=aJ.datapoints.points;insertSteps=aJ.lines.show&&aJ.lines.steps;aJ.xaxis.used=aJ.yaxis.used=true;for(aS=aR=0;aS<aZ.length;++aS,aR+=aP){aL=aZ[aS];var aE=aL==null;if(!aE){for(aN=0;aN<aP;++aN){a0=aL[aN];aX=aW[aN];if(aX){if(aX.number&&a0!=null){a0=+a0;if(isNaN(a0)){a0=null}else{if(a0==Infinity){a0=aB}else{if(a0==-Infinity){a0=-aB}}}}if(a0==null){if(aX.required){aE=true}if(aX.defaultValue!=null){a0=aX.defaultValue}}}aT[aR+aN]=a0}}if(aE){for(aN=0;aN<aP;++aN){a0=aT[aR+aN];if(a0!=null){aX=aW[aN];if(aX.x){aF(aJ.xaxis,a0,a0)}if(aX.y){aF(aJ.yaxis,a0,a0)}}aT[aR+aN]=null}}else{if(insertSteps&&aR>0&&aT[aR-aP]!=null&&aT[aR-aP]!=aT[aR]&&aT[aR-aP+1]!=aT[aR+1]){for(aN=0;aN<aP;++aN){aT[aR+aP+aN]=aT[aR+aN]}aT[aR+1]=aT[aR-aP+1];aR+=aP}}}}for(aU=0;aU<Q.length;++aU){aJ=Q[aU];an(ak.processDatapoints,[aJ,aJ.datapoints])}for(aU=0;aU<Q.length;++aU){aJ=Q[aU];aT=aJ.datapoints.points,aP=aJ.datapoints.pointsize;var aK=aO,aQ=aO,aM=aI,aV=aI;for(aS=0;aS<aT.length;aS+=aP){if(aT[aS]==null){continue}for(aN=0;aN<aP;++aN){a0=aT[aS+aN];aX=aW[aN];if(!aX||a0==aB||a0==-aB){continue}if(aX.x){if(a0<aK){aK=a0}if(a0>aM){aM=a0}}if(aX.y){if(a0<aQ){aQ=a0}if(a0>aV){aV=a0}}}}if(aJ.bars.show){var aY=aJ.bars.align=="left"?0:-aJ.bars.barWidth/2;if(aJ.bars.horizontal){aQ+=aY;aV+=aY+aJ.bars.barWidth}else{aK+=aY;aM+=aY+aJ.bars.barWidth}}aF(aJ.xaxis,aK,aM);aF(aJ.yaxis,aQ,aV)}c.each(m(),function(a1,a2){if(a2.datamin==aO){a2.datamin=null}if(a2.datamax==aI){a2.datamax=null}})}function j(aB,aC){var aD=document.createElement("canvas");aD.className=aC;aD.width=G;aD.height=I;if(!aB){c(aD).css({position:"absolute",left:0,top:0})}c(aD).appendTo(av);if(!aD.getContext){aD=window.G_vmlCanvasManager.initElement(aD)}aD.getContext("2d").save();return aD}function B(){G=av.width();I=av.height();if(G<=0||I<=0){throw"Invalid dimensions for plot, width = "+G+", height = "+I}}function g(aC){if(aC.width!=G){aC.width=G}if(aC.height!=I){aC.height=I}var aB=aC.getContext("2d");aB.restore();aB.save()}function X(){var aC,aB=av.children("canvas.base"),aD=av.children("canvas.overlay");if(aB.length==0||aD==0){av.html("");av.css({padding:0});if(av.css("position")=="static"){av.css("position","relative")}B();az=j(true,"base");ad=j(false,"overlay");aC=false}else{az=aB.get(0);ad=aD.get(0);aC=true}H=az.getContext("2d");A=ad.getContext("2d");y=c([ad,az]);if(aC){av.data("plot").shutdown();aq.resize();A.clearRect(0,0,G,I);y.unbind();av.children().not([az,ad]).remove()}av.data("plot",aq)}function ah(){if(O.grid.hoverable){y.mousemove(aa);y.mouseleave(l)}if(O.grid.clickable){y.click(R)}an(ak.bindEvents,[y])}function ag(){if(M){clearTimeout(M)}y.unbind("mousemove",aa);y.unbind("mouseleave",l);y.unbind("click",R);an(ak.shutdown,[y])}function r(aG){function aC(aH){return aH}var aF,aB,aD=aG.options.transform||aC,aE=aG.options.inverseTransform;if(aG.direction=="x"){aF=aG.scale=h/Math.abs(aD(aG.max)-aD(aG.min));aB=Math.min(aD(aG.max),aD(aG.min))}else{aF=aG.scale=w/Math.abs(aD(aG.max)-aD(aG.min));aF=-aF;aB=Math.max(aD(aG.max),aD(aG.min))}if(aD==aC){aG.p2c=function(aH){return(aH-aB)*aF}}else{aG.p2c=function(aH){return(aD(aH)-aB)*aF}}if(!aE){aG.c2p=function(aH){return aB+aH/aF}}else{aG.c2p=function(aH){return aE(aB+aH/aF)}}}function L(aD){var aB=aD.options,aF,aJ=aD.ticks||[],aI=[],aE,aK=aB.labelWidth,aG=aB.labelHeight,aC;function aH(aM,aL){return c('<div style="position:absolute;top:-10000px;'+aL+'font-size:smaller"><div class="'+aD.direction+"Axis "+aD.direction+aD.n+'Axis">'+aM.join("")+"</div></div>").appendTo(av)}if(aD.direction=="x"){if(aK==null){aK=Math.floor(G/(aJ.length>0?aJ.length:1))}if(aG==null){aI=[];for(aF=0;aF<aJ.length;++aF){aE=aJ[aF].label;if(aE){aI.push('<div class="tickLabel" style="float:left;width:'+aK+'px">'+aE+"</div>")}}if(aI.length>0){aI.push('<div style="clear:left"></div>');aC=aH(aI,"width:10000px;");aG=aC.height();aC.remove()}}}else{if(aK==null||aG==null){for(aF=0;aF<aJ.length;++aF){aE=aJ[aF].label;if(aE){aI.push('<div class="tickLabel">'+aE+"</div>")}}if(aI.length>0){aC=aH(aI,"");if(aK==null){aK=aC.children().width()}if(aG==null){aG=aC.find("div.tickLabel").height()}aC.remove()}}}if(aK==null){aK=0}if(aG==null){aG=0}aD.labelWidth=aK;aD.labelHeight=aG}function au(aD){var aC=aD.labelWidth,aL=aD.labelHeight,aH=aD.options.position,aF=aD.options.tickLength,aG=O.grid.axisMargin,aJ=O.grid.labelMargin,aK=aD.direction=="x"?p:aw,aE;var aB=c.grep(aK,function(aN){return aN&&aN.options.position==aH&&aN.reserveSpace});if(c.inArray(aD,aB)==aB.length-1){aG=0}if(aF==null){aF="full"}var aI=c.grep(aK,function(aN){return aN&&aN.reserveSpace});var aM=c.inArray(aD,aI)==0;if(!aM&&aF=="full"){aF=5}if(!isNaN(+aF)){aJ+=+aF}if(aD.direction=="x"){aL+=aJ;if(aH=="bottom"){q.bottom+=aL+aG;aD.box={top:I-q.bottom,height:aL}}else{aD.box={top:q.top+aG,height:aL};q.top+=aL+aG}}else{aC+=aJ;if(aH=="left"){aD.box={left:q.left+aG,width:aC};q.left+=aC+aG}else{q.right+=aC+aG;aD.box={left:G-q.right,width:aC}}}aD.position=aH;aD.tickLength=aF;aD.box.padding=aJ;aD.innermost=aM}function U(aB){if(aB.direction=="x"){aB.box.left=q.left;aB.box.width=h}else{aB.box.top=q.top;aB.box.height=w}}function t(){var aC,aE=m();c.each(aE,function(aF,aG){aG.show=aG.options.show;if(aG.show==null){aG.show=aG.used}aG.reserveSpace=aG.show||aG.options.reserveSpace;n(aG)});allocatedAxes=c.grep(aE,function(aF){return aF.reserveSpace});q.left=q.right=q.top=q.bottom=0;if(O.grid.show){c.each(allocatedAxes,function(aF,aG){S(aG);P(aG);ap(aG,aG.ticks);L(aG)});for(aC=allocatedAxes.length-1;aC>=0;--aC){au(allocatedAxes[aC])}var aD=O.grid.minBorderMargin;if(aD==null){aD=0;for(aC=0;aC<Q.length;++aC){aD=Math.max(aD,Q[aC].points.radius+Q[aC].points.lineWidth/2)}}for(var aB in q){q[aB]+=O.grid.borderWidth;q[aB]=Math.max(aD,q[aB])}}h=G-q.left-q.right;w=I-q.bottom-q.top;c.each(aE,function(aF,aG){r(aG)});if(O.grid.show){c.each(allocatedAxes,function(aF,aG){U(aG)});k()}o()}function n(aE){var aF=aE.options,aD=+(aF.min!=null?aF.min:aE.datamin),aB=+(aF.max!=null?aF.max:aE.datamax),aH=aB-aD;if(aH==0){var aC=aB==0?1:0.01;if(aF.min==null){aD-=aC}if(aF.max==null||aF.min!=null){aB+=aC}}else{var aG=aF.autoscaleMargin;if(aG!=null){if(aF.min==null){aD-=aH*aG;if(aD<0&&aE.datamin!=null&&aE.datamin>=0){aD=0}}if(aF.max==null){aB+=aH*aG;if(aB>0&&aE.datamax!=null&&aE.datamax<=0){aB=0}}}}aE.min=aD;aE.max=aB}function S(aG){var aM=aG.options;var aH;if(typeof aM.ticks=="number"&&aM.ticks>0){aH=aM.ticks}else{aH=0.3*Math.sqrt(aG.direction=="x"?G:I)}var aT=(aG.max-aG.min)/aH,aO,aB,aN,aR,aS,aQ,aI;if(aM.mode=="time"){var aJ={second:1000,minute:60*1000,hour:60*60*1000,day:24*60*60*1000,month:30*24*60*60*1000,year:365.2425*24*60*60*1000};var aK=[[1,"second"],[2,"second"],[5,"second"],[10,"second"],[30,"second"],[1,"minute"],[2,"minute"],[5,"minute"],[10,"minute"],[30,"minute"],[1,"hour"],[2,"hour"],[4,"hour"],[8,"hour"],[12,"hour"],[1,"day"],[2,"day"],[3,"day"],[0.25,"month"],[0.5,"month"],[1,"month"],[2,"month"],[3,"month"],[6,"month"],[1,"year"]];var aC=0;if(aM.minTickSize!=null){if(typeof aM.tickSize=="number"){aC=aM.tickSize}else{aC=aM.minTickSize[0]*aJ[aM.minTickSize[1]]}}for(var aS=0;aS<aK.length-1;++aS){if(aT<(aK[aS][0]*aJ[aK[aS][1]]+aK[aS+1][0]*aJ[aK[aS+1][1]])/2&&aK[aS][0]*aJ[aK[aS][1]]>=aC){break}}aO=aK[aS][0];aN=aK[aS][1];if(aN=="year"){aQ=Math.pow(10,Math.floor(Math.log(aT/aJ.year)/Math.LN10));aI=(aT/aJ.year)/aQ;if(aI<1.5){aO=1}else{if(aI<3){aO=2}else{if(aI<7.5){aO=5}else{aO=10}}}aO*=aQ}aG.tickSize=aM.tickSize||[aO,aN];aB=function(aX){var a2=[],a0=aX.tickSize[0],a3=aX.tickSize[1],a1=new Date(aX.min);var aW=a0*aJ[a3];if(a3=="second"){a1.setUTCSeconds(a(a1.getUTCSeconds(),a0))}if(a3=="minute"){a1.setUTCMinutes(a(a1.getUTCMinutes(),a0))}if(a3=="hour"){a1.setUTCHours(a(a1.getUTCHours(),a0))}if(a3=="month"){a1.setUTCMonth(a(a1.getUTCMonth(),a0))}if(a3=="year"){a1.setUTCFullYear(a(a1.getUTCFullYear(),a0))}a1.setUTCMilliseconds(0);if(aW>=aJ.minute){a1.setUTCSeconds(0)}if(aW>=aJ.hour){a1.setUTCMinutes(0)}if(aW>=aJ.day){a1.setUTCHours(0)}if(aW>=aJ.day*4){a1.setUTCDate(1)}if(aW>=aJ.year){a1.setUTCMonth(0)}var a5=0,a4=Number.NaN,aY;do{aY=a4;a4=a1.getTime();a2.push(a4);if(a3=="month"){if(a0<1){a1.setUTCDate(1);var aV=a1.getTime();a1.setUTCMonth(a1.getUTCMonth()+1);var aZ=a1.getTime();a1.setTime(a4+a5*aJ.hour+(aZ-aV)*a0);a5=a1.getUTCHours();a1.setUTCHours(0)}else{a1.setUTCMonth(a1.getUTCMonth()+a0)}}else{if(a3=="year"){a1.setUTCFullYear(a1.getUTCFullYear()+a0)}else{a1.setTime(a4+aW)}}}while(a4<aX.max&&a4!=aY);return a2};aR=function(aV,aY){var a0=new Date(aV);if(aM.timeformat!=null){return c.plot.formatDate(a0,aM.timeformat,aM.monthNames)}var aW=aY.tickSize[0]*aJ[aY.tickSize[1]];var aX=aY.max-aY.min;var aZ=(aM.twelveHourClock)?" %p":"";if(aW<aJ.minute){fmt="%h:%M:%S"+aZ}else{if(aW<aJ.day){if(aX<2*aJ.day){fmt="%h:%M"+aZ}else{fmt="%b %d %h:%M"+aZ}}else{if(aW<aJ.month){fmt="%b %d"}else{if(aW<aJ.year){if(aX<aJ.year){fmt="%b"}else{fmt="%b %y"}}else{fmt="%y"}}}}return c.plot.formatDate(a0,fmt,aM.monthNames)}}else{var aU=aM.tickDecimals;var aP=-Math.floor(Math.log(aT)/Math.LN10);if(aU!=null&&aP>aU){aP=aU}aQ=Math.pow(10,-aP);aI=aT/aQ;if(aI<1.5){aO=1}else{if(aI<3){aO=2;if(aI>2.25&&(aU==null||aP+1<=aU)){aO=2.5;++aP}}else{if(aI<7.5){aO=5}else{aO=10}}}aO*=aQ;if(aM.minTickSize!=null&&aO<aM.minTickSize){aO=aM.minTickSize}aG.tickDecimals=Math.max(0,aU!=null?aU:aP);aG.tickSize=aM.tickSize||aO;aB=function(aX){var aZ=[];var a0=a(aX.min,aX.tickSize),aW=0,aV=Number.NaN,aY;do{aY=aV;aV=a0+aW*aX.tickSize;aZ.push(aV);++aW}while(aV<aX.max&&aV!=aY);return aZ};aR=function(aV,aW){return aV.toFixed(aW.tickDecimals)}}if(aM.alignTicksWithAxis!=null){var aF=(aG.direction=="x"?p:aw)[aM.alignTicksWithAxis-1];if(aF&&aF.used&&aF!=aG){var aL=aB(aG);if(aL.length>0){if(aM.min==null){aG.min=Math.min(aG.min,aL[0])}if(aM.max==null&&aL.length>1){aG.max=Math.max(aG.max,aL[aL.length-1])}}aB=function(aX){var aY=[],aV,aW;for(aW=0;aW<aF.ticks.length;++aW){aV=(aF.ticks[aW].v-aF.min)/(aF.max-aF.min);aV=aX.min+aV*(aX.max-aX.min);aY.push(aV)}return aY};if(aG.mode!="time"&&aM.tickDecimals==null){var aE=Math.max(0,-Math.floor(Math.log(aT)/Math.LN10)+1),aD=aB(aG);if(!(aD.length>1&&/\..*0$/.test((aD[1]-aD[0]).toFixed(aE)))){aG.tickDecimals=aE}}}}aG.tickGenerator=aB;if(c.isFunction(aM.tickFormatter)){aG.tickFormatter=function(aV,aW){return""+aM.tickFormatter(aV,aW)}}else{aG.tickFormatter=aR}}function P(aF){var aH=aF.options.ticks,aG=[];if(aH==null||(typeof aH=="number"&&aH>0)){aG=aF.tickGenerator(aF)}else{if(aH){if(c.isFunction(aH)){aG=aH({min:aF.min,max:aF.max})}else{aG=aH}}}var aE,aB;aF.ticks=[];for(aE=0;aE<aG.length;++aE){var aC=null;var aD=aG[aE];if(typeof aD=="object"){aB=+aD[0];if(aD.length>1){aC=aD[1]}}else{aB=+aD}if(aC==null){aC=aF.tickFormatter(aB,aF)}if(!isNaN(aB)){aF.ticks.push({v:aB,label:aC})}}}function ap(aB,aC){if(aB.options.autoscaleMargin&&aC.length>0){if(aB.options.min==null){aB.min=Math.min(aB.min,aC[0].v)}if(aB.options.max==null&&aC.length>1){aB.max=Math.max(aB.max,aC[aC.length-1].v)}}}function W(){H.clearRect(0,0,G,I);var aC=O.grid;if(aC.show&&aC.backgroundColor){N()}if(aC.show&&!aC.aboveData){ac()}for(var aB=0;aB<Q.length;++aB){an(ak.drawSeries,[H,Q[aB]]);d(Q[aB])}an(ak.draw,[H]);if(aC.show&&aC.aboveData){ac()}}function D(aB,aI){var aE,aH,aG,aD,aF=m();for(i=0;i<aF.length;++i){aE=aF[i];if(aE.direction==aI){aD=aI+aE.n+"axis";if(!aB[aD]&&aE.n==1){aD=aI+"axis"}if(aB[aD]){aH=aB[aD].from;aG=aB[aD].to;break}}}if(!aB[aD]){aE=aI=="x"?p[0]:aw[0];aH=aB[aI+"1"];aG=aB[aI+"2"]}if(aH!=null&&aG!=null&&aH>aG){var aC=aH;aH=aG;aG=aC}return{from:aH,to:aG,axis:aE}}function N(){H.save();H.translate(q.left,q.top);H.fillStyle=am(O.grid.backgroundColor,w,0,"rgba(255, 255, 255, 0)");H.fillRect(0,0,h,w);H.restore()}function ac(){var aF;H.save();H.translate(q.left,q.top);var aH=O.grid.markings;if(aH){if(c.isFunction(aH)){var aK=aq.getAxes();aK.xmin=aK.xaxis.min;aK.xmax=aK.xaxis.max;aK.ymin=aK.yaxis.min;aK.ymax=aK.yaxis.max;aH=aH(aK)}for(aF=0;aF<aH.length;++aF){var aD=aH[aF],aC=D(aD,"x"),aI=D(aD,"y");if(aC.from==null){aC.from=aC.axis.min}if(aC.to==null){aC.to=aC.axis.max}if(aI.from==null){aI.from=aI.axis.min}if(aI.to==null){aI.to=aI.axis.max}if(aC.to<aC.axis.min||aC.from>aC.axis.max||aI.to<aI.axis.min||aI.from>aI.axis.max){continue}aC.from=Math.max(aC.from,aC.axis.min);aC.to=Math.min(aC.to,aC.axis.max);aI.from=Math.max(aI.from,aI.axis.min);aI.to=Math.min(aI.to,aI.axis.max);if(aC.from==aC.to&&aI.from==aI.to){continue}aC.from=aC.axis.p2c(aC.from);aC.to=aC.axis.p2c(aC.to);aI.from=aI.axis.p2c(aI.from);aI.to=aI.axis.p2c(aI.to);if(aC.from==aC.to||aI.from==aI.to){H.beginPath();H.strokeStyle=aD.color||O.grid.markingsColor;H.lineWidth=aD.lineWidth||O.grid.markingsLineWidth;H.moveTo(aC.from,aI.from);H.lineTo(aC.to,aI.to);H.stroke()}else{H.fillStyle=aD.color||O.grid.markingsColor;H.fillRect(aC.from,aI.to,aC.to-aC.from,aI.from-aI.to)}}}var aK=m(),aM=O.grid.borderWidth;for(var aE=0;aE<aK.length;++aE){var aB=aK[aE],aG=aB.box,aQ=aB.tickLength,aN,aL,aP,aJ;if(!aB.show||aB.ticks.length==0){continue}H.strokeStyle=aB.options.tickColor||c.color.parse(aB.options.color).scale("a",0.22).toString();H.lineWidth=aB.options.lineWidth;if(aB.direction=="x"){aN=0;if(aQ=="full"){aL=(aB.position=="top"?0:w)}else{aL=aG.top-q.top+(aB.position=="top"?aG.height:0)}}else{aL=0;if(aQ=="full"){aN=(aB.position=="left"?0:h)}else{aN=aG.left-q.left+(aB.position=="left"?aG.width:0)}}if(!aB.innermost){H.beginPath();aP=aJ=0;if(aB.direction=="x"){aP=h}else{aJ=w}if(H.lineWidth==1){aN=Math.floor(aN)+0.5;aL=Math.floor(aL)+0.5}H.moveTo(aN,aL);H.lineTo(aN+aP,aL+aJ);H.stroke()}H.beginPath();for(aF=0;aF<aB.ticks.length;++aF){var aO=aB.ticks[aF].v;aP=aJ=0;if(aO<aB.min||aO>aB.max||(aQ=="full"&&aM>0&&(aO==aB.min||aO==aB.max))){continue}if(aB.direction=="x"){aN=aB.p2c(aO);aJ=aQ=="full"?-w:aQ;if(aB.position=="top"){aJ=-aJ}}else{aL=aB.p2c(aO);aP=aQ=="full"?-h:aQ;if(aB.position=="left"){aP=-aP}}if(H.lineWidth==1){if(aB.direction=="x"){aN=Math.floor(aN)+0.5}else{aL=Math.floor(aL)+0.5}}H.moveTo(aN,aL);H.lineTo(aN+aP,aL+aJ)}H.stroke()}if(aM){H.lineWidth=aM;H.strokeStyle=O.grid.borderColor;H.strokeRect(-aM/2,-aM/2,h+aM,w+aM)}H.restore()}function k(){av.find(".tickLabels").remove();var aG=['<div class="tickLabels" style="font-size:smaller">'];var aJ=m();for(var aD=0;aD<aJ.length;++aD){var aC=aJ[aD],aF=aC.box;if(!aC.show){continue}aG.push('<div class="'+aC.direction+"Axis "+aC.direction+aC.n+'Axis" style="color:'+aC.options.color+'">');for(var aE=0;aE<aC.ticks.length;++aE){var aH=aC.ticks[aE];if(!aH.label||aH.v<aC.min||aH.v>aC.max){continue}var aK={},aI;if(aC.direction=="x"){aI="center";aK.left=Math.round(q.left+aC.p2c(aH.v)-aC.labelWidth/2);if(aC.position=="bottom"){aK.top=aF.top+aF.padding}else{aK.bottom=I-(aF.top+aF.height-aF.padding)}}else{aK.top=Math.round(q.top+aC.p2c(aH.v)-aC.labelHeight/2);if(aC.position=="left"){aK.right=G-(aF.left+aF.width-aF.padding);aI="right"}else{aK.left=aF.left+aF.padding;aI="left"}}aK.width=aC.labelWidth;var aB=["position:absolute","text-align:"+aI];for(var aL in aK){aB.push(aL+":"+aK[aL]+"px")}aG.push('<div class="tickLabel" style="'+aB.join(";")+'">'+aH.label+"</div>")}aG.push("</div>")}aG.push("</div>");av.append(aG.join(""))}function d(aB){if(aB.lines.show){at(aB)}if(aB.bars.show){e(aB)}if(aB.points.show){ao(aB)}}function at(aE){function aD(aP,aQ,aI,aU,aT){var aV=aP.points,aJ=aP.pointsize,aN=null,aM=null;H.beginPath();for(var aO=aJ;aO<aV.length;aO+=aJ){var aL=aV[aO-aJ],aS=aV[aO-aJ+1],aK=aV[aO],aR=aV[aO+1];if(aL==null||aK==null){continue}if(aS<=aR&&aS<aT.min){if(aR<aT.min){continue}aL=(aT.min-aS)/(aR-aS)*(aK-aL)+aL;aS=aT.min}else{if(aR<=aS&&aR<aT.min){if(aS<aT.min){continue}aK=(aT.min-aS)/(aR-aS)*(aK-aL)+aL;aR=aT.min}}if(aS>=aR&&aS>aT.max){if(aR>aT.max){continue}aL=(aT.max-aS)/(aR-aS)*(aK-aL)+aL;aS=aT.max}else{if(aR>=aS&&aR>aT.max){if(aS>aT.max){continue}aK=(aT.max-aS)/(aR-aS)*(aK-aL)+aL;aR=aT.max}}if(aL<=aK&&aL<aU.min){if(aK<aU.min){continue}aS=(aU.min-aL)/(aK-aL)*(aR-aS)+aS;aL=aU.min}else{if(aK<=aL&&aK<aU.min){if(aL<aU.min){continue}aR=(aU.min-aL)/(aK-aL)*(aR-aS)+aS;aK=aU.min}}if(aL>=aK&&aL>aU.max){if(aK>aU.max){continue}aS=(aU.max-aL)/(aK-aL)*(aR-aS)+aS;aL=aU.max}else{if(aK>=aL&&aK>aU.max){if(aL>aU.max){continue}aR=(aU.max-aL)/(aK-aL)*(aR-aS)+aS;aK=aU.max}}if(aL!=aN||aS!=aM){H.moveTo(aU.p2c(aL)+aQ,aT.p2c(aS)+aI)}aN=aK;aM=aR;H.lineTo(aU.p2c(aK)+aQ,aT.p2c(aR)+aI)}H.stroke()}function aF(aI,aQ,aP){var aW=aI.points,aV=aI.pointsize,aN=Math.min(Math.max(0,aP.min),aP.max),aX=0,aU,aT=false,aM=1,aL=0,aR=0;while(true){if(aV>0&&aX>aW.length+aV){break}aX+=aV;var aZ=aW[aX-aV],aK=aW[aX-aV+aM],aY=aW[aX],aJ=aW[aX+aM];if(aT){if(aV>0&&aZ!=null&&aY==null){aR=aX;aV=-aV;aM=2;continue}if(aV<0&&aX==aL+aV){H.fill();aT=false;aV=-aV;aM=1;aX=aL=aR+aV;continue}}if(aZ==null||aY==null){continue}if(aZ<=aY&&aZ<aQ.min){if(aY<aQ.min){continue}aK=(aQ.min-aZ)/(aY-aZ)*(aJ-aK)+aK;aZ=aQ.min}else{if(aY<=aZ&&aY<aQ.min){if(aZ<aQ.min){continue}aJ=(aQ.min-aZ)/(aY-aZ)*(aJ-aK)+aK;aY=aQ.min}}if(aZ>=aY&&aZ>aQ.max){if(aY>aQ.max){continue}aK=(aQ.max-aZ)/(aY-aZ)*(aJ-aK)+aK;aZ=aQ.max}else{if(aY>=aZ&&aY>aQ.max){if(aZ>aQ.max){continue}aJ=(aQ.max-aZ)/(aY-aZ)*(aJ-aK)+aK;aY=aQ.max}}if(!aT){H.beginPath();H.moveTo(aQ.p2c(aZ),aP.p2c(aN));aT=true}if(aK>=aP.max&&aJ>=aP.max){H.lineTo(aQ.p2c(aZ),aP.p2c(aP.max));H.lineTo(aQ.p2c(aY),aP.p2c(aP.max));continue}else{if(aK<=aP.min&&aJ<=aP.min){H.lineTo(aQ.p2c(aZ),aP.p2c(aP.min));H.lineTo(aQ.p2c(aY),aP.p2c(aP.min));continue}}var aO=aZ,aS=aY;if(aK<=aJ&&aK<aP.min&&aJ>=aP.min){aZ=(aP.min-aK)/(aJ-aK)*(aY-aZ)+aZ;aK=aP.min}else{if(aJ<=aK&&aJ<aP.min&&aK>=aP.min){aY=(aP.min-aK)/(aJ-aK)*(aY-aZ)+aZ;aJ=aP.min}}if(aK>=aJ&&aK>aP.max&&aJ<=aP.max){aZ=(aP.max-aK)/(aJ-aK)*(aY-aZ)+aZ;aK=aP.max}else{if(aJ>=aK&&aJ>aP.max&&aK<=aP.max){aY=(aP.max-aK)/(aJ-aK)*(aY-aZ)+aZ;aJ=aP.max}}if(aZ!=aO){H.lineTo(aQ.p2c(aO),aP.p2c(aK))}H.lineTo(aQ.p2c(aZ),aP.p2c(aK));H.lineTo(aQ.p2c(aY),aP.p2c(aJ));if(aY!=aS){H.lineTo(aQ.p2c(aY),aP.p2c(aJ));H.lineTo(aQ.p2c(aS),aP.p2c(aJ))}}}H.save();H.translate(q.left,q.top);H.lineJoin="round";var aG=aE.lines.lineWidth,aB=aE.shadowSize;if(aG>0&&aB>0){H.lineWidth=aB;H.strokeStyle="rgba(0,0,0,0.1)";var aH=Math.PI/18;aD(aE.datapoints,Math.sin(aH)*(aG/2+aB/2),Math.cos(aH)*(aG/2+aB/2),aE.xaxis,aE.yaxis);H.lineWidth=aB/2;aD(aE.datapoints,Math.sin(aH)*(aG/2+aB/4),Math.cos(aH)*(aG/2+aB/4),aE.xaxis,aE.yaxis)}H.lineWidth=aG;H.strokeStyle=aE.color;var aC=ae(aE.lines,aE.color,0,w);if(aC){H.fillStyle=aC;aF(aE.datapoints,aE.xaxis,aE.yaxis)}if(aG>0){aD(aE.datapoints,0,0,aE.xaxis,aE.yaxis)}H.restore()}function ao(aE){function aH(aN,aM,aU,aK,aS,aT,aQ,aJ){var aR=aN.points,aI=aN.pointsize;for(var aL=0;aL<aR.length;aL+=aI){var aP=aR[aL],aO=aR[aL+1];if(aP==null||aP<aT.min||aP>aT.max||aO<aQ.min||aO>aQ.max){continue}H.beginPath();aP=aT.p2c(aP);aO=aQ.p2c(aO)+aK;if(aJ=="circle"){H.arc(aP,aO,aM,0,aS?Math.PI:Math.PI*2,false)}else{aJ(H,aP,aO,aM,aS)}H.closePath();if(aU){H.fillStyle=aU;H.fill()}/*H.stroke()*/}}H.save();H.translate(q.left,q.top);var aG=aE.points.lineWidth,aC=aE.shadowSize,aB=aE.points.radius,aF=aE.points.symbol;if(aG>0&&aC>0){var aD=aC/2;H.lineWidth=aD;H.strokeStyle="rgba(0,0,0,0.1)";aH(aE.datapoints,aB,null,aD+aD/2,true,aE.xaxis,aE.yaxis,aF);H.strokeStyle="rgba(0,0,0,0.2)";aH(aE.datapoints,aB,null,aD/2,true,aE.xaxis,aE.yaxis,aF)}H.lineWidth=aG;H.strokeStyle=aE.color;aH(aE.datapoints,aB,ae(aE.points,aE.color),0,false,aE.xaxis,aE.yaxis,aF);H.restore()}function E(aN,aM,aV,aI,aQ,aF,aD,aL,aK,aU,aR,aC){var aE,aT,aJ,aP,aG,aB,aO,aH,aS;if(aR){aH=aB=aO=true;aG=false;aE=aV;aT=aN;aP=aM+aI;aJ=aM+aQ;if(aT<aE){aS=aT;aT=aE;aE=aS;aG=true;aB=false}}else{aG=aB=aO=true;aH=false;aE=aN+aI;aT=aN+aQ;aJ=aV;aP=aM;if(aP<aJ){aS=aP;aP=aJ;aJ=aS;aH=true;aO=false}}if(aT<aL.min||aE>aL.max||aP<aK.min||aJ>aK.max){return}if(aE<aL.min){aE=aL.min;aG=false}if(aT>aL.max){aT=aL.max;aB=false}if(aJ<aK.min){aJ=aK.min;aH=false}if(aP>aK.max){aP=aK.max;aO=false}aE=aL.p2c(aE);aJ=aK.p2c(aJ);aT=aL.p2c(aT);aP=aK.p2c(aP);if(aD){aU.beginPath();aU.moveTo(aE,aJ);aU.lineTo(aE,aP);aU.lineTo(aT,aP);aU.lineTo(aT,aJ);aU.fillStyle=aD(aJ,aP);aU.fill()}if(aC>0&&(aG||aB||aO||aH)){aU.beginPath();aU.moveTo(aE,aJ+aF);if(aG){aU.lineTo(aE,aP+aF)}else{aU.moveTo(aE,aP+aF)}if(aO){aU.lineTo(aT,aP+aF)}else{aU.moveTo(aT,aP+aF)}if(aB){aU.lineTo(aT,aJ+aF)}else{aU.moveTo(aT,aJ+aF)}if(aH){aU.lineTo(aE,aJ+aF)}else{aU.moveTo(aE,aJ+aF)}aU.stroke()}}function e(aD){function aC(aJ,aI,aL,aG,aK,aN,aM){var aO=aJ.points,aF=aJ.pointsize;for(var aH=0;aH<aO.length;aH+=aF){if(aO[aH]==null){continue}E(aO[aH],aO[aH+1],aO[aH+2],aI,aL,aG,aK,aN,aM,H,aD.bars.horizontal,aD.bars.lineWidth)}}H.save();H.translate(q.left,q.top);H.lineWidth=aD.bars.lineWidth;H.strokeStyle=aD.color;var aB=aD.bars.align=="left"?0:-aD.bars.barWidth/2;var aE=aD.bars.fill?function(aF,aG){return ae(aD.bars,aD.color,aF,aG)}:null;aC(aD.datapoints,aB,aB+aD.bars.barWidth,0,aE,aD.xaxis,aD.yaxis);H.restore()}function ae(aD,aB,aC,aF){var aE=aD.fill;if(!aE){return null}if(aD.fillColor){return am(aD.fillColor,aC,aF,aB)}var aG=c.color.parse(aB);aG.a=typeof aE=="number"?aE:0.4;aG.normalize();return aG.toString()}function o(){av.find(".legend").remove();if(!O.legend.show){return}var aH=[],aF=false,aN=O.legend.labelFormatter,aM,aJ;for(var aE=0;aE<Q.length;++aE){aM=Q[aE];aJ=aM.label;if(!aJ){continue}if(aE%O.legend.noColumns==0){if(aF){aH.push("</tr>")}aH.push("<tr>");aF=true}if(aN){aJ=aN(aJ,aM)}aH.push('<td class="legendColorBox"><div style="border:1px solid '+O.legend.labelBoxBorderColor+';padding:1px"><div style="width:4px;height:0;border:5px solid '+aM.color+';overflow:hidden"></div></div></td><td class="legendLabel">'+aJ+"</td>")}if(aF){aH.push("</tr>")}if(aH.length==0){return}var aL='<table style="font-size:smaller;color:'+O.grid.color+'">'+aH.join("")+"</table>";if(O.legend.container!=null){c(O.legend.container).html(aL)}else{var aI="",aC=O.legend.position,aD=O.legend.margin;if(aD[0]==null){aD=[aD,aD]}if(aC.charAt(0)=="n"){aI+="top:"+(aD[1]+q.top)+"px;"}else{if(aC.charAt(0)=="s"){aI+="bottom:"+(aD[1]+q.bottom)+"px;"}}if(aC.charAt(1)=="e"){aI+="right:"+(aD[0]+q.right)+"px;"}else{if(aC.charAt(1)=="w"){aI+="left:"+(aD[0]+q.left)+"px;"}}var aK=c('<div class="legend">'+aL.replace('style="','style="position:absolute;'+aI+";")+"</div>").appendTo(av);if(O.legend.backgroundOpacity!=0){var aG=O.legend.backgroundColor;if(aG==null){aG=O.grid.backgroundColor;if(aG&&typeof aG=="string"){aG=c.color.parse(aG)}else{aG=c.color.extract(aK,"background-color")}aG.a=1;aG=aG.toString()}var aB=aK.children();c('<div style="position:absolute;width:'+aB.width()+"px;height:"+aB.height()+"px;"+aI+"background-color:"+aG+';"> </div>').prependTo(aK).css("opacity",O.legend.backgroundOpacity)}}}var ab=[],M=null;function K(aI,aG,aD){var aO=O.grid.mouseActiveRadius,a0=aO*aO+1,aY=null,aR=false,aW,aU;for(aW=Q.length-1;aW>=0;--aW){if(!aD(Q[aW])){continue}var aP=Q[aW],aH=aP.xaxis,aF=aP.yaxis,aV=aP.datapoints.points,aT=aP.datapoints.pointsize,aQ=aH.c2p(aI),aN=aF.c2p(aG),aC=aO/aH.scale,aB=aO/aF.scale;if(aH.options.inverseTransform){aC=Number.MAX_VALUE}if(aF.options.inverseTransform){aB=Number.MAX_VALUE}if(aP.lines.show||aP.points.show||aP.dashes.show){for(aU=0;aU<aV.length;aU+=aT){var aK=aV[aU],aJ=aV[aU+1];if(aK==null){continue}if(aK-aQ>aC||aK-aQ<-aC||aJ-aN>aB||aJ-aN<-aB){continue}var aM=Math.abs(aH.p2c(aK)-aI),aL=Math.abs(aF.p2c(aJ)-aG),aS=aM*aM+aL*aL;if(aS<a0){a0=aS;aY=[aW,aU/aT]}}}if(aP.bars.show&&!aY){var aE=aP.bars.align=="left"?0:-aP.bars.barWidth/2,aX=aE+aP.bars.barWidth;for(aU=0;aU<aV.length;aU+=aT){var aK=aV[aU],aJ=aV[aU+1],aZ=aV[aU+2];if(aK==null){continue}if(Q[aW].bars.horizontal?(aQ<=Math.max(aZ,aK)&&aQ>=Math.min(aZ,aK)&&aN>=aJ+aE&&aN<=aJ+aX):(aQ>=aK+aE&&aQ<=aK+aX&&aN>=Math.min(aZ,aJ)&&aN<=Math.max(aZ,aJ))){aY=[aW,aU/aT]}}}}if(aY){aW=aY[0];aU=aY[1];aT=Q[aW].datapoints.pointsize;return{datapoint:Q[aW].datapoints.points.slice(aU*aT,(aU+1)*aT),dataIndex:aU,series:Q[aW],seriesIndex:aW}}return null}function aa(aB){if(O.grid.hoverable){u("plothover",aB,function(aC){return aC.hoverable!=false})}}function l(aB){if(O.grid.hoverable){u("plothover",aB,function(aC){return false})}}function R(aB){u("plotclick",aB,function(aC){return aC.clickable!=false})}function u(aC,aB,aD){var aE=y.offset(),aH=aB.pageX-aE.left-q.left,aF=aB.pageY-aE.top-q.top,aJ=C({left:aH,top:aF});aJ.pageX=aB.pageX;aJ.pageY=aB.pageY;var aK=K(aH,aF,aD);if(aK){aK.pageX=parseInt(aK.series.xaxis.p2c(aK.datapoint[0])+aE.left+q.left);aK.pageY=parseInt(aK.series.yaxis.p2c(aK.datapoint[1])+aE.top+q.top)}if(O.grid.autoHighlight){for(var aG=0;aG<ab.length;++aG){var aI=ab[aG];if(aI.auto==aC&&!(aK&&aI.series==aK.series&&aI.point[0]==aK.datapoint[0]&&aI.point[1]==aK.datapoint[1])){T(aI.series,aI.point)}}if(aK){x(aK.series,aK.datapoint,aC)}}av.trigger(aC,[aJ,aK])}function f(){if(!M){M=setTimeout(s,30)}}function s(){M=null;A.save();A.clearRect(0,0,G,I);A.translate(q.left,q.top);var aC,aB;for(aC=0;aC<ab.length;++aC){aB=ab[aC];if(aB.series.bars.show){v(aB.series,aB.point)}else{ay(aB.series,aB.point)}}A.restore();an(ak.drawOverlay,[A])}function x(aD,aB,aF){if(typeof aD=="number"){aD=Q[aD]}if(typeof aB=="number"){var aE=aD.datapoints.pointsize;aB=aD.datapoints.points.slice(aE*aB,aE*(aB+1))}var aC=al(aD,aB);if(aC==-1){ab.push({series:aD,point:aB,auto:aF});f()}else{if(!aF){ab[aC].auto=false}}}function T(aD,aB){if(aD==null&&aB==null){ab=[];f()}if(typeof aD=="number"){aD=Q[aD]}if(typeof aB=="number"){aB=aD.data[aB]}var aC=al(aD,aB);if(aC!=-1){ab.splice(aC,1);f()}}function al(aD,aE){for(var aB=0;aB<ab.length;++aB){var aC=ab[aB];if(aC.series==aD&&aC.point[0]==aE[0]&&aC.point[1]==aE[1]){return aB}}return -1}function ay(aE,aD){var aC=aD[0],aI=aD[1],aH=aE.xaxis,aG=aE.yaxis;if(aC<aH.min||aC>aH.max||aI<aG.min||aI>aG.max){return}var aF=aE.points.radius+aE.points.lineWidth/2;A.lineWidth=aF;A.strokeStyle=c.color.parse(aE.color).scale("a",0.5).toString();var aB=1.5*aF,aC=aH.p2c(aC),aI=aG.p2c(aI);A.beginPath();if(aE.points.symbol=="circle"){A.arc(aC,aI,aB,0,2*Math.PI,false)}else{aE.points.symbol(A,aC,aI,aB,false)}A.closePath();A.stroke()}function v(aE,aB){A.lineWidth=aE.bars.lineWidth;A.strokeStyle=c.color.parse(aE.color).scale("a",0.5).toString();var aD=c.color.parse(aE.color).scale("a",0.5).toString();var aC=aE.bars.align=="left"?0:-aE.bars.barWidth/2;E(aB[0],aB[1],aB[2]||0,aC,aC+aE.bars.barWidth,0,function(){return aD},aE.xaxis,aE.yaxis,A,aE.bars.horizontal,aE.bars.lineWidth)}function am(aJ,aB,aH,aC){if(typeof aJ=="string"){return aJ}else{var aI=H.createLinearGradient(0,aH,0,aB);for(var aE=0,aD=aJ.colors.length;aE<aD;++aE){var aF=aJ.colors[aE];if(typeof aF!="string"){var aG=c.color.parse(aC);if(aF.brightness!=null){aG=aG.scale("rgb",aF.brightness)}if(aF.opacity!=null){aG.a*=aF.opacity}aF=aG.toString()}aI.addColorStop(aE/(aD-1),aF)}return aI}}}c.plot=function(g,e,d){var f=new b(c(g),e,d,c.plot.plugins);return f};c.plot.version="0.7";c.plot.plugins=[];c.plot.formatDate=function(l,f,h){var o=function(d){d=""+d;return d.length==1?"0"+d:d};var e=[];var p=false,j=false;var n=l.getUTCHours();var k=n<12;if(h==null){h=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]}if(f.search(/%p|%P/)!=-1){if(n>12){n=n-12}else{if(n==0){n=12}}}for(var g=0;g<f.length;++g){var m=f.charAt(g);if(p){switch(m){case"h":m=""+n;break;case"H":m=o(n);break;case"M":m=o(l.getUTCMinutes());break;case"S":m=o(l.getUTCSeconds());break;case"d":m=""+l.getUTCDate();break;case"m":m=""+(l.getUTCMonth()+1);break;case"y":m=""+l.getUTCFullYear();break;case"b":m=""+h[l.getUTCMonth()];break;case"p":m=(k)?("am"):("pm");break;case"P":m=(k)?("AM"):("PM");break;case"0":m="";j=true;break}if(m&&j){m=o(m);j=false}e.push(m);if(!j){p=false}}else{if(m=="%"){p=true}else{e.push(m)}}}return e.join("")};function a(e,d){return d*Math.floor(e/d)}})(jQuery);
5367786dc871 Uploaded
greg
parents:
diff changeset
710 </script>
5367786dc871 Uploaded
greg
parents:
diff changeset
711
5367786dc871 Uploaded
greg
parents:
diff changeset
712 <script type="text/javascript">
5367786dc871 Uploaded
greg
parents:
diff changeset
713 if(!document.createElement("canvas").getContext){(function(){var z=Math;var K=z.round;var J=z.sin;var U=z.cos;var b=z.abs;var k=z.sqrt;var D=10;var F=D/2;function T(){return this.context_||(this.context_=new W(this))}var O=Array.prototype.slice;function G(i,j,m){var Z=O.call(arguments,2);return function(){return i.apply(j,Z.concat(O.call(arguments)))}}function AD(Z){return String(Z).replace(/&/g,"&amp;").replace(/"/g,"&quot;")}function r(i){if(!i.namespaces.g_vml_){i.namespaces.add("g_vml_","urn:schemas-microsoft-com:vml","#default#VML")}if(!i.namespaces.g_o_){i.namespaces.add("g_o_","urn:schemas-microsoft-com:office:office","#default#VML")}if(!i.styleSheets.ex_canvas_){var Z=i.createStyleSheet();Z.owningElement.id="ex_canvas_";Z.cssText="canvas{display:inline-block;overflow:hidden;text-align:left;width:300px;height:150px}"}}r(document);var E={init:function(Z){if(/MSIE/.test(navigator.userAgent)&&!window.opera){var i=Z||document;i.createElement("canvas");i.attachEvent("onreadystatechange",G(this.init_,this,i))}},init_:function(m){var j=m.getElementsByTagName("canvas");for(var Z=0;Z<j.length;Z++){this.initElement(j[Z])}},initElement:function(i){if(!i.getContext){i.getContext=T;r(i.ownerDocument);i.innerHTML="";i.attachEvent("onpropertychange",S);i.attachEvent("onresize",w);var Z=i.attributes;if(Z.width&&Z.width.specified){i.style.width=Z.width.nodeValue+"px"}else{i.width=i.clientWidth}if(Z.height&&Z.height.specified){i.style.height=Z.height.nodeValue+"px"}else{i.height=i.clientHeight}}return i}};function S(i){var Z=i.srcElement;switch(i.propertyName){case"width":Z.getContext().clearRect();Z.style.width=Z.attributes.width.nodeValue+"px";Z.firstChild.style.width=Z.clientWidth+"px";break;case"height":Z.getContext().clearRect();Z.style.height=Z.attributes.height.nodeValue+"px";Z.firstChild.style.height=Z.clientHeight+"px";break}}function w(i){var Z=i.srcElement;if(Z.firstChild){Z.firstChild.style.width=Z.clientWidth+"px";Z.firstChild.style.height=Z.clientHeight+"px"}}E.init();var I=[];for(var AC=0;AC<16;AC++){for(var AB=0;AB<16;AB++){I[AC*16+AB]=AC.toString(16)+AB.toString(16)}}function V(){return[[1,0,0],[0,1,0],[0,0,1]]}function d(m,j){var i=V();for(var Z=0;Z<3;Z++){for(var AF=0;AF<3;AF++){var p=0;for(var AE=0;AE<3;AE++){p+=m[Z][AE]*j[AE][AF]}i[Z][AF]=p}}return i}function Q(i,Z){Z.fillStyle=i.fillStyle;Z.lineCap=i.lineCap;Z.lineJoin=i.lineJoin;Z.lineWidth=i.lineWidth;Z.miterLimit=i.miterLimit;Z.shadowBlur=i.shadowBlur;Z.shadowColor=i.shadowColor;Z.shadowOffsetX=i.shadowOffsetX;Z.shadowOffsetY=i.shadowOffsetY;Z.strokeStyle=i.strokeStyle;Z.globalAlpha=i.globalAlpha;Z.font=i.font;Z.textAlign=i.textAlign;Z.textBaseline=i.textBaseline;Z.arcScaleX_=i.arcScaleX_;Z.arcScaleY_=i.arcScaleY_;Z.lineScale_=i.lineScale_}var B={aliceblue:"#F0F8FF",antiquewhite:"#FAEBD7",aquamarine:"#7FFFD4",azure:"#F0FFFF",beige:"#F5F5DC",bisque:"#FFE4C4",black:"#000000",blanchedalmond:"#FFEBCD",blueviolet:"#8A2BE2",brown:"#A52A2A",burlywood:"#DEB887",cadetblue:"#5F9EA0",chartreuse:"#7FFF00",chocolate:"#D2691E",coral:"#FF7F50",cornflowerblue:"#6495ED",cornsilk:"#FFF8DC",crimson:"#DC143C",cyan:"#00FFFF",darkblue:"#00008B",darkcyan:"#008B8B",darkgoldenrod:"#B8860B",darkgray:"#A9A9A9",darkgreen:"#006400",darkgrey:"#A9A9A9",darkkhaki:"#BDB76B",darkmagenta:"#8B008B",darkolivegreen:"#556B2F",darkorange:"#FF8C00",darkorchid:"#9932CC",darkred:"#8B0000",darksalmon:"#E9967A",darkseagreen:"#8FBC8F",darkslateblue:"#483D8B",darkslategray:"#2F4F4F",darkslategrey:"#2F4F4F",darkturquoise:"#00CED1",darkviolet:"#9400D3",deeppink:"#FF1493",deepskyblue:"#00BFFF",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1E90FF",firebrick:"#B22222",floralwhite:"#FFFAF0",forestgreen:"#228B22",gainsboro:"#DCDCDC",ghostwhite:"#F8F8FF",gold:"#FFD700",goldenrod:"#DAA520",grey:"#808080",greenyellow:"#ADFF2F",honeydew:"#F0FFF0",hotpink:"#FF69B4",indianred:"#CD5C5C",indigo:"#4B0082",ivory:"#FFFFF0",khaki:"#F0E68C",lavender:"#E6E6FA",lavenderblush:"#FFF0F5",lawngreen:"#7CFC00",lemonchiffon:"#FFFACD",lightblue:"#ADD8E6",lightcoral:"#F08080",lightcyan:"#E0FFFF",lightgoldenrodyellow:"#FAFAD2",lightgreen:"#90EE90",lightgrey:"#D3D3D3",lightpink:"#FFB6C1",lightsalmon:"#FFA07A",lightseagreen:"#20B2AA",lightskyblue:"#87CEFA",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#B0C4DE",lightyellow:"#FFFFE0",limegreen:"#32CD32",linen:"#FAF0E6",magenta:"#FF00FF",mediumaquamarine:"#66CDAA",mediumblue:"#0000CD",mediumorchid:"#BA55D3",mediumpurple:"#9370DB",mediumseagreen:"#3CB371",mediumslateblue:"#7B68EE",mediumspringgreen:"#00FA9A",mediumturquoise:"#48D1CC",mediumvioletred:"#C71585",midnightblue:"#191970",mintcream:"#F5FFFA",mistyrose:"#FFE4E1",moccasin:"#FFE4B5",navajowhite:"#FFDEAD",oldlace:"#FDF5E6",olivedrab:"#6B8E23",orange:"#FFA500",orangered:"#FF4500",orchid:"#DA70D6",palegoldenrod:"#EEE8AA",palegreen:"#98FB98",paleturquoise:"#AFEEEE",palevioletred:"#DB7093",papayawhip:"#FFEFD5",peachpuff:"#FFDAB9",peru:"#CD853F",pink:"#FFC0CB",plum:"#DDA0DD",powderblue:"#B0E0E6",rosybrown:"#BC8F8F",royalblue:"#4169E1",saddlebrown:"#8B4513",salmon:"#FA8072",sandybrown:"#F4A460",seagreen:"#2E8B57",seashell:"#FFF5EE",sienna:"#A0522D",skyblue:"#87CEEB",slateblue:"#6A5ACD",slategray:"#708090",slategrey:"#708090",snow:"#FFFAFA",springgreen:"#00FF7F",steelblue:"#4682B4",tan:"#D2B48C",thistle:"#D8BFD8",tomato:"#FF6347",turquoise:"#40E0D0",violet:"#EE82EE",wheat:"#F5DEB3",whitesmoke:"#F5F5F5",yellowgreen:"#9ACD32"};function g(i){var m=i.indexOf("(",3);var Z=i.indexOf(")",m+1);var j=i.substring(m+1,Z).split(",");if(j.length==4&&i.substr(3,1)=="a"){alpha=Number(j[3])}else{j[3]=1}return j}function C(Z){return parseFloat(Z)/100}function N(i,j,Z){return Math.min(Z,Math.max(j,i))}function c(AF){var j,i,Z;h=parseFloat(AF[0])/360%360;if(h<0){h++}s=N(C(AF[1]),0,1);l=N(C(AF[2]),0,1);if(s==0){j=i=Z=l}else{var m=l<0.5?l*(1+s):l+s-l*s;var AE=2*l-m;j=A(AE,m,h+1/3);i=A(AE,m,h);Z=A(AE,m,h-1/3)}return"#"+I[Math.floor(j*255)]+I[Math.floor(i*255)]+I[Math.floor(Z*255)]}function A(i,Z,j){if(j<0){j++}if(j>1){j--}if(6*j<1){return i+(Z-i)*6*j}else{if(2*j<1){return Z}else{if(3*j<2){return i+(Z-i)*(2/3-j)*6}else{return i}}}}function Y(Z){var AE,p=1;Z=String(Z);if(Z.charAt(0)=="#"){AE=Z}else{if(/^rgb/.test(Z)){var m=g(Z);var AE="#",AF;for(var j=0;j<3;j++){if(m[j].indexOf("%")!=-1){AF=Math.floor(C(m[j])*255)}else{AF=Number(m[j])}AE+=I[N(AF,0,255)]}p=m[3]}else{if(/^hsl/.test(Z)){var m=g(Z);AE=c(m);p=m[3]}else{AE=B[Z]||Z}}}return{color:AE,alpha:p}}var L={style:"normal",variant:"normal",weight:"normal",size:10,family:"sans-serif"};var f={};function X(Z){if(f[Z]){return f[Z]}var m=document.createElement("div");var j=m.style;try{j.font=Z}catch(i){}return f[Z]={style:j.fontStyle||L.style,variant:j.fontVariant||L.variant,weight:j.fontWeight||L.weight,size:j.fontSize||L.size,family:j.fontFamily||L.family}}function P(j,i){var Z={};for(var AF in j){Z[AF]=j[AF]}var AE=parseFloat(i.currentStyle.fontSize),m=parseFloat(j.size);if(typeof j.size=="number"){Z.size=j.size}else{if(j.size.indexOf("px")!=-1){Z.size=m}else{if(j.size.indexOf("em")!=-1){Z.size=AE*m}else{if(j.size.indexOf("%")!=-1){Z.size=(AE/100)*m}else{if(j.size.indexOf("pt")!=-1){Z.size=m/0.75}else{Z.size=AE}}}}}Z.size*=0.981;return Z}function AA(Z){return Z.style+" "+Z.variant+" "+Z.weight+" "+Z.size+"px "+Z.family}function t(Z){switch(Z){case"butt":return"flat";case"round":return"round";case"square":default:return"square"}}function W(i){this.m_=V();this.mStack_=[];this.aStack_=[];this.currentPath_=[];this.strokeStyle="#000";this.fillStyle="#000";this.lineWidth=1;this.lineJoin="miter";this.lineCap="butt";this.miterLimit=D*1;this.globalAlpha=1;this.font="10px sans-serif";this.textAlign="left";this.textBaseline="alphabetic";this.canvas=i;var Z=i.ownerDocument.createElement("div");Z.style.width=i.clientWidth+"px";Z.style.height=i.clientHeight+"px";Z.style.overflow="hidden";Z.style.position="absolute";i.appendChild(Z);this.element_=Z;this.arcScaleX_=1;this.arcScaleY_=1;this.lineScale_=1}var M=W.prototype;M.clearRect=function(){if(this.textMeasureEl_){this.textMeasureEl_.removeNode(true);this.textMeasureEl_=null}this.element_.innerHTML=""};M.beginPath=function(){this.currentPath_=[]};M.moveTo=function(i,Z){var j=this.getCoords_(i,Z);this.currentPath_.push({type:"moveTo",x:j.x,y:j.y});this.currentX_=j.x;this.currentY_=j.y};M.lineTo=function(i,Z){var j=this.getCoords_(i,Z);this.currentPath_.push({type:"lineTo",x:j.x,y:j.y});this.currentX_=j.x;this.currentY_=j.y};M.bezierCurveTo=function(j,i,AI,AH,AG,AE){var Z=this.getCoords_(AG,AE);var AF=this.getCoords_(j,i);var m=this.getCoords_(AI,AH);e(this,AF,m,Z)};function e(Z,m,j,i){Z.currentPath_.push({type:"bezierCurveTo",cp1x:m.x,cp1y:m.y,cp2x:j.x,cp2y:j.y,x:i.x,y:i.y});Z.currentX_=i.x;Z.currentY_=i.y}M.quadraticCurveTo=function(AG,j,i,Z){var AF=this.getCoords_(AG,j);var AE=this.getCoords_(i,Z);var AH={x:this.currentX_+2/3*(AF.x-this.currentX_),y:this.currentY_+2/3*(AF.y-this.currentY_)};var m={x:AH.x+(AE.x-this.currentX_)/3,y:AH.y+(AE.y-this.currentY_)/3};e(this,AH,m,AE)};M.arc=function(AJ,AH,AI,AE,i,j){AI*=D;var AN=j?"at":"wa";var AK=AJ+U(AE)*AI-F;var AM=AH+J(AE)*AI-F;var Z=AJ+U(i)*AI-F;var AL=AH+J(i)*AI-F;if(AK==Z&&!j){AK+=0.125}var m=this.getCoords_(AJ,AH);var AG=this.getCoords_(AK,AM);var AF=this.getCoords_(Z,AL);this.currentPath_.push({type:AN,x:m.x,y:m.y,radius:AI,xStart:AG.x,yStart:AG.y,xEnd:AF.x,yEnd:AF.y})};M.rect=function(j,i,Z,m){this.moveTo(j,i);this.lineTo(j+Z,i);this.lineTo(j+Z,i+m);this.lineTo(j,i+m);this.closePath()};M.strokeRect=function(j,i,Z,m){var p=this.currentPath_;this.beginPath();this.moveTo(j,i);this.lineTo(j+Z,i);this.lineTo(j+Z,i+m);this.lineTo(j,i+m);this.closePath();this.stroke();this.currentPath_=p};M.fillRect=function(j,i,Z,m){var p=this.currentPath_;this.beginPath();this.moveTo(j,i);this.lineTo(j+Z,i);this.lineTo(j+Z,i+m);this.lineTo(j,i+m);this.closePath();this.fill();this.currentPath_=p};M.createLinearGradient=function(i,m,Z,j){var p=new v("gradient");p.x0_=i;p.y0_=m;p.x1_=Z;p.y1_=j;return p};M.createRadialGradient=function(m,AE,j,i,p,Z){var AF=new v("gradientradial");AF.x0_=m;AF.y0_=AE;AF.r0_=j;AF.x1_=i;AF.y1_=p;AF.r1_=Z;return AF};M.drawImage=function(AO,j){var AH,AF,AJ,AV,AM,AK,AQ,AX;var AI=AO.runtimeStyle.width;var AN=AO.runtimeStyle.height;AO.runtimeStyle.width="auto";AO.runtimeStyle.height="auto";var AG=AO.width;var AT=AO.height;AO.runtimeStyle.width=AI;AO.runtimeStyle.height=AN;if(arguments.length==3){AH=arguments[1];AF=arguments[2];AM=AK=0;AQ=AJ=AG;AX=AV=AT}else{if(arguments.length==5){AH=arguments[1];AF=arguments[2];AJ=arguments[3];AV=arguments[4];AM=AK=0;AQ=AG;AX=AT}else{if(arguments.length==9){AM=arguments[1];AK=arguments[2];AQ=arguments[3];AX=arguments[4];AH=arguments[5];AF=arguments[6];AJ=arguments[7];AV=arguments[8]}else{throw Error("Invalid number of arguments")}}}var AW=this.getCoords_(AH,AF);var m=AQ/2;var i=AX/2;var AU=[];var Z=10;var AE=10;AU.push(" <g_vml_:group",' coordsize="',D*Z,",",D*AE,'"',' coordorigin="0,0"',' style="width:',Z,"px;height:",AE,"px;position:absolute;");if(this.m_[0][0]!=1||this.m_[0][1]||this.m_[1][1]!=1||this.m_[1][0]){var p=[];p.push("M11=",this.m_[0][0],",","M12=",this.m_[1][0],",","M21=",this.m_[0][1],",","M22=",this.m_[1][1],",","Dx=",K(AW.x/D),",","Dy=",K(AW.y/D),"");var AS=AW;var AR=this.getCoords_(AH+AJ,AF);var AP=this.getCoords_(AH,AF+AV);var AL=this.getCoords_(AH+AJ,AF+AV);AS.x=z.max(AS.x,AR.x,AP.x,AL.x);AS.y=z.max(AS.y,AR.y,AP.y,AL.y);AU.push("padding:0 ",K(AS.x/D),"px ",K(AS.y/D),"px 0;filter:progid:DXImageTransform.Microsoft.Matrix(",p.join(""),", sizingmethod='clip');")}else{AU.push("top:",K(AW.y/D),"px;left:",K(AW.x/D),"px;")}AU.push(' ">','<g_vml_:image src="',AO.src,'"',' style="width:',D*AJ,"px;"," height:",D*AV,'px"',' cropleft="',AM/AG,'"',' croptop="',AK/AT,'"',' cropright="',(AG-AM-AQ)/AG,'"',' cropbottom="',(AT-AK-AX)/AT,'"'," />","</g_vml_:group>");this.element_.insertAdjacentHTML("BeforeEnd",AU.join(""))};M.stroke=function(AM){var m=10;var AN=10;var AE=5000;var AG={x:null,y:null};var AL={x:null,y:null};for(var AH=0;AH<this.currentPath_.length;AH+=AE){var AK=[];var AF=false;AK.push("<g_vml_:shape",' filled="',!!AM,'"',' style="position:absolute;width:',m,"px;height:",AN,'px;"',' coordorigin="0,0"',' coordsize="',D*m,",",D*AN,'"',' stroked="',!AM,'"',' path="');var AO=false;for(var AI=AH;AI<Math.min(AH+AE,this.currentPath_.length);AI++){if(AI%AE==0&&AI>0){AK.push(" m ",K(this.currentPath_[AI-1].x),",",K(this.currentPath_[AI-1].y))}var Z=this.currentPath_[AI];var AJ;switch(Z.type){case"moveTo":AJ=Z;AK.push(" m ",K(Z.x),",",K(Z.y));break;case"lineTo":AK.push(" l ",K(Z.x),",",K(Z.y));break;case"close":AK.push(" x ");Z=null;break;case"bezierCurveTo":AK.push(" c ",K(Z.cp1x),",",K(Z.cp1y),",",K(Z.cp2x),",",K(Z.cp2y),",",K(Z.x),",",K(Z.y));break;case"at":case"wa":AK.push(" ",Z.type," ",K(Z.x-this.arcScaleX_*Z.radius),",",K(Z.y-this.arcScaleY_*Z.radius)," ",K(Z.x+this.arcScaleX_*Z.radius),",",K(Z.y+this.arcScaleY_*Z.radius)," ",K(Z.xStart),",",K(Z.yStart)," ",K(Z.xEnd),",",K(Z.yEnd));break}if(Z){if(AG.x==null||Z.x<AG.x){AG.x=Z.x}if(AL.x==null||Z.x>AL.x){AL.x=Z.x}if(AG.y==null||Z.y<AG.y){AG.y=Z.y}if(AL.y==null||Z.y>AL.y){AL.y=Z.y}}}AK.push(' ">');if(!AM){R(this,AK)}else{a(this,AK,AG,AL)}AK.push("</g_vml_:shape>");this.element_.insertAdjacentHTML("beforeEnd",AK.join(""))}};function R(j,AE){var i=Y(j.strokeStyle);var m=i.color;var p=i.alpha*j.globalAlpha;var Z=j.lineScale_*j.lineWidth;if(Z<1){p*=Z}AE.push("<g_vml_:stroke",' opacity="',p,'"',' joinstyle="',j.lineJoin,'"',' miterlimit="',j.miterLimit,'"',' endcap="',t(j.lineCap),'"',' weight="',Z,'px"',' color="',m,'" />')}function a(AO,AG,Ah,AP){var AH=AO.fillStyle;var AY=AO.arcScaleX_;var AX=AO.arcScaleY_;var Z=AP.x-Ah.x;var m=AP.y-Ah.y;if(AH instanceof v){var AL=0;var Ac={x:0,y:0};var AU=0;var AK=1;if(AH.type_=="gradient"){var AJ=AH.x0_/AY;var j=AH.y0_/AX;var AI=AH.x1_/AY;var Aj=AH.y1_/AX;var Ag=AO.getCoords_(AJ,j);var Af=AO.getCoords_(AI,Aj);var AE=Af.x-Ag.x;var p=Af.y-Ag.y;AL=Math.atan2(AE,p)*180/Math.PI;if(AL<0){AL+=360}if(AL<0.000001){AL=0}}else{var Ag=AO.getCoords_(AH.x0_,AH.y0_);Ac={x:(Ag.x-Ah.x)/Z,y:(Ag.y-Ah.y)/m};Z/=AY*D;m/=AX*D;var Aa=z.max(Z,m);AU=2*AH.r0_/Aa;AK=2*AH.r1_/Aa-AU}var AS=AH.colors_;AS.sort(function(Ak,i){return Ak.offset-i.offset});var AN=AS.length;var AR=AS[0].color;var AQ=AS[AN-1].color;var AW=AS[0].alpha*AO.globalAlpha;var AV=AS[AN-1].alpha*AO.globalAlpha;var Ab=[];for(var Ae=0;Ae<AN;Ae++){var AM=AS[Ae];Ab.push(AM.offset*AK+AU+" "+AM.color)}AG.push('<g_vml_:fill type="',AH.type_,'"',' method="none" focus="100%"',' color="',AR,'"',' color2="',AQ,'"',' colors="',Ab.join(","),'"',' opacity="',AV,'"',' g_o_:opacity2="',AW,'"',' angle="',AL,'"',' focusposition="',Ac.x,",",Ac.y,'" />')}else{if(AH instanceof u){if(Z&&m){var AF=-Ah.x;var AZ=-Ah.y;AG.push("<g_vml_:fill",' position="',AF/Z*AY*AY,",",AZ/m*AX*AX,'"',' type="tile"',' src="',AH.src_,'" />')}}else{var Ai=Y(AO.fillStyle);var AT=Ai.color;var Ad=Ai.alpha*AO.globalAlpha;AG.push('<g_vml_:fill color="',AT,'" opacity="',Ad,'" />')}}}M.fill=function(){this.stroke(true)};M.closePath=function(){this.currentPath_.push({type:"close"})};M.getCoords_=function(j,i){var Z=this.m_;return{x:D*(j*Z[0][0]+i*Z[1][0]+Z[2][0])-F,y:D*(j*Z[0][1]+i*Z[1][1]+Z[2][1])-F}};M.save=function(){var Z={};Q(this,Z);this.aStack_.push(Z);this.mStack_.push(this.m_);this.m_=d(V(),this.m_)};M.restore=function(){if(this.aStack_.length){Q(this.aStack_.pop(),this);this.m_=this.mStack_.pop()}};function H(Z){return isFinite(Z[0][0])&&isFinite(Z[0][1])&&isFinite(Z[1][0])&&isFinite(Z[1][1])&&isFinite(Z[2][0])&&isFinite(Z[2][1])}function y(i,Z,j){if(!H(Z)){return }i.m_=Z;if(j){var p=Z[0][0]*Z[1][1]-Z[0][1]*Z[1][0];i.lineScale_=k(b(p))}}M.translate=function(j,i){var Z=[[1,0,0],[0,1,0],[j,i,1]];y(this,d(Z,this.m_),false)};M.rotate=function(i){var m=U(i);var j=J(i);var Z=[[m,j,0],[-j,m,0],[0,0,1]];y(this,d(Z,this.m_),false)};M.scale=function(j,i){this.arcScaleX_*=j;this.arcScaleY_*=i;var Z=[[j,0,0],[0,i,0],[0,0,1]];y(this,d(Z,this.m_),true)};M.transform=function(p,m,AF,AE,i,Z){var j=[[p,m,0],[AF,AE,0],[i,Z,1]];y(this,d(j,this.m_),true)};M.setTransform=function(AE,p,AG,AF,j,i){var Z=[[AE,p,0],[AG,AF,0],[j,i,1]];y(this,Z,true)};M.drawText_=function(AK,AI,AH,AN,AG){var AM=this.m_,AQ=1000,i=0,AP=AQ,AF={x:0,y:0},AE=[];var Z=P(X(this.font),this.element_);var j=AA(Z);var AR=this.element_.currentStyle;var p=this.textAlign.toLowerCase();switch(p){case"left":case"center":case"right":break;case"end":p=AR.direction=="ltr"?"right":"left";break;case"start":p=AR.direction=="rtl"?"right":"left";break;default:p="left"}switch(this.textBaseline){case"hanging":case"top":AF.y=Z.size/1.75;break;case"middle":break;default:case null:case"alphabetic":case"ideographic":case"bottom":AF.y=-Z.size/2.25;break}switch(p){case"right":i=AQ;AP=0.05;break;case"center":i=AP=AQ/2;break}var AO=this.getCoords_(AI+AF.x,AH+AF.y);AE.push('<g_vml_:line from="',-i,' 0" to="',AP,' 0.05" ',' coordsize="100 100" coordorigin="0 0"',' filled="',!AG,'" stroked="',!!AG,'" style="position:absolute;width:1px;height:1px;">');if(AG){R(this,AE)}else{a(this,AE,{x:-i,y:0},{x:AP,y:Z.size})}var AL=AM[0][0].toFixed(3)+","+AM[1][0].toFixed(3)+","+AM[0][1].toFixed(3)+","+AM[1][1].toFixed(3)+",0,0";var AJ=K(AO.x/D)+","+K(AO.y/D);AE.push('<g_vml_:skew on="t" matrix="',AL,'" ',' offset="',AJ,'" origin="',i,' 0" />','<g_vml_:path textpathok="true" />','<g_vml_:textpath on="true" string="',AD(AK),'" style="v-text-align:',p,";font:",AD(j),'" /></g_vml_:line>');this.element_.insertAdjacentHTML("beforeEnd",AE.join(""))};M.fillText=function(j,Z,m,i){this.drawText_(j,Z,m,i,false)};M.strokeText=function(j,Z,m,i){this.drawText_(j,Z,m,i,true)};M.measureText=function(j){if(!this.textMeasureEl_){var Z='<span style="position:absolute;top:-20000px;left:0;padding:0;margin:0;border:none;white-space:pre;"></span>';this.element_.insertAdjacentHTML("beforeEnd",Z);this.textMeasureEl_=this.element_.lastChild}var i=this.element_.ownerDocument;this.textMeasureEl_.innerHTML="";this.textMeasureEl_.style.font=this.font;this.textMeasureEl_.appendChild(i.createTextNode(j));return{width:this.textMeasureEl_.offsetWidth}};M.clip=function(){};M.arcTo=function(){};M.createPattern=function(i,Z){return new u(i,Z)};function v(Z){this.type_=Z;this.x0_=0;this.y0_=0;this.r0_=0;this.x1_=0;this.y1_=0;this.r1_=0;this.colors_=[]}v.prototype.addColorStop=function(i,Z){Z=Y(Z);this.colors_.push({offset:i,color:Z.color,alpha:Z.alpha})};function u(i,Z){q(i);switch(Z){case"repeat":case null:case"":this.repetition_="repeat";break;case"repeat-x":case"repeat-y":case"no-repeat":this.repetition_=Z;break;default:n("SYNTAX_ERR")}this.src_=i.src;this.width_=i.width;this.height_=i.height}function n(Z){throw new o(Z)}function q(Z){if(!Z||Z.nodeType!=1||Z.tagName!="IMG"){n("TYPE_MISMATCH_ERR")}if(Z.readyState!="complete"){n("INVALID_STATE_ERR")}}function o(Z){this.code=this[Z];this.message=Z+": DOM Exception "+this.code}var x=o.prototype=new Error;x.INDEX_SIZE_ERR=1;x.DOMSTRING_SIZE_ERR=2;x.HIERARCHY_REQUEST_ERR=3;x.WRONG_DOCUMENT_ERR=4;x.INVALID_CHARACTER_ERR=5;x.NO_DATA_ALLOWED_ERR=6;x.NO_MODIFICATION_ALLOWED_ERR=7;x.NOT_FOUND_ERR=8;x.NOT_SUPPORTED_ERR=9;x.INUSE_ATTRIBUTE_ERR=10;x.INVALID_STATE_ERR=11;x.SYNTAX_ERR=12;x.INVALID_MODIFICATION_ERR=13;x.NAMESPACE_ERR=14;x.INVALID_ACCESS_ERR=15;x.VALIDATION_ERR=16;x.TYPE_MISMATCH_ERR=17;G_vmlCanvasManager=E;CanvasRenderingContext2D=W;CanvasGradient=v;CanvasPattern=u;DOMException=o})()};
5367786dc871 Uploaded
greg
parents:
diff changeset
714 </script>
5367786dc871 Uploaded
greg
parents:
diff changeset
715
5367786dc871 Uploaded
greg
parents:
diff changeset
716 <script type="text/javascript">
5367786dc871 Uploaded
greg
parents:
diff changeset
717 /*
5367786dc871 Uploaded
greg
parents:
diff changeset
718 * jQuery.flot.dashes
5367786dc871 Uploaded
greg
parents:
diff changeset
719 *
5367786dc871 Uploaded
greg
parents:
diff changeset
720 * options = {
5367786dc871 Uploaded
greg
parents:
diff changeset
721 * series: {
5367786dc871 Uploaded
greg
parents:
diff changeset
722 * dashes: {
5367786dc871 Uploaded
greg
parents:
diff changeset
723 *
5367786dc871 Uploaded
greg
parents:
diff changeset
724 * // show
5367786dc871 Uploaded
greg
parents:
diff changeset
725 * // default: false
5367786dc871 Uploaded
greg
parents:
diff changeset
726 * // Whether to show dashes for the series.
5367786dc871 Uploaded
greg
parents:
diff changeset
727 * show: <boolean>,
5367786dc871 Uploaded
greg
parents:
diff changeset
728 *
5367786dc871 Uploaded
greg
parents:
diff changeset
729 * // lineWidth
5367786dc871 Uploaded
greg
parents:
diff changeset
730 * // default: 2
5367786dc871 Uploaded
greg
parents:
diff changeset
731 * // The width of the dashed line in pixels.
5367786dc871 Uploaded
greg
parents:
diff changeset
732 * lineWidth: <number>,
5367786dc871 Uploaded
greg
parents:
diff changeset
733 *
5367786dc871 Uploaded
greg
parents:
diff changeset
734 * // dashLength
5367786dc871 Uploaded
greg
parents:
diff changeset
735 * // default: 10
5367786dc871 Uploaded
greg
parents:
diff changeset
736 * // Controls the length of the individual dashes and the amount of
5367786dc871 Uploaded
greg
parents:
diff changeset
737 * // space between them.
5367786dc871 Uploaded
greg
parents:
diff changeset
738 * // If this is a number, the dashes and spaces will have that length.
5367786dc871 Uploaded
greg
parents:
diff changeset
739 * // If this is an array, it is read as [ dashLength, spaceLength ]
5367786dc871 Uploaded
greg
parents:
diff changeset
740 * dashLength: <number> or <array[2]>
5367786dc871 Uploaded
greg
parents:
diff changeset
741 * }
5367786dc871 Uploaded
greg
parents:
diff changeset
742 * }
5367786dc871 Uploaded
greg
parents:
diff changeset
743 * }
5367786dc871 Uploaded
greg
parents:
diff changeset
744 */
5367786dc871 Uploaded
greg
parents:
diff changeset
745 (function($){
5367786dc871 Uploaded
greg
parents:
diff changeset
746
5367786dc871 Uploaded
greg
parents:
diff changeset
747 function init(plot) {
5367786dc871 Uploaded
greg
parents:
diff changeset
748
5367786dc871 Uploaded
greg
parents:
diff changeset
749 plot.hooks.processDatapoints.push(function(plot, series, datapoints) {
5367786dc871 Uploaded
greg
parents:
diff changeset
750
5367786dc871 Uploaded
greg
parents:
diff changeset
751 if (!series.dashes.show) return;
5367786dc871 Uploaded
greg
parents:
diff changeset
752
5367786dc871 Uploaded
greg
parents:
diff changeset
753 plot.hooks.draw.push(function(plot, ctx) {
5367786dc871 Uploaded
greg
parents:
diff changeset
754
5367786dc871 Uploaded
greg
parents:
diff changeset
755 var plotOffset = plot.getPlotOffset(),
5367786dc871 Uploaded
greg
parents:
diff changeset
756 axisx = series.xaxis,
5367786dc871 Uploaded
greg
parents:
diff changeset
757 axisy = series.yaxis;
5367786dc871 Uploaded
greg
parents:
diff changeset
758
5367786dc871 Uploaded
greg
parents:
diff changeset
759 function plotDashes(xoffset, yoffset) {
5367786dc871 Uploaded
greg
parents:
diff changeset
760
5367786dc871 Uploaded
greg
parents:
diff changeset
761 var points = datapoints.points,
5367786dc871 Uploaded
greg
parents:
diff changeset
762 ps = datapoints.pointsize,
5367786dc871 Uploaded
greg
parents:
diff changeset
763 prevx = null,
5367786dc871 Uploaded
greg
parents:
diff changeset
764 prevy = null,
5367786dc871 Uploaded
greg
parents:
diff changeset
765 dashRemainder = 0,
5367786dc871 Uploaded
greg
parents:
diff changeset
766 dashOn = true,
5367786dc871 Uploaded
greg
parents:
diff changeset
767 dashOnLength,
5367786dc871 Uploaded
greg
parents:
diff changeset
768 dashOffLength;
5367786dc871 Uploaded
greg
parents:
diff changeset
769
5367786dc871 Uploaded
greg
parents:
diff changeset
770 if (series.dashes.dashLength[0]) {
5367786dc871 Uploaded
greg
parents:
diff changeset
771 dashOnLength = series.dashes.dashLength[0];
5367786dc871 Uploaded
greg
parents:
diff changeset
772 if (series.dashes.dashLength[1]) {
5367786dc871 Uploaded
greg
parents:
diff changeset
773 dashOffLength = series.dashes.dashLength[1];
5367786dc871 Uploaded
greg
parents:
diff changeset
774 } else {
5367786dc871 Uploaded
greg
parents:
diff changeset
775 dashOffLength = dashOnLength;
5367786dc871 Uploaded
greg
parents:
diff changeset
776 }
5367786dc871 Uploaded
greg
parents:
diff changeset
777 } else {
5367786dc871 Uploaded
greg
parents:
diff changeset
778 dashOffLength = dashOnLength = series.dashes.dashLength;
5367786dc871 Uploaded
greg
parents:
diff changeset
779 }
5367786dc871 Uploaded
greg
parents:
diff changeset
780
5367786dc871 Uploaded
greg
parents:
diff changeset
781 ctx.beginPath();
5367786dc871 Uploaded
greg
parents:
diff changeset
782
5367786dc871 Uploaded
greg
parents:
diff changeset
783 for (var i = ps; i < points.length; i += ps) {
5367786dc871 Uploaded
greg
parents:
diff changeset
784
5367786dc871 Uploaded
greg
parents:
diff changeset
785 var x1 = points[i - ps],
5367786dc871 Uploaded
greg
parents:
diff changeset
786 y1 = points[i - ps + 1],
5367786dc871 Uploaded
greg
parents:
diff changeset
787 x2 = points[i],
5367786dc871 Uploaded
greg
parents:
diff changeset
788 y2 = points[i + 1];
5367786dc871 Uploaded
greg
parents:
diff changeset
789
5367786dc871 Uploaded
greg
parents:
diff changeset
790 if (x1 == null || x2 == null) continue;
5367786dc871 Uploaded
greg
parents:
diff changeset
791
5367786dc871 Uploaded
greg
parents:
diff changeset
792 // clip with ymin
5367786dc871 Uploaded
greg
parents:
diff changeset
793 if (y1 <= y2 && y1 < axisy.min) {
5367786dc871 Uploaded
greg
parents:
diff changeset
794 if (y2 < axisy.min) continue; // line segment is outside
5367786dc871 Uploaded
greg
parents:
diff changeset
795 // compute new intersection point
5367786dc871 Uploaded
greg
parents:
diff changeset
796 x1 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1;
5367786dc871 Uploaded
greg
parents:
diff changeset
797 y1 = axisy.min;
5367786dc871 Uploaded
greg
parents:
diff changeset
798 } else if (y2 <= y1 && y2 < axisy.min) {
5367786dc871 Uploaded
greg
parents:
diff changeset
799 if (y1 < axisy.min) continue;
5367786dc871 Uploaded
greg
parents:
diff changeset
800 x2 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1;
5367786dc871 Uploaded
greg
parents:
diff changeset
801 y2 = axisy.min;
5367786dc871 Uploaded
greg
parents:
diff changeset
802 }
5367786dc871 Uploaded
greg
parents:
diff changeset
803
5367786dc871 Uploaded
greg
parents:
diff changeset
804 // clip with ymax
5367786dc871 Uploaded
greg
parents:
diff changeset
805 if (y1 >= y2 && y1 > axisy.max) {
5367786dc871 Uploaded
greg
parents:
diff changeset
806 if (y2 > axisy.max) continue;
5367786dc871 Uploaded
greg
parents:
diff changeset
807 x1 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1;
5367786dc871 Uploaded
greg
parents:
diff changeset
808 y1 = axisy.max;
5367786dc871 Uploaded
greg
parents:
diff changeset
809 } else if (y2 >= y1 && y2 > axisy.max) {
5367786dc871 Uploaded
greg
parents:
diff changeset
810 if (y1 > axisy.max) continue;
5367786dc871 Uploaded
greg
parents:
diff changeset
811 x2 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1;
5367786dc871 Uploaded
greg
parents:
diff changeset
812 y2 = axisy.max;
5367786dc871 Uploaded
greg
parents:
diff changeset
813 }
5367786dc871 Uploaded
greg
parents:
diff changeset
814
5367786dc871 Uploaded
greg
parents:
diff changeset
815 // clip with xmin
5367786dc871 Uploaded
greg
parents:
diff changeset
816 if (x1 <= x2 && x1 < axisx.min) {
5367786dc871 Uploaded
greg
parents:
diff changeset
817 if (x2 < axisx.min) continue;
5367786dc871 Uploaded
greg
parents:
diff changeset
818 y1 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1;
5367786dc871 Uploaded
greg
parents:
diff changeset
819 x1 = axisx.min;
5367786dc871 Uploaded
greg
parents:
diff changeset
820 } else if (x2 <= x1 && x2 < axisx.min) {
5367786dc871 Uploaded
greg
parents:
diff changeset
821 if (x1 < axisx.min) continue;
5367786dc871 Uploaded
greg
parents:
diff changeset
822 y2 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1;
5367786dc871 Uploaded
greg
parents:
diff changeset
823 x2 = axisx.min;
5367786dc871 Uploaded
greg
parents:
diff changeset
824 }
5367786dc871 Uploaded
greg
parents:
diff changeset
825
5367786dc871 Uploaded
greg
parents:
diff changeset
826 // clip with xmax
5367786dc871 Uploaded
greg
parents:
diff changeset
827 if (x1 >= x2 && x1 > axisx.max) {
5367786dc871 Uploaded
greg
parents:
diff changeset
828 if (x2 > axisx.max) continue;
5367786dc871 Uploaded
greg
parents:
diff changeset
829 y1 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1;
5367786dc871 Uploaded
greg
parents:
diff changeset
830 x1 = axisx.max;
5367786dc871 Uploaded
greg
parents:
diff changeset
831 } else if (x2 >= x1 && x2 > axisx.max) {
5367786dc871 Uploaded
greg
parents:
diff changeset
832 if (x1 > axisx.max) continue;
5367786dc871 Uploaded
greg
parents:
diff changeset
833 y2 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1;
5367786dc871 Uploaded
greg
parents:
diff changeset
834 x2 = axisx.max;
5367786dc871 Uploaded
greg
parents:
diff changeset
835 }
5367786dc871 Uploaded
greg
parents:
diff changeset
836
5367786dc871 Uploaded
greg
parents:
diff changeset
837 if (x1 != prevx || y1 != prevy) {
5367786dc871 Uploaded
greg
parents:
diff changeset
838 ctx.moveTo(axisx.p2c(x1) + xoffset, axisy.p2c(y1) + yoffset);
5367786dc871 Uploaded
greg
parents:
diff changeset
839 }
5367786dc871 Uploaded
greg
parents:
diff changeset
840
5367786dc871 Uploaded
greg
parents:
diff changeset
841 var ax1 = axisx.p2c(x1) + xoffset,
5367786dc871 Uploaded
greg
parents:
diff changeset
842 ay1 = axisy.p2c(y1) + yoffset,
5367786dc871 Uploaded
greg
parents:
diff changeset
843 ax2 = axisx.p2c(x2) + xoffset,
5367786dc871 Uploaded
greg
parents:
diff changeset
844 ay2 = axisy.p2c(y2) + yoffset,
5367786dc871 Uploaded
greg
parents:
diff changeset
845 dashOffset;
5367786dc871 Uploaded
greg
parents:
diff changeset
846
5367786dc871 Uploaded
greg
parents:
diff changeset
847 function lineSegmentOffset(segmentLength) {
5367786dc871 Uploaded
greg
parents:
diff changeset
848
5367786dc871 Uploaded
greg
parents:
diff changeset
849 var c = Math.sqrt(Math.pow(ax2 - ax1, 2) + Math.pow(ay2 - ay1, 2));
5367786dc871 Uploaded
greg
parents:
diff changeset
850
5367786dc871 Uploaded
greg
parents:
diff changeset
851 if (c <= segmentLength) {
5367786dc871 Uploaded
greg
parents:
diff changeset
852 return {
5367786dc871 Uploaded
greg
parents:
diff changeset
853 deltaX: ax2 - ax1,
5367786dc871 Uploaded
greg
parents:
diff changeset
854 deltaY: ay2 - ay1,
5367786dc871 Uploaded
greg
parents:
diff changeset
855 distance: c,
5367786dc871 Uploaded
greg
parents:
diff changeset
856 remainder: segmentLength - c
5367786dc871 Uploaded
greg
parents:
diff changeset
857 }
5367786dc871 Uploaded
greg
parents:
diff changeset
858 } else {
5367786dc871 Uploaded
greg
parents:
diff changeset
859 var xsign = ax2 > ax1 ? 1 : -1,
5367786dc871 Uploaded
greg
parents:
diff changeset
860 ysign = ay2 > ay1 ? 1 : -1;
5367786dc871 Uploaded
greg
parents:
diff changeset
861 return {
5367786dc871 Uploaded
greg
parents:
diff changeset
862 deltaX: xsign * Math.sqrt(Math.pow(segmentLength, 2) / (1 + Math.pow((ay2 - ay1)/(ax2 - ax1), 2))),
5367786dc871 Uploaded
greg
parents:
diff changeset
863 deltaY: ysign * Math.sqrt(Math.pow(segmentLength, 2) - Math.pow(segmentLength, 2) / (1 + Math.pow((ay2 - ay1)/(ax2 - ax1), 2))),
5367786dc871 Uploaded
greg
parents:
diff changeset
864 distance: segmentLength,
5367786dc871 Uploaded
greg
parents:
diff changeset
865 remainder: 0
5367786dc871 Uploaded
greg
parents:
diff changeset
866 };
5367786dc871 Uploaded
greg
parents:
diff changeset
867 }
5367786dc871 Uploaded
greg
parents:
diff changeset
868 }
5367786dc871 Uploaded
greg
parents:
diff changeset
869 //-end lineSegmentOffset
5367786dc871 Uploaded
greg
parents:
diff changeset
870
5367786dc871 Uploaded
greg
parents:
diff changeset
871 do {
5367786dc871 Uploaded
greg
parents:
diff changeset
872
5367786dc871 Uploaded
greg
parents:
diff changeset
873 dashOffset = lineSegmentOffset(
5367786dc871 Uploaded
greg
parents:
diff changeset
874 dashRemainder > 0 ? dashRemainder :
5367786dc871 Uploaded
greg
parents:
diff changeset
875 dashOn ? dashOnLength : dashOffLength);
5367786dc871 Uploaded
greg
parents:
diff changeset
876
5367786dc871 Uploaded
greg
parents:
diff changeset
877 if (dashOffset.deltaX != 0 || dashOffset.deltaY != 0) {
5367786dc871 Uploaded
greg
parents:
diff changeset
878 if (dashOn) {
5367786dc871 Uploaded
greg
parents:
diff changeset
879 ctx.lineTo(ax1 + dashOffset.deltaX, ay1 + dashOffset.deltaY);
5367786dc871 Uploaded
greg
parents:
diff changeset
880 } else {
5367786dc871 Uploaded
greg
parents:
diff changeset
881 ctx.moveTo(ax1 + dashOffset.deltaX, ay1 + dashOffset.deltaY);
5367786dc871 Uploaded
greg
parents:
diff changeset
882 }
5367786dc871 Uploaded
greg
parents:
diff changeset
883 }
5367786dc871 Uploaded
greg
parents:
diff changeset
884
5367786dc871 Uploaded
greg
parents:
diff changeset
885 dashOn = !dashOn;
5367786dc871 Uploaded
greg
parents:
diff changeset
886 dashRemainder = dashOffset.remainder;
5367786dc871 Uploaded
greg
parents:
diff changeset
887 ax1 += dashOffset.deltaX;
5367786dc871 Uploaded
greg
parents:
diff changeset
888 ay1 += dashOffset.deltaY;
5367786dc871 Uploaded
greg
parents:
diff changeset
889
5367786dc871 Uploaded
greg
parents:
diff changeset
890 } while (dashOffset.distance > 0);
5367786dc871 Uploaded
greg
parents:
diff changeset
891
5367786dc871 Uploaded
greg
parents:
diff changeset
892 prevx = x2;
5367786dc871 Uploaded
greg
parents:
diff changeset
893 prevy = y2;
5367786dc871 Uploaded
greg
parents:
diff changeset
894 }
5367786dc871 Uploaded
greg
parents:
diff changeset
895
5367786dc871 Uploaded
greg
parents:
diff changeset
896 ctx.stroke();
5367786dc871 Uploaded
greg
parents:
diff changeset
897 }
5367786dc871 Uploaded
greg
parents:
diff changeset
898 //-end plotDashes
5367786dc871 Uploaded
greg
parents:
diff changeset
899
5367786dc871 Uploaded
greg
parents:
diff changeset
900 ctx.save();
5367786dc871 Uploaded
greg
parents:
diff changeset
901 ctx.translate(plotOffset.left, plotOffset.top);
5367786dc871 Uploaded
greg
parents:
diff changeset
902 ctx.lineJoin = 'round';
5367786dc871 Uploaded
greg
parents:
diff changeset
903
5367786dc871 Uploaded
greg
parents:
diff changeset
904 var lw = series.dashes.lineWidth,
5367786dc871 Uploaded
greg
parents:
diff changeset
905 sw = series.shadowSize;
5367786dc871 Uploaded
greg
parents:
diff changeset
906
5367786dc871 Uploaded
greg
parents:
diff changeset
907 // FIXME: consider another form of shadow when filling is turned on
5367786dc871 Uploaded
greg
parents:
diff changeset
908 if (lw > 0 && sw > 0) {
5367786dc871 Uploaded
greg
parents:
diff changeset
909 // draw shadow as a thick and thin line with transparency
5367786dc871 Uploaded
greg
parents:
diff changeset
910 ctx.lineWidth = sw;
5367786dc871 Uploaded
greg
parents:
diff changeset
911 ctx.strokeStyle = "rgba(0,0,0,0.1)";
5367786dc871 Uploaded
greg
parents:
diff changeset
912 // position shadow at angle from the mid of line
5367786dc871 Uploaded
greg
parents:
diff changeset
913 var angle = Math.PI/18;
5367786dc871 Uploaded
greg
parents:
diff changeset
914 plotDashes(Math.sin(angle) * (lw/2 + sw/2), Math.cos(angle) * (lw/2 + sw/2));
5367786dc871 Uploaded
greg
parents:
diff changeset
915 ctx.lineWidth = sw/2;
5367786dc871 Uploaded
greg
parents:
diff changeset
916 plotDashes(Math.sin(angle) * (lw/2 + sw/4), Math.cos(angle) * (lw/2 + sw/4));
5367786dc871 Uploaded
greg
parents:
diff changeset
917 }
5367786dc871 Uploaded
greg
parents:
diff changeset
918
5367786dc871 Uploaded
greg
parents:
diff changeset
919 ctx.lineWidth = lw;
5367786dc871 Uploaded
greg
parents:
diff changeset
920 ctx.strokeStyle = series.color;
5367786dc871 Uploaded
greg
parents:
diff changeset
921
5367786dc871 Uploaded
greg
parents:
diff changeset
922 if (lw > 0) {
5367786dc871 Uploaded
greg
parents:
diff changeset
923 plotDashes(0, 0);
5367786dc871 Uploaded
greg
parents:
diff changeset
924 }
5367786dc871 Uploaded
greg
parents:
diff changeset
925
5367786dc871 Uploaded
greg
parents:
diff changeset
926 ctx.restore();
5367786dc871 Uploaded
greg
parents:
diff changeset
927
5367786dc871 Uploaded
greg
parents:
diff changeset
928 });
5367786dc871 Uploaded
greg
parents:
diff changeset
929 //-end draw hook
5367786dc871 Uploaded
greg
parents:
diff changeset
930
5367786dc871 Uploaded
greg
parents:
diff changeset
931 });
5367786dc871 Uploaded
greg
parents:
diff changeset
932 //-end processDatapoints hook
5367786dc871 Uploaded
greg
parents:
diff changeset
933
5367786dc871 Uploaded
greg
parents:
diff changeset
934 }
5367786dc871 Uploaded
greg
parents:
diff changeset
935 //-end init
5367786dc871 Uploaded
greg
parents:
diff changeset
936
5367786dc871 Uploaded
greg
parents:
diff changeset
937 $.plot.plugins.push({
5367786dc871 Uploaded
greg
parents:
diff changeset
938 init: init,
5367786dc871 Uploaded
greg
parents:
diff changeset
939 options: {
5367786dc871 Uploaded
greg
parents:
diff changeset
940 series: {
5367786dc871 Uploaded
greg
parents:
diff changeset
941 dashes: {
5367786dc871 Uploaded
greg
parents:
diff changeset
942 show: false,
5367786dc871 Uploaded
greg
parents:
diff changeset
943 lineWidth: 2,
5367786dc871 Uploaded
greg
parents:
diff changeset
944 dashLength: 10
5367786dc871 Uploaded
greg
parents:
diff changeset
945 }
5367786dc871 Uploaded
greg
parents:
diff changeset
946 }
5367786dc871 Uploaded
greg
parents:
diff changeset
947 },
5367786dc871 Uploaded
greg
parents:
diff changeset
948 name: 'dashes',
5367786dc871 Uploaded
greg
parents:
diff changeset
949 version: '0.1'
5367786dc871 Uploaded
greg
parents:
diff changeset
950 });
5367786dc871 Uploaded
greg
parents:
diff changeset
951
5367786dc871 Uploaded
greg
parents:
diff changeset
952 })(jQuery)
5367786dc871 Uploaded
greg
parents:
diff changeset
953
5367786dc871 Uploaded
greg
parents:
diff changeset
954
5367786dc871 Uploaded
greg
parents:
diff changeset
955 </script>
5367786dc871 Uploaded
greg
parents:
diff changeset
956
5367786dc871 Uploaded
greg
parents:
diff changeset
957 <script type="text/javascript">
5367786dc871 Uploaded
greg
parents:
diff changeset
958
5367786dc871 Uploaded
greg
parents:
diff changeset
959 var cumulative = {
5367786dc871 Uploaded
greg
parents:
diff changeset
960 isInitialized: false,
5367786dc871 Uploaded
greg
parents:
diff changeset
961
5367786dc871 Uploaded
greg
parents:
diff changeset
962 maxX: 0,
5367786dc871 Uploaded
greg
parents:
diff changeset
963 maxY: 0,
5367786dc871 Uploaded
greg
parents:
diff changeset
964 maxYTick: 0,
5367786dc871 Uploaded
greg
parents:
diff changeset
965 series: null,
5367786dc871 Uploaded
greg
parents:
diff changeset
966 showWithData: null,
5367786dc871 Uploaded
greg
parents:
diff changeset
967 colors: [],
5367786dc871 Uploaded
greg
parents:
diff changeset
968
5367786dc871 Uploaded
greg
parents:
diff changeset
969 draw: function(name, title, colors, filenames, listsOfLengths, refLengths, tickX,
5367786dc871 Uploaded
greg
parents:
diff changeset
970 placeholder, legendPlaceholder, glossary, order, scalePlaceholder) {
5367786dc871 Uploaded
greg
parents:
diff changeset
971
5367786dc871 Uploaded
greg
parents:
diff changeset
972 $(scalePlaceholder).empty();
5367786dc871 Uploaded
greg
parents:
diff changeset
973
5367786dc871 Uploaded
greg
parents:
diff changeset
974 if (!this.isInitialized) {
5367786dc871 Uploaded
greg
parents:
diff changeset
975 // div.html(
5367786dc871 Uploaded
greg
parents:
diff changeset
976 // "<span class='plot-header'>" + addTooltipIfDefinitionExists(glossary, title) + "</span>" +
5367786dc871 Uploaded
greg
parents:
diff changeset
977 // "<div class='plot-placeholder' id='cumulative-plot-placeholder'></div>"
5367786dc871 Uploaded
greg
parents:
diff changeset
978 // );
5367786dc871 Uploaded
greg
parents:
diff changeset
979 cumulative.series = [];
5367786dc871 Uploaded
greg
parents:
diff changeset
980 var plotsN = filenames.length;
5367786dc871 Uploaded
greg
parents:
diff changeset
981 var refLength = 0;
5367786dc871 Uploaded
greg
parents:
diff changeset
982 if (refLengths) {
5367786dc871 Uploaded
greg
parents:
diff changeset
983 for (var i = 0, size = refLengths.length; i < size; i++)
5367786dc871 Uploaded
greg
parents:
diff changeset
984 refLength += refLengths[i];
5367786dc871 Uploaded
greg
parents:
diff changeset
985 }
5367786dc871 Uploaded
greg
parents:
diff changeset
986 if (refLength) {
5367786dc871 Uploaded
greg
parents:
diff changeset
987 cumulative.maxY = refLength;
5367786dc871 Uploaded
greg
parents:
diff changeset
988 }
5367786dc871 Uploaded
greg
parents:
diff changeset
989
5367786dc871 Uploaded
greg
parents:
diff changeset
990 cumulative.colors = colors;
5367786dc871 Uploaded
greg
parents:
diff changeset
991
5367786dc871 Uploaded
greg
parents:
diff changeset
992 function addCumulativeLenData(label, index, color, lengths, isRef) {
5367786dc871 Uploaded
greg
parents:
diff changeset
993 if (!(lengths instanceof Array))
5367786dc871 Uploaded
greg
parents:
diff changeset
994 lengths = [lengths];
5367786dc871 Uploaded
greg
parents:
diff changeset
995 var size = lengths.length;
5367786dc871 Uploaded
greg
parents:
diff changeset
996 var points = {
5367786dc871 Uploaded
greg
parents:
diff changeset
997 data: new Array(size + 1),
5367786dc871 Uploaded
greg
parents:
diff changeset
998 label: label,
5367786dc871 Uploaded
greg
parents:
diff changeset
999 number: index,
5367786dc871 Uploaded
greg
parents:
diff changeset
1000 color: color
5367786dc871 Uploaded
greg
parents:
diff changeset
1001 };
5367786dc871 Uploaded
greg
parents:
diff changeset
1002
5367786dc871 Uploaded
greg
parents:
diff changeset
1003 points.data[0] = [0, 0];
5367786dc871 Uploaded
greg
parents:
diff changeset
1004
5367786dc871 Uploaded
greg
parents:
diff changeset
1005 var y = 0;
5367786dc871 Uploaded
greg
parents:
diff changeset
1006 for (var j = 0; j < size; j++) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1007 y += lengths[j];
5367786dc871 Uploaded
greg
parents:
diff changeset
1008 points.data[j+1] = [j+1, y];
5367786dc871 Uploaded
greg
parents:
diff changeset
1009 if (y > cumulative.maxY) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1010 cumulative.maxY = y;
5367786dc871 Uploaded
greg
parents:
diff changeset
1011 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1012 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1013
5367786dc871 Uploaded
greg
parents:
diff changeset
1014 if (size > cumulative.maxX) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1015 cumulative.maxX = size;
5367786dc871 Uploaded
greg
parents:
diff changeset
1016 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1017 if (isRef){
5367786dc871 Uploaded
greg
parents:
diff changeset
1018 points.isReference = true;
5367786dc871 Uploaded
greg
parents:
diff changeset
1019 points.dashes = {show: true, lineWidth: 1};
5367786dc871 Uploaded
greg
parents:
diff changeset
1020 if (size < cumulative.maxX) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1021 points.data[size + 1] = [cumulative.maxX, y];
5367786dc871 Uploaded
greg
parents:
diff changeset
1022 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1023 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1024 return points;
5367786dc871 Uploaded
greg
parents:
diff changeset
1025 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1026
5367786dc871 Uploaded
greg
parents:
diff changeset
1027 for (var i = 0; i < plotsN; i++) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1028 var lengths = listsOfLengths[order[i]];
5367786dc871 Uploaded
greg
parents:
diff changeset
1029 var asm_name = filenames[order[i]];
5367786dc871 Uploaded
greg
parents:
diff changeset
1030 var color = colors[order[i]];
5367786dc871 Uploaded
greg
parents:
diff changeset
1031 cumulative.series[i] = addCumulativeLenData(asm_name, i, color, lengths);
5367786dc871 Uploaded
greg
parents:
diff changeset
1032 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1033
5367786dc871 Uploaded
greg
parents:
diff changeset
1034 // var lineColors = [];
5367786dc871 Uploaded
greg
parents:
diff changeset
1035 //
5367786dc871 Uploaded
greg
parents:
diff changeset
1036 // for (i = 0; i < colors.length; i++) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1037 // lineColors.push(changeColor(colors[i], 0.9, false));
5367786dc871 Uploaded
greg
parents:
diff changeset
1038 // }
5367786dc871 Uploaded
greg
parents:
diff changeset
1039
5367786dc871 Uploaded
greg
parents:
diff changeset
1040 for (i = 0; i < plotsN; i++) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1041 if (typeof broken_scaffolds_labels !== undefined && $.inArray(filenames[order[i]], broken_scaffolds_labels) != -1) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1042 cumulative.series[i].dashes = {
5367786dc871 Uploaded
greg
parents:
diff changeset
1043 show: true,
5367786dc871 Uploaded
greg
parents:
diff changeset
1044 lineWidth: 1
5367786dc871 Uploaded
greg
parents:
diff changeset
1045 };
5367786dc871 Uploaded
greg
parents:
diff changeset
1046 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1047 else {
5367786dc871 Uploaded
greg
parents:
diff changeset
1048 cumulative.series[i].lines = {
5367786dc871 Uploaded
greg
parents:
diff changeset
1049 show: true,
5367786dc871 Uploaded
greg
parents:
diff changeset
1050 lineWidth: 1
5367786dc871 Uploaded
greg
parents:
diff changeset
1051 };
5367786dc871 Uploaded
greg
parents:
diff changeset
1052 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1053 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1054
5367786dc871 Uploaded
greg
parents:
diff changeset
1055 for (i = 0; i < plotsN; i++) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1056 cumulative.colors.push(cumulative.series[i].color);
5367786dc871 Uploaded
greg
parents:
diff changeset
1057 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1058
5367786dc871 Uploaded
greg
parents:
diff changeset
1059 //cumulative.maxYTick = getMaxDecimalTick(cumulative.maxY);
5367786dc871 Uploaded
greg
parents:
diff changeset
1060
5367786dc871 Uploaded
greg
parents:
diff changeset
1061 if (refLengths) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1062 size = refLengths.length;
5367786dc871 Uploaded
greg
parents:
diff changeset
1063 var ref_label = 'reference,&nbsp;' + toPrettyString(refLength, 'bp');
5367786dc871 Uploaded
greg
parents:
diff changeset
1064 cumulative.series.push(addCumulativeLenData(ref_label, i, '#000000', refLengths, true));
5367786dc871 Uploaded
greg
parents:
diff changeset
1065 cumulative.colors.push('#000000');
5367786dc871 Uploaded
greg
parents:
diff changeset
1066 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1067
5367786dc871 Uploaded
greg
parents:
diff changeset
1068
5367786dc871 Uploaded
greg
parents:
diff changeset
1069 // if (referenceLength) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1070 // yaxes.push({
5367786dc871 Uploaded
greg
parents:
diff changeset
1071 // ticks: [referenceLength],
5367786dc871 Uploaded
greg
parents:
diff changeset
1072 // min: 0,
5367786dc871 Uploaded
greg
parents:
diff changeset
1073 // max: maxYTick,
5367786dc871 Uploaded
greg
parents:
diff changeset
1074 // position: 'right',
5367786dc871 Uploaded
greg
parents:
diff changeset
1075 //// labelWidth: 50,
5367786dc871 Uploaded
greg
parents:
diff changeset
1076 // reserveSpace: true,
5367786dc871 Uploaded
greg
parents:
diff changeset
1077 // tickFormatter: function (val, axis) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1078 // return '<div style="">' + toPrettyStringWithDimension(referenceLength, 'bp') +
5367786dc871 Uploaded
greg
parents:
diff changeset
1079 // ' <span style="margin-left: -0.2em;">(reference)</span></div>';
5367786dc871 Uploaded
greg
parents:
diff changeset
1080 // },
5367786dc871 Uploaded
greg
parents:
diff changeset
1081 // minTickSize: 1,
5367786dc871 Uploaded
greg
parents:
diff changeset
1082 // });
5367786dc871 Uploaded
greg
parents:
diff changeset
1083 // }
5367786dc871 Uploaded
greg
parents:
diff changeset
1084 var yaxis = {
5367786dc871 Uploaded
greg
parents:
diff changeset
1085 min: 0,
5367786dc871 Uploaded
greg
parents:
diff changeset
1086 //max: cumulative.maxYTick,
5367786dc871 Uploaded
greg
parents:
diff changeset
1087 labelWidth: 120,
5367786dc871 Uploaded
greg
parents:
diff changeset
1088 reserveSpace: true,
5367786dc871 Uploaded
greg
parents:
diff changeset
1089 lineWidth: 0.5,
5367786dc871 Uploaded
greg
parents:
diff changeset
1090 color: '#000000',
5367786dc871 Uploaded
greg
parents:
diff changeset
1091 tickFormatter: getBpTickFormatter(cumulative.maxY),
5367786dc871 Uploaded
greg
parents:
diff changeset
1092 minTickSize: 1
5367786dc871 Uploaded
greg
parents:
diff changeset
1093 };
5367786dc871 Uploaded
greg
parents:
diff changeset
1094 var yaxes = [yaxis];
5367786dc871 Uploaded
greg
parents:
diff changeset
1095
5367786dc871 Uploaded
greg
parents:
diff changeset
1096 cumulative.showWithData = function(series, colors) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1097 var plot = $.plot(placeholder, series, {
5367786dc871 Uploaded
greg
parents:
diff changeset
1098 shadowSize: 0,
5367786dc871 Uploaded
greg
parents:
diff changeset
1099 colors: cumulative.colors,
5367786dc871 Uploaded
greg
parents:
diff changeset
1100 legend: {
5367786dc871 Uploaded
greg
parents:
diff changeset
1101 container: $('useless-invisible-element-that-does-not-even-exist'),
5367786dc871 Uploaded
greg
parents:
diff changeset
1102 },
5367786dc871 Uploaded
greg
parents:
diff changeset
1103 // legend: {
5367786dc871 Uploaded
greg
parents:
diff changeset
1104 // container: legendPlaceholder,
5367786dc871 Uploaded
greg
parents:
diff changeset
1105 // position: 'se',
5367786dc871 Uploaded
greg
parents:
diff changeset
1106 // labelBoxBorderColor: '#FFF',
5367786dc871 Uploaded
greg
parents:
diff changeset
1107 // labelFormatter: labelFormatter,
5367786dc871 Uploaded
greg
parents:
diff changeset
1108 // },
5367786dc871 Uploaded
greg
parents:
diff changeset
1109 grid: {
5367786dc871 Uploaded
greg
parents:
diff changeset
1110 borderWidth: 1,
5367786dc871 Uploaded
greg
parents:
diff changeset
1111 hoverable: true,
5367786dc871 Uploaded
greg
parents:
diff changeset
1112 autoHighlight: false,
5367786dc871 Uploaded
greg
parents:
diff changeset
1113 mouseActiveRadius: 1000
5367786dc871 Uploaded
greg
parents:
diff changeset
1114 },
5367786dc871 Uploaded
greg
parents:
diff changeset
1115 yaxes: yaxes,
5367786dc871 Uploaded
greg
parents:
diff changeset
1116 xaxis: {
5367786dc871 Uploaded
greg
parents:
diff changeset
1117 min: 0,
5367786dc871 Uploaded
greg
parents:
diff changeset
1118 max: cumulative.maxX,
5367786dc871 Uploaded
greg
parents:
diff changeset
1119 lineWidth: 0.5,
5367786dc871 Uploaded
greg
parents:
diff changeset
1120 color: '#000',
5367786dc871 Uploaded
greg
parents:
diff changeset
1121 tickFormatter: getContigNumberTickFormatter(cumulative.maxX, tickX),
5367786dc871 Uploaded
greg
parents:
diff changeset
1122 minTickSize: tickX
5367786dc871 Uploaded
greg
parents:
diff changeset
1123 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1124 });
5367786dc871 Uploaded
greg
parents:
diff changeset
1125
5367786dc871 Uploaded
greg
parents:
diff changeset
1126 bindTip(placeholder, series, plot, ordinalNumberToPrettyString, tickX, 'contig', 'bottom right');
5367786dc871 Uploaded
greg
parents:
diff changeset
1127 };
5367786dc871 Uploaded
greg
parents:
diff changeset
1128
5367786dc871 Uploaded
greg
parents:
diff changeset
1129 cumulative.isInitialized = true;
5367786dc871 Uploaded
greg
parents:
diff changeset
1130 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1131
5367786dc871 Uploaded
greg
parents:
diff changeset
1132 addLegendClickEvents(cumulative, filenames.length, showPlotWithInfo, refLengths);
5367786dc871 Uploaded
greg
parents:
diff changeset
1133
5367786dc871 Uploaded
greg
parents:
diff changeset
1134 showPlotWithInfo(cumulative);
5367786dc871 Uploaded
greg
parents:
diff changeset
1135
5367786dc871 Uploaded
greg
parents:
diff changeset
1136 $('#contigs_are_ordered').show();
5367786dc871 Uploaded
greg
parents:
diff changeset
1137 },
5367786dc871 Uploaded
greg
parents:
diff changeset
1138 };
5367786dc871 Uploaded
greg
parents:
diff changeset
1139
5367786dc871 Uploaded
greg
parents:
diff changeset
1140 </script>
5367786dc871 Uploaded
greg
parents:
diff changeset
1141
5367786dc871 Uploaded
greg
parents:
diff changeset
1142 <script type="text/javascript">
5367786dc871 Uploaded
greg
parents:
diff changeset
1143
5367786dc871 Uploaded
greg
parents:
diff changeset
1144 var nx = {
5367786dc871 Uploaded
greg
parents:
diff changeset
1145 nx: {
5367786dc871 Uploaded
greg
parents:
diff changeset
1146 isInitialized: false,
5367786dc871 Uploaded
greg
parents:
diff changeset
1147 maxY: 0,
5367786dc871 Uploaded
greg
parents:
diff changeset
1148 maxYTick: 0,
5367786dc871 Uploaded
greg
parents:
diff changeset
1149 series: null,
5367786dc871 Uploaded
greg
parents:
diff changeset
1150 showWithData: null
5367786dc871 Uploaded
greg
parents:
diff changeset
1151 },
5367786dc871 Uploaded
greg
parents:
diff changeset
1152
5367786dc871 Uploaded
greg
parents:
diff changeset
1153 nax: {
5367786dc871 Uploaded
greg
parents:
diff changeset
1154 isInitialized: false,
5367786dc871 Uploaded
greg
parents:
diff changeset
1155 maxY: 0,
5367786dc871 Uploaded
greg
parents:
diff changeset
1156 maxYTick: 0,
5367786dc871 Uploaded
greg
parents:
diff changeset
1157 series: null,
5367786dc871 Uploaded
greg
parents:
diff changeset
1158 showWithData: null
5367786dc871 Uploaded
greg
parents:
diff changeset
1159 },
5367786dc871 Uploaded
greg
parents:
diff changeset
1160
5367786dc871 Uploaded
greg
parents:
diff changeset
1161 ngx: {
5367786dc871 Uploaded
greg
parents:
diff changeset
1162 isInitialized: false,
5367786dc871 Uploaded
greg
parents:
diff changeset
1163 maxY: 0,
5367786dc871 Uploaded
greg
parents:
diff changeset
1164 maxYTick: 0,
5367786dc871 Uploaded
greg
parents:
diff changeset
1165 series: null,
5367786dc871 Uploaded
greg
parents:
diff changeset
1166 showWithData: null
5367786dc871 Uploaded
greg
parents:
diff changeset
1167 },
5367786dc871 Uploaded
greg
parents:
diff changeset
1168
5367786dc871 Uploaded
greg
parents:
diff changeset
1169 ngax: {
5367786dc871 Uploaded
greg
parents:
diff changeset
1170 isInitialized: false,
5367786dc871 Uploaded
greg
parents:
diff changeset
1171 maxY: 0,
5367786dc871 Uploaded
greg
parents:
diff changeset
1172 maxYTick: 0,
5367786dc871 Uploaded
greg
parents:
diff changeset
1173 series: null,
5367786dc871 Uploaded
greg
parents:
diff changeset
1174 showWithData: null
5367786dc871 Uploaded
greg
parents:
diff changeset
1175 },
5367786dc871 Uploaded
greg
parents:
diff changeset
1176
5367786dc871 Uploaded
greg
parents:
diff changeset
1177 draw: function (name, title, colors, filenames, data, refPlotValue, tickX,
5367786dc871 Uploaded
greg
parents:
diff changeset
1178 placeholder, legendPlaceholder, glossary, order, scalePlaceholder) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1179
5367786dc871 Uploaded
greg
parents:
diff changeset
1180 $(scalePlaceholder).empty();
5367786dc871 Uploaded
greg
parents:
diff changeset
1181
5367786dc871 Uploaded
greg
parents:
diff changeset
1182 var coordX = data.coord_x;
5367786dc871 Uploaded
greg
parents:
diff changeset
1183 var coordY = data.coord_y;
5367786dc871 Uploaded
greg
parents:
diff changeset
1184
5367786dc871 Uploaded
greg
parents:
diff changeset
1185 var cur_filenames = data.filenames;
5367786dc871 Uploaded
greg
parents:
diff changeset
1186 var info = nx[name];
5367786dc871 Uploaded
greg
parents:
diff changeset
1187
5367786dc871 Uploaded
greg
parents:
diff changeset
1188 if (!info.isInitialized) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1189 var plotsN = cur_filenames.length;
5367786dc871 Uploaded
greg
parents:
diff changeset
1190 info.series = new Array(plotsN);
5367786dc871 Uploaded
greg
parents:
diff changeset
1191
5367786dc871 Uploaded
greg
parents:
diff changeset
1192 for (var i = 0; i < plotsN; i++) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1193 var index = $.inArray(cur_filenames[order[i]], filenames);
5367786dc871 Uploaded
greg
parents:
diff changeset
1194 var plot_coordX = coordX[order[i]];
5367786dc871 Uploaded
greg
parents:
diff changeset
1195 var plot_coordY = coordY[order[i]];
5367786dc871 Uploaded
greg
parents:
diff changeset
1196 var size = plot_coordX.length;
5367786dc871 Uploaded
greg
parents:
diff changeset
1197
5367786dc871 Uploaded
greg
parents:
diff changeset
1198 info.series[i] = {
5367786dc871 Uploaded
greg
parents:
diff changeset
1199 data: [],
5367786dc871 Uploaded
greg
parents:
diff changeset
1200 label: filenames[index],
5367786dc871 Uploaded
greg
parents:
diff changeset
1201 number: index,
5367786dc871 Uploaded
greg
parents:
diff changeset
1202 color: colors[index]
5367786dc871 Uploaded
greg
parents:
diff changeset
1203 };
5367786dc871 Uploaded
greg
parents:
diff changeset
1204 info.series[i].data.push([0.0, plot_coordY[0]]);
5367786dc871 Uploaded
greg
parents:
diff changeset
1205 var currentLen = 0;
5367786dc871 Uploaded
greg
parents:
diff changeset
1206 var x = 0.0;
5367786dc871 Uploaded
greg
parents:
diff changeset
1207
5367786dc871 Uploaded
greg
parents:
diff changeset
1208 for (var k = 0; k < size; k++) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1209 info.series[i].data.push([plot_coordX[k], plot_coordY[k]]);
5367786dc871 Uploaded
greg
parents:
diff changeset
1210 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1211
5367786dc871 Uploaded
greg
parents:
diff changeset
1212 if (info.series[i].data[0][1] > info.maxY) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1213 info.maxY = info.series[i].data[0][1];
5367786dc871 Uploaded
greg
parents:
diff changeset
1214 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1215
5367786dc871 Uploaded
greg
parents:
diff changeset
1216 var lastPt = info.series[i].data[info.series[i].data.length-1];
5367786dc871 Uploaded
greg
parents:
diff changeset
1217 info.series[i].data.push([lastPt[0], 0]);
5367786dc871 Uploaded
greg
parents:
diff changeset
1218 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1219
5367786dc871 Uploaded
greg
parents:
diff changeset
1220 for (i = 0; i < plotsN; i++) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1221 if (typeof broken_scaffolds_labels !== undefined && $.inArray(filenames[order[i]], broken_scaffolds_labels) != -1) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1222 info.series[i].dashes = {
5367786dc871 Uploaded
greg
parents:
diff changeset
1223 show: true,
5367786dc871 Uploaded
greg
parents:
diff changeset
1224 lineWidth: 1
5367786dc871 Uploaded
greg
parents:
diff changeset
1225 };
5367786dc871 Uploaded
greg
parents:
diff changeset
1226 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1227 else {
5367786dc871 Uploaded
greg
parents:
diff changeset
1228 info.series[i].lines = {
5367786dc871 Uploaded
greg
parents:
diff changeset
1229 show: true,
5367786dc871 Uploaded
greg
parents:
diff changeset
1230 lineWidth: 1
5367786dc871 Uploaded
greg
parents:
diff changeset
1231 };
5367786dc871 Uploaded
greg
parents:
diff changeset
1232 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1233 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1234
5367786dc871 Uploaded
greg
parents:
diff changeset
1235 // for (i = 0; i < plotsN; i++) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1236 // plotsData[i].points = {
5367786dc871 Uploaded
greg
parents:
diff changeset
1237 // show: true,
5367786dc871 Uploaded
greg
parents:
diff changeset
1238 // radius: 1,
5367786dc871 Uploaded
greg
parents:
diff changeset
1239 // fill: 1,
5367786dc871 Uploaded
greg
parents:
diff changeset
1240 // fillColor: false,
5367786dc871 Uploaded
greg
parents:
diff changeset
1241 // }
5367786dc871 Uploaded
greg
parents:
diff changeset
1242 // }
5367786dc871 Uploaded
greg
parents:
diff changeset
1243
5367786dc871 Uploaded
greg
parents:
diff changeset
1244 info.showWithData = function(series, colors) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1245 var plot = $.plot(placeholder, series, {
5367786dc871 Uploaded
greg
parents:
diff changeset
1246 shadowSize: 0,
5367786dc871 Uploaded
greg
parents:
diff changeset
1247 colors: colors,
5367786dc871 Uploaded
greg
parents:
diff changeset
1248 legend: {
5367786dc871 Uploaded
greg
parents:
diff changeset
1249 container: $('useless-invisible-element-that-does-not-even-exist'),
5367786dc871 Uploaded
greg
parents:
diff changeset
1250 },
5367786dc871 Uploaded
greg
parents:
diff changeset
1251 grid: {
5367786dc871 Uploaded
greg
parents:
diff changeset
1252 borderWidth: 1,
5367786dc871 Uploaded
greg
parents:
diff changeset
1253 hoverable: true,
5367786dc871 Uploaded
greg
parents:
diff changeset
1254 autoHighlight: false,
5367786dc871 Uploaded
greg
parents:
diff changeset
1255 mouseActiveRadius: 1000
5367786dc871 Uploaded
greg
parents:
diff changeset
1256 },
5367786dc871 Uploaded
greg
parents:
diff changeset
1257 yaxis: {
5367786dc871 Uploaded
greg
parents:
diff changeset
1258 min: 0,
5367786dc871 Uploaded
greg
parents:
diff changeset
1259 // max: info.maxY,
5367786dc871 Uploaded
greg
parents:
diff changeset
1260 labelWidth: 120,
5367786dc871 Uploaded
greg
parents:
diff changeset
1261 reserveSpace: true,
5367786dc871 Uploaded
greg
parents:
diff changeset
1262 lineWidth: 0.5,
5367786dc871 Uploaded
greg
parents:
diff changeset
1263 color: '#000',
5367786dc871 Uploaded
greg
parents:
diff changeset
1264 tickFormatter: getBpTickFormatter(info.maxY),
5367786dc871 Uploaded
greg
parents:
diff changeset
1265 minTickSize: 1
5367786dc871 Uploaded
greg
parents:
diff changeset
1266 },
5367786dc871 Uploaded
greg
parents:
diff changeset
1267 xaxis: {
5367786dc871 Uploaded
greg
parents:
diff changeset
1268 min: 0,
5367786dc871 Uploaded
greg
parents:
diff changeset
1269 max: 100,
5367786dc871 Uploaded
greg
parents:
diff changeset
1270 lineWidth: 0.5,
5367786dc871 Uploaded
greg
parents:
diff changeset
1271 color: '#000',
5367786dc871 Uploaded
greg
parents:
diff changeset
1272 tickFormatter: function (val, axis) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1273 if (val == 100) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1274 return '&nbsp;x<span class="rhs">&nbsp;</span>=<span class="rhs">&nbsp;</span>100%'
5367786dc871 Uploaded
greg
parents:
diff changeset
1275 } else {
5367786dc871 Uploaded
greg
parents:
diff changeset
1276 return val;
5367786dc871 Uploaded
greg
parents:
diff changeset
1277 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1278 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1279 },
5367786dc871 Uploaded
greg
parents:
diff changeset
1280 minTickSize: tickX
5367786dc871 Uploaded
greg
parents:
diff changeset
1281 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1282 );
5367786dc871 Uploaded
greg
parents:
diff changeset
1283
5367786dc871 Uploaded
greg
parents:
diff changeset
1284 var firstLabel = $('.yAxis .tickLabel').last();
5367786dc871 Uploaded
greg
parents:
diff changeset
1285 firstLabel.prepend(title + '<span class="rhs">&nbsp;</span>=<span class="rhs">&nbsp;</span>');
5367786dc871 Uploaded
greg
parents:
diff changeset
1286
5367786dc871 Uploaded
greg
parents:
diff changeset
1287 bindTip(placeholder, series, plot, toPrettyString, 1, '%', 'top right');
5367786dc871 Uploaded
greg
parents:
diff changeset
1288
5367786dc871 Uploaded
greg
parents:
diff changeset
1289 };
5367786dc871 Uploaded
greg
parents:
diff changeset
1290
5367786dc871 Uploaded
greg
parents:
diff changeset
1291 info.isInitialized = true;
5367786dc871 Uploaded
greg
parents:
diff changeset
1292 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1293
5367786dc871 Uploaded
greg
parents:
diff changeset
1294 addLegendClickEvents(info, filenames.length, showPlotWithInfo);
5367786dc871 Uploaded
greg
parents:
diff changeset
1295 showPlotWithInfo(info);
5367786dc871 Uploaded
greg
parents:
diff changeset
1296 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1297 };
5367786dc871 Uploaded
greg
parents:
diff changeset
1298
5367786dc871 Uploaded
greg
parents:
diff changeset
1299
5367786dc871 Uploaded
greg
parents:
diff changeset
1300
5367786dc871 Uploaded
greg
parents:
diff changeset
1301 </script>
5367786dc871 Uploaded
greg
parents:
diff changeset
1302
5367786dc871 Uploaded
greg
parents:
diff changeset
1303 <script type="text/javascript">
5367786dc871 Uploaded
greg
parents:
diff changeset
1304
5367786dc871 Uploaded
greg
parents:
diff changeset
1305 var normal_scale_span =
5367786dc871 Uploaded
greg
parents:
diff changeset
1306 "<span class='selected-switch'>" +
5367786dc871 Uploaded
greg
parents:
diff changeset
1307 'Normal' +
5367786dc871 Uploaded
greg
parents:
diff changeset
1308 "</span>";
5367786dc871 Uploaded
greg
parents:
diff changeset
1309 var normal_scale_a =
5367786dc871 Uploaded
greg
parents:
diff changeset
1310 "<a class='dotted-link' onClick='setNormalScale()'>" +
5367786dc871 Uploaded
greg
parents:
diff changeset
1311 'Normal' +
5367786dc871 Uploaded
greg
parents:
diff changeset
1312 "</a>";
5367786dc871 Uploaded
greg
parents:
diff changeset
1313 var log_scale_span =
5367786dc871 Uploaded
greg
parents:
diff changeset
1314 "<span class='selected-switch'>" +
5367786dc871 Uploaded
greg
parents:
diff changeset
1315 'logarithmic' +
5367786dc871 Uploaded
greg
parents:
diff changeset
1316 "</span>";
5367786dc871 Uploaded
greg
parents:
diff changeset
1317 var log_scale_a =
5367786dc871 Uploaded
greg
parents:
diff changeset
1318 "<a class='dotted-link' onClick='setLogScale()'>" +
5367786dc871 Uploaded
greg
parents:
diff changeset
1319 'logarithmic' +
5367786dc871 Uploaded
greg
parents:
diff changeset
1320 "</a>";
5367786dc871 Uploaded
greg
parents:
diff changeset
1321
5367786dc871 Uploaded
greg
parents:
diff changeset
1322 var show_all_span =
5367786dc871 Uploaded
greg
parents:
diff changeset
1323 "<span class='selected-switch gc'>" +
5367786dc871 Uploaded
greg
parents:
diff changeset
1324 'Back to overview' +
5367786dc871 Uploaded
greg
parents:
diff changeset
1325 "</span>";
5367786dc871 Uploaded
greg
parents:
diff changeset
1326 var show_all_a =
5367786dc871 Uploaded
greg
parents:
diff changeset
1327 "&nbsp;&nbsp;&nbsp;<a class='dotted-link' onClick='showAll()'>" +
5367786dc871 Uploaded
greg
parents:
diff changeset
1328 'Back to overview' +
5367786dc871 Uploaded
greg
parents:
diff changeset
1329 "</a>";
5367786dc871 Uploaded
greg
parents:
diff changeset
1330
5367786dc871 Uploaded
greg
parents:
diff changeset
1331 var gc = {
5367786dc871 Uploaded
greg
parents:
diff changeset
1332 isInitialized: false,
5367786dc871 Uploaded
greg
parents:
diff changeset
1333
5367786dc871 Uploaded
greg
parents:
diff changeset
1334 maxY: 0,
5367786dc871 Uploaded
greg
parents:
diff changeset
1335 plot: null,
5367786dc871 Uploaded
greg
parents:
diff changeset
1336 series: null,
5367786dc871 Uploaded
greg
parents:
diff changeset
1337 showWithData: null,
5367786dc871 Uploaded
greg
parents:
diff changeset
1338 minPow: 0,
5367786dc871 Uploaded
greg
parents:
diff changeset
1339 ticks: null,
5367786dc871 Uploaded
greg
parents:
diff changeset
1340 placeholder: null,
5367786dc871 Uploaded
greg
parents:
diff changeset
1341 legendPlaceholder: null,
5367786dc871 Uploaded
greg
parents:
diff changeset
1342 colors: null,
5367786dc871 Uploaded
greg
parents:
diff changeset
1343 yAxisLabeled: false,
5367786dc871 Uploaded
greg
parents:
diff changeset
1344
5367786dc871 Uploaded
greg
parents:
diff changeset
1345 show_all_el: show_all_span,
5367786dc871 Uploaded
greg
parents:
diff changeset
1346 reference: false,
5367786dc871 Uploaded
greg
parents:
diff changeset
1347
5367786dc871 Uploaded
greg
parents:
diff changeset
1348 normal_scale_el: null,
5367786dc871 Uploaded
greg
parents:
diff changeset
1349 log_scale_el: null,
5367786dc871 Uploaded
greg
parents:
diff changeset
1350
5367786dc871 Uploaded
greg
parents:
diff changeset
1351 draw: function(name, title, colors, filenames, gcInfos, reflen, tickX,
5367786dc871 Uploaded
greg
parents:
diff changeset
1352 placeholder, legendPlaceholder, glossary, order, scalePlaceholder) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1353 gc.normal_scale_el = normal_scale_span;
5367786dc871 Uploaded
greg
parents:
diff changeset
1354 gc.log_scale_el = log_scale_a;
5367786dc871 Uploaded
greg
parents:
diff changeset
1355 $(scalePlaceholder).html(
5367786dc871 Uploaded
greg
parents:
diff changeset
1356 "<div id='change-scale' style='margin-right: 3px; visibility: hidden;'>" +
5367786dc871 Uploaded
greg
parents:
diff changeset
1357 "<span id='normal_scale_label'>" +
5367786dc871 Uploaded
greg
parents:
diff changeset
1358 gc.normal_scale_el +
5367786dc871 Uploaded
greg
parents:
diff changeset
1359 "</span>&nbsp;/&nbsp;" +
5367786dc871 Uploaded
greg
parents:
diff changeset
1360 "<span id='log_scale_label'>" +
5367786dc871 Uploaded
greg
parents:
diff changeset
1361 gc.log_scale_el +
5367786dc871 Uploaded
greg
parents:
diff changeset
1362 "</span> scale" +
5367786dc871 Uploaded
greg
parents:
diff changeset
1363 "</div>"
5367786dc871 Uploaded
greg
parents:
diff changeset
1364 );
5367786dc871 Uploaded
greg
parents:
diff changeset
1365
5367786dc871 Uploaded
greg
parents:
diff changeset
1366 var refIndex = gcInfos.reference_index;
5367786dc871 Uploaded
greg
parents:
diff changeset
1367 if (!gc.isInitialized) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1368 gc.legendPlaceholder = legendPlaceholder;
5367786dc871 Uploaded
greg
parents:
diff changeset
1369 gc.placeholder = placeholder;
5367786dc871 Uploaded
greg
parents:
diff changeset
1370 gc.colors = colors;
5367786dc871 Uploaded
greg
parents:
diff changeset
1371 gc.filenames = filenames;
5367786dc871 Uploaded
greg
parents:
diff changeset
1372
5367786dc871 Uploaded
greg
parents:
diff changeset
1373 var bin_size = 1.0;
5367786dc871 Uploaded
greg
parents:
diff changeset
1374 var plotsN = filenames.length;
5367786dc871 Uploaded
greg
parents:
diff changeset
1375 gc.series = new Array(plotsN + 1);
5367786dc871 Uploaded
greg
parents:
diff changeset
1376 gc.series[0] = new Array(plotsN);
5367786dc871 Uploaded
greg
parents:
diff changeset
1377
5367786dc871 Uploaded
greg
parents:
diff changeset
1378 gc.maxY = 0;
5367786dc871 Uploaded
greg
parents:
diff changeset
1379 var minY = Number.MAX_VALUE;
5367786dc871 Uploaded
greg
parents:
diff changeset
1380
5367786dc871 Uploaded
greg
parents:
diff changeset
1381 function updateMinY(y) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1382 if (y < minY && y != 0) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1383 minY = y;
5367786dc871 Uploaded
greg
parents:
diff changeset
1384 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1385 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1386 function updateMaxY(y) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1387 if (y > gc.maxY) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1388 gc.maxY = y;
5367786dc871 Uploaded
greg
parents:
diff changeset
1389 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1390 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1391
5367786dc871 Uploaded
greg
parents:
diff changeset
1392 for (var i = 0; i < plotsN; i++) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1393 gc.series[0][i] = {
5367786dc871 Uploaded
greg
parents:
diff changeset
1394 data: [],
5367786dc871 Uploaded
greg
parents:
diff changeset
1395 label: filenames[order[i]],
5367786dc871 Uploaded
greg
parents:
diff changeset
1396 number: order[i],
5367786dc871 Uploaded
greg
parents:
diff changeset
1397 color: colors[order[i]]
5367786dc871 Uploaded
greg
parents:
diff changeset
1398 };
5367786dc871 Uploaded
greg
parents:
diff changeset
1399 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1400
5367786dc871 Uploaded
greg
parents:
diff changeset
1401 function makeSeriesFromDistributions(distributionsXandY, series_i, plot_i) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1402 var distributionsX = distributionsXandY[0];
5367786dc871 Uploaded
greg
parents:
diff changeset
1403 var distributionsY = distributionsXandY[1];
5367786dc871 Uploaded
greg
parents:
diff changeset
1404
5367786dc871 Uploaded
greg
parents:
diff changeset
1405 for (var j = 0; j < distributionsX.length; j++) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1406 var x = distributionsX[j];
5367786dc871 Uploaded
greg
parents:
diff changeset
1407 var y = distributionsY[j];
5367786dc871 Uploaded
greg
parents:
diff changeset
1408 gc.series[series_i][plot_i].data.push([x, y]);
5367786dc871 Uploaded
greg
parents:
diff changeset
1409 updateMinY(y);
5367786dc871 Uploaded
greg
parents:
diff changeset
1410 updateMaxY(y);
5367786dc871 Uploaded
greg
parents:
diff changeset
1411 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1412 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1413
5367786dc871 Uploaded
greg
parents:
diff changeset
1414 function makeSeries(listsOfGCInfo, listOfGcDistributions, seriesIdx) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1415 for (var i = 0; i < plotsN; i++) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1416 if (listsOfGCInfo) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1417 makeSeriesFromInfo(listsOfGCInfo[order[i]], seriesIdx, i);
5367786dc871 Uploaded
greg
parents:
diff changeset
1418 } else {
5367786dc871 Uploaded
greg
parents:
diff changeset
1419 makeSeriesFromDistributions(listOfGcDistributions[order[i]], seriesIdx, i);
5367786dc871 Uploaded
greg
parents:
diff changeset
1420 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1421 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1422 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1423
5367786dc871 Uploaded
greg
parents:
diff changeset
1424 var listsOfGCInfo = gcInfos.lists_of_gc_info;
5367786dc871 Uploaded
greg
parents:
diff changeset
1425 var listOfGcDistributions = gcInfos.list_of_GC_distributions;
5367786dc871 Uploaded
greg
parents:
diff changeset
1426 makeSeries(listsOfGCInfo, listOfGcDistributions, 0);
5367786dc871 Uploaded
greg
parents:
diff changeset
1427
5367786dc871 Uploaded
greg
parents:
diff changeset
1428 function makeSeriesFromInfo(GC_info, series_i, i) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1429 var cur_bin = 0.0;
5367786dc871 Uploaded
greg
parents:
diff changeset
1430
5367786dc871 Uploaded
greg
parents:
diff changeset
1431 var x = cur_bin;
5367786dc871 Uploaded
greg
parents:
diff changeset
1432 var y = filterAndSumGcInfo(GC_info, function(GC_percent) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1433 return GC_percent == cur_bin;
5367786dc871 Uploaded
greg
parents:
diff changeset
1434 });
5367786dc871 Uploaded
greg
parents:
diff changeset
1435 gc.series[series_i][i].data.push([x, y]);
5367786dc871 Uploaded
greg
parents:
diff changeset
1436
5367786dc871 Uploaded
greg
parents:
diff changeset
1437 updateMinY(y);
5367786dc871 Uploaded
greg
parents:
diff changeset
1438 updateMaxY(y);
5367786dc871 Uploaded
greg
parents:
diff changeset
1439
5367786dc871 Uploaded
greg
parents:
diff changeset
1440 while (cur_bin < 100.0 - bin_size) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1441 cur_bin += bin_size;
5367786dc871 Uploaded
greg
parents:
diff changeset
1442
5367786dc871 Uploaded
greg
parents:
diff changeset
1443 x = cur_bin;
5367786dc871 Uploaded
greg
parents:
diff changeset
1444 y = filterAndSumGcInfo(GC_info, function(GC_percent) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1445 return GC_percent > (cur_bin - bin_size) && GC_percent <= cur_bin;
5367786dc871 Uploaded
greg
parents:
diff changeset
1446 });
5367786dc871 Uploaded
greg
parents:
diff changeset
1447 gc.series[series_i][i].data.push([x, y]);
5367786dc871 Uploaded
greg
parents:
diff changeset
1448
5367786dc871 Uploaded
greg
parents:
diff changeset
1449 updateMinY(y);
5367786dc871 Uploaded
greg
parents:
diff changeset
1450 updateMaxY(y);
5367786dc871 Uploaded
greg
parents:
diff changeset
1451 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1452
5367786dc871 Uploaded
greg
parents:
diff changeset
1453 x = 100.0;
5367786dc871 Uploaded
greg
parents:
diff changeset
1454 y = filterAndSumGcInfo(GC_info, function(GC_percent) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1455 return GC_percent > cur_bin && GC_percent <= 100.0;
5367786dc871 Uploaded
greg
parents:
diff changeset
1456 });
5367786dc871 Uploaded
greg
parents:
diff changeset
1457
5367786dc871 Uploaded
greg
parents:
diff changeset
1458 gc.series[series_i][i].data.push([x, y]);
5367786dc871 Uploaded
greg
parents:
diff changeset
1459
5367786dc871 Uploaded
greg
parents:
diff changeset
1460 updateMinY(y);
5367786dc871 Uploaded
greg
parents:
diff changeset
1461 updateMaxY(y);
5367786dc871 Uploaded
greg
parents:
diff changeset
1462 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1463
5367786dc871 Uploaded
greg
parents:
diff changeset
1464 for (i = 0; i < plotsN; i++) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1465 if (typeof broken_scaffolds_labels !== undefined && $.inArray(filenames[order[i]], broken_scaffolds_labels) != -1) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1466 gc.series[0][i].dashes = {
5367786dc871 Uploaded
greg
parents:
diff changeset
1467 show: true,
5367786dc871 Uploaded
greg
parents:
diff changeset
1468 lineWidth: 1
5367786dc871 Uploaded
greg
parents:
diff changeset
1469 };
5367786dc871 Uploaded
greg
parents:
diff changeset
1470 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1471 else {
5367786dc871 Uploaded
greg
parents:
diff changeset
1472 gc.series[0][i].lines = {
5367786dc871 Uploaded
greg
parents:
diff changeset
1473 show: true,
5367786dc871 Uploaded
greg
parents:
diff changeset
1474 lineWidth: 1
5367786dc871 Uploaded
greg
parents:
diff changeset
1475 };
5367786dc871 Uploaded
greg
parents:
diff changeset
1476 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1477 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1478
5367786dc871 Uploaded
greg
parents:
diff changeset
1479 if (refIndex) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1480 gc.reference = true;
5367786dc871 Uploaded
greg
parents:
diff changeset
1481 gc.series[0].push({
5367786dc871 Uploaded
greg
parents:
diff changeset
1482 data: [],
5367786dc871 Uploaded
greg
parents:
diff changeset
1483 label: 'reference',
5367786dc871 Uploaded
greg
parents:
diff changeset
1484 isReference: true,
5367786dc871 Uploaded
greg
parents:
diff changeset
1485 number: filenames.length,
5367786dc871 Uploaded
greg
parents:
diff changeset
1486 lines: {},
5367786dc871 Uploaded
greg
parents:
diff changeset
1487 dashes: {
5367786dc871 Uploaded
greg
parents:
diff changeset
1488 show: true,
5367786dc871 Uploaded
greg
parents:
diff changeset
1489 lineWidth: 1
5367786dc871 Uploaded
greg
parents:
diff changeset
1490 },
5367786dc871 Uploaded
greg
parents:
diff changeset
1491 color: '#000000'
5367786dc871 Uploaded
greg
parents:
diff changeset
1492 });
5367786dc871 Uploaded
greg
parents:
diff changeset
1493 if (listsOfGCInfo) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1494 makeSeriesFromInfo(listsOfGCInfo[refIndex], 0, refIndex);
5367786dc871 Uploaded
greg
parents:
diff changeset
1495 } else {
5367786dc871 Uploaded
greg
parents:
diff changeset
1496 makeSeriesFromDistributions(listOfGcDistributions[refIndex], 0, refIndex);
5367786dc871 Uploaded
greg
parents:
diff changeset
1497 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1498 gc.colors.push('#000000')
5367786dc871 Uploaded
greg
parents:
diff changeset
1499 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1500
5367786dc871 Uploaded
greg
parents:
diff changeset
1501 if (gcInfos.list_of_GC_contigs_distributions) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1502 listOfGcDistributions = gcInfos.list_of_GC_contigs_distributions;
5367786dc871 Uploaded
greg
parents:
diff changeset
1503 var maxY = 0;
5367786dc871 Uploaded
greg
parents:
diff changeset
1504 for (var file_n = 0; file_n < filenames.length; file_n++) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1505 gc.series[file_n + 1] = new Array(1);
5367786dc871 Uploaded
greg
parents:
diff changeset
1506 gc.series[file_n + 1][0] = {
5367786dc871 Uploaded
greg
parents:
diff changeset
1507 data: [],
5367786dc871 Uploaded
greg
parents:
diff changeset
1508 label: filenames[order[file_n]],
5367786dc871 Uploaded
greg
parents:
diff changeset
1509 number: order[file_n],
5367786dc871 Uploaded
greg
parents:
diff changeset
1510 color: colors[order[file_n]],
5367786dc871 Uploaded
greg
parents:
diff changeset
1511 bars: {
5367786dc871 Uploaded
greg
parents:
diff changeset
1512 show: true,
5367786dc871 Uploaded
greg
parents:
diff changeset
1513 lineWidth: 0.6,
5367786dc871 Uploaded
greg
parents:
diff changeset
1514 fill: 0.6,
5367786dc871 Uploaded
greg
parents:
diff changeset
1515 barWidth: 5
5367786dc871 Uploaded
greg
parents:
diff changeset
1516 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1517 };
5367786dc871 Uploaded
greg
parents:
diff changeset
1518
5367786dc871 Uploaded
greg
parents:
diff changeset
1519 var distributionsX = listOfGcDistributions[file_n][0];
5367786dc871 Uploaded
greg
parents:
diff changeset
1520 var distributionsY = listOfGcDistributions[file_n][1];
5367786dc871 Uploaded
greg
parents:
diff changeset
1521
5367786dc871 Uploaded
greg
parents:
diff changeset
1522 for (var j = 0; j < distributionsX.length; j++) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1523 var x = distributionsX[j];
5367786dc871 Uploaded
greg
parents:
diff changeset
1524 var y = distributionsY[j];
5367786dc871 Uploaded
greg
parents:
diff changeset
1525 gc.series[file_n + 1][0].data.push([x, y]);
5367786dc871 Uploaded
greg
parents:
diff changeset
1526 maxY = Math.max(maxY, y);
5367786dc871 Uploaded
greg
parents:
diff changeset
1527 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1528 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1529 for (var file_n = 0; file_n < filenames.length; file_n++) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1530 gc.series[file_n + 1][0].maxY = maxY;
5367786dc871 Uploaded
greg
parents:
diff changeset
1531 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1532 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1533 // Calculate the minimum possible non-zero Y to clip useless bottoms
5367786dc871 Uploaded
greg
parents:
diff changeset
1534 // of logarithmic plots.
5367786dc871 Uploaded
greg
parents:
diff changeset
1535 var maxYTick = getMaxDecimalTick(gc.maxY);
5367786dc871 Uploaded
greg
parents:
diff changeset
1536 gc.minPow = Math.round(Math.log(minY) / Math.log(10));
5367786dc871 Uploaded
greg
parents:
diff changeset
1537 gc.ticks = [];
5367786dc871 Uploaded
greg
parents:
diff changeset
1538 for (var pow = gc.minPow; Math.pow(10, pow) < maxYTick; pow++) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1539 gc.ticks.push(Math.pow(10, pow));
5367786dc871 Uploaded
greg
parents:
diff changeset
1540 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1541 gc.ticks.push(Math.pow(10, pow));
5367786dc871 Uploaded
greg
parents:
diff changeset
1542
5367786dc871 Uploaded
greg
parents:
diff changeset
1543 gc.isInitialized = true;
5367786dc871 Uploaded
greg
parents:
diff changeset
1544 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1545
5367786dc871 Uploaded
greg
parents:
diff changeset
1546 gc.showWithData = showInNormalScaleWithData;
5367786dc871 Uploaded
greg
parents:
diff changeset
1547 if (gcInfos.list_of_GC_contigs_distributions) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1548 createLegend(gc.filenames, gc.colors, 0, gc.reference);
5367786dc871 Uploaded
greg
parents:
diff changeset
1549 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1550 addLegendClickEvents(gc, filenames.length, showPlotWithInfo, false, 0);
5367786dc871 Uploaded
greg
parents:
diff changeset
1551
5367786dc871 Uploaded
greg
parents:
diff changeset
1552 showPlotWithInfo(gc, 0);
5367786dc871 Uploaded
greg
parents:
diff changeset
1553
5367786dc871 Uploaded
greg
parents:
diff changeset
1554 $('#change-scale').css('visibility', 'visible');
5367786dc871 Uploaded
greg
parents:
diff changeset
1555 $('#gc_info').show();
5367786dc871 Uploaded
greg
parents:
diff changeset
1556 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1557 };
5367786dc871 Uploaded
greg
parents:
diff changeset
1558
5367786dc871 Uploaded
greg
parents:
diff changeset
1559 function showAll() {
5367786dc871 Uploaded
greg
parents:
diff changeset
1560 $('#change-scale').show();
5367786dc871 Uploaded
greg
parents:
diff changeset
1561 $('#gc_info').show();
5367786dc871 Uploaded
greg
parents:
diff changeset
1562 $('#gc_contigs_info').hide();
5367786dc871 Uploaded
greg
parents:
diff changeset
1563 createLegend(gc.filenames, gc.colors, 0, gc.reference);
5367786dc871 Uploaded
greg
parents:
diff changeset
1564
5367786dc871 Uploaded
greg
parents:
diff changeset
1565 gc.show_all_el = show_all_span;
5367786dc871 Uploaded
greg
parents:
diff changeset
1566 gc.showWithData = gc.log_scale_el == log_scale_a ? showInNormalScaleWithData : showInLogarithmicScaleWithData;
5367786dc871 Uploaded
greg
parents:
diff changeset
1567
5367786dc871 Uploaded
greg
parents:
diff changeset
1568 $('#show_all_label').html(gc.show_all_el);
5367786dc871 Uploaded
greg
parents:
diff changeset
1569 showPlotWithInfo(gc, 0);
5367786dc871 Uploaded
greg
parents:
diff changeset
1570 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1571
5367786dc871 Uploaded
greg
parents:
diff changeset
1572 function showPlot(index) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1573 $('#change-scale').hide();
5367786dc871 Uploaded
greg
parents:
diff changeset
1574 $('#gc_info').hide();
5367786dc871 Uploaded
greg
parents:
diff changeset
1575 $('#gc_contigs_info').show();
5367786dc871 Uploaded
greg
parents:
diff changeset
1576 createLegend([gc.filenames[index - 1]], [gc.colors[index - 1]], index);
5367786dc871 Uploaded
greg
parents:
diff changeset
1577
5367786dc871 Uploaded
greg
parents:
diff changeset
1578 gc.show_all_el = show_all_a;
5367786dc871 Uploaded
greg
parents:
diff changeset
1579 gc.showWithData = showOneAssembly;
5367786dc871 Uploaded
greg
parents:
diff changeset
1580
5367786dc871 Uploaded
greg
parents:
diff changeset
1581 $('#show_all_label').html(gc.show_all_el);
5367786dc871 Uploaded
greg
parents:
diff changeset
1582 showPlotWithInfo(gc, index);
5367786dc871 Uploaded
greg
parents:
diff changeset
1583 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1584
5367786dc871 Uploaded
greg
parents:
diff changeset
1585 function showOneAssembly(series, colors) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1586 if (series == null) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1587 return;
5367786dc871 Uploaded
greg
parents:
diff changeset
1588 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1589
5367786dc871 Uploaded
greg
parents:
diff changeset
1590 gc.plot = $.plot(gc.placeholder, series, {
5367786dc871 Uploaded
greg
parents:
diff changeset
1591 shadowSize: 0,
5367786dc871 Uploaded
greg
parents:
diff changeset
1592 colors: colors,
5367786dc871 Uploaded
greg
parents:
diff changeset
1593 legend: {
5367786dc871 Uploaded
greg
parents:
diff changeset
1594 container: $('useless-invisible-element-that-does-not-even-exist')
5367786dc871 Uploaded
greg
parents:
diff changeset
1595 },
5367786dc871 Uploaded
greg
parents:
diff changeset
1596 grid: {
5367786dc871 Uploaded
greg
parents:
diff changeset
1597 hoverable: true,
5367786dc871 Uploaded
greg
parents:
diff changeset
1598 borderWidth: 1,
5367786dc871 Uploaded
greg
parents:
diff changeset
1599 autoHighlight: false,
5367786dc871 Uploaded
greg
parents:
diff changeset
1600 mouseActiveRadius: 1000
5367786dc871 Uploaded
greg
parents:
diff changeset
1601 },
5367786dc871 Uploaded
greg
parents:
diff changeset
1602 yaxis: {
5367786dc871 Uploaded
greg
parents:
diff changeset
1603 min: 0,
5367786dc871 Uploaded
greg
parents:
diff changeset
1604 max: series[0].maxY * 1.1,
5367786dc871 Uploaded
greg
parents:
diff changeset
1605 labelWidth: 120,
5367786dc871 Uploaded
greg
parents:
diff changeset
1606 reserveSpace: true,
5367786dc871 Uploaded
greg
parents:
diff changeset
1607 lineWidth: 0.5,
5367786dc871 Uploaded
greg
parents:
diff changeset
1608 color: '#000',
5367786dc871 Uploaded
greg
parents:
diff changeset
1609 tickFormatter: getJustNumberTickFormatter(gc.maxY),
5367786dc871 Uploaded
greg
parents:
diff changeset
1610 minTickSize: 1
5367786dc871 Uploaded
greg
parents:
diff changeset
1611 },
5367786dc871 Uploaded
greg
parents:
diff changeset
1612 xaxis: {
5367786dc871 Uploaded
greg
parents:
diff changeset
1613 min: 0,
5367786dc871 Uploaded
greg
parents:
diff changeset
1614 max: 100,
5367786dc871 Uploaded
greg
parents:
diff changeset
1615 lineWidth: 0.5,
5367786dc871 Uploaded
greg
parents:
diff changeset
1616 color: '#000',
5367786dc871 Uploaded
greg
parents:
diff changeset
1617 tickFormatter: function (val, axis) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1618 if (val == 100) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1619 return '&nbsp;100% GC'
5367786dc871 Uploaded
greg
parents:
diff changeset
1620 } else {
5367786dc871 Uploaded
greg
parents:
diff changeset
1621 return val;
5367786dc871 Uploaded
greg
parents:
diff changeset
1622 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1623 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1624 },
5367786dc871 Uploaded
greg
parents:
diff changeset
1625 minTickSize: 1
5367786dc871 Uploaded
greg
parents:
diff changeset
1626 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1627 );
5367786dc871 Uploaded
greg
parents:
diff changeset
1628
5367786dc871 Uploaded
greg
parents:
diff changeset
1629 var firstLabel = $('.yAxis .tickLabel').last();
5367786dc871 Uploaded
greg
parents:
diff changeset
1630 firstLabel.append(' contigs');
5367786dc871 Uploaded
greg
parents:
diff changeset
1631 unBindTips(gc.placeholder);
5367786dc871 Uploaded
greg
parents:
diff changeset
1632 bindTip(gc.placeholder, series, gc.plot, getIntervalToPrettyString(5), 1, '%<span class="rhs">&nbsp;</span>GC', 'top right');
5367786dc871 Uploaded
greg
parents:
diff changeset
1633 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1634
5367786dc871 Uploaded
greg
parents:
diff changeset
1635 function showInNormalScaleWithData(series, colors) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1636 if (series == null || gc.maxY == null)
5367786dc871 Uploaded
greg
parents:
diff changeset
1637 return;
5367786dc871 Uploaded
greg
parents:
diff changeset
1638
5367786dc871 Uploaded
greg
parents:
diff changeset
1639 gc.yAxisLabeled = false;
5367786dc871 Uploaded
greg
parents:
diff changeset
1640
5367786dc871 Uploaded
greg
parents:
diff changeset
1641 gc.plot = $.plot(gc.placeholder, series, {
5367786dc871 Uploaded
greg
parents:
diff changeset
1642 shadowSize: 0,
5367786dc871 Uploaded
greg
parents:
diff changeset
1643 colors: colors,
5367786dc871 Uploaded
greg
parents:
diff changeset
1644 legend: {
5367786dc871 Uploaded
greg
parents:
diff changeset
1645 container: $('useless-invisible-element-that-does-not-even-exist'),
5367786dc871 Uploaded
greg
parents:
diff changeset
1646 },
5367786dc871 Uploaded
greg
parents:
diff changeset
1647 grid: {
5367786dc871 Uploaded
greg
parents:
diff changeset
1648 borderWidth: 1,
5367786dc871 Uploaded
greg
parents:
diff changeset
1649 hoverable: true,
5367786dc871 Uploaded
greg
parents:
diff changeset
1650 autoHighlight: false,
5367786dc871 Uploaded
greg
parents:
diff changeset
1651 mouseActiveRadius: 1000,
5367786dc871 Uploaded
greg
parents:
diff changeset
1652 },
5367786dc871 Uploaded
greg
parents:
diff changeset
1653 yaxis: {
5367786dc871 Uploaded
greg
parents:
diff changeset
1654 min: 0,
5367786dc871 Uploaded
greg
parents:
diff changeset
1655 // max: gc.maxY + 0.1 * gc.maxY,
5367786dc871 Uploaded
greg
parents:
diff changeset
1656 labelWidth: 120,
5367786dc871 Uploaded
greg
parents:
diff changeset
1657 reserveSpace: true,
5367786dc871 Uploaded
greg
parents:
diff changeset
1658 lineWidth: 0.5,
5367786dc871 Uploaded
greg
parents:
diff changeset
1659 color: '#000',
5367786dc871 Uploaded
greg
parents:
diff changeset
1660 tickFormatter: windowsTickFormatter,
5367786dc871 Uploaded
greg
parents:
diff changeset
1661 minTickSize: 1
5367786dc871 Uploaded
greg
parents:
diff changeset
1662 },
5367786dc871 Uploaded
greg
parents:
diff changeset
1663 xaxis: {
5367786dc871 Uploaded
greg
parents:
diff changeset
1664 min: 0,
5367786dc871 Uploaded
greg
parents:
diff changeset
1665 max: 100,
5367786dc871 Uploaded
greg
parents:
diff changeset
1666 lineWidth: 0.5,
5367786dc871 Uploaded
greg
parents:
diff changeset
1667 color: '#000',
5367786dc871 Uploaded
greg
parents:
diff changeset
1668 tickFormatter: function (val, axis) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1669 if (val == 100) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1670 return '&nbsp;100% GC'
5367786dc871 Uploaded
greg
parents:
diff changeset
1671 } else {
5367786dc871 Uploaded
greg
parents:
diff changeset
1672 return val;
5367786dc871 Uploaded
greg
parents:
diff changeset
1673 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1674 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1675 },
5367786dc871 Uploaded
greg
parents:
diff changeset
1676 minTickSize: 1
5367786dc871 Uploaded
greg
parents:
diff changeset
1677 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1678 );
5367786dc871 Uploaded
greg
parents:
diff changeset
1679
5367786dc871 Uploaded
greg
parents:
diff changeset
1680 var firstLabel = $('.yAxis .tickLabel').last();
5367786dc871 Uploaded
greg
parents:
diff changeset
1681 firstLabel.append(' windows');
5367786dc871 Uploaded
greg
parents:
diff changeset
1682 bindTip(gc.placeholder, series, gc.plot, toPrettyString, 1, '%<span class="rhs">&nbsp;</span>GC', 'top right');
5367786dc871 Uploaded
greg
parents:
diff changeset
1683 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1684
5367786dc871 Uploaded
greg
parents:
diff changeset
1685
5367786dc871 Uploaded
greg
parents:
diff changeset
1686 function showInLogarithmicScaleWithData(series, colors) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1687 if (series == null || gc.maxY == null || gc.minPow == null) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1688 return;
5367786dc871 Uploaded
greg
parents:
diff changeset
1689 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1690
5367786dc871 Uploaded
greg
parents:
diff changeset
1691 gc.yAxisLabeled = false;
5367786dc871 Uploaded
greg
parents:
diff changeset
1692
5367786dc871 Uploaded
greg
parents:
diff changeset
1693 gc.plot = $.plot(gc.placeholder, series, {
5367786dc871 Uploaded
greg
parents:
diff changeset
1694 shadowSize: 0,
5367786dc871 Uploaded
greg
parents:
diff changeset
1695 colors: colors,
5367786dc871 Uploaded
greg
parents:
diff changeset
1696 legend: {
5367786dc871 Uploaded
greg
parents:
diff changeset
1697 container: $('useless-invisible-element-that-does-not-even-exist'),
5367786dc871 Uploaded
greg
parents:
diff changeset
1698 },
5367786dc871 Uploaded
greg
parents:
diff changeset
1699 grid: {
5367786dc871 Uploaded
greg
parents:
diff changeset
1700 hoverable: true,
5367786dc871 Uploaded
greg
parents:
diff changeset
1701 borderWidth: 1,
5367786dc871 Uploaded
greg
parents:
diff changeset
1702 autoHighlight: false,
5367786dc871 Uploaded
greg
parents:
diff changeset
1703 mouseActiveRadius: 1000
5367786dc871 Uploaded
greg
parents:
diff changeset
1704 },
5367786dc871 Uploaded
greg
parents:
diff changeset
1705 yaxis: {
5367786dc871 Uploaded
greg
parents:
diff changeset
1706 min: Math.pow(10, gc.minPow),
5367786dc871 Uploaded
greg
parents:
diff changeset
1707 // max: gc.maxY,
5367786dc871 Uploaded
greg
parents:
diff changeset
1708 labelWidth: 120,
5367786dc871 Uploaded
greg
parents:
diff changeset
1709 reserveSpace: true,
5367786dc871 Uploaded
greg
parents:
diff changeset
1710 lineWidth: 0.5,
5367786dc871 Uploaded
greg
parents:
diff changeset
1711 color: '#000',
5367786dc871 Uploaded
greg
parents:
diff changeset
1712 tickFormatter: windowsTickFormatter,
5367786dc871 Uploaded
greg
parents:
diff changeset
1713 minTickSize: 1,
5367786dc871 Uploaded
greg
parents:
diff changeset
1714 ticks: gc.ticks,
5367786dc871 Uploaded
greg
parents:
diff changeset
1715
5367786dc871 Uploaded
greg
parents:
diff changeset
1716 transform: function(v) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1717 return Math.log(v + 0.0001)/*move away from zero*/ / Math.log(10);
5367786dc871 Uploaded
greg
parents:
diff changeset
1718 },
5367786dc871 Uploaded
greg
parents:
diff changeset
1719 inverseTransform: function(v) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1720 return Math.pow(v, 10);
5367786dc871 Uploaded
greg
parents:
diff changeset
1721 },
5367786dc871 Uploaded
greg
parents:
diff changeset
1722 tickDecimals: 3
5367786dc871 Uploaded
greg
parents:
diff changeset
1723 },
5367786dc871 Uploaded
greg
parents:
diff changeset
1724 xaxis: {
5367786dc871 Uploaded
greg
parents:
diff changeset
1725 min: 0,
5367786dc871 Uploaded
greg
parents:
diff changeset
1726 max: 100,
5367786dc871 Uploaded
greg
parents:
diff changeset
1727 lineWidth: 0.5,
5367786dc871 Uploaded
greg
parents:
diff changeset
1728 color: '#000',
5367786dc871 Uploaded
greg
parents:
diff changeset
1729 tickFormatter: function (val, axis) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1730 if (val == 100) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1731 return '&nbsp;100%<span class="rhs">&nbsp;</span>GC'
5367786dc871 Uploaded
greg
parents:
diff changeset
1732 } else {
5367786dc871 Uploaded
greg
parents:
diff changeset
1733 return val;
5367786dc871 Uploaded
greg
parents:
diff changeset
1734 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1735 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1736 },
5367786dc871 Uploaded
greg
parents:
diff changeset
1737 minTickSize: 1
5367786dc871 Uploaded
greg
parents:
diff changeset
1738 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1739 );
5367786dc871 Uploaded
greg
parents:
diff changeset
1740
5367786dc871 Uploaded
greg
parents:
diff changeset
1741 var firstLabel = $('.yAxis .tickLabel').last();
5367786dc871 Uploaded
greg
parents:
diff changeset
1742 firstLabel.append(' windows');
5367786dc871 Uploaded
greg
parents:
diff changeset
1743 bindTip(gc.placeholder, series, gc.plot, toPrettyString, 1, '% GC', 'top right');
5367786dc871 Uploaded
greg
parents:
diff changeset
1744 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1745
5367786dc871 Uploaded
greg
parents:
diff changeset
1746
5367786dc871 Uploaded
greg
parents:
diff changeset
1747 function setLogScale() {
5367786dc871 Uploaded
greg
parents:
diff changeset
1748 gc.normal_scale_el = normal_scale_a;
5367786dc871 Uploaded
greg
parents:
diff changeset
1749 gc.log_scale_el = log_scale_span;
5367786dc871 Uploaded
greg
parents:
diff changeset
1750 gc.showWithData = showInLogarithmicScaleWithData;
5367786dc871 Uploaded
greg
parents:
diff changeset
1751
5367786dc871 Uploaded
greg
parents:
diff changeset
1752 $('#normal_scale_label').html(gc.normal_scale_el);
5367786dc871 Uploaded
greg
parents:
diff changeset
1753 $('#log_scale_label').html(gc.log_scale_el);
5367786dc871 Uploaded
greg
parents:
diff changeset
1754 showPlotWithInfo(gc, 0);
5367786dc871 Uploaded
greg
parents:
diff changeset
1755 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1756
5367786dc871 Uploaded
greg
parents:
diff changeset
1757
5367786dc871 Uploaded
greg
parents:
diff changeset
1758 function setNormalScale() {
5367786dc871 Uploaded
greg
parents:
diff changeset
1759 gc.normal_scale_el = normal_scale_span;
5367786dc871 Uploaded
greg
parents:
diff changeset
1760 gc.log_scale_el = log_scale_a;
5367786dc871 Uploaded
greg
parents:
diff changeset
1761 gc.showWithData = showInNormalScaleWithData;
5367786dc871 Uploaded
greg
parents:
diff changeset
1762
5367786dc871 Uploaded
greg
parents:
diff changeset
1763 $('#normal_scale_label').html(gc.normal_scale_el);
5367786dc871 Uploaded
greg
parents:
diff changeset
1764 $('#log_scale_label').html(gc.log_scale_el);
5367786dc871 Uploaded
greg
parents:
diff changeset
1765 showPlotWithInfo(gc, 0);
5367786dc871 Uploaded
greg
parents:
diff changeset
1766 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1767
5367786dc871 Uploaded
greg
parents:
diff changeset
1768
5367786dc871 Uploaded
greg
parents:
diff changeset
1769
5367786dc871 Uploaded
greg
parents:
diff changeset
1770 function filterAndSumGcInfo(GC_info, condition) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1771 var contigs_lengths_cur_bin = [];
5367786dc871 Uploaded
greg
parents:
diff changeset
1772 for (var j = 0; j < GC_info.length; j++) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1773 var GC = GC_info[j];
5367786dc871 Uploaded
greg
parents:
diff changeset
1774 var contig_length = GC[0];
5367786dc871 Uploaded
greg
parents:
diff changeset
1775 var GC_percent = GC[1];
5367786dc871 Uploaded
greg
parents:
diff changeset
1776
5367786dc871 Uploaded
greg
parents:
diff changeset
1777 if (condition(GC_percent) == true) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1778 contigs_lengths_cur_bin.push(contig_length);
5367786dc871 Uploaded
greg
parents:
diff changeset
1779 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1780 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1781 var val_bp = 0;
5367786dc871 Uploaded
greg
parents:
diff changeset
1782 for (var j = 0; j < contigs_lengths_cur_bin.length; j++) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1783 val_bp += contigs_lengths_cur_bin[j];
5367786dc871 Uploaded
greg
parents:
diff changeset
1784 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1785 return val_bp;
5367786dc871 Uploaded
greg
parents:
diff changeset
1786 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1787
5367786dc871 Uploaded
greg
parents:
diff changeset
1788 function createLegend(labels, colors, index, reference) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1789 var selectedAssemblies = getSelectedAssemblies(labels);
5367786dc871 Uploaded
greg
parents:
diff changeset
1790 $('#legend-placeholder').empty();
5367786dc871 Uploaded
greg
parents:
diff changeset
1791 var selectors = "";
5367786dc871 Uploaded
greg
parents:
diff changeset
1792
5367786dc871 Uploaded
greg
parents:
diff changeset
1793 labels.forEach(function(label, i) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1794 var link = index ? '' : '<span id="' + labels[i] + '-switch"' + "class='plot-gc-type-switch dotted-link'>by contigs<br></span><br>";
5367786dc871 Uploaded
greg
parents:
diff changeset
1795 var assemblyIdx = gc.filenames.indexOf(label);
5367786dc871 Uploaded
greg
parents:
diff changeset
1796 addLabelToLegend(assemblyIdx, label, selectedAssemblies, colors, link);
5367786dc871 Uploaded
greg
parents:
diff changeset
1797 });
5367786dc871 Uploaded
greg
parents:
diff changeset
1798 if (reference) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1799 isChecked = (selectedAssemblies.length > 0 && selectedAssemblies.indexOf(gc.filenames.length.toString())) != -1 ? 'checked="checked"' : "";
5367786dc871 Uploaded
greg
parents:
diff changeset
1800 $('#legend-placeholder').append(
5367786dc871 Uploaded
greg
parents:
diff changeset
1801 '<div id="reference-label">' +
5367786dc871 Uploaded
greg
parents:
diff changeset
1802 '<label for="reference" style="color: #000000;">' +
5367786dc871 Uploaded
greg
parents:
diff changeset
1803 '<input type="checkbox" name="' + gc.filenames.length +
5367786dc871 Uploaded
greg
parents:
diff changeset
1804 '" checked="' + isChecked + '" id="reference">&nbsp;' + 'reference' +
5367786dc871 Uploaded
greg
parents:
diff changeset
1805 '</label>' +
5367786dc871 Uploaded
greg
parents:
diff changeset
1806 '</div>'
5367786dc871 Uploaded
greg
parents:
diff changeset
1807 );
5367786dc871 Uploaded
greg
parents:
diff changeset
1808 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1809 if (index > 0) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1810 for (var filenames_n = 0; filenames_n < gc.filenames.length; filenames_n++){
5367786dc871 Uploaded
greg
parents:
diff changeset
1811 selectors += '<br><span id="' + gc.filenames[filenames_n] + '-switch" ' +
5367786dc871 Uploaded
greg
parents:
diff changeset
1812 "class='plot-switch dotted-link'>" +
5367786dc871 Uploaded
greg
parents:
diff changeset
1813 gc.filenames[filenames_n] + "</span>";
5367786dc871 Uploaded
greg
parents:
diff changeset
1814 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1815 $('#legend-placeholder').append(
5367786dc871 Uploaded
greg
parents:
diff changeset
1816 "<br><br><div id='change-assembly' style='margin-right: 3px;'>" +
5367786dc871 Uploaded
greg
parents:
diff changeset
1817 "<span id='show_all_label'>" +
5367786dc871 Uploaded
greg
parents:
diff changeset
1818 gc.show_all_el +
5367786dc871 Uploaded
greg
parents:
diff changeset
1819 "</span><br>" + selectors +
5367786dc871 Uploaded
greg
parents:
diff changeset
1820 "</div>"
5367786dc871 Uploaded
greg
parents:
diff changeset
1821 );
5367786dc871 Uploaded
greg
parents:
diff changeset
1822 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1823 addLinksToSwitches(index - 1);
5367786dc871 Uploaded
greg
parents:
diff changeset
1824 addLegendClickEvents(gc, gc.series.length, showPlotWithInfo, false, index);
5367786dc871 Uploaded
greg
parents:
diff changeset
1825 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1826
5367786dc871 Uploaded
greg
parents:
diff changeset
1827 function addLinksToSwitches(index) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1828 var filenames = gc.filenames;
5367786dc871 Uploaded
greg
parents:
diff changeset
1829 for (filenames_n = 0; filenames_n < filenames.length; filenames_n++){
5367786dc871 Uploaded
greg
parents:
diff changeset
1830 var switchSpan = document.getElementById(filenames[filenames_n] + "-switch");
5367786dc871 Uploaded
greg
parents:
diff changeset
1831 $(switchSpan).click(getToggleSwitchFunction(filenames_n + 1));
5367786dc871 Uploaded
greg
parents:
diff changeset
1832 if (filenames_n == index) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1833 switchSpan.className = 'plot-switch selected-switch gc';
5367786dc871 Uploaded
greg
parents:
diff changeset
1834 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1835 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1836 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1837
5367786dc871 Uploaded
greg
parents:
diff changeset
1838 function getToggleSwitchFunction(index) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1839 return function() {
5367786dc871 Uploaded
greg
parents:
diff changeset
1840 if (index > 0) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1841 showPlot(index);
5367786dc871 Uploaded
greg
parents:
diff changeset
1842 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1843 else {
5367786dc871 Uploaded
greg
parents:
diff changeset
1844 showAll();
5367786dc871 Uploaded
greg
parents:
diff changeset
1845 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1846 };
5367786dc871 Uploaded
greg
parents:
diff changeset
1847 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1848 </script>
5367786dc871 Uploaded
greg
parents:
diff changeset
1849
5367786dc871 Uploaded
greg
parents:
diff changeset
1850 <script type="text/javascript">
5367786dc871 Uploaded
greg
parents:
diff changeset
1851
5367786dc871 Uploaded
greg
parents:
diff changeset
1852 var frc = {
5367786dc871 Uploaded
greg
parents:
diff changeset
1853 genes: {
5367786dc871 Uploaded
greg
parents:
diff changeset
1854 isInitialized: false,
5367786dc871 Uploaded
greg
parents:
diff changeset
1855
5367786dc871 Uploaded
greg
parents:
diff changeset
1856 maxY: 0,
5367786dc871 Uploaded
greg
parents:
diff changeset
1857 maxYTick: 0,
5367786dc871 Uploaded
greg
parents:
diff changeset
1858 series: null,
5367786dc871 Uploaded
greg
parents:
diff changeset
1859 showWithData: null,
5367786dc871 Uploaded
greg
parents:
diff changeset
1860
5367786dc871 Uploaded
greg
parents:
diff changeset
1861 yAxisLabeled: false
5367786dc871 Uploaded
greg
parents:
diff changeset
1862 },
5367786dc871 Uploaded
greg
parents:
diff changeset
1863
5367786dc871 Uploaded
greg
parents:
diff changeset
1864 operons: {
5367786dc871 Uploaded
greg
parents:
diff changeset
1865 isInitialized: false,
5367786dc871 Uploaded
greg
parents:
diff changeset
1866
5367786dc871 Uploaded
greg
parents:
diff changeset
1867 maxY: 0,
5367786dc871 Uploaded
greg
parents:
diff changeset
1868 maxYTick: 0,
5367786dc871 Uploaded
greg
parents:
diff changeset
1869 series: null,
5367786dc871 Uploaded
greg
parents:
diff changeset
1870 showWithData: null,
5367786dc871 Uploaded
greg
parents:
diff changeset
1871
5367786dc871 Uploaded
greg
parents:
diff changeset
1872 yAxisLabeled: false
5367786dc871 Uploaded
greg
parents:
diff changeset
1873 },
5367786dc871 Uploaded
greg
parents:
diff changeset
1874
5367786dc871 Uploaded
greg
parents:
diff changeset
1875 misassemblies: {
5367786dc871 Uploaded
greg
parents:
diff changeset
1876 isInitialized: false,
5367786dc871 Uploaded
greg
parents:
diff changeset
1877
5367786dc871 Uploaded
greg
parents:
diff changeset
1878 maxY: 0,
5367786dc871 Uploaded
greg
parents:
diff changeset
1879 maxYTick: 0,
5367786dc871 Uploaded
greg
parents:
diff changeset
1880 series: null,
5367786dc871 Uploaded
greg
parents:
diff changeset
1881 showWithData: null,
5367786dc871 Uploaded
greg
parents:
diff changeset
1882
5367786dc871 Uploaded
greg
parents:
diff changeset
1883 yAxisLabeled: false
5367786dc871 Uploaded
greg
parents:
diff changeset
1884 },
5367786dc871 Uploaded
greg
parents:
diff changeset
1885
5367786dc871 Uploaded
greg
parents:
diff changeset
1886 draw: function (name, title, colors, filenames, data, refGenesNumber, tickX,
5367786dc871 Uploaded
greg
parents:
diff changeset
1887 placeholder, legendPlaceholder, glossary, order, scalePlaceholder) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1888 // div.html(
5367786dc871 Uploaded
greg
parents:
diff changeset
1889 // "<span class='plot-header'>" + kind[0].toUpperCase() + kind.slice(1) + "s covered</span>" +
5367786dc871 Uploaded
greg
parents:
diff changeset
1890 // "<div class='plot-placeholder' id='" + kind + "s-plot-placeholder'></div>"
5367786dc871 Uploaded
greg
parents:
diff changeset
1891 // );
5367786dc871 Uploaded
greg
parents:
diff changeset
1892 $(scalePlaceholder).empty();
5367786dc871 Uploaded
greg
parents:
diff changeset
1893
5367786dc871 Uploaded
greg
parents:
diff changeset
1894 var info = frc[name];
5367786dc871 Uploaded
greg
parents:
diff changeset
1895 var coordX = data.coord_x;
5367786dc871 Uploaded
greg
parents:
diff changeset
1896 var coordY = data.coord_y;
5367786dc871 Uploaded
greg
parents:
diff changeset
1897
5367786dc871 Uploaded
greg
parents:
diff changeset
1898 info.yAxisLabeled = false;
5367786dc871 Uploaded
greg
parents:
diff changeset
1899 var cur_filenames = data.filenames;
5367786dc871 Uploaded
greg
parents:
diff changeset
1900 if (!info.isInitialized) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1901 var plotsN = cur_filenames.length;
5367786dc871 Uploaded
greg
parents:
diff changeset
1902 info.series = new Array(plotsN);
5367786dc871 Uploaded
greg
parents:
diff changeset
1903
5367786dc871 Uploaded
greg
parents:
diff changeset
1904 info.maxY = 0;
5367786dc871 Uploaded
greg
parents:
diff changeset
1905 info.maxX = 0;
5367786dc871 Uploaded
greg
parents:
diff changeset
1906
5367786dc871 Uploaded
greg
parents:
diff changeset
1907 for (var i = 0; i < plotsN; i++) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1908 var index = $.inArray(cur_filenames[order[i]], filenames);
5367786dc871 Uploaded
greg
parents:
diff changeset
1909 var plot_coordX = coordX[order[i]];
5367786dc871 Uploaded
greg
parents:
diff changeset
1910 var plot_coordY = coordY[order[i]];
5367786dc871 Uploaded
greg
parents:
diff changeset
1911 var featureSpace = plot_coordX[plot_coordX.length - 1];
5367786dc871 Uploaded
greg
parents:
diff changeset
1912 var maxY = plot_coordY[plot_coordY.length - 1];
5367786dc871 Uploaded
greg
parents:
diff changeset
1913
5367786dc871 Uploaded
greg
parents:
diff changeset
1914 info.series[i] = {
5367786dc871 Uploaded
greg
parents:
diff changeset
1915 data: [],
5367786dc871 Uploaded
greg
parents:
diff changeset
1916 label: filenames[index],
5367786dc871 Uploaded
greg
parents:
diff changeset
1917 number: index,
5367786dc871 Uploaded
greg
parents:
diff changeset
1918 color: colors[index]
5367786dc871 Uploaded
greg
parents:
diff changeset
1919 };
5367786dc871 Uploaded
greg
parents:
diff changeset
1920
5367786dc871 Uploaded
greg
parents:
diff changeset
1921 info.series[i].data.push([0.0, plot_coordY[0]]);
5367786dc871 Uploaded
greg
parents:
diff changeset
1922
5367786dc871 Uploaded
greg
parents:
diff changeset
1923 if (featureSpace > info.maxX) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1924 info.maxX = featureSpace;
5367786dc871 Uploaded
greg
parents:
diff changeset
1925 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1926 for (var k = 0; k < plot_coordX.length; k++) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1927 info.series[i].data.push([plot_coordX[k], plot_coordY[k]]);
5367786dc871 Uploaded
greg
parents:
diff changeset
1928 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1929
5367786dc871 Uploaded
greg
parents:
diff changeset
1930 if (maxY > info.maxY) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1931 info.maxY = maxY;
5367786dc871 Uploaded
greg
parents:
diff changeset
1932 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1933 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1934
5367786dc871 Uploaded
greg
parents:
diff changeset
1935 for (i = 0; i < plotsN; i++) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1936 if (typeof broken_scaffolds_labels !== undefined && $.inArray(filenames[order[i]], broken_scaffolds_labels) != -1) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1937 info.series[i].dashes = {
5367786dc871 Uploaded
greg
parents:
diff changeset
1938 show: true,
5367786dc871 Uploaded
greg
parents:
diff changeset
1939 lineWidth: 1
5367786dc871 Uploaded
greg
parents:
diff changeset
1940 };
5367786dc871 Uploaded
greg
parents:
diff changeset
1941 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1942 else {
5367786dc871 Uploaded
greg
parents:
diff changeset
1943 info.series[i].lines = {
5367786dc871 Uploaded
greg
parents:
diff changeset
1944 show: true,
5367786dc871 Uploaded
greg
parents:
diff changeset
1945 lineWidth: 1
5367786dc871 Uploaded
greg
parents:
diff changeset
1946 };
5367786dc871 Uploaded
greg
parents:
diff changeset
1947 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1948 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1949
5367786dc871 Uploaded
greg
parents:
diff changeset
1950 info.showWithData = function(series, colors) {
5367786dc871 Uploaded
greg
parents:
diff changeset
1951 var plot = $.plot(placeholder, series, {
5367786dc871 Uploaded
greg
parents:
diff changeset
1952 shadowSize: 0,
5367786dc871 Uploaded
greg
parents:
diff changeset
1953 colors: colors,
5367786dc871 Uploaded
greg
parents:
diff changeset
1954 legend: {
5367786dc871 Uploaded
greg
parents:
diff changeset
1955 container: $('useless-invisible-element-that-does-not-even-exist')
5367786dc871 Uploaded
greg
parents:
diff changeset
1956 },
5367786dc871 Uploaded
greg
parents:
diff changeset
1957 grid: {
5367786dc871 Uploaded
greg
parents:
diff changeset
1958 borderWidth: 1,
5367786dc871 Uploaded
greg
parents:
diff changeset
1959 hoverable: true,
5367786dc871 Uploaded
greg
parents:
diff changeset
1960 autoHighlight: false,
5367786dc871 Uploaded
greg
parents:
diff changeset
1961 mouseActiveRadius: 1000,
5367786dc871 Uploaded
greg
parents:
diff changeset
1962 },
5367786dc871 Uploaded
greg
parents:
diff changeset
1963 yaxis: {
5367786dc871 Uploaded
greg
parents:
diff changeset
1964 min: 0,
5367786dc871 Uploaded
greg
parents:
diff changeset
1965 max: Math.max(100, info.maxY),
5367786dc871 Uploaded
greg
parents:
diff changeset
1966 labelWidth: 145,
5367786dc871 Uploaded
greg
parents:
diff changeset
1967 reserveSpace: true,
5367786dc871 Uploaded
greg
parents:
diff changeset
1968 lineWidth: 0.5,
5367786dc871 Uploaded
greg
parents:
diff changeset
1969 color: '#000',
5367786dc871 Uploaded
greg
parents:
diff changeset
1970 tickFormatter: getPercentTickFormatter(Math.max(100, info.maxY)),
5367786dc871 Uploaded
greg
parents:
diff changeset
1971 minTickSize: 1
5367786dc871 Uploaded
greg
parents:
diff changeset
1972 },
5367786dc871 Uploaded
greg
parents:
diff changeset
1973 xaxis: {
5367786dc871 Uploaded
greg
parents:
diff changeset
1974 min: 0,
5367786dc871 Uploaded
greg
parents:
diff changeset
1975 max: info.maxX,
5367786dc871 Uploaded
greg
parents:
diff changeset
1976 lineWidth: 0.5,
5367786dc871 Uploaded
greg
parents:
diff changeset
1977 color: '#000',
5367786dc871 Uploaded
greg
parents:
diff changeset
1978 tickFormatter: getJustNumberTickFormatter(info.maxX, ' ' + name),
5367786dc871 Uploaded
greg
parents:
diff changeset
1979 minTickSize: tickX
5367786dc871 Uploaded
greg
parents:
diff changeset
1980 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1981 });
5367786dc871 Uploaded
greg
parents:
diff changeset
1982
5367786dc871 Uploaded
greg
parents:
diff changeset
1983 var firstLabel = $('.yAxis .tickLabel').last();
5367786dc871 Uploaded
greg
parents:
diff changeset
1984 firstLabel.prepend('Genome coverage<span class="rhs">&nbsp;</span>=<span class="rhs">&nbsp;</span>');
5367786dc871 Uploaded
greg
parents:
diff changeset
1985
5367786dc871 Uploaded
greg
parents:
diff changeset
1986 bindTip(placeholder, series, plot, frcNumberToPrettyString, tickX, name, 'bottom right', false, '%');
5367786dc871 Uploaded
greg
parents:
diff changeset
1987 };
5367786dc871 Uploaded
greg
parents:
diff changeset
1988
5367786dc871 Uploaded
greg
parents:
diff changeset
1989 info.isInitialized = true;
5367786dc871 Uploaded
greg
parents:
diff changeset
1990 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1991
5367786dc871 Uploaded
greg
parents:
diff changeset
1992 addLegendClickEvents(info, filenames.length, showPlotWithInfo, refGenesNumber);
5367786dc871 Uploaded
greg
parents:
diff changeset
1993 showPlotWithInfo(info);
5367786dc871 Uploaded
greg
parents:
diff changeset
1994 $('#frc_info').show();
5367786dc871 Uploaded
greg
parents:
diff changeset
1995 $('.frc_plot_name').html(name);
5367786dc871 Uploaded
greg
parents:
diff changeset
1996 }
5367786dc871 Uploaded
greg
parents:
diff changeset
1997 };
5367786dc871 Uploaded
greg
parents:
diff changeset
1998
5367786dc871 Uploaded
greg
parents:
diff changeset
1999
5367786dc871 Uploaded
greg
parents:
diff changeset
2000
5367786dc871 Uploaded
greg
parents:
diff changeset
2001 </script>
5367786dc871 Uploaded
greg
parents:
diff changeset
2002
5367786dc871 Uploaded
greg
parents:
diff changeset
2003 <script type="text/javascript">
5367786dc871 Uploaded
greg
parents:
diff changeset
2004
5367786dc871 Uploaded
greg
parents:
diff changeset
2005 /**********/
5367786dc871 Uploaded
greg
parents:
diff changeset
2006 /* COLORS */
5367786dc871 Uploaded
greg
parents:
diff changeset
2007
5367786dc871 Uploaded
greg
parents:
diff changeset
2008 // var colors = ["#FF5900", "#008FFF", "#168A16", "#7C00FF", "#00B7FF", "#FF0080", "#7AE01B", "#782400", "#E01B6A"];
5367786dc871 Uploaded
greg
parents:
diff changeset
2009 var standard_colors = [
5367786dc871 Uploaded
greg
parents:
diff changeset
2010 '#FF0000', //red
5367786dc871 Uploaded
greg
parents:
diff changeset
2011 '#0000FF', //blue
5367786dc871 Uploaded
greg
parents:
diff changeset
2012 '#008000', //green
5367786dc871 Uploaded
greg
parents:
diff changeset
2013 '#FFA500', //orange
5367786dc871 Uploaded
greg
parents:
diff changeset
2014 '#FF00FF', //fushua
5367786dc871 Uploaded
greg
parents:
diff changeset
2015 '#CCCC00', //yellow
5367786dc871 Uploaded
greg
parents:
diff changeset
2016 '#800000', //maroon
5367786dc871 Uploaded
greg
parents:
diff changeset
2017 '#00CCCC', //aqua
5367786dc871 Uploaded
greg
parents:
diff changeset
2018 '#808080', //gray
5367786dc871 Uploaded
greg
parents:
diff changeset
2019 '#800080', //purple
5367786dc871 Uploaded
greg
parents:
diff changeset
2020 '#808000', //olive
5367786dc871 Uploaded
greg
parents:
diff changeset
2021 '#000080', //navy
5367786dc871 Uploaded
greg
parents:
diff changeset
2022 '#008080', //team
5367786dc871 Uploaded
greg
parents:
diff changeset
2023 '#00FF00', //lime
5367786dc871 Uploaded
greg
parents:
diff changeset
2024 ];
5367786dc871 Uploaded
greg
parents:
diff changeset
2025
5367786dc871 Uploaded
greg
parents:
diff changeset
2026 function distinctColors(count) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2027 var colors = [];
5367786dc871 Uploaded
greg
parents:
diff changeset
2028 for(var hue = 0; hue < 360; hue += 360 / count) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2029 var color = hsvToRgb(hue, 100, 100);
5367786dc871 Uploaded
greg
parents:
diff changeset
2030 var colorStr = '#' + color[0].toString(16) + color[1].toString(16) + color[2].toString(16);
5367786dc871 Uploaded
greg
parents:
diff changeset
2031 colors.push();
5367786dc871 Uploaded
greg
parents:
diff changeset
2032 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2033 return colors;
5367786dc871 Uploaded
greg
parents:
diff changeset
2034 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2035
5367786dc871 Uploaded
greg
parents:
diff changeset
2036 /**************/
5367786dc871 Uploaded
greg
parents:
diff changeset
2037 /* FORMATTING */
5367786dc871 Uploaded
greg
parents:
diff changeset
2038 function isIntegral(num) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2039 return num % 1 === 0;
5367786dc871 Uploaded
greg
parents:
diff changeset
2040 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2041
5367786dc871 Uploaded
greg
parents:
diff changeset
2042 function isFractional(num) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2043 return !isIntegral(num);
5367786dc871 Uploaded
greg
parents:
diff changeset
2044 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2045
5367786dc871 Uploaded
greg
parents:
diff changeset
2046 function getIntervalToPrettyString(interval) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2047 return function(num, unit) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2048 return intervalToPrettyString(interval, num, unit);
5367786dc871 Uploaded
greg
parents:
diff changeset
2049 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2050 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2051
5367786dc871 Uploaded
greg
parents:
diff changeset
2052 function intervalToPrettyString(interval, num, unit) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2053 if (typeof num === 'number') {
5367786dc871 Uploaded
greg
parents:
diff changeset
2054 var str = toPrettyString(num);
5367786dc871 Uploaded
greg
parents:
diff changeset
2055 str += '-' + toPrettyString(num + interval);
5367786dc871 Uploaded
greg
parents:
diff changeset
2056 str += (unit ? '<span class="rhs">&nbsp;</span>' + unit : '');
5367786dc871 Uploaded
greg
parents:
diff changeset
2057 return str;
5367786dc871 Uploaded
greg
parents:
diff changeset
2058 } else {
5367786dc871 Uploaded
greg
parents:
diff changeset
2059 return num;
5367786dc871 Uploaded
greg
parents:
diff changeset
2060 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2061 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2062
5367786dc871 Uploaded
greg
parents:
diff changeset
2063 function toPrettyString(num, unit) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2064 if (typeof num === 'number') {
5367786dc871 Uploaded
greg
parents:
diff changeset
2065 var str;
5367786dc871 Uploaded
greg
parents:
diff changeset
2066 if (num <= 9999) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2067 if (isFractional(num)) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2068 if (isIntegral(num * 10)) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2069 str = num.toFixed(1);
5367786dc871 Uploaded
greg
parents:
diff changeset
2070 } else if (isIntegral(num * 100) || num >= 100) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2071 str = num.toFixed(2);
5367786dc871 Uploaded
greg
parents:
diff changeset
2072 } else {
5367786dc871 Uploaded
greg
parents:
diff changeset
2073 str = num.toFixed(3);
5367786dc871 Uploaded
greg
parents:
diff changeset
2074 if (str.slice(-1) == '0')
5367786dc871 Uploaded
greg
parents:
diff changeset
2075 str = str.slice(0, -1);
5367786dc871 Uploaded
greg
parents:
diff changeset
2076 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2077 } else {
5367786dc871 Uploaded
greg
parents:
diff changeset
2078 str = num.toFixed(0);
5367786dc871 Uploaded
greg
parents:
diff changeset
2079 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2080 } else {
5367786dc871 Uploaded
greg
parents:
diff changeset
2081 str = num.toFixed(0).replace(/(\d)(?=(\d\d\d)+(?!\d))/g,'$1<span class="hs"></span>');
5367786dc871 Uploaded
greg
parents:
diff changeset
2082 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2083 str += (unit ? '<span class="rhs">&nbsp;</span>' + unit : '');
5367786dc871 Uploaded
greg
parents:
diff changeset
2084 return str;
5367786dc871 Uploaded
greg
parents:
diff changeset
2085 } else {
5367786dc871 Uploaded
greg
parents:
diff changeset
2086 return num;
5367786dc871 Uploaded
greg
parents:
diff changeset
2087 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2088 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2089
5367786dc871 Uploaded
greg
parents:
diff changeset
2090 //elif isinstance(value, float):
5367786dc871 Uploaded
greg
parents:
diff changeset
2091 // if value == 0.0:
5367786dc871 Uploaded
greg
parents:
diff changeset
2092 // return '0'
5367786dc871 Uploaded
greg
parents:
diff changeset
2093 // if human_readable:
5367786dc871 Uploaded
greg
parents:
diff changeset
2094 // if unit == '%':
5367786dc871 Uploaded
greg
parents:
diff changeset
2095 // value *= 100
5367786dc871 Uploaded
greg
parents:
diff changeset
2096 // precision = 2
5367786dc871 Uploaded
greg
parents:
diff changeset
2097 // for i in range(10, 1, -1):
5367786dc871 Uploaded
greg
parents:
diff changeset
2098 // if abs(value) < 1./(10**i):
5367786dc871 Uploaded
greg
parents:
diff changeset
2099 // precision = i + 1
5367786dc871 Uploaded
greg
parents:
diff changeset
2100 // break
5367786dc871 Uploaded
greg
parents:
diff changeset
2101 // return '{value:.{precision}f}{unit_str}'.format(**locals())
5367786dc871 Uploaded
greg
parents:
diff changeset
2102 // else:
5367786dc871 Uploaded
greg
parents:
diff changeset
2103 // return str(value)
5367786dc871 Uploaded
greg
parents:
diff changeset
2104
5367786dc871 Uploaded
greg
parents:
diff changeset
2105
5367786dc871 Uploaded
greg
parents:
diff changeset
2106 function refToPrettyString(num, refs) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2107 return refs[Math.round(num)-1];
5367786dc871 Uploaded
greg
parents:
diff changeset
2108 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2109
5367786dc871 Uploaded
greg
parents:
diff changeset
2110 function ordinalNumberToPrettyString(num, unit, tickX) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2111 num = num * tickX;
5367786dc871 Uploaded
greg
parents:
diff changeset
2112 var numStr = num.toString();
5367786dc871 Uploaded
greg
parents:
diff changeset
2113 var lastDigit = numStr[numStr.length-1];
5367786dc871 Uploaded
greg
parents:
diff changeset
2114 var beforeLastDigit = numStr[numStr.length-2];
5367786dc871 Uploaded
greg
parents:
diff changeset
2115
5367786dc871 Uploaded
greg
parents:
diff changeset
2116 var res = toPrettyString(num);
5367786dc871 Uploaded
greg
parents:
diff changeset
2117
5367786dc871 Uploaded
greg
parents:
diff changeset
2118 if (lastDigit == '1' && beforeLastDigit != '1') {
5367786dc871 Uploaded
greg
parents:
diff changeset
2119 res += "st";
5367786dc871 Uploaded
greg
parents:
diff changeset
2120 } else if (lastDigit == '2' && beforeLastDigit != '1') {
5367786dc871 Uploaded
greg
parents:
diff changeset
2121 res += "nd";
5367786dc871 Uploaded
greg
parents:
diff changeset
2122 } else if (lastDigit == '3' && beforeLastDigit != '1') {
5367786dc871 Uploaded
greg
parents:
diff changeset
2123 res += "rd";
5367786dc871 Uploaded
greg
parents:
diff changeset
2124 } else {
5367786dc871 Uploaded
greg
parents:
diff changeset
2125 res += 'th';
5367786dc871 Uploaded
greg
parents:
diff changeset
2126 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2127
5367786dc871 Uploaded
greg
parents:
diff changeset
2128 res += (unit ? '<span class="rhs">&nbsp;</span>' + unit : '');
5367786dc871 Uploaded
greg
parents:
diff changeset
2129
5367786dc871 Uploaded
greg
parents:
diff changeset
2130 return res;
5367786dc871 Uploaded
greg
parents:
diff changeset
2131 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2132
5367786dc871 Uploaded
greg
parents:
diff changeset
2133 function frcNumberToPrettyString(num, unit, tickX, index) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2134 if (index % 2 == 0 && num > 0) num--;
5367786dc871 Uploaded
greg
parents:
diff changeset
2135 return toPrettyString(num) + ' ' + unit;
5367786dc871 Uploaded
greg
parents:
diff changeset
2136 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2137
5367786dc871 Uploaded
greg
parents:
diff changeset
2138 function getMaxDecimalTick(maxY) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2139 var maxYTick = maxY;
5367786dc871 Uploaded
greg
parents:
diff changeset
2140 if (maxY <= 100000000000) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2141 maxYTick = Math.ceil((maxY+1)/10000000000)*10000000000;
5367786dc871 Uploaded
greg
parents:
diff changeset
2142 } if (maxY <= 10000000000) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2143 maxYTick = Math.ceil((maxY+1)/1000000000)*1000000000;
5367786dc871 Uploaded
greg
parents:
diff changeset
2144 } if (maxY <= 1000000000) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2145 maxYTick = Math.ceil((maxY+1)/100000000)*100000000;
5367786dc871 Uploaded
greg
parents:
diff changeset
2146 } if (maxY <= 100000000) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2147 maxYTick = Math.ceil((maxY+1)/10000000)*10000000;
5367786dc871 Uploaded
greg
parents:
diff changeset
2148 } if (maxY <= 10000000) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2149 maxYTick = Math.ceil((maxY+1)/1000000)*1000000;
5367786dc871 Uploaded
greg
parents:
diff changeset
2150 } if (maxY <= 1000000) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2151 maxYTick = Math.ceil((maxY+1)/100000)*100000;
5367786dc871 Uploaded
greg
parents:
diff changeset
2152 } if (maxY <= 100000) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2153 maxYTick = Math.ceil((maxY+1)/10000)*10000;
5367786dc871 Uploaded
greg
parents:
diff changeset
2154 } if (maxY <= 10000) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2155 maxYTick = Math.ceil((maxY+1)/1000)*1000;
5367786dc871 Uploaded
greg
parents:
diff changeset
2156 } if (maxY <= 1000) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2157 maxYTick = Math.ceil((maxY+1)/100)*100.
5367786dc871 Uploaded
greg
parents:
diff changeset
2158 } if (maxY <= 100) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2159 maxYTick = Math.ceil((maxY+1)/10)*10.
5367786dc871 Uploaded
greg
parents:
diff changeset
2160 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2161 return maxYTick;
5367786dc871 Uploaded
greg
parents:
diff changeset
2162 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2163
5367786dc871 Uploaded
greg
parents:
diff changeset
2164 function getBpTickFormatter(maxY, additionalText) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2165 additionalText = additionalText || '';
5367786dc871 Uploaded
greg
parents:
diff changeset
2166
5367786dc871 Uploaded
greg
parents:
diff changeset
2167 return function(val, axis) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2168 var res;
5367786dc871 Uploaded
greg
parents:
diff changeset
2169 if (val == 0) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2170 res = 0;
5367786dc871 Uploaded
greg
parents:
diff changeset
2171
5367786dc871 Uploaded
greg
parents:
diff changeset
2172 } else if (axis.max >= 1000000) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2173 res = val / 1000000;
5367786dc871 Uploaded
greg
parents:
diff changeset
2174
5367786dc871 Uploaded
greg
parents:
diff changeset
2175 if (val > axis.max - 1 || val + axis.tickSize >= 1000000000) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2176 res = additionalText + toPrettyString(res, 'Mbp');
5367786dc871 Uploaded
greg
parents:
diff changeset
2177 } else {
5367786dc871 Uploaded
greg
parents:
diff changeset
2178 res = toPrettyString(res);
5367786dc871 Uploaded
greg
parents:
diff changeset
2179 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2180 } else if (axis.max >= 1000) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2181 res = val / 1000;
5367786dc871 Uploaded
greg
parents:
diff changeset
2182
5367786dc871 Uploaded
greg
parents:
diff changeset
2183 if (val > axis.max - 1 || val + axis.tickSize >= 1000000) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2184 res = additionalText + toPrettyString(res, 'kbp');
5367786dc871 Uploaded
greg
parents:
diff changeset
2185 } else {
5367786dc871 Uploaded
greg
parents:
diff changeset
2186 res = toPrettyString(res);
5367786dc871 Uploaded
greg
parents:
diff changeset
2187 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2188 } else if (axis.max >= 1) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2189 res = val;
5367786dc871 Uploaded
greg
parents:
diff changeset
2190
5367786dc871 Uploaded
greg
parents:
diff changeset
2191 if (val > axis.max - 1 || val + axis.tickSize >= 1000) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2192 res = additionalText + toPrettyString(res, 'bp');
5367786dc871 Uploaded
greg
parents:
diff changeset
2193 } else {
5367786dc871 Uploaded
greg
parents:
diff changeset
2194 res = toPrettyString(res);
5367786dc871 Uploaded
greg
parents:
diff changeset
2195 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2196 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2197 return res;
5367786dc871 Uploaded
greg
parents:
diff changeset
2198 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2199 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2200
5367786dc871 Uploaded
greg
parents:
diff changeset
2201 function windowsTickFormatter(v, axis) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2202 return toPrettyString(v);
5367786dc871 Uploaded
greg
parents:
diff changeset
2203 // var val = v.toFixed(0);
5367786dc871 Uploaded
greg
parents:
diff changeset
2204 // if (!gc.yAxisLabeled && val > gc.maxY) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2205 // gc.yAxisLabeled = true;
5367786dc871 Uploaded
greg
parents:
diff changeset
2206 // var res = val + ' window';
5367786dc871 Uploaded
greg
parents:
diff changeset
2207 // if (val > 1) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2208 // res += 's'
5367786dc871 Uploaded
greg
parents:
diff changeset
2209 // }
5367786dc871 Uploaded
greg
parents:
diff changeset
2210 // return res;
5367786dc871 Uploaded
greg
parents:
diff changeset
2211 // } else {
5367786dc871 Uploaded
greg
parents:
diff changeset
2212 // return val;
5367786dc871 Uploaded
greg
parents:
diff changeset
2213 // }
5367786dc871 Uploaded
greg
parents:
diff changeset
2214 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2215
5367786dc871 Uploaded
greg
parents:
diff changeset
2216 function getBpLogTickFormatter(maxY) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2217 return getBpTickFormatter(maxY);
5367786dc871 Uploaded
greg
parents:
diff changeset
2218 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2219
5367786dc871 Uploaded
greg
parents:
diff changeset
2220 function getContigNumberTickFormatter(maxX, tickX) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2221 return function (val, axis) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2222 if (typeof axis.tickSize == 'number' && val > maxX - axis.tickSize) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2223 return "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" + ordinalNumberToPrettyString(val, 'contig', tickX);
5367786dc871 Uploaded
greg
parents:
diff changeset
2224 } else {
5367786dc871 Uploaded
greg
parents:
diff changeset
2225 return val * tickX;
5367786dc871 Uploaded
greg
parents:
diff changeset
2226 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2227 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2228 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2229
5367786dc871 Uploaded
greg
parents:
diff changeset
2230 function getJustNumberTickFormatter(maxY, additionalText) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2231 return function (val, axis) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2232 additionalText = additionalText || '';
5367786dc871 Uploaded
greg
parents:
diff changeset
2233 if (val > axis.max - axis.tickSize) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2234 res = toPrettyString(val) + additionalText;
5367786dc871 Uploaded
greg
parents:
diff changeset
2235 } else {
5367786dc871 Uploaded
greg
parents:
diff changeset
2236 res = toPrettyString(val);
5367786dc871 Uploaded
greg
parents:
diff changeset
2237 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2238 return res;
5367786dc871 Uploaded
greg
parents:
diff changeset
2239 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2240 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2241
5367786dc871 Uploaded
greg
parents:
diff changeset
2242 function getPercentTickFormatter(maxY, additionalText) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2243 return function (val, axis) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2244 additionalText = additionalText || '';
5367786dc871 Uploaded
greg
parents:
diff changeset
2245 if (val > maxY + 1 || val == 100) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2246 res = additionalText + toPrettyString(val, '%');
5367786dc871 Uploaded
greg
parents:
diff changeset
2247 } else {
5367786dc871 Uploaded
greg
parents:
diff changeset
2248 res = toPrettyString(val);
5367786dc871 Uploaded
greg
parents:
diff changeset
2249 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2250 return res;
5367786dc871 Uploaded
greg
parents:
diff changeset
2251 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2252 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2253
5367786dc871 Uploaded
greg
parents:
diff changeset
2254 function trim(str) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2255 return str.replace(/^\s+/g, '');
5367786dc871 Uploaded
greg
parents:
diff changeset
2256 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2257
5367786dc871 Uploaded
greg
parents:
diff changeset
2258 function initial_spaces_to_nbsp(str, metricName) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2259 if (metricName.length > 0 && metricName[0] == ' ') {
5367786dc871 Uploaded
greg
parents:
diff changeset
2260 str = '&nbsp;&nbsp;&nbsp;' + str;
5367786dc871 Uploaded
greg
parents:
diff changeset
2261 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2262 return str;
5367786dc871 Uploaded
greg
parents:
diff changeset
2263 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2264
5367786dc871 Uploaded
greg
parents:
diff changeset
2265 function containsObject(obj, list) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2266 var i;
5367786dc871 Uploaded
greg
parents:
diff changeset
2267 for (i = 0; i < list.length; i++) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2268 if (list[i] === obj) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2269 return true;
5367786dc871 Uploaded
greg
parents:
diff changeset
2270 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2271 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2272
5367786dc871 Uploaded
greg
parents:
diff changeset
2273 return false;
5367786dc871 Uploaded
greg
parents:
diff changeset
2274 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2275
5367786dc871 Uploaded
greg
parents:
diff changeset
2276 function addLegendClickEvents(info, numLegendItems, showPlotWithInfo, showReference, index) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2277 if (showReference) numLegendItems++;
5367786dc871 Uploaded
greg
parents:
diff changeset
2278 for (var i = 0; i < numLegendItems; i++) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2279 $('#legend-placeholder input[name=' + i + ']').click(function() {
5367786dc871 Uploaded
greg
parents:
diff changeset
2280 showPlotWithInfo(info, index);
5367786dc871 Uploaded
greg
parents:
diff changeset
2281 });
5367786dc871 Uploaded
greg
parents:
diff changeset
2282 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2283 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2284
5367786dc871 Uploaded
greg
parents:
diff changeset
2285 /*********************/
5367786dc871 Uploaded
greg
parents:
diff changeset
2286 /* GLOSSARY TOOLTIPS */
5367786dc871 Uploaded
greg
parents:
diff changeset
2287 function addTooltipIfDefinitionExists(glossary, metricName) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2288 metricName = trim(metricName);
5367786dc871 Uploaded
greg
parents:
diff changeset
2289
5367786dc871 Uploaded
greg
parents:
diff changeset
2290 if (containsObject(metricName, Object.keys(glossary))) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2291 return '<a class="tooltip-link" rel="tooltip" title="' +
5367786dc871 Uploaded
greg
parents:
diff changeset
2292 metricName + ' ' + glossary[metricName] + '">' + metricName + '</a>';
5367786dc871 Uploaded
greg
parents:
diff changeset
2293 } else {
5367786dc871 Uploaded
greg
parents:
diff changeset
2294 return metricName;
5367786dc871 Uploaded
greg
parents:
diff changeset
2295 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2296 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2297
5367786dc871 Uploaded
greg
parents:
diff changeset
2298 /*************/
5367786dc871 Uploaded
greg
parents:
diff changeset
2299 /* PLOT TIPS */
5367786dc871 Uploaded
greg
parents:
diff changeset
2300 function bindTip(placeholder, series, plot, xToPrettyStringFunction, tickX, xUnit, position, summaryPlots, unitY) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2301 var prevPoint = null;
5367786dc871 Uploaded
greg
parents:
diff changeset
2302 var prevIndex = null;
5367786dc871 Uploaded
greg
parents:
diff changeset
2303
5367786dc871 Uploaded
greg
parents:
diff changeset
2304 $(placeholder).bind("plothover", function(event, pos, item) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2305 if (dragTable && dragTable.isDragging)
5367786dc871 Uploaded
greg
parents:
diff changeset
2306 return;
5367786dc871 Uploaded
greg
parents:
diff changeset
2307
5367786dc871 Uploaded
greg
parents:
diff changeset
2308 if (item) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2309 if (prevPoint != item.dataIndex || (summaryPlots && item.seriesIndex != prevIndex)) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2310 prevPoint = item.dataIndex;
5367786dc871 Uploaded
greg
parents:
diff changeset
2311 prevIndex = item.seriesIndex;
5367786dc871 Uploaded
greg
parents:
diff changeset
2312 var x = item.datapoint[0];
5367786dc871 Uploaded
greg
parents:
diff changeset
2313
5367786dc871 Uploaded
greg
parents:
diff changeset
2314 showTip(item.pageX, item.pageY, plot.offset(),
5367786dc871 Uploaded
greg
parents:
diff changeset
2315 plot.width(), plot.height(),
5367786dc871 Uploaded
greg
parents:
diff changeset
2316 series, item.seriesIndex, x, item.dataIndex,
5367786dc871 Uploaded
greg
parents:
diff changeset
2317 xToPrettyStringFunction(x, xUnit, tickX, item.dataIndex) + ':',
5367786dc871 Uploaded
greg
parents:
diff changeset
2318 position, summaryPlots, unitY);
5367786dc871 Uploaded
greg
parents:
diff changeset
2319 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2320 } else {
5367786dc871 Uploaded
greg
parents:
diff changeset
2321 $('#plot_tip').hide();
5367786dc871 Uploaded
greg
parents:
diff changeset
2322 $('#plot_tip_vertical_rule').hide();
5367786dc871 Uploaded
greg
parents:
diff changeset
2323 $('#plot_tip_horizontal_rule').hide();
5367786dc871 Uploaded
greg
parents:
diff changeset
2324 prevPoint = null;
5367786dc871 Uploaded
greg
parents:
diff changeset
2325 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2326 });
5367786dc871 Uploaded
greg
parents:
diff changeset
2327 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2328
5367786dc871 Uploaded
greg
parents:
diff changeset
2329 function unBindTips(placeholder) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2330 $(placeholder).unbind("plothover");
5367786dc871 Uploaded
greg
parents:
diff changeset
2331 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2332
5367786dc871 Uploaded
greg
parents:
diff changeset
2333 var tipElementExists = false;
5367786dc871 Uploaded
greg
parents:
diff changeset
2334 function showTip(pageX, pageY, offset, plotWidth, plotHeight,
5367786dc871 Uploaded
greg
parents:
diff changeset
2335 series, centralSeriesIndex, xPos, xIndex, xStr, position, summaryPlots, unitY) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2336 const LINE_HEIGHT = 16; // pixels
5367786dc871 Uploaded
greg
parents:
diff changeset
2337
5367786dc871 Uploaded
greg
parents:
diff changeset
2338 position = ((position != null) ? position : 'bottom right');
5367786dc871 Uploaded
greg
parents:
diff changeset
2339 // pageY -= LINE_HEIGHT * (centralSeriesIndex + 1.5);
5367786dc871 Uploaded
greg
parents:
diff changeset
2340
5367786dc871 Uploaded
greg
parents:
diff changeset
2341 var directions = position.split(' ');
5367786dc871 Uploaded
greg
parents:
diff changeset
2342
5367786dc871 Uploaded
greg
parents:
diff changeset
2343 if (!tipElementExists) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2344 $('<div id="plot_tip" class="white_stroked"></div>').appendTo('body');
5367786dc871 Uploaded
greg
parents:
diff changeset
2345
5367786dc871 Uploaded
greg
parents:
diff changeset
2346 $('<div id="plot_tip_vertical_rule"></div>').css({
5367786dc871 Uploaded
greg
parents:
diff changeset
2347 height: plotHeight,
5367786dc871 Uploaded
greg
parents:
diff changeset
2348 }).appendTo('body');
5367786dc871 Uploaded
greg
parents:
diff changeset
2349
5367786dc871 Uploaded
greg
parents:
diff changeset
2350 $('<div id="plot_tip_horizontal_rule"></div>').css({
5367786dc871 Uploaded
greg
parents:
diff changeset
2351 width: plotWidth,
5367786dc871 Uploaded
greg
parents:
diff changeset
2352 }).appendTo('body');
5367786dc871 Uploaded
greg
parents:
diff changeset
2353
5367786dc871 Uploaded
greg
parents:
diff changeset
2354 tipElementExists = true;
5367786dc871 Uploaded
greg
parents:
diff changeset
2355 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2356
5367786dc871 Uploaded
greg
parents:
diff changeset
2357 $('#plot_tip').html('').css({
5367786dc871 Uploaded
greg
parents:
diff changeset
2358 top: pageY + 5 - ((directions[0] == 'top') ? LINE_HEIGHT * (series.length + 2) : 0),
5367786dc871 Uploaded
greg
parents:
diff changeset
2359 left: pageX + 10,
5367786dc871 Uploaded
greg
parents:
diff changeset
2360 }).show();
5367786dc871 Uploaded
greg
parents:
diff changeset
2361
5367786dc871 Uploaded
greg
parents:
diff changeset
2362 $('#plot_tip_vertical_rule').html('').css({
5367786dc871 Uploaded
greg
parents:
diff changeset
2363 top: offset.top,
5367786dc871 Uploaded
greg
parents:
diff changeset
2364 left: pageX,
5367786dc871 Uploaded
greg
parents:
diff changeset
2365 }).show();
5367786dc871 Uploaded
greg
parents:
diff changeset
2366
5367786dc871 Uploaded
greg
parents:
diff changeset
2367 $('#plot_tip_horizontal_rule').html('').css({
5367786dc871 Uploaded
greg
parents:
diff changeset
2368 top: pageY,
5367786dc871 Uploaded
greg
parents:
diff changeset
2369 left: offset.left,
5367786dc871 Uploaded
greg
parents:
diff changeset
2370 }).show();
5367786dc871 Uploaded
greg
parents:
diff changeset
2371
5367786dc871 Uploaded
greg
parents:
diff changeset
2372 $('<div>' + xStr + '</div>').css({
5367786dc871 Uploaded
greg
parents:
diff changeset
2373 height: LINE_HEIGHT,
5367786dc871 Uploaded
greg
parents:
diff changeset
2374 }).appendTo('#plot_tip');
5367786dc871 Uploaded
greg
parents:
diff changeset
2375
5367786dc871 Uploaded
greg
parents:
diff changeset
2376 var sortedYsAndColors = [];
5367786dc871 Uploaded
greg
parents:
diff changeset
2377 for (var i = 0; i < series.length; i++) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2378 if (!summaryPlots || (summaryPlots && series[i].data[xIndex] != undefined && series[i].data[xIndex][1] != null)) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2379 sortedYsAndColors.push({
5367786dc871 Uploaded
greg
parents:
diff changeset
2380 y: summaryPlots ? series[i].data[xIndex][1] : (i == centralSeriesIndex ? (series[i].data[xIndex] || series[i].data[series[i].data.length - 1])[1] :
5367786dc871 Uploaded
greg
parents:
diff changeset
2381 findNearestPoint(series[i].data, xPos)),
5367786dc871 Uploaded
greg
parents:
diff changeset
2382 color: series[i].color,
5367786dc871 Uploaded
greg
parents:
diff changeset
2383 label: (series[i].isReference ? 'Reference' : series[i].label),
5367786dc871 Uploaded
greg
parents:
diff changeset
2384 isCurrent: i == centralSeriesIndex,
5367786dc871 Uploaded
greg
parents:
diff changeset
2385 });
5367786dc871 Uploaded
greg
parents:
diff changeset
2386 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2387 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2388 sortedYsAndColors.sort(function(a, b) { return a.y < b.y;});
5367786dc871 Uploaded
greg
parents:
diff changeset
2389
5367786dc871 Uploaded
greg
parents:
diff changeset
2390 for (i = 0; i < sortedYsAndColors.length; i++) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2391 var item = sortedYsAndColors[i];
5367786dc871 Uploaded
greg
parents:
diff changeset
2392
5367786dc871 Uploaded
greg
parents:
diff changeset
2393 $('<div id="tip_line' + i + '">' + toPrettyString(item.y) + (unitY ? unitY : '') +
5367786dc871 Uploaded
greg
parents:
diff changeset
2394 ', <span style="color: ' + item.color + ';">' + item.label + '</span></div>').css({
5367786dc871 Uploaded
greg
parents:
diff changeset
2395 height: LINE_HEIGHT,
5367786dc871 Uploaded
greg
parents:
diff changeset
2396 "font-weight": item.isCurrent ? "bold" : "normal",
5367786dc871 Uploaded
greg
parents:
diff changeset
2397 }).appendTo('#plot_tip');
5367786dc871 Uploaded
greg
parents:
diff changeset
2398 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2399 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2400
5367786dc871 Uploaded
greg
parents:
diff changeset
2401 function findNearestPoint(points, x) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2402 for (var i = 0; i < points.length; i++) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2403 if (points[i][0] >= x) return points[i][1];
5367786dc871 Uploaded
greg
parents:
diff changeset
2404 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2405 return points[points.length-1][1]
5367786dc871 Uploaded
greg
parents:
diff changeset
2406 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2407
5367786dc871 Uploaded
greg
parents:
diff changeset
2408 function addLabelToLegend(idx, label, selectedLabels, colors, link) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2409 var isChecked = (selectedLabels.length > 0 && selectedLabels.indexOf(idx.toString())) != -1 ? 'checked="checked"' : "";
5367786dc871 Uploaded
greg
parents:
diff changeset
2410 $('#legend-placeholder').append('<div>' +
5367786dc871 Uploaded
greg
parents:
diff changeset
2411 '<label for="' + label + '" style="color: ' + colors[idx] + '">' +
5367786dc871 Uploaded
greg
parents:
diff changeset
2412 '<input type="checkbox" name="' + idx + '"' + isChecked + ' id="' + label + '">&nbsp;' + label + '</label>' +
5367786dc871 Uploaded
greg
parents:
diff changeset
2413 (link ? '<br>' + link : '') + '</div>');
5367786dc871 Uploaded
greg
parents:
diff changeset
2414 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2415
5367786dc871 Uploaded
greg
parents:
diff changeset
2416 function getSelectedAssemblies(labels) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2417 var selectedAssemblies = [];
5367786dc871 Uploaded
greg
parents:
diff changeset
2418 var labelsMatch = false;
5367786dc871 Uploaded
greg
parents:
diff changeset
2419 var legendLabels = [];
5367786dc871 Uploaded
greg
parents:
diff changeset
2420 $('#legend-placeholder input[type="checkbox"]').each(function() {
5367786dc871 Uploaded
greg
parents:
diff changeset
2421 legendLabels.push($(this).attr('id'));
5367786dc871 Uploaded
greg
parents:
diff changeset
2422 });
5367786dc871 Uploaded
greg
parents:
diff changeset
2423 if (labels.every(function(label, i) { return ($.inArray(label, legendLabels) != -1 || label == 'reference')}) ) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2424 labelsMatch = true;
5367786dc871 Uploaded
greg
parents:
diff changeset
2425 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2426 if (labelsMatch) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2427 $('#legend-placeholder input:checked[type="checkbox"]').each(function() {
5367786dc871 Uploaded
greg
parents:
diff changeset
2428 selectedAssemblies.push($(this).attr('name'));
5367786dc871 Uploaded
greg
parents:
diff changeset
2429 });
5367786dc871 Uploaded
greg
parents:
diff changeset
2430 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2431 else {
5367786dc871 Uploaded
greg
parents:
diff changeset
2432 selectedAssemblies = Array.apply(null, {length: labels}).map(Number.call, Number);
5367786dc871 Uploaded
greg
parents:
diff changeset
2433 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2434 return selectedAssemblies;
5367786dc871 Uploaded
greg
parents:
diff changeset
2435 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2436
5367786dc871 Uploaded
greg
parents:
diff changeset
2437 // Cookie functions based on http://www.quirksmode.org/js/cookies.html
5367786dc871 Uploaded
greg
parents:
diff changeset
2438 // Cookies won't work for local files.
5367786dc871 Uploaded
greg
parents:
diff changeset
2439
5367786dc871 Uploaded
greg
parents:
diff changeset
2440 var createCookie = function(name, value, days) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2441 var expires = '';
5367786dc871 Uploaded
greg
parents:
diff changeset
2442 if (days) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2443 var date = new Date();
5367786dc871 Uploaded
greg
parents:
diff changeset
2444 date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
5367786dc871 Uploaded
greg
parents:
diff changeset
2445 expires = '; expires=' + date.toGMTString();
5367786dc871 Uploaded
greg
parents:
diff changeset
2446 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2447 var path = document.location.pathname;
5367786dc871 Uploaded
greg
parents:
diff changeset
2448 document.cookie = name + '=' + value + expires + '; path=' + path;
5367786dc871 Uploaded
greg
parents:
diff changeset
2449 };
5367786dc871 Uploaded
greg
parents:
diff changeset
2450
5367786dc871 Uploaded
greg
parents:
diff changeset
2451 var readCookie = function(name) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2452 var nameEQ = name + '=';
5367786dc871 Uploaded
greg
parents:
diff changeset
2453 var ca = document.cookie.split(';');
5367786dc871 Uploaded
greg
parents:
diff changeset
2454 for(var i = 0; i < ca.length; i++) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2455 var c = ca[i];
5367786dc871 Uploaded
greg
parents:
diff changeset
2456 while (c.charAt(0) == ' ') {
5367786dc871 Uploaded
greg
parents:
diff changeset
2457 c = c.substring(1, c.length);
5367786dc871 Uploaded
greg
parents:
diff changeset
2458 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2459 if (c.indexOf(nameEQ) == 0) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2460 return c.substring(nameEQ.length, c.length);
5367786dc871 Uploaded
greg
parents:
diff changeset
2461 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2462 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2463 return null;
5367786dc871 Uploaded
greg
parents:
diff changeset
2464 };
5367786dc871 Uploaded
greg
parents:
diff changeset
2465
5367786dc871 Uploaded
greg
parents:
diff changeset
2466 var eraseCookie = function(name) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2467 createCookie(name, '', -1);
5367786dc871 Uploaded
greg
parents:
diff changeset
2468 };
5367786dc871 Uploaded
greg
parents:
diff changeset
2469
5367786dc871 Uploaded
greg
parents:
diff changeset
2470
5367786dc871 Uploaded
greg
parents:
diff changeset
2471 // Dean's forEach: http://dean.edwards.name/base/forEach.js
5367786dc871 Uploaded
greg
parents:
diff changeset
2472 /*forEach, version 1.0
5367786dc871 Uploaded
greg
parents:
diff changeset
2473 Copyright 2006, Dean Edwards
5367786dc871 Uploaded
greg
parents:
diff changeset
2474 License: http://www.opensource.org/licenses/mit-license.php */
5367786dc871 Uploaded
greg
parents:
diff changeset
2475
5367786dc871 Uploaded
greg
parents:
diff changeset
2476 // array-like enumeration
5367786dc871 Uploaded
greg
parents:
diff changeset
2477 if (!Array.forEach) { // mozilla already supports this
5367786dc871 Uploaded
greg
parents:
diff changeset
2478 Array.forEach = function(array, block, context) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2479 for (var i = 0; i < array.length; i++) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2480 block.call(context, array[i], i, array);
5367786dc871 Uploaded
greg
parents:
diff changeset
2481 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2482 };
5367786dc871 Uploaded
greg
parents:
diff changeset
2483 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2484
5367786dc871 Uploaded
greg
parents:
diff changeset
2485 // generic enumeration
5367786dc871 Uploaded
greg
parents:
diff changeset
2486 Function.prototype.forEach = function(object, block, context) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2487 for (var key in object) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2488 if (typeof this.prototype[key] == "undefined") {
5367786dc871 Uploaded
greg
parents:
diff changeset
2489 block.call(context, object[key], key, object);
5367786dc871 Uploaded
greg
parents:
diff changeset
2490 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2491 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2492 };
5367786dc871 Uploaded
greg
parents:
diff changeset
2493
5367786dc871 Uploaded
greg
parents:
diff changeset
2494 // character enumeration
5367786dc871 Uploaded
greg
parents:
diff changeset
2495 String.forEach = function(string, block, context) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2496 Array.forEach(string.split(""), function(chr, index) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2497 block.call(context, chr, index, string);
5367786dc871 Uploaded
greg
parents:
diff changeset
2498 });
5367786dc871 Uploaded
greg
parents:
diff changeset
2499 };
5367786dc871 Uploaded
greg
parents:
diff changeset
2500
5367786dc871 Uploaded
greg
parents:
diff changeset
2501 // globally resolve forEach enumeration
5367786dc871 Uploaded
greg
parents:
diff changeset
2502 var forEach = function(object, block, context) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2503 if (object) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2504 if (object instanceof Function) { // functions have a "length" property
5367786dc871 Uploaded
greg
parents:
diff changeset
2505 Function.forEach(object, block, context);
5367786dc871 Uploaded
greg
parents:
diff changeset
2506
5367786dc871 Uploaded
greg
parents:
diff changeset
2507 } else if (object.each instanceof Function) { // jQuery
5367786dc871 Uploaded
greg
parents:
diff changeset
2508 object.each(function(i, elt) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2509 block(elt);
5367786dc871 Uploaded
greg
parents:
diff changeset
2510 }, context);
5367786dc871 Uploaded
greg
parents:
diff changeset
2511
5367786dc871 Uploaded
greg
parents:
diff changeset
2512 } else if (object.forEach instanceof Function) { // the object implements a custom forEach method
5367786dc871 Uploaded
greg
parents:
diff changeset
2513 object.forEach(block, context);
5367786dc871 Uploaded
greg
parents:
diff changeset
2514
5367786dc871 Uploaded
greg
parents:
diff changeset
2515 } else if (typeof object == "string") { // a string
5367786dc871 Uploaded
greg
parents:
diff changeset
2516 String.forEach(object, block, context);
5367786dc871 Uploaded
greg
parents:
diff changeset
2517
5367786dc871 Uploaded
greg
parents:
diff changeset
2518 } else if (typeof object.length == "number") { // array-like object
5367786dc871 Uploaded
greg
parents:
diff changeset
2519 Array.forEach(object, block, context);
5367786dc871 Uploaded
greg
parents:
diff changeset
2520
5367786dc871 Uploaded
greg
parents:
diff changeset
2521 } else {
5367786dc871 Uploaded
greg
parents:
diff changeset
2522 Object.forEach(object, block, context);
5367786dc871 Uploaded
greg
parents:
diff changeset
2523 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2524 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2525 };
5367786dc871 Uploaded
greg
parents:
diff changeset
2526
5367786dc871 Uploaded
greg
parents:
diff changeset
2527
5367786dc871 Uploaded
greg
parents:
diff changeset
2528 jQuery.fn.exists = function(){
5367786dc871 Uploaded
greg
parents:
diff changeset
2529 return jQuery(this).length > 0;
5367786dc871 Uploaded
greg
parents:
diff changeset
2530 };
5367786dc871 Uploaded
greg
parents:
diff changeset
2531
5367786dc871 Uploaded
greg
parents:
diff changeset
2532
5367786dc871 Uploaded
greg
parents:
diff changeset
2533 function Range(from, to) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2534 var r = [];
5367786dc871 Uploaded
greg
parents:
diff changeset
2535 for (var i = from; i < to; i++) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2536 r.push(i);
5367786dc871 Uploaded
greg
parents:
diff changeset
2537 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2538 return r;
5367786dc871 Uploaded
greg
parents:
diff changeset
2539 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2540
5367786dc871 Uploaded
greg
parents:
diff changeset
2541
5367786dc871 Uploaded
greg
parents:
diff changeset
2542
5367786dc871 Uploaded
greg
parents:
diff changeset
2543 </script>
5367786dc871 Uploaded
greg
parents:
diff changeset
2544
5367786dc871 Uploaded
greg
parents:
diff changeset
2545 <script type="text/javascript">
5367786dc871 Uploaded
greg
parents:
diff changeset
2546 /**
5367786dc871 Uploaded
greg
parents:
diff changeset
2547 * HSV to RGB color conversion
5367786dc871 Uploaded
greg
parents:
diff changeset
2548 *
5367786dc871 Uploaded
greg
parents:
diff changeset
2549 * H runs from 0 to 360 degrees
5367786dc871 Uploaded
greg
parents:
diff changeset
2550 * S and V run from 0 to 100
5367786dc871 Uploaded
greg
parents:
diff changeset
2551 *
5367786dc871 Uploaded
greg
parents:
diff changeset
2552 * Ported from the excellent java algorithm by Eugene Vishnevsky at:
5367786dc871 Uploaded
greg
parents:
diff changeset
2553 * http://www.cs.rit.edu/~ncs/color/t_convert.html
5367786dc871 Uploaded
greg
parents:
diff changeset
2554 */
5367786dc871 Uploaded
greg
parents:
diff changeset
2555 function hsvToRgb(h, s, v) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2556 var r, g, b;
5367786dc871 Uploaded
greg
parents:
diff changeset
2557 var i;
5367786dc871 Uploaded
greg
parents:
diff changeset
2558 var f, p, q, t;
5367786dc871 Uploaded
greg
parents:
diff changeset
2559
5367786dc871 Uploaded
greg
parents:
diff changeset
2560 // Make sure our arguments stay in-range
5367786dc871 Uploaded
greg
parents:
diff changeset
2561 h = Math.max(0, Math.min(360, h));
5367786dc871 Uploaded
greg
parents:
diff changeset
2562 s = Math.max(0, Math.min(100, s));
5367786dc871 Uploaded
greg
parents:
diff changeset
2563 v = Math.max(0, Math.min(100, v));
5367786dc871 Uploaded
greg
parents:
diff changeset
2564
5367786dc871 Uploaded
greg
parents:
diff changeset
2565 // We accept saturation and value arguments from 0 to 100 because that's
5367786dc871 Uploaded
greg
parents:
diff changeset
2566 // how Photoshop represents those values. Internally, however, the
5367786dc871 Uploaded
greg
parents:
diff changeset
2567 // saturation and value are calculated from a range of 0 to 1. We make
5367786dc871 Uploaded
greg
parents:
diff changeset
2568 // That conversion here.
5367786dc871 Uploaded
greg
parents:
diff changeset
2569 s /= 100;
5367786dc871 Uploaded
greg
parents:
diff changeset
2570 v /= 100;
5367786dc871 Uploaded
greg
parents:
diff changeset
2571
5367786dc871 Uploaded
greg
parents:
diff changeset
2572 if(s == 0) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2573 // Achromatic (grey)
5367786dc871 Uploaded
greg
parents:
diff changeset
2574 r = g = b = v;
5367786dc871 Uploaded
greg
parents:
diff changeset
2575 return [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255)];
5367786dc871 Uploaded
greg
parents:
diff changeset
2576 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2577
5367786dc871 Uploaded
greg
parents:
diff changeset
2578 h /= 60; // sector 0 to 5
5367786dc871 Uploaded
greg
parents:
diff changeset
2579 i = Math.floor(h);
5367786dc871 Uploaded
greg
parents:
diff changeset
2580 f = h - i; // factorial part of h
5367786dc871 Uploaded
greg
parents:
diff changeset
2581 p = v * (1 - s);
5367786dc871 Uploaded
greg
parents:
diff changeset
2582 q = v * (1 - s * f);
5367786dc871 Uploaded
greg
parents:
diff changeset
2583 t = v * (1 - s * (1 - f));
5367786dc871 Uploaded
greg
parents:
diff changeset
2584
5367786dc871 Uploaded
greg
parents:
diff changeset
2585 switch(i) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2586 case 0:
5367786dc871 Uploaded
greg
parents:
diff changeset
2587 r = v;
5367786dc871 Uploaded
greg
parents:
diff changeset
2588 g = t;
5367786dc871 Uploaded
greg
parents:
diff changeset
2589 b = p;
5367786dc871 Uploaded
greg
parents:
diff changeset
2590 break;
5367786dc871 Uploaded
greg
parents:
diff changeset
2591
5367786dc871 Uploaded
greg
parents:
diff changeset
2592 case 1:
5367786dc871 Uploaded
greg
parents:
diff changeset
2593 r = q;
5367786dc871 Uploaded
greg
parents:
diff changeset
2594 g = v;
5367786dc871 Uploaded
greg
parents:
diff changeset
2595 b = p;
5367786dc871 Uploaded
greg
parents:
diff changeset
2596 break;
5367786dc871 Uploaded
greg
parents:
diff changeset
2597
5367786dc871 Uploaded
greg
parents:
diff changeset
2598 case 2:
5367786dc871 Uploaded
greg
parents:
diff changeset
2599 r = p;
5367786dc871 Uploaded
greg
parents:
diff changeset
2600 g = v;
5367786dc871 Uploaded
greg
parents:
diff changeset
2601 b = t;
5367786dc871 Uploaded
greg
parents:
diff changeset
2602 break;
5367786dc871 Uploaded
greg
parents:
diff changeset
2603
5367786dc871 Uploaded
greg
parents:
diff changeset
2604 case 3:
5367786dc871 Uploaded
greg
parents:
diff changeset
2605 r = p;
5367786dc871 Uploaded
greg
parents:
diff changeset
2606 g = q;
5367786dc871 Uploaded
greg
parents:
diff changeset
2607 b = v;
5367786dc871 Uploaded
greg
parents:
diff changeset
2608 break;
5367786dc871 Uploaded
greg
parents:
diff changeset
2609
5367786dc871 Uploaded
greg
parents:
diff changeset
2610 case 4:
5367786dc871 Uploaded
greg
parents:
diff changeset
2611 r = t;
5367786dc871 Uploaded
greg
parents:
diff changeset
2612 g = p;
5367786dc871 Uploaded
greg
parents:
diff changeset
2613 b = v;
5367786dc871 Uploaded
greg
parents:
diff changeset
2614 break;
5367786dc871 Uploaded
greg
parents:
diff changeset
2615
5367786dc871 Uploaded
greg
parents:
diff changeset
2616 default: // case 5:
5367786dc871 Uploaded
greg
parents:
diff changeset
2617 r = v;
5367786dc871 Uploaded
greg
parents:
diff changeset
2618 g = p;
5367786dc871 Uploaded
greg
parents:
diff changeset
2619 b = q;
5367786dc871 Uploaded
greg
parents:
diff changeset
2620 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2621
5367786dc871 Uploaded
greg
parents:
diff changeset
2622 return [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255)];
5367786dc871 Uploaded
greg
parents:
diff changeset
2623 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2624
5367786dc871 Uploaded
greg
parents:
diff changeset
2625 function hslToRgb(h, s, l){
5367786dc871 Uploaded
greg
parents:
diff changeset
2626 var r, g, b;
5367786dc871 Uploaded
greg
parents:
diff changeset
2627
5367786dc871 Uploaded
greg
parents:
diff changeset
2628 if(s == 0) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2629 r = g = b = l; // achromatic
5367786dc871 Uploaded
greg
parents:
diff changeset
2630 } else {
5367786dc871 Uploaded
greg
parents:
diff changeset
2631 function hue2rgb(p, q, t){
5367786dc871 Uploaded
greg
parents:
diff changeset
2632 if(t < 0) t += 1;
5367786dc871 Uploaded
greg
parents:
diff changeset
2633 if(t > 1) t -= 1;
5367786dc871 Uploaded
greg
parents:
diff changeset
2634 if(t < 1/6) return p + (q - p) * 6 * t;
5367786dc871 Uploaded
greg
parents:
diff changeset
2635 if(t < 1/2) return q;
5367786dc871 Uploaded
greg
parents:
diff changeset
2636 if(t < 2/3) return p + (q - p) * (2/3 - t) * 6;
5367786dc871 Uploaded
greg
parents:
diff changeset
2637 return p;
5367786dc871 Uploaded
greg
parents:
diff changeset
2638 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2639
5367786dc871 Uploaded
greg
parents:
diff changeset
2640 var q = l < 0.5 ? l * (1 + s) : l + s - l * s;
5367786dc871 Uploaded
greg
parents:
diff changeset
2641 var p = 2 * l - q;
5367786dc871 Uploaded
greg
parents:
diff changeset
2642 r = hue2rgb(p, q, h + 1/3);
5367786dc871 Uploaded
greg
parents:
diff changeset
2643 g = hue2rgb(p, q, h);
5367786dc871 Uploaded
greg
parents:
diff changeset
2644 b = hue2rgb(p, q, h - 1/3);
5367786dc871 Uploaded
greg
parents:
diff changeset
2645 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2646
5367786dc871 Uploaded
greg
parents:
diff changeset
2647 return [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255)];
5367786dc871 Uploaded
greg
parents:
diff changeset
2648 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2649 </script>
5367786dc871 Uploaded
greg
parents:
diff changeset
2650
5367786dc871 Uploaded
greg
parents:
diff changeset
2651 <script type="text/javascript">
5367786dc871 Uploaded
greg
parents:
diff changeset
2652
5367786dc871 Uploaded
greg
parents:
diff changeset
2653 var gns = {
5367786dc871 Uploaded
greg
parents:
diff changeset
2654 features: {
5367786dc871 Uploaded
greg
parents:
diff changeset
2655 isInitialized: false,
5367786dc871 Uploaded
greg
parents:
diff changeset
2656
5367786dc871 Uploaded
greg
parents:
diff changeset
2657 maxY: 0,
5367786dc871 Uploaded
greg
parents:
diff changeset
2658 maxYTick: 0,
5367786dc871 Uploaded
greg
parents:
diff changeset
2659 series: null,
5367786dc871 Uploaded
greg
parents:
diff changeset
2660 showWithData: null,
5367786dc871 Uploaded
greg
parents:
diff changeset
2661
5367786dc871 Uploaded
greg
parents:
diff changeset
2662 yAxisLabeled: false
5367786dc871 Uploaded
greg
parents:
diff changeset
2663 },
5367786dc871 Uploaded
greg
parents:
diff changeset
2664
5367786dc871 Uploaded
greg
parents:
diff changeset
2665 operons: {
5367786dc871 Uploaded
greg
parents:
diff changeset
2666 isInitialized: false,
5367786dc871 Uploaded
greg
parents:
diff changeset
2667
5367786dc871 Uploaded
greg
parents:
diff changeset
2668 maxY: 0,
5367786dc871 Uploaded
greg
parents:
diff changeset
2669 maxYTick: 0,
5367786dc871 Uploaded
greg
parents:
diff changeset
2670 series: null,
5367786dc871 Uploaded
greg
parents:
diff changeset
2671 showWithData: null,
5367786dc871 Uploaded
greg
parents:
diff changeset
2672
5367786dc871 Uploaded
greg
parents:
diff changeset
2673 yAxisLabeled: false
5367786dc871 Uploaded
greg
parents:
diff changeset
2674 },
5367786dc871 Uploaded
greg
parents:
diff changeset
2675
5367786dc871 Uploaded
greg
parents:
diff changeset
2676 draw: function (name, title, colors, filenames, data, refFeaturesNumber, tickX,
5367786dc871 Uploaded
greg
parents:
diff changeset
2677 placeholder, legendPlaceholder, glossary, order, scalePlaceholder) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2678 // div.html(
5367786dc871 Uploaded
greg
parents:
diff changeset
2679 // "<span class='plot-header'>" + kind[0].toUpperCase() + kind.slice(1) + "s covered</span>" +
5367786dc871 Uploaded
greg
parents:
diff changeset
2680 // "<div class='plot-placeholder' id='" + kind + "s-plot-placeholder'></div>"
5367786dc871 Uploaded
greg
parents:
diff changeset
2681 // );
5367786dc871 Uploaded
greg
parents:
diff changeset
2682 $(scalePlaceholder).empty();
5367786dc871 Uploaded
greg
parents:
diff changeset
2683
5367786dc871 Uploaded
greg
parents:
diff changeset
2684 var info = gns[name];
5367786dc871 Uploaded
greg
parents:
diff changeset
2685
5367786dc871 Uploaded
greg
parents:
diff changeset
2686 info.yAxisLabeled = false;
5367786dc871 Uploaded
greg
parents:
diff changeset
2687 var cur_filenames = data.filenames;
5367786dc871 Uploaded
greg
parents:
diff changeset
2688 if (!info.isInitialized) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2689 var filesFeatureInContigs = data.filesFeatureInContigs;
5367786dc871 Uploaded
greg
parents:
diff changeset
2690 var kind = data.kind;
5367786dc871 Uploaded
greg
parents:
diff changeset
2691
5367786dc871 Uploaded
greg
parents:
diff changeset
2692 var plotsN = cur_filenames.length;
5367786dc871 Uploaded
greg
parents:
diff changeset
2693 info.series = new Array(plotsN);
5367786dc871 Uploaded
greg
parents:
diff changeset
2694
5367786dc871 Uploaded
greg
parents:
diff changeset
2695 info.maxY = 0;
5367786dc871 Uploaded
greg
parents:
diff changeset
2696 info.maxX = 0;
5367786dc871 Uploaded
greg
parents:
diff changeset
2697
5367786dc871 Uploaded
greg
parents:
diff changeset
2698 if (refFeaturesNumber) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2699 info.maxY = refFeaturesNumber;
5367786dc871 Uploaded
greg
parents:
diff changeset
2700 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2701
5367786dc871 Uploaded
greg
parents:
diff changeset
2702 for (var fi = 0; fi < plotsN; fi++) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2703 var index = $.inArray(cur_filenames[order[fi]], filenames);
5367786dc871 Uploaded
greg
parents:
diff changeset
2704 var filename = filenames[index];
5367786dc871 Uploaded
greg
parents:
diff changeset
2705 var featureInContigs = filesFeatureInContigs[filename];
5367786dc871 Uploaded
greg
parents:
diff changeset
2706
5367786dc871 Uploaded
greg
parents:
diff changeset
2707 info.series[fi] = {
5367786dc871 Uploaded
greg
parents:
diff changeset
2708 data: [[0, 0]],
5367786dc871 Uploaded
greg
parents:
diff changeset
2709 label: filenames[index],
5367786dc871 Uploaded
greg
parents:
diff changeset
2710 number: index,
5367786dc871 Uploaded
greg
parents:
diff changeset
2711 color: colors[index]
5367786dc871 Uploaded
greg
parents:
diff changeset
2712 };
5367786dc871 Uploaded
greg
parents:
diff changeset
2713
5367786dc871 Uploaded
greg
parents:
diff changeset
2714 var contigNo = 0;
5367786dc871 Uploaded
greg
parents:
diff changeset
2715 var totalFull = 0;
5367786dc871 Uploaded
greg
parents:
diff changeset
2716
5367786dc871 Uploaded
greg
parents:
diff changeset
2717 for (var k = 0; k < featureInContigs.length; k++) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2718 contigNo += 1;
5367786dc871 Uploaded
greg
parents:
diff changeset
2719 totalFull += featureInContigs[k];
5367786dc871 Uploaded
greg
parents:
diff changeset
2720
5367786dc871 Uploaded
greg
parents:
diff changeset
2721 info.series[fi].data.push([contigNo, totalFull]);
5367786dc871 Uploaded
greg
parents:
diff changeset
2722
5367786dc871 Uploaded
greg
parents:
diff changeset
2723 if (info.series[fi].data[k][1] > info.maxY) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2724 info.maxY = info.series[fi].data[k][1];
5367786dc871 Uploaded
greg
parents:
diff changeset
2725 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2726 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2727
5367786dc871 Uploaded
greg
parents:
diff changeset
2728 if (featureInContigs.length > info.maxX) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2729 info.maxX = featureInContigs.length;
5367786dc871 Uploaded
greg
parents:
diff changeset
2730 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2731 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2732
5367786dc871 Uploaded
greg
parents:
diff changeset
2733 for (i = 0; i < plotsN; i++) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2734 if (typeof broken_scaffolds_labels !== undefined && $.inArray(filenames[order[i]], broken_scaffolds_labels) != -1) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2735 info.series[i].dashes = {
5367786dc871 Uploaded
greg
parents:
diff changeset
2736 show: true,
5367786dc871 Uploaded
greg
parents:
diff changeset
2737 lineWidth: 1
5367786dc871 Uploaded
greg
parents:
diff changeset
2738 };
5367786dc871 Uploaded
greg
parents:
diff changeset
2739 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2740 else {
5367786dc871 Uploaded
greg
parents:
diff changeset
2741 info.series[i].lines = {
5367786dc871 Uploaded
greg
parents:
diff changeset
2742 show: true,
5367786dc871 Uploaded
greg
parents:
diff changeset
2743 lineWidth: 1
5367786dc871 Uploaded
greg
parents:
diff changeset
2744 };
5367786dc871 Uploaded
greg
parents:
diff changeset
2745 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2746 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2747
5367786dc871 Uploaded
greg
parents:
diff changeset
2748 // for (i = 0; i < plotsN; i++) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2749 // plotsData[i].points = {
5367786dc871 Uploaded
greg
parents:
diff changeset
2750 // show: true,
5367786dc871 Uploaded
greg
parents:
diff changeset
2751 // radius: 1,
5367786dc871 Uploaded
greg
parents:
diff changeset
2752 // fill: 1,
5367786dc871 Uploaded
greg
parents:
diff changeset
2753 // fillColor: false,
5367786dc871 Uploaded
greg
parents:
diff changeset
2754 // }
5367786dc871 Uploaded
greg
parents:
diff changeset
2755 // }
5367786dc871 Uploaded
greg
parents:
diff changeset
2756
5367786dc871 Uploaded
greg
parents:
diff changeset
2757 if (refFeaturesNumber) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2758 info.series.push({
5367786dc871 Uploaded
greg
parents:
diff changeset
2759 data: [[0, refFeaturesNumber], [info.maxX, refFeaturesNumber]],
5367786dc871 Uploaded
greg
parents:
diff changeset
2760 label: 'reference,&nbsp;' + toPrettyString(refFeaturesNumber, 'features'),
5367786dc871 Uploaded
greg
parents:
diff changeset
2761 isReference: true,
5367786dc871 Uploaded
greg
parents:
diff changeset
2762 dashes: {
5367786dc871 Uploaded
greg
parents:
diff changeset
2763 show: true,
5367786dc871 Uploaded
greg
parents:
diff changeset
2764 lineWidth: 1
5367786dc871 Uploaded
greg
parents:
diff changeset
2765 },
5367786dc871 Uploaded
greg
parents:
diff changeset
2766 yaxis: 1,
5367786dc871 Uploaded
greg
parents:
diff changeset
2767 number: filenames.length,
5367786dc871 Uploaded
greg
parents:
diff changeset
2768 color: '#000000'
5367786dc871 Uploaded
greg
parents:
diff changeset
2769 });
5367786dc871 Uploaded
greg
parents:
diff changeset
2770
5367786dc871 Uploaded
greg
parents:
diff changeset
2771 colors.push('#000000');
5367786dc871 Uploaded
greg
parents:
diff changeset
2772 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2773
5367786dc871 Uploaded
greg
parents:
diff changeset
2774 info.showWithData = function(series, colors) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2775 var plot = $.plot(placeholder, series, {
5367786dc871 Uploaded
greg
parents:
diff changeset
2776 shadowSize: 0,
5367786dc871 Uploaded
greg
parents:
diff changeset
2777 colors: colors,
5367786dc871 Uploaded
greg
parents:
diff changeset
2778 legend: {
5367786dc871 Uploaded
greg
parents:
diff changeset
2779 container: $('useless-invisible-element-that-does-not-even-exist'),
5367786dc871 Uploaded
greg
parents:
diff changeset
2780 },
5367786dc871 Uploaded
greg
parents:
diff changeset
2781 grid: {
5367786dc871 Uploaded
greg
parents:
diff changeset
2782 borderWidth: 1,
5367786dc871 Uploaded
greg
parents:
diff changeset
2783 hoverable: true,
5367786dc871 Uploaded
greg
parents:
diff changeset
2784 autoHighlight: false,
5367786dc871 Uploaded
greg
parents:
diff changeset
2785 mouseActiveRadius: 1000,
5367786dc871 Uploaded
greg
parents:
diff changeset
2786 },
5367786dc871 Uploaded
greg
parents:
diff changeset
2787 yaxis: {
5367786dc871 Uploaded
greg
parents:
diff changeset
2788 min: 0,
5367786dc871 Uploaded
greg
parents:
diff changeset
2789 // max: info.maxY,
5367786dc871 Uploaded
greg
parents:
diff changeset
2790 labelWidth: 120,
5367786dc871 Uploaded
greg
parents:
diff changeset
2791 reserveSpace: true,
5367786dc871 Uploaded
greg
parents:
diff changeset
2792 lineWidth: 0.5,
5367786dc871 Uploaded
greg
parents:
diff changeset
2793 color: '#000',
5367786dc871 Uploaded
greg
parents:
diff changeset
2794 tickFormatter: function (val, axis) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2795 // if (!info.yAxisLabeled && val > info.maxY) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2796 // info.yAxisLabeled = true;
5367786dc871 Uploaded
greg
parents:
diff changeset
2797 // var res = val + ' ' + kind;
5367786dc871 Uploaded
greg
parents:
diff changeset
2798 // if (val > 1) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2799 // res += 's'
5367786dc871 Uploaded
greg
parents:
diff changeset
2800 // }
5367786dc871 Uploaded
greg
parents:
diff changeset
2801 // return res;
5367786dc871 Uploaded
greg
parents:
diff changeset
2802 // } else {
5367786dc871 Uploaded
greg
parents:
diff changeset
2803 return val;
5367786dc871 Uploaded
greg
parents:
diff changeset
2804 // }
5367786dc871 Uploaded
greg
parents:
diff changeset
2805 },
5367786dc871 Uploaded
greg
parents:
diff changeset
2806 minTickSize: 1
5367786dc871 Uploaded
greg
parents:
diff changeset
2807 },
5367786dc871 Uploaded
greg
parents:
diff changeset
2808 xaxis: {
5367786dc871 Uploaded
greg
parents:
diff changeset
2809 min: 0,
5367786dc871 Uploaded
greg
parents:
diff changeset
2810 max: info.maxX,
5367786dc871 Uploaded
greg
parents:
diff changeset
2811 lineWidth: 0.5,
5367786dc871 Uploaded
greg
parents:
diff changeset
2812 color: '#000',
5367786dc871 Uploaded
greg
parents:
diff changeset
2813 tickFormatter: getContigNumberTickFormatter(info.maxX, tickX),
5367786dc871 Uploaded
greg
parents:
diff changeset
2814 minTickSize: tickX
5367786dc871 Uploaded
greg
parents:
diff changeset
2815 },
5367786dc871 Uploaded
greg
parents:
diff changeset
2816 });
5367786dc871 Uploaded
greg
parents:
diff changeset
2817
5367786dc871 Uploaded
greg
parents:
diff changeset
2818 var firstLabel = $('.yAxis .tickLabel').last();
5367786dc871 Uploaded
greg
parents:
diff changeset
2819 firstLabel.append(' ' + name);
5367786dc871 Uploaded
greg
parents:
diff changeset
2820
5367786dc871 Uploaded
greg
parents:
diff changeset
2821 bindTip(placeholder, series, plot, ordinalNumberToPrettyString, tickX, 'contig', 'bottom right');
5367786dc871 Uploaded
greg
parents:
diff changeset
2822 };
5367786dc871 Uploaded
greg
parents:
diff changeset
2823
5367786dc871 Uploaded
greg
parents:
diff changeset
2824 info.isInitialized = true;
5367786dc871 Uploaded
greg
parents:
diff changeset
2825 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2826
5367786dc871 Uploaded
greg
parents:
diff changeset
2827 addLegendClickEvents(info, filenames.length, showPlotWithInfo, refFeaturesNumber);
5367786dc871 Uploaded
greg
parents:
diff changeset
2828
5367786dc871 Uploaded
greg
parents:
diff changeset
2829 showPlotWithInfo(info);
5367786dc871 Uploaded
greg
parents:
diff changeset
2830
5367786dc871 Uploaded
greg
parents:
diff changeset
2831 $('#contigs_are_ordered').show();
5367786dc871 Uploaded
greg
parents:
diff changeset
2832 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2833 };
5367786dc871 Uploaded
greg
parents:
diff changeset
2834
5367786dc871 Uploaded
greg
parents:
diff changeset
2835
5367786dc871 Uploaded
greg
parents:
diff changeset
2836
5367786dc871 Uploaded
greg
parents:
diff changeset
2837 </script>
5367786dc871 Uploaded
greg
parents:
diff changeset
2838
5367786dc871 Uploaded
greg
parents:
diff changeset
2839 <script type="text/javascript">
5367786dc871 Uploaded
greg
parents:
diff changeset
2840 /*
5367786dc871 Uploaded
greg
parents:
diff changeset
2841 DT v1.0
5367786dc871 Uploaded
greg
parents:
diff changeset
2842 June 26, 2008
5367786dc871 Uploaded
greg
parents:
diff changeset
2843 Dan Vanderkam, http://danvk.org/DT/
5367786dc871 Uploaded
greg
parents:
diff changeset
2844 http://code.google.com/p/DT/
5367786dc871 Uploaded
greg
parents:
diff changeset
2845
5367786dc871 Uploaded
greg
parents:
diff changeset
2846 This is code was based on:
5367786dc871 Uploaded
greg
parents:
diff changeset
2847 - Stuart Langridge's SortTable (kryogenix.org/code/browser/sorttable)
5367786dc871 Uploaded
greg
parents:
diff changeset
2848 - Mike Hall's draggable class (http://www.brainjar.com/dhtml/drag/)
5367786dc871 Uploaded
greg
parents:
diff changeset
2849 - A discussion of permuting table columns on comp.lang.javascript
5367786dc871 Uploaded
greg
parents:
diff changeset
2850
5367786dc871 Uploaded
greg
parents:
diff changeset
2851 Licensed under the MIT license.
5367786dc871 Uploaded
greg
parents:
diff changeset
2852 */
5367786dc871 Uploaded
greg
parents:
diff changeset
2853
5367786dc871 Uploaded
greg
parents:
diff changeset
2854 // Here's the notice from Mike Hall's draggable script:
5367786dc871 Uploaded
greg
parents:
diff changeset
2855 //*****************************************************************************
5367786dc871 Uploaded
greg
parents:
diff changeset
2856 // Do not remove this notice.
5367786dc871 Uploaded
greg
parents:
diff changeset
2857 //
5367786dc871 Uploaded
greg
parents:
diff changeset
2858 // Copyright 2001 by Mike Hall.
5367786dc871 Uploaded
greg
parents:
diff changeset
2859 // See http://www.brainjar.com for terms of use.
5367786dc871 Uploaded
greg
parents:
diff changeset
2860 //*****************************************************************************
5367786dc871 Uploaded
greg
parents:
diff changeset
2861
5367786dc871 Uploaded
greg
parents:
diff changeset
2862 var classes = {
5367786dc871 Uploaded
greg
parents:
diff changeset
2863 cell_of_emptySpace: 'cell_of_empty_space',
5367786dc871 Uploaded
greg
parents:
diff changeset
2864 cell_of_movingTable: 'cell_of_moving_table',
5367786dc871 Uploaded
greg
parents:
diff changeset
2865 newTable: 'moving_table',
5367786dc871 Uploaded
greg
parents:
diff changeset
2866 handle: 'drag_handle',
5367786dc871 Uploaded
greg
parents:
diff changeset
2867 hoveredCell: 'hovered_column_td',
5367786dc871 Uploaded
greg
parents:
diff changeset
2868 assemblyName: 'assembly_name',
5367786dc871 Uploaded
greg
parents:
diff changeset
2869
5367786dc871 Uploaded
greg
parents:
diff changeset
2870 bottomCell_of_emptySpace: 'bottom_cell_of_empty_space',
5367786dc871 Uploaded
greg
parents:
diff changeset
2871 topCell_of_emptySpace: 'top_cell_of_empty_space',
5367786dc871 Uploaded
greg
parents:
diff changeset
2872 leftToCell_of_emptySpace: 'left_to_cell_of_empty_space',
5367786dc871 Uploaded
greg
parents:
diff changeset
2873 rightToCell_of_emptySpace: 'right_to_cell_of_empty_space',
5367786dc871 Uploaded
greg
parents:
diff changeset
2874
5367786dc871 Uploaded
greg
parents:
diff changeset
2875 mainReportTable_id: 'main_report_table',
5367786dc871 Uploaded
greg
parents:
diff changeset
2876 totalReportJson_id: 'total-report-json',
5367786dc871 Uploaded
greg
parents:
diff changeset
2877 };
5367786dc871 Uploaded
greg
parents:
diff changeset
2878
5367786dc871 Uploaded
greg
parents:
diff changeset
2879 var dragTable = {
5367786dc871 Uploaded
greg
parents:
diff changeset
2880 isDragging: false,
5367786dc871 Uploaded
greg
parents:
diff changeset
2881
5367786dc871 Uploaded
greg
parents:
diff changeset
2882 // How far should the mouse move before it's considered a drag, not a click?
5367786dc871 Uploaded
greg
parents:
diff changeset
2883 dragRadius2: 0, // 100,
5367786dc871 Uploaded
greg
parents:
diff changeset
2884 setMinDragDistance: function(x) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2885 DT.dragRadius2 = x * x;
5367786dc871 Uploaded
greg
parents:
diff changeset
2886 },
5367786dc871 Uploaded
greg
parents:
diff changeset
2887
5367786dc871 Uploaded
greg
parents:
diff changeset
2888 // How long should cookies persist? (in days)
5367786dc871 Uploaded
greg
parents:
diff changeset
2889 cookieDays: 365,
5367786dc871 Uploaded
greg
parents:
diff changeset
2890 setCookieDays: function(x) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2891 DT.cookieDays = x;
5367786dc871 Uploaded
greg
parents:
diff changeset
2892 },
5367786dc871 Uploaded
greg
parents:
diff changeset
2893
5367786dc871 Uploaded
greg
parents:
diff changeset
2894 // Determine browser and version.
5367786dc871 Uploaded
greg
parents:
diff changeset
2895 // TODO: eliminate browser sniffing except where it's really necessary.
5367786dc871 Uploaded
greg
parents:
diff changeset
2896 Browser: function() {
5367786dc871 Uploaded
greg
parents:
diff changeset
2897 var ua, s, i;
5367786dc871 Uploaded
greg
parents:
diff changeset
2898
5367786dc871 Uploaded
greg
parents:
diff changeset
2899 this.isIE = false;
5367786dc871 Uploaded
greg
parents:
diff changeset
2900 this.isNS = false;
5367786dc871 Uploaded
greg
parents:
diff changeset
2901 this.version = null;
5367786dc871 Uploaded
greg
parents:
diff changeset
2902 ua = navigator.userAgent;
5367786dc871 Uploaded
greg
parents:
diff changeset
2903
5367786dc871 Uploaded
greg
parents:
diff changeset
2904 s = "MSIE";
5367786dc871 Uploaded
greg
parents:
diff changeset
2905 if ((i = ua.indexOf(s)) >= 0) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2906 this.isIE = true;
5367786dc871 Uploaded
greg
parents:
diff changeset
2907 this.version = parseFloat(ua.substr(i + s.length));
5367786dc871 Uploaded
greg
parents:
diff changeset
2908 return;
5367786dc871 Uploaded
greg
parents:
diff changeset
2909 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2910
5367786dc871 Uploaded
greg
parents:
diff changeset
2911 s = "Netscape6/";
5367786dc871 Uploaded
greg
parents:
diff changeset
2912 if ((i = ua.indexOf(s)) >= 0) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2913 this.isNS = true;
5367786dc871 Uploaded
greg
parents:
diff changeset
2914 this.version = parseFloat(ua.substr(i + s.length));
5367786dc871 Uploaded
greg
parents:
diff changeset
2915 return;
5367786dc871 Uploaded
greg
parents:
diff changeset
2916 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2917
5367786dc871 Uploaded
greg
parents:
diff changeset
2918 // Treat any other "Gecko" browser as NS 6.1.
5367786dc871 Uploaded
greg
parents:
diff changeset
2919 s = "Gecko";
5367786dc871 Uploaded
greg
parents:
diff changeset
2920 if ((i = ua.indexOf(s)) >= 0) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2921 this.isNS = true;
5367786dc871 Uploaded
greg
parents:
diff changeset
2922 this.version = 6.1;
5367786dc871 Uploaded
greg
parents:
diff changeset
2923 return;
5367786dc871 Uploaded
greg
parents:
diff changeset
2924 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2925 },
5367786dc871 Uploaded
greg
parents:
diff changeset
2926 browser: null,
5367786dc871 Uploaded
greg
parents:
diff changeset
2927
5367786dc871 Uploaded
greg
parents:
diff changeset
2928 // Detect all draggable tables and attach handlers to their headers.
5367786dc871 Uploaded
greg
parents:
diff changeset
2929 init: function() {
5367786dc871 Uploaded
greg
parents:
diff changeset
2930 // Don't initialize twice
5367786dc871 Uploaded
greg
parents:
diff changeset
2931 if (arguments.callee.done)
5367786dc871 Uploaded
greg
parents:
diff changeset
2932 return;
5367786dc871 Uploaded
greg
parents:
diff changeset
2933 else
5367786dc871 Uploaded
greg
parents:
diff changeset
2934 arguments.callee.done = true;
5367786dc871 Uploaded
greg
parents:
diff changeset
2935
5367786dc871 Uploaded
greg
parents:
diff changeset
2936 // if (_dgtimer)
5367786dc871 Uploaded
greg
parents:
diff changeset
2937 // clearInterval(_dgtimer);
5367786dc871 Uploaded
greg
parents:
diff changeset
2938
5367786dc871 Uploaded
greg
parents:
diff changeset
2939 if (!document.createElement || !document.getElementsByTagName)
5367786dc871 Uploaded
greg
parents:
diff changeset
2940 return;
5367786dc871 Uploaded
greg
parents:
diff changeset
2941
5367786dc871 Uploaded
greg
parents:
diff changeset
2942 DT.dragObj.zIndex = 0;
5367786dc871 Uploaded
greg
parents:
diff changeset
2943 DT.browser = new DT.Browser();
5367786dc871 Uploaded
greg
parents:
diff changeset
2944 forEach(document.getElementsByTagName('table'), function(table) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2945 if ($(table).hasClass('draggable')) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2946 DT.makeDraggable(table);
5367786dc871 Uploaded
greg
parents:
diff changeset
2947 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2948 });
5367786dc871 Uploaded
greg
parents:
diff changeset
2949 },
5367786dc871 Uploaded
greg
parents:
diff changeset
2950
5367786dc871 Uploaded
greg
parents:
diff changeset
2951 // The thead business is taken straight from sorttable.
5367786dc871 Uploaded
greg
parents:
diff changeset
2952 makeDraggable: function(table) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2953 DT.dragObj.table = table;
5367786dc871 Uploaded
greg
parents:
diff changeset
2954
5367786dc871 Uploaded
greg
parents:
diff changeset
2955 if (table.getElementsByTagName('thead').length == 0) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2956 thead = document.createElement('thead');
5367786dc871 Uploaded
greg
parents:
diff changeset
2957 thead.appendChild(table.rows[0]);
5367786dc871 Uploaded
greg
parents:
diff changeset
2958 table.insertBefore(thead, table.firstChild);
5367786dc871 Uploaded
greg
parents:
diff changeset
2959 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2960
5367786dc871 Uploaded
greg
parents:
diff changeset
2961 // Safari doesn't support table.tHead, sigh
5367786dc871 Uploaded
greg
parents:
diff changeset
2962 if (table.tHead == null) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2963 table.tHead = table.getElementsByTagName('thead')[0];
5367786dc871 Uploaded
greg
parents:
diff changeset
2964 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2965
5367786dc871 Uploaded
greg
parents:
diff changeset
2966 var handles = $('.' + classes.handle) || table.tHead.rows[0].cells;
5367786dc871 Uploaded
greg
parents:
diff changeset
2967
5367786dc871 Uploaded
greg
parents:
diff changeset
2968 forEach(handles, function(handle) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2969 handle.onmousedown = DT.dragStart;
5367786dc871 Uploaded
greg
parents:
diff changeset
2970 });
5367786dc871 Uploaded
greg
parents:
diff changeset
2971 },
5367786dc871 Uploaded
greg
parents:
diff changeset
2972
5367786dc871 Uploaded
greg
parents:
diff changeset
2973 // Global object to hold drag information.
5367786dc871 Uploaded
greg
parents:
diff changeset
2974 dragObj: {},
5367786dc871 Uploaded
greg
parents:
diff changeset
2975
5367786dc871 Uploaded
greg
parents:
diff changeset
2976 getEventPosition: function(event) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2977 var x, y;
5367786dc871 Uploaded
greg
parents:
diff changeset
2978 if (DT.browser.isIE) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2979 x = window.event.clientX + document.documentElement.scrollLeft
5367786dc871 Uploaded
greg
parents:
diff changeset
2980 + document.body.scrollLeft;
5367786dc871 Uploaded
greg
parents:
diff changeset
2981 y = window.event.clientY + document.documentElement.scrollTop
5367786dc871 Uploaded
greg
parents:
diff changeset
2982 + document.body.scrollTop;
5367786dc871 Uploaded
greg
parents:
diff changeset
2983 return {x: x, y: y};
5367786dc871 Uploaded
greg
parents:
diff changeset
2984 }
5367786dc871 Uploaded
greg
parents:
diff changeset
2985 return {x: event.pageX, y: event.pageY};
5367786dc871 Uploaded
greg
parents:
diff changeset
2986 },
5367786dc871 Uploaded
greg
parents:
diff changeset
2987
5367786dc871 Uploaded
greg
parents:
diff changeset
2988 // Determine the position of this element on the page. Many thanks to Magnus
5367786dc871 Uploaded
greg
parents:
diff changeset
2989 // Kristiansen for help making this work with "position: fixed" elements.
5367786dc871 Uploaded
greg
parents:
diff changeset
2990 getPositionOnThePage: function(elt, stopAtRelative) {
5367786dc871 Uploaded
greg
parents:
diff changeset
2991 var ex = 0, ey = 0;
5367786dc871 Uploaded
greg
parents:
diff changeset
2992 do {
5367786dc871 Uploaded
greg
parents:
diff changeset
2993 var curStyle = DT.browser.isIE ? elt.currentStyle
5367786dc871 Uploaded
greg
parents:
diff changeset
2994 : window.getComputedStyle(elt, '');
5367786dc871 Uploaded
greg
parents:
diff changeset
2995 var supportFixed = !(DT.browser.isIE &&
5367786dc871 Uploaded
greg
parents:
diff changeset
2996 DT.browser.version < 7);
5367786dc871 Uploaded
greg
parents:
diff changeset
2997 if (stopAtRelative && curStyle.position == 'relative') {
5367786dc871 Uploaded
greg
parents:
diff changeset
2998 break;
5367786dc871 Uploaded
greg
parents:
diff changeset
2999 } else if (supportFixed && curStyle.position == 'fixed') {
5367786dc871 Uploaded
greg
parents:
diff changeset
3000 // Get the fixed el's offset
5367786dc871 Uploaded
greg
parents:
diff changeset
3001 ex += parseInt(curStyle.left, 10);
5367786dc871 Uploaded
greg
parents:
diff changeset
3002 ey += parseInt(curStyle.top, 10);
5367786dc871 Uploaded
greg
parents:
diff changeset
3003 // Compensate for scrolling
5367786dc871 Uploaded
greg
parents:
diff changeset
3004 ex += document.body.scrollLeft;
5367786dc871 Uploaded
greg
parents:
diff changeset
3005 ey += document.body.scrollTop;
5367786dc871 Uploaded
greg
parents:
diff changeset
3006 // End the loop
5367786dc871 Uploaded
greg
parents:
diff changeset
3007 break;
5367786dc871 Uploaded
greg
parents:
diff changeset
3008 } else {
5367786dc871 Uploaded
greg
parents:
diff changeset
3009 ex += elt.offsetLeft;
5367786dc871 Uploaded
greg
parents:
diff changeset
3010 ey += elt.offsetTop;
5367786dc871 Uploaded
greg
parents:
diff changeset
3011 }
5367786dc871 Uploaded
greg
parents:
diff changeset
3012 } while (elt = elt.offsetParent);
5367786dc871 Uploaded
greg
parents:
diff changeset
3013 return {x: ex, y: ey};
5367786dc871 Uploaded
greg
parents:
diff changeset
3014 },
5367786dc871 Uploaded
greg
parents:
diff changeset
3015
5367786dc871 Uploaded
greg
parents:
diff changeset
3016 // MouseDown handler -- sets up the appropriate mousemove/mouseup handlers
5367786dc871 Uploaded
greg
parents:
diff changeset
3017 // and fills in the global DT.dragObj object.
5367786dc871 Uploaded
greg
parents:
diff changeset
3018 dragStart: function(event, id) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3019 DT.isDragging = true;
5367786dc871 Uploaded
greg
parents:
diff changeset
3020
5367786dc871 Uploaded
greg
parents:
diff changeset
3021 var drag_obj = DT.dragObj;
5367786dc871 Uploaded
greg
parents:
diff changeset
3022
5367786dc871 Uploaded
greg
parents:
diff changeset
3023 var browser = DT.browser;
5367786dc871 Uploaded
greg
parents:
diff changeset
3024 var clicked_node = browser.isIE ? window.event.srcElement : event.target;
5367786dc871 Uploaded
greg
parents:
diff changeset
3025 var pos = DT.getEventPosition(event);
5367786dc871 Uploaded
greg
parents:
diff changeset
3026
5367786dc871 Uploaded
greg
parents:
diff changeset
3027 var table = $(clicked_node).closest('table')[0];
5367786dc871 Uploaded
greg
parents:
diff changeset
3028 var top_cell = $(clicked_node).closest('td, th')[0];
5367786dc871 Uploaded
greg
parents:
diff changeset
3029 drag_obj.topCell = top_cell;
5367786dc871 Uploaded
greg
parents:
diff changeset
3030 drag_obj.table = table;
5367786dc871 Uploaded
greg
parents:
diff changeset
3031
5367786dc871 Uploaded
greg
parents:
diff changeset
3032 var col_index = top_cell.cellIndex;
5367786dc871 Uploaded
greg
parents:
diff changeset
3033 drag_obj.movingColIndex = drag_obj.startIndex = col_index;
5367786dc871 Uploaded
greg
parents:
diff changeset
3034 drag_obj.movingColWidth = $(top_cell).width();
5367786dc871 Uploaded
greg
parents:
diff changeset
3035
5367786dc871 Uploaded
greg
parents:
diff changeset
3036 // Since a column header can't be dragged directly, duplicate its contents
5367786dc871 Uploaded
greg
parents:
diff changeset
3037 // in a div and drag that instead.
5367786dc871 Uploaded
greg
parents:
diff changeset
3038 var new_table = DT.fullCopy(table, false);
5367786dc871 Uploaded
greg
parents:
diff changeset
3039
5367786dc871 Uploaded
greg
parents:
diff changeset
3040 // Copy the entire column
5367786dc871 Uploaded
greg
parents:
diff changeset
3041 var forEachSection = function(table, func) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3042 if (table.tHead) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3043 func(table.tHead);
5367786dc871 Uploaded
greg
parents:
diff changeset
3044 }
5367786dc871 Uploaded
greg
parents:
diff changeset
3045 forEach(table.tBodies, function(tbody) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3046 func(tbody);
5367786dc871 Uploaded
greg
parents:
diff changeset
3047 });
5367786dc871 Uploaded
greg
parents:
diff changeset
3048 if (table.tFoot) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3049 func(table.tFoot);
5367786dc871 Uploaded
greg
parents:
diff changeset
3050 }
5367786dc871 Uploaded
greg
parents:
diff changeset
3051 };
5367786dc871 Uploaded
greg
parents:
diff changeset
3052
5367786dc871 Uploaded
greg
parents:
diff changeset
3053 forEachSection(table, function(sec) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3054 var new_sec = DT.fullCopy(sec, false);
5367786dc871 Uploaded
greg
parents:
diff changeset
3055
5367786dc871 Uploaded
greg
parents:
diff changeset
3056 forEach(sec.rows, function(row) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3057 var cell = row.cells[col_index];
5367786dc871 Uploaded
greg
parents:
diff changeset
3058 var new_tr = DT.fullCopy(row, false);
5367786dc871 Uploaded
greg
parents:
diff changeset
3059 if (row.offsetHeight) new_tr.style.height = row.offsetHeight + "px";
5367786dc871 Uploaded
greg
parents:
diff changeset
3060 var new_td = DT.fullCopy(cell, true);
5367786dc871 Uploaded
greg
parents:
diff changeset
3061 if (cell.offsetWidth) new_td.style.width = cell.offsetWidth + "px !important";
5367786dc871 Uploaded
greg
parents:
diff changeset
3062 new_tr.appendChild(new_td);
5367786dc871 Uploaded
greg
parents:
diff changeset
3063 new_sec.appendChild(new_tr);
5367786dc871 Uploaded
greg
parents:
diff changeset
3064 });
5367786dc871 Uploaded
greg
parents:
diff changeset
3065
5367786dc871 Uploaded
greg
parents:
diff changeset
3066 new_table.appendChild(new_sec);
5367786dc871 Uploaded
greg
parents:
diff changeset
3067 });
5367786dc871 Uploaded
greg
parents:
diff changeset
3068
5367786dc871 Uploaded
greg
parents:
diff changeset
3069 var obj_pos = DT.getPositionOnThePage(top_cell, true);
5367786dc871 Uploaded
greg
parents:
diff changeset
3070 new_table.style.position = "absolute";
5367786dc871 Uploaded
greg
parents:
diff changeset
3071 new_table.style.left = obj_pos.x + "px";
5367786dc871 Uploaded
greg
parents:
diff changeset
3072 new_table.style.top = obj_pos.y + "px";
5367786dc871 Uploaded
greg
parents:
diff changeset
3073 // new_table.style.width = dragObj.origNode.offsetWidth + "px";
5367786dc871 Uploaded
greg
parents:
diff changeset
3074 // new_table.style.height = dragObj.origNode.offsetHeight + "px";
5367786dc871 Uploaded
greg
parents:
diff changeset
3075
5367786dc871 Uploaded
greg
parents:
diff changeset
3076 // Hold off adding the element until this is clearly a drag.
5367786dc871 Uploaded
greg
parents:
diff changeset
3077 drag_obj.addedNode = false;
5367786dc871 Uploaded
greg
parents:
diff changeset
3078
5367786dc871 Uploaded
greg
parents:
diff changeset
3079 drag_obj.tableContainer = drag_obj.table.parentNode || document.body;
5367786dc871 Uploaded
greg
parents:
diff changeset
3080 drag_obj.newTable = new_table;
5367786dc871 Uploaded
greg
parents:
diff changeset
3081
5367786dc871 Uploaded
greg
parents:
diff changeset
3082 // Save starting positions of cursor and element.
5367786dc871 Uploaded
greg
parents:
diff changeset
3083 drag_obj.startPos = pos;
5367786dc871 Uploaded
greg
parents:
diff changeset
3084 drag_obj.prevPos = pos;
5367786dc871 Uploaded
greg
parents:
diff changeset
3085 drag_obj.elStartLeft = parseInt(drag_obj.newTable.style.left, 10);
5367786dc871 Uploaded
greg
parents:
diff changeset
3086 drag_obj.elStartTop = parseInt(drag_obj.newTable.style.top, 10);
5367786dc871 Uploaded
greg
parents:
diff changeset
3087
5367786dc871 Uploaded
greg
parents:
diff changeset
3088 if (isNaN(drag_obj.elStartLeft)) drag_obj.elStartLeft = 0;
5367786dc871 Uploaded
greg
parents:
diff changeset
3089 if (isNaN(drag_obj.elStartTop)) drag_obj.elStartTop = 0;
5367786dc871 Uploaded
greg
parents:
diff changeset
3090
5367786dc871 Uploaded
greg
parents:
diff changeset
3091 // Update element's z-index.
5367786dc871 Uploaded
greg
parents:
diff changeset
3092 drag_obj.newTable.style.zIndex = ++drag_obj.zIndex;
5367786dc871 Uploaded
greg
parents:
diff changeset
3093
5367786dc871 Uploaded
greg
parents:
diff changeset
3094 // Capture mousemove and mouseup events on the page.
5367786dc871 Uploaded
greg
parents:
diff changeset
3095 if (browser.isIE) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3096 document.attachEvent("onmousemove", DT.dragMove);
5367786dc871 Uploaded
greg
parents:
diff changeset
3097 document.attachEvent("onmouseup", DT.dragEnd);
5367786dc871 Uploaded
greg
parents:
diff changeset
3098 window.event.cancelBubble = true;
5367786dc871 Uploaded
greg
parents:
diff changeset
3099 window.event.returnValue = false;
5367786dc871 Uploaded
greg
parents:
diff changeset
3100 } else {
5367786dc871 Uploaded
greg
parents:
diff changeset
3101 document.addEventListener("mousemove", DT.dragMove, true);
5367786dc871 Uploaded
greg
parents:
diff changeset
3102 document.addEventListener("mouseup", DT.dragEnd, true);
5367786dc871 Uploaded
greg
parents:
diff changeset
3103 event.preventDefault();
5367786dc871 Uploaded
greg
parents:
diff changeset
3104 }
5367786dc871 Uploaded
greg
parents:
diff changeset
3105 },
5367786dc871 Uploaded
greg
parents:
diff changeset
3106
5367786dc871 Uploaded
greg
parents:
diff changeset
3107 // Move the floating column header with the mouse
5367786dc871 Uploaded
greg
parents:
diff changeset
3108 // TODO: Reorder columns as the mouse moves for a more interactive feel.
5367786dc871 Uploaded
greg
parents:
diff changeset
3109 dragMove: function(event) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3110 var x, y;
5367786dc871 Uploaded
greg
parents:
diff changeset
3111 var drag_obj = DT.dragObj;
5367786dc871 Uploaded
greg
parents:
diff changeset
3112 var col_index = drag_obj.movingColIndex;
5367786dc871 Uploaded
greg
parents:
diff changeset
3113
5367786dc871 Uploaded
greg
parents:
diff changeset
3114 // Get cursor position with respect to the page.
5367786dc871 Uploaded
greg
parents:
diff changeset
3115 var pos = DT.getEventPosition(event);
5367786dc871 Uploaded
greg
parents:
diff changeset
3116
5367786dc871 Uploaded
greg
parents:
diff changeset
3117 var full_dx = drag_obj.startPos.x - pos.x;
5367786dc871 Uploaded
greg
parents:
diff changeset
3118 var full_dy = drag_obj.startPos.y - pos.y;
5367786dc871 Uploaded
greg
parents:
diff changeset
3119
5367786dc871 Uploaded
greg
parents:
diff changeset
3120 if (!drag_obj.addedNode && full_dx * full_dx + full_dy * full_dy > DT.dragRadius2) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3121 // Real dragging has began, the following block performs once
5367786dc871 Uploaded
greg
parents:
diff changeset
3122
5367786dc871 Uploaded
greg
parents:
diff changeset
3123 // Attach a moving table
5367786dc871 Uploaded
greg
parents:
diff changeset
3124 drag_obj.tableContainer.insertBefore(drag_obj.newTable, drag_obj.table);
5367786dc871 Uploaded
greg
parents:
diff changeset
3125 drag_obj.addedNode = true;
5367786dc871 Uploaded
greg
parents:
diff changeset
3126
5367786dc871 Uploaded
greg
parents:
diff changeset
3127 // Add classes for the dragged column (original and the clone)
5367786dc871 Uploaded
greg
parents:
diff changeset
3128 $(drag_obj.newTable).addClass(classes.newTable);
5367786dc871 Uploaded
greg
parents:
diff changeset
3129 $(DT.getColumn(drag_obj.newTable)).addClass(classes.cell_of_movingTable);
5367786dc871 Uploaded
greg
parents:
diff changeset
3130
5367786dc871 Uploaded
greg
parents:
diff changeset
3131 $(DT.getColumn(drag_obj.table, col_index)).addClass(classes.cell_of_emptySpace);
5367786dc871 Uploaded
greg
parents:
diff changeset
3132 $(DT.getColumn(drag_obj.table, col_index)[0]).addClass(classes.topCell_of_emptySpace);
5367786dc871 Uploaded
greg
parents:
diff changeset
3133 var visibleCells = $(DT.getColumn(drag_obj.table, col_index)).filter(':visible');
5367786dc871 Uploaded
greg
parents:
diff changeset
3134 $(visibleCells[visibleCells.length - 1]).addClass(classes.bottomCell_of_emptySpace);
5367786dc871 Uploaded
greg
parents:
diff changeset
3135
5367786dc871 Uploaded
greg
parents:
diff changeset
3136 DT.addStylesForAdjacentColumns(col_index);
5367786dc871 Uploaded
greg
parents:
diff changeset
3137 }
5367786dc871 Uploaded
greg
parents:
diff changeset
3138
5367786dc871 Uploaded
greg
parents:
diff changeset
3139 // Move drag element by the same amount the cursor has moved.
5367786dc871 Uploaded
greg
parents:
diff changeset
3140 var style = drag_obj.newTable.style;
5367786dc871 Uploaded
greg
parents:
diff changeset
3141 style.left = (drag_obj.elStartLeft + pos.x - drag_obj.startPos.x) + "px";
5367786dc871 Uploaded
greg
parents:
diff changeset
3142 style.top = (drag_obj.elStartTop + pos.y - drag_obj.startPos.y) + "px";
5367786dc871 Uploaded
greg
parents:
diff changeset
3143
5367786dc871 Uploaded
greg
parents:
diff changeset
3144 if (DT.browser.isIE) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3145 window.event.cancelBubble = true;
5367786dc871 Uploaded
greg
parents:
diff changeset
3146 window.event.returnValue = false;
5367786dc871 Uploaded
greg
parents:
diff changeset
3147 } else {
5367786dc871 Uploaded
greg
parents:
diff changeset
3148 event.preventDefault();
5367786dc871 Uploaded
greg
parents:
diff changeset
3149 }
5367786dc871 Uploaded
greg
parents:
diff changeset
3150
5367786dc871 Uploaded
greg
parents:
diff changeset
3151 // If moving over an adjacent column, do swapping, swapping with the adjacent column
5367786dc871 Uploaded
greg
parents:
diff changeset
3152 var column_pos_x = DT.getPositionOnThePage(DT.getColumn(drag_obj.newTable)[0]).x;
5367786dc871 Uploaded
greg
parents:
diff changeset
3153 var column_center_x = column_pos_x + drag_obj.movingColWidth / 2;
5367786dc871 Uploaded
greg
parents:
diff changeset
3154 var hovered_col_index = DT.getColumnAtPosition(drag_obj.table, column_center_x);
5367786dc871 Uploaded
greg
parents:
diff changeset
3155
5367786dc871 Uploaded
greg
parents:
diff changeset
3156 var dx = drag_obj.prevPos.x - pos.x;
5367786dc871 Uploaded
greg
parents:
diff changeset
3157
5367786dc871 Uploaded
greg
parents:
diff changeset
3158 if (DT.isSuitableColumnToSwap(hovered_col_index, col_index)) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3159 if (dx < 0 && hovered_col_index > col_index || // moving right
5367786dc871 Uploaded
greg
parents:
diff changeset
3160 dx > 0 && hovered_col_index < col_index) { // moving left
5367786dc871 Uploaded
greg
parents:
diff changeset
3161 DT.removeStylesForAdjacentColumns(col_index);
5367786dc871 Uploaded
greg
parents:
diff changeset
3162 DT.moveColumn(drag_obj.table, col_index, hovered_col_index);
5367786dc871 Uploaded
greg
parents:
diff changeset
3163 DT.addStylesForAdjacentColumns(hovered_col_index);
5367786dc871 Uploaded
greg
parents:
diff changeset
3164 drag_obj.movingColIndex = hovered_col_index;
5367786dc871 Uploaded
greg
parents:
diff changeset
3165 }
5367786dc871 Uploaded
greg
parents:
diff changeset
3166 }
5367786dc871 Uploaded
greg
parents:
diff changeset
3167 drag_obj.prevPos = pos;
5367786dc871 Uploaded
greg
parents:
diff changeset
3168 },
5367786dc871 Uploaded
greg
parents:
diff changeset
3169
5367786dc871 Uploaded
greg
parents:
diff changeset
3170 removeStylesForAdjacentColumns: function(oldIndex) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3171 var table = DT.dragObj.table;
5367786dc871 Uploaded
greg
parents:
diff changeset
3172 var rows = table.rows;
5367786dc871 Uploaded
greg
parents:
diff changeset
3173 var oldColumn = DT.getColumn(table, oldIndex);
5367786dc871 Uploaded
greg
parents:
diff changeset
3174 $(DT.getColumn(table, oldIndex - 1)).removeClass(classes.leftToCell_of_emptySpace);
5367786dc871 Uploaded
greg
parents:
diff changeset
3175 $(DT.getColumn(table, oldIndex + 1)).removeClass(classes.rightToCell_of_emptySpace);
5367786dc871 Uploaded
greg
parents:
diff changeset
3176 },
5367786dc871 Uploaded
greg
parents:
diff changeset
3177
5367786dc871 Uploaded
greg
parents:
diff changeset
3178 addStylesForAdjacentColumns: function(index) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3179 var table = DT.dragObj.table;
5367786dc871 Uploaded
greg
parents:
diff changeset
3180 var rows = table.rows;
5367786dc871 Uploaded
greg
parents:
diff changeset
3181 var column = DT.getColumn(table, index);
5367786dc871 Uploaded
greg
parents:
diff changeset
3182 $(DT.getColumn(table, index - 1)).addClass(classes.leftToCell_of_emptySpace);
5367786dc871 Uploaded
greg
parents:
diff changeset
3183 $(DT.getColumn(table, index + 1)).addClass(classes.rightToCell_of_emptySpace);
5367786dc871 Uploaded
greg
parents:
diff changeset
3184 },
5367786dc871 Uploaded
greg
parents:
diff changeset
3185
5367786dc871 Uploaded
greg
parents:
diff changeset
3186 // Stop capturing mousemove and mouseup events.
5367786dc871 Uploaded
greg
parents:
diff changeset
3187 // Determine which (if any) column we're over and shuffle the table.
5367786dc871 Uploaded
greg
parents:
diff changeset
3188 dragEnd: function(event) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3189 if (DT.browser.isIE) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3190 document.detachEvent("onmousemove", DT.dragMove);
5367786dc871 Uploaded
greg
parents:
diff changeset
3191 document.detachEvent("onmouseup", DT.dragEnd);
5367786dc871 Uploaded
greg
parents:
diff changeset
3192 } else {
5367786dc871 Uploaded
greg
parents:
diff changeset
3193 document.removeEventListener("mousemove", DT.dragMove, true);
5367786dc871 Uploaded
greg
parents:
diff changeset
3194 document.removeEventListener("mouseup", DT.dragEnd, true);
5367786dc871 Uploaded
greg
parents:
diff changeset
3195 }
5367786dc871 Uploaded
greg
parents:
diff changeset
3196
5367786dc871 Uploaded
greg
parents:
diff changeset
3197 var drag_obj = DT.dragObj;
5367786dc871 Uploaded
greg
parents:
diff changeset
3198 var col_index = drag_obj.movingColIndex;
5367786dc871 Uploaded
greg
parents:
diff changeset
3199
5367786dc871 Uploaded
greg
parents:
diff changeset
3200 // If the floating header wasn't added, the mouse didn't move far enough.
5367786dc871 Uploaded
greg
parents:
diff changeset
3201 if (drag_obj.addedNode) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3202 // TODO: Move with animation
5367786dc871 Uploaded
greg
parents:
diff changeset
3203 var final_pos = DT.getPositionOnThePage(DT.getColumn(drag_obj.table, col_index)[0]);
5367786dc871 Uploaded
greg
parents:
diff changeset
3204
5367786dc871 Uploaded
greg
parents:
diff changeset
3205 $(drag_obj.newTable).animate({
5367786dc871 Uploaded
greg
parents:
diff changeset
3206 left: final_pos.x,
5367786dc871 Uploaded
greg
parents:
diff changeset
3207 top: final_pos.y,
5367786dc871 Uploaded
greg
parents:
diff changeset
3208 }, 'fast', function() {
5367786dc871 Uploaded
greg
parents:
diff changeset
3209 $(drag_obj.newTable).remove();
5367786dc871 Uploaded
greg
parents:
diff changeset
3210 $(DT.getColumn(drag_obj.table, col_index)).removeClass(classes.cell_of_emptySpace);
5367786dc871 Uploaded
greg
parents:
diff changeset
3211 $(DT.getColumn(drag_obj.table, col_index)[0]).removeClass(classes.topCell_of_emptySpace);
5367786dc871 Uploaded
greg
parents:
diff changeset
3212 var visibleCells = $(DT.getColumn(drag_obj.table, col_index)).filter(':visible');
5367786dc871 Uploaded
greg
parents:
diff changeset
3213 $(visibleCells[visibleCells.length - 1]).removeClass(classes.bottomCell_of_emptySpace);
5367786dc871 Uploaded
greg
parents:
diff changeset
3214
5367786dc871 Uploaded
greg
parents:
diff changeset
3215 DT.removeStylesForAdjacentColumns(col_index);
5367786dc871 Uploaded
greg
parents:
diff changeset
3216 });
5367786dc871 Uploaded
greg
parents:
diff changeset
3217
5367786dc871 Uploaded
greg
parents:
diff changeset
3218 DT.storeDrag(drag_obj.table);
5367786dc871 Uploaded
greg
parents:
diff changeset
3219 }
5367786dc871 Uploaded
greg
parents:
diff changeset
3220 DT.isDragging = false;
5367786dc871 Uploaded
greg
parents:
diff changeset
3221 },
5367786dc871 Uploaded
greg
parents:
diff changeset
3222
5367786dc871 Uploaded
greg
parents:
diff changeset
3223 moveColumn: function(table, index, nextIndex) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3224 forEach(table.rows, function(row) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3225 var startCell = $(row.cells[index]);
5367786dc871 Uploaded
greg
parents:
diff changeset
3226 var finishCell = $(row.cells[nextIndex]);
5367786dc871 Uploaded
greg
parents:
diff changeset
3227
5367786dc871 Uploaded
greg
parents:
diff changeset
3228 // startCell.animate({
5367786dc871 Uploaded
greg
parents:
diff changeset
3229 // left: finishCell.offset().left,
5367786dc871 Uploaded
greg
parents:
diff changeset
3230 // }, 'slow', function() {
5367786dc871 Uploaded
greg
parents:
diff changeset
3231 if (nextIndex > index) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3232 startCell.before(finishCell);
5367786dc871 Uploaded
greg
parents:
diff changeset
3233 } else {
5367786dc871 Uploaded
greg
parents:
diff changeset
3234 startCell.after(finishCell);
5367786dc871 Uploaded
greg
parents:
diff changeset
3235 }
5367786dc871 Uploaded
greg
parents:
diff changeset
3236 // });
5367786dc871 Uploaded
greg
parents:
diff changeset
3237 });
5367786dc871 Uploaded
greg
parents:
diff changeset
3238 },
5367786dc871 Uploaded
greg
parents:
diff changeset
3239
5367786dc871 Uploaded
greg
parents:
diff changeset
3240 // clone an element, copying its style and class.
5367786dc871 Uploaded
greg
parents:
diff changeset
3241 fullCopy: function(elt, deep) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3242 if (!elt) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3243 return null;
5367786dc871 Uploaded
greg
parents:
diff changeset
3244 }
5367786dc871 Uploaded
greg
parents:
diff changeset
3245 var new_elt = elt.cloneNode(deep);
5367786dc871 Uploaded
greg
parents:
diff changeset
3246 new_elt.className = elt.className;
5367786dc871 Uploaded
greg
parents:
diff changeset
3247 $(new_elt).addClass('clone');
5367786dc871 Uploaded
greg
parents:
diff changeset
3248 forEach(elt.style, function(value, key, object) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3249 if (value == null) return;
5367786dc871 Uploaded
greg
parents:
diff changeset
3250 if (typeof(value) == "string" && value.length == 0) return;
5367786dc871 Uploaded
greg
parents:
diff changeset
3251
5367786dc871 Uploaded
greg
parents:
diff changeset
3252 new_elt.style[key] = elt.style[key];
5367786dc871 Uploaded
greg
parents:
diff changeset
3253 });
5367786dc871 Uploaded
greg
parents:
diff changeset
3254 return new_elt;
5367786dc871 Uploaded
greg
parents:
diff changeset
3255 },
5367786dc871 Uploaded
greg
parents:
diff changeset
3256
5367786dc871 Uploaded
greg
parents:
diff changeset
3257 getColumn: function(table, index) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3258 index = typeof index !== 'undefined' ? index : 0;
5367786dc871 Uploaded
greg
parents:
diff changeset
3259
5367786dc871 Uploaded
greg
parents:
diff changeset
3260 if (index < 0 || index >= table.rows[0].cells.length) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3261 return [];
5367786dc871 Uploaded
greg
parents:
diff changeset
3262
5367786dc871 Uploaded
greg
parents:
diff changeset
3263 } else {
5367786dc871 Uploaded
greg
parents:
diff changeset
3264 var column = [];
5367786dc871 Uploaded
greg
parents:
diff changeset
3265 forEach(table.rows, function(row) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3266 column.push(row.cells[index]);
5367786dc871 Uploaded
greg
parents:
diff changeset
3267 });
5367786dc871 Uploaded
greg
parents:
diff changeset
3268 return column;
5367786dc871 Uploaded
greg
parents:
diff changeset
3269 }
5367786dc871 Uploaded
greg
parents:
diff changeset
3270 },
5367786dc871 Uploaded
greg
parents:
diff changeset
3271
5367786dc871 Uploaded
greg
parents:
diff changeset
3272 isSuitableColumnToSwap: function(targetIndex, movingColIndex) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3273 if (targetIndex != -1) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3274 if (typeof movingColIndex === 'undefined' || targetIndex != movingColIndex) { // check if equals the moving one
5367786dc871 Uploaded
greg
parents:
diff changeset
3275 var top_cell = $(DT.getColumn(DT.dragObj.table, targetIndex)[0]);
5367786dc871 Uploaded
greg
parents:
diff changeset
3276 if (top_cell.find('.' + classes.handle).addBack('.' + classes.handle).exists()) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3277 return true;
5367786dc871 Uploaded
greg
parents:
diff changeset
3278 }
5367786dc871 Uploaded
greg
parents:
diff changeset
3279 }
5367786dc871 Uploaded
greg
parents:
diff changeset
3280 }
5367786dc871 Uploaded
greg
parents:
diff changeset
3281 return false;
5367786dc871 Uploaded
greg
parents:
diff changeset
3282 },
5367786dc871 Uploaded
greg
parents:
diff changeset
3283
5367786dc871 Uploaded
greg
parents:
diff changeset
3284 // Which column does the x value fall inside of? x should include scrollLeft.
5367786dc871 Uploaded
greg
parents:
diff changeset
3285 getColumnAtPosition: function(table, x) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3286 var header = table.tHead.rows[0].cells;
5367786dc871 Uploaded
greg
parents:
diff changeset
3287 for (var i = 0; i < header.length; i++) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3288 //var left = header[i].offsetLeft;
5367786dc871 Uploaded
greg
parents:
diff changeset
3289 var pos = DT.getPositionOnThePage(header[i]);
5367786dc871 Uploaded
greg
parents:
diff changeset
3290 //if (left <= x && x <= left + header[i].offsetWidth) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3291 var px = pos.x;
5367786dc871 Uploaded
greg
parents:
diff changeset
3292 var ow = header[i].offsetWidth;
5367786dc871 Uploaded
greg
parents:
diff changeset
3293 var xpow = pos.x + header[i].offsetWidth;
5367786dc871 Uploaded
greg
parents:
diff changeset
3294 if (pos.x <= x && x <= pos.x + header[i].offsetWidth) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3295 return i;
5367786dc871 Uploaded
greg
parents:
diff changeset
3296 }
5367786dc871 Uploaded
greg
parents:
diff changeset
3297 }
5367786dc871 Uploaded
greg
parents:
diff changeset
3298 return -1;
5367786dc871 Uploaded
greg
parents:
diff changeset
3299 },
5367786dc871 Uploaded
greg
parents:
diff changeset
3300
5367786dc871 Uploaded
greg
parents:
diff changeset
3301 // Store a column swap in a cookie for posterity.
5367786dc871 Uploaded
greg
parents:
diff changeset
3302 storeDrag: function(table) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3303 var order = [];
5367786dc871 Uploaded
greg
parents:
diff changeset
3304 forEach(table.rows[0].cells, function(cell) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3305 var pos = cell.getAttribute('position');
5367786dc871 Uploaded
greg
parents:
diff changeset
3306 if (pos)
5367786dc871 Uploaded
greg
parents:
diff changeset
3307 order.push(pos);
5367786dc871 Uploaded
greg
parents:
diff changeset
3308 });
5367786dc871 Uploaded
greg
parents:
diff changeset
3309
5367786dc871 Uploaded
greg
parents:
diff changeset
3310 var order_string = order[0];
5367786dc871 Uploaded
greg
parents:
diff changeset
3311 for (var i = 1; i < order.length; i++)
5367786dc871 Uploaded
greg
parents:
diff changeset
3312 order_string += ' ' + order[i];
5367786dc871 Uploaded
greg
parents:
diff changeset
3313
5367786dc871 Uploaded
greg
parents:
diff changeset
3314 DT.storeInCookies(order_string);
5367786dc871 Uploaded
greg
parents:
diff changeset
3315 DT.sendOrderToServer(order_string);
5367786dc871 Uploaded
greg
parents:
diff changeset
3316 },
5367786dc871 Uploaded
greg
parents:
diff changeset
3317
5367786dc871 Uploaded
greg
parents:
diff changeset
3318 storeInCookies: function(string) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3319 if (navigator.cookieEnabled) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3320 var cookieName = 'order';
5367786dc871 Uploaded
greg
parents:
diff changeset
3321 createCookie(cookieName, string, DT.cookieDays);
5367786dc871 Uploaded
greg
parents:
diff changeset
3322 }
5367786dc871 Uploaded
greg
parents:
diff changeset
3323 },
5367786dc871 Uploaded
greg
parents:
diff changeset
3324
5367786dc871 Uploaded
greg
parents:
diff changeset
3325 sendOrderToServer: function(string) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3326 if (document.reportId) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3327 $.ajax({
5367786dc871 Uploaded
greg
parents:
diff changeset
3328 type: 'GET',
5367786dc871 Uploaded
greg
parents:
diff changeset
3329 url: '/reorder-report-columns',
5367786dc871 Uploaded
greg
parents:
diff changeset
3330 dataType: 'json',
5367786dc871 Uploaded
greg
parents:
diff changeset
3331 data: {
5367786dc871 Uploaded
greg
parents:
diff changeset
3332 reportId: document.reportId,
5367786dc871 Uploaded
greg
parents:
diff changeset
3333 order: string,
5367786dc871 Uploaded
greg
parents:
diff changeset
3334 },
5367786dc871 Uploaded
greg
parents:
diff changeset
3335 });
5367786dc871 Uploaded
greg
parents:
diff changeset
3336 }
5367786dc871 Uploaded
greg
parents:
diff changeset
3337 },
5367786dc871 Uploaded
greg
parents:
diff changeset
3338 };
5367786dc871 Uploaded
greg
parents:
diff changeset
3339
5367786dc871 Uploaded
greg
parents:
diff changeset
3340 var DT = dragTable;
5367786dc871 Uploaded
greg
parents:
diff changeset
3341
5367786dc871 Uploaded
greg
parents:
diff changeset
3342 /* ******************************************************************
5367786dc871 Uploaded
greg
parents:
diff changeset
3343 Supporting functions: bundled here to avoid depending on a library
5367786dc871 Uploaded
greg
parents:
diff changeset
3344 ****************************************************************** */
5367786dc871 Uploaded
greg
parents:
diff changeset
3345
5367786dc871 Uploaded
greg
parents:
diff changeset
3346
5367786dc871 Uploaded
greg
parents:
diff changeset
3347 //// Dean Edwards/Matthias Miller/John Resig
5367786dc871 Uploaded
greg
parents:
diff changeset
3348 //// has a hook for DT.init already been added? (see below)
5367786dc871 Uploaded
greg
parents:
diff changeset
3349 //var dgListenOnLoad = false;
5367786dc871 Uploaded
greg
parents:
diff changeset
3350 //
5367786dc871 Uploaded
greg
parents:
diff changeset
3351 ///* for Mozilla/Opera9 */
5367786dc871 Uploaded
greg
parents:
diff changeset
3352 //if (document.addEventListener) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3353 // dgListenOnLoad = true;
5367786dc871 Uploaded
greg
parents:
diff changeset
3354 // document.addEventListener("DOMContentLoaded", DT.init, false);
5367786dc871 Uploaded
greg
parents:
diff changeset
3355 //}
5367786dc871 Uploaded
greg
parents:
diff changeset
3356 //
5367786dc871 Uploaded
greg
parents:
diff changeset
3357 ///* for Internet Explorer */
5367786dc871 Uploaded
greg
parents:
diff changeset
3358 ///*@cc_on @*/
5367786dc871 Uploaded
greg
parents:
diff changeset
3359 ///*@if (@_win32)
5367786dc871 Uploaded
greg
parents:
diff changeset
3360 // dgListenOnLoad = true;
5367786dc871 Uploaded
greg
parents:
diff changeset
3361 // document.write("<script id=__dt_onload defer src=//0)><\/script>");
5367786dc871 Uploaded
greg
parents:
diff changeset
3362 // var script = document.getElementById("__dt_onload");
5367786dc871 Uploaded
greg
parents:
diff changeset
3363 // script.onreadystatechange = function() {
5367786dc871 Uploaded
greg
parents:
diff changeset
3364 // if (this.readyState == "complete") {
5367786dc871 Uploaded
greg
parents:
diff changeset
3365 // DT.init(); // call the onload handler
5367786dc871 Uploaded
greg
parents:
diff changeset
3366 // }
5367786dc871 Uploaded
greg
parents:
diff changeset
3367 // };
5367786dc871 Uploaded
greg
parents:
diff changeset
3368 ///*@end @*/
5367786dc871 Uploaded
greg
parents:
diff changeset
3369 //
5367786dc871 Uploaded
greg
parents:
diff changeset
3370 ///* for Safari */
5367786dc871 Uploaded
greg
parents:
diff changeset
3371 //if (/WebKit/i.test(navigator.userAgent)) { // sniff
5367786dc871 Uploaded
greg
parents:
diff changeset
3372 // dgListenOnLoad = true;
5367786dc871 Uploaded
greg
parents:
diff changeset
3373 // var _dgtimer = setInterval(function() {
5367786dc871 Uploaded
greg
parents:
diff changeset
3374 // if (/loaded|complete/.test(document.readyState)) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3375 // DT.init(); // call the onload handler
5367786dc871 Uploaded
greg
parents:
diff changeset
3376 // }
5367786dc871 Uploaded
greg
parents:
diff changeset
3377 // }, 10);
5367786dc871 Uploaded
greg
parents:
diff changeset
3378 //}
5367786dc871 Uploaded
greg
parents:
diff changeset
3379 //
5367786dc871 Uploaded
greg
parents:
diff changeset
3380 ///* for other browsers */
5367786dc871 Uploaded
greg
parents:
diff changeset
3381 ///* Avoid this unless it's absolutely necessary (it breaks sorttable) */
5367786dc871 Uploaded
greg
parents:
diff changeset
3382 //if (!dgListenOnLoad) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3383 // window.onload = DT.init;
5367786dc871 Uploaded
greg
parents:
diff changeset
3384 //}
5367786dc871 Uploaded
greg
parents:
diff changeset
3385
5367786dc871 Uploaded
greg
parents:
diff changeset
3386 </script>
5367786dc871 Uploaded
greg
parents:
diff changeset
3387
5367786dc871 Uploaded
greg
parents:
diff changeset
3388 <script type="text/javascript">
5367786dc871 Uploaded
greg
parents:
diff changeset
3389 /*! HTML5 Shiv vpre3.6 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
5367786dc871 Uploaded
greg
parents:
diff changeset
3390 Uncompressed source: https://github.com/aFarkas/html5shiv */
5367786dc871 Uploaded
greg
parents:
diff changeset
3391 (function(a,b){function h(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x<style>"+b+"</style>",d.insertBefore(c.lastChild,d.firstChild)}function i(){var a=l.elements;return typeof a=="string"?a.split(" "):a}function j(a){var b={},c=a.createElement,f=a.createDocumentFragment,g=f();a.createElement=function(a){if(!l.shivMethods)return c(a);var f;return b[a]?f=b[a].cloneNode():e.test(a)?f=(b[a]=c(a)).cloneNode():f=c(a),f.canHaveChildren&&!d.test(a)?g.appendChild(f):f},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+i().join().replace(/\w+/g,function(a){return c(a),g.createElement(a),'c("'+a+'")'})+");return n}")(l,g)}function k(a){var b;return a.documentShived?a:(l.shivCSS&&!f&&(b=!!h(a,"article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio{display:none}canvas,video{display:inline-block;*display:inline;*zoom:1}[hidden]{display:none}audio[controls]{display:inline-block;*display:inline;*zoom:1}mark{background:#FF0;color:#000}")),g||(b=!j(a)),b&&(a.documentShived=b),a)}var c=a.html5||{},d=/^<|^(?:button|form|map|select|textarea|object|iframe|option|optgroup)$/i,e=/^<|^(?:a|b|button|code|div|fieldset|form|h1|h2|h3|h4|h5|h6|i|iframe|img|input|label|li|link|ol|option|p|param|q|script|select|span|strong|style|table|tbody|td|textarea|tfoot|th|thead|tr|ul)$/i,f,g;(function(){var c=b.createElement("a");c.innerHTML="<xyz></xyz>",f="hidden"in c,f&&typeof injectElementWithStyles=="function"&&injectElementWithStyles("#modernizr{}",function(b){b.hidden=!0,f=(a.getComputedStyle?getComputedStyle(b,null):b.currentStyle).display=="none"}),g=c.childNodes.length==1||function(){try{b.createElement("a")}catch(a){return!0}var c=b.createDocumentFragment();return typeof c.cloneNode=="undefined"||typeof c.createDocumentFragment=="undefined"||typeof c.createElement=="undefined"}()})();var l={elements:c.elements||"abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video",shivCSS:c.shivCSS!==!1,shivMethods:c.shivMethods!==!1,type:"default",shivDocument:k};a.html5=l,k(b)})(this,document)
5367786dc871 Uploaded
greg
parents:
diff changeset
3392 </script>
5367786dc871 Uploaded
greg
parents:
diff changeset
3393
5367786dc871 Uploaded
greg
parents:
diff changeset
3394 <script type="text/javascript">
5367786dc871 Uploaded
greg
parents:
diff changeset
3395 /**
5367786dc871 Uploaded
greg
parents:
diff changeset
3396 * Bootstrap.js by @fat & @mdo
5367786dc871 Uploaded
greg
parents:
diff changeset
3397 * plugins: bootstrap-tooltip.js
5367786dc871 Uploaded
greg
parents:
diff changeset
3398 * Copyright 2012 Twitter, Inc.
5367786dc871 Uploaded
greg
parents:
diff changeset
3399 * http://www.apache.org/licenses/LICENSE-2.0.txt
5367786dc871 Uploaded
greg
parents:
diff changeset
3400 */
5367786dc871 Uploaded
greg
parents:
diff changeset
3401 !function(a){var b=function(a,b){this.init("tooltip",a,b)};b.prototype={constructor:b,init:function(b,c,d){var e,f;this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.enabled=!0,this.options.trigger!="manual"&&(e=this.options.trigger=="hover"?"mouseenter":"focus",f=this.options.trigger=="hover"?"mouseleave":"blur",this.$element.on(e,this.options.selector,a.proxy(this.enter,this)),this.$element.on(f,this.options.selector,a.proxy(this.leave,this))),this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},getOptions:function(b){return b=a.extend({},a.fn[this.type].defaults,b,this.$element.data()),b.delay&&typeof b.delay=="number"&&(b.delay={show:b.delay,hide:b.delay}),b},enter:function(b){var c=a(b.currentTarget)[this.type](this._options).data(this.type);if(!c.options.delay||!c.options.delay.show)return c.show();clearTimeout(this.timeout),c.hoverState="in",this.timeout=setTimeout(function(){c.hoverState=="in"&&c.show()},c.options.delay.show)},leave:function(b){var c=a(b.currentTarget)[this.type](this._options).data(this.type);this.timeout&&clearTimeout(this.timeout);if(!c.options.delay||!c.options.delay.hide)return c.hide();c.hoverState="out",this.timeout=setTimeout(function(){c.hoverState=="out"&&c.hide()},c.options.delay.hide)},show:function(){var a,b,c,d,e,f,g;if(this.hasContent()&&this.enabled){a=this.tip(),this.setContent(),this.options.animation&&a.addClass("fade"),f=typeof this.options.placement=="function"?this.options.placement.call(this,a[0],this.$element[0]):this.options.placement,b=/in/.test(f),a.remove().css({top:0,left:0,display:"block"}).appendTo(b?this.$element:document.body),c=this.getPosition(b),d=a[0].offsetWidth,e=a[0].offsetHeight;switch(b?f.split(" ")[1]:f){case"bottom":g={top:c.top+c.height,left:c.left+c.width/2-d/2};break;case"top":g={top:c.top-e+4,left:c.left+c.width/2-d/2};break;case"left":g={top:c.top+c.height/2-e/2,left:c.left-d};break;case"right":g={top:c.top+c.height/2-e/2,left:c.left+c.width}}a.css(g).addClass(f).addClass("in")}},isHTML:function(a){return typeof a!="string"||a.charAt(0)==="<"&&a.charAt(a.length-1)===">"&&a.length>=3||/^(?:[^<]*<[\w\W]+>[^>]*$)/.exec(a)},setContent:function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.isHTML(b)?"html":"text"](b),a.removeClass("fade in top bottom left right")},hide:function(){function d(){var b=setTimeout(function(){c.off(a.support.transition.end).remove()},500);c.one(a.support.transition.end,function(){clearTimeout(b),c.remove()})}var b=this,c=this.tip();c.removeClass("in"),a.support.transition&&this.$tip.hasClass("fade")?d():c.remove()},fixTitle:function(){var a=this.$element;(a.attr("title")||typeof a.attr("data-original-title")!="string")&&a.attr("data-original-title",a.attr("title")||"").removeAttr("title")},hasContent:function(){return this.getTitle()},getPosition:function(b){return a.extend({},b?{top:0,left:0}:this.$element.offset(),{width:this.$element[0].offsetWidth,height:this.$element[0].offsetHeight})},getTitle:function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||(typeof c.title=="function"?c.title.call(b[0]):c.title),a},tip:function(){return this.$tip=this.$tip||a(this.options.template)},validate:function(){this.$element[0].parentNode||(this.hide(),this.$element=null,this.options=null)},enable:function(){this.enabled=!0},disable:function(){this.enabled=!1},toggleEnabled:function(){this.enabled=!this.enabled},toggle:function(){this[this.tip().hasClass("in")?"hide":"show"]()}},a.fn.tooltip=function(c){return this.each(function(){var d=a(this),e=d.data("tooltip"),f=typeof c=="object"&&c;e||d.data("tooltip",e=new b(this,f)),typeof c=="string"&&e[c]()})},a.fn.tooltip.Constructor=b,a.fn.tooltip.defaults={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover",title:"",delay:0}}(window.jQuery)
5367786dc871 Uploaded
greg
parents:
diff changeset
3402 </script>
5367786dc871 Uploaded
greg
parents:
diff changeset
3403
5367786dc871 Uploaded
greg
parents:
diff changeset
3404 <script type="text/javascript">
5367786dc871 Uploaded
greg
parents:
diff changeset
3405 /*!
5367786dc871 Uploaded
greg
parents:
diff changeset
3406 * Bootstrap.js by @fat & @mdo
5367786dc871 Uploaded
greg
parents:
diff changeset
3407 * Copyright 2012 Twitter, Inc.
5367786dc871 Uploaded
greg
parents:
diff changeset
3408 * http://www.apache.org/licenses/LICENSE-2.0.txt
5367786dc871 Uploaded
greg
parents:
diff changeset
3409 */
5367786dc871 Uploaded
greg
parents:
diff changeset
3410 !function(a){a(function(){"use strict",a.support.transition=function(){var a=function(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd",msTransition:"MSTransitionEnd",transition:"transitionend"},c;for(c in b)if(a.style[c]!==undefined)return b[c]}();return a&&{end:a}}()})}(window.jQuery),!function(a){"use strict";var b='[data-dismiss="alert"]',c=function(c){a(c).on("click",b,this.close)};c.prototype.close=function(b){function f(){e.trigger("closed").remove()}var c=a(this),d=c.attr("data-target"),e;d||(d=c.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),e=a(d),b&&b.preventDefault(),e.length||(e=c.hasClass("alert")?c:c.parent()),e.trigger(b=a.Event("close"));if(b.isDefaultPrevented())return;e.removeClass("in"),a.support.transition&&e.hasClass("fade")?e.on(a.support.transition.end,f):f()},a.fn.alert=function(b){return this.each(function(){var d=a(this),e=d.data("alert");e||d.data("alert",e=new c(this)),typeof b=="string"&&e[b].call(d)})},a.fn.alert.Constructor=c,a(function(){a("body").on("click.alert.data-api",b,c.prototype.close)})}(window.jQuery),!function(a){"use strict";var b=function(b,c){this.$element=a(b),this.options=a.extend({},a.fn.button.defaults,c)};b.prototype.setState=function(a){var b="disabled",c=this.$element,d=c.data(),e=c.is("input")?"val":"html";a+="Text",d.resetText||c.data("resetText",c[e]()),c[e](d[a]||this.options[a]),setTimeout(function(){a=="loadingText"?c.addClass(b).attr(b,b):c.removeClass(b).removeAttr(b)},0)},b.prototype.toggle=function(){var a=this.$element.parent('[data-toggle="buttons-radio"]');a&&a.find(".active").removeClass("active"),this.$element.toggleClass("active")},a.fn.button=function(c){return this.each(function(){var d=a(this),e=d.data("button"),f=typeof c=="object"&&c;e||d.data("button",e=new b(this,f)),c=="toggle"?e.toggle():c&&e.setState(c)})},a.fn.button.defaults={loadingText:"loading..."},a.fn.button.Constructor=b,a(function(){a("body").on("click.button.data-api","[data-toggle^=button]",function(b){var c=a(b.target);c.hasClass("btn")||(c=c.closest(".btn")),c.button("toggle")})})}(window.jQuery),!function(a){"use strict";var b=function(b,c){this.$element=a(b),this.options=c,this.options.slide&&this.slide(this.options.slide),this.options.pause=="hover"&&this.$element.on("mouseenter",a.proxy(this.pause,this)).on("mouseleave",a.proxy(this.cycle,this))};b.prototype={cycle:function(b){return b||(this.paused=!1),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},to:function(b){var c=this.$element.find(".active"),d=c.parent().children(),e=d.index(c),f=this;if(b>d.length-1||b<0)return;return this.sliding?this.$element.one("slid",function(){f.to(b)}):e==b?this.pause().cycle():this.slide(b>e?"next":"prev",a(d[b]))},pause:function(a){return a||(this.paused=!0),clearInterval(this.interval),this.interval=null,this},next:function(){if(this.sliding)return;return this.slide("next")},prev:function(){if(this.sliding)return;return this.slide("prev")},slide:function(b,c){var d=this.$element.find(".active"),e=c||d[b](),f=this.interval,g=b=="next"?"left":"right",h=b=="next"?"first":"last",i=this,j=a.Event("slide");this.sliding=!0,f&&this.pause(),e=e.length?e:this.$element.find(".item")[h]();if(e.hasClass("active"))return;if(a.support.transition&&this.$element.hasClass("slide")){this.$element.trigger(j);if(j.isDefaultPrevented())return;e.addClass(b),e[0].offsetWidth,d.addClass(g),e.addClass(g),this.$element.one(a.support.transition.end,function(){e.removeClass([b,g].join(" ")).addClass("active"),d.removeClass(["active",g].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger("slid")},0)})}else{this.$element.trigger(j);if(j.isDefaultPrevented())return;d.removeClass("active"),e.addClass("active"),this.sliding=!1,this.$element.trigger("slid")}return f&&this.cycle(),this}},a.fn.carousel=function(c){return this.each(function(){var d=a(this),e=d.data("carousel"),f=a.extend({},a.fn.carousel.defaults,typeof c=="object"&&c);e||d.data("carousel",e=new b(this,f)),typeof c=="number"?e.to(c):typeof c=="string"||(c=f.slide)?e[c]():f.interval&&e.cycle()})},a.fn.carousel.defaults={interval:5e3,pause:"hover"},a.fn.carousel.Constructor=b,a(function(){a("body").on("click.carousel.data-api","[data-slide]",function(b){var c=a(this),d,e=a(c.attr("data-target")||(d=c.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,"")),f=!e.data("modal")&&a.extend({},e.data(),c.data());e.carousel(f),b.preventDefault()})})}(window.jQuery),!function(a){"use strict";var b=function(b,c){this.$element=a(b),this.options=a.extend({},a.fn.collapse.defaults,c),this.options.parent&&(this.$parent=a(this.options.parent)),this.options.toggle&&this.toggle()};b.prototype={constructor:b,dimension:function(){var a=this.$element.hasClass("width");return a?"width":"height"},show:function(){var b,c,d,e;if(this.transitioning)return;b=this.dimension(),c=a.camelCase(["scroll",b].join("-")),d=this.$parent&&this.$parent.find("> .accordion-group > .in");if(d&&d.length){e=d.data("collapse");if(e&&e.transitioning)return;d.collapse("hide"),e||d.data("collapse",null)}this.$element[b](0),this.transition("addClass",a.Event("show"),"shown"),this.$element[b](this.$element[0][c])},hide:function(){var b;if(this.transitioning)return;b=this.dimension(),this.reset(this.$element[b]()),this.transition("removeClass",a.Event("hide"),"hidden"),this.$element[b](0)},reset:function(a){var b=this.dimension();return this.$element.removeClass("collapse")[b](a||"auto")[0].offsetWidth,this.$element[a!==null?"addClass":"removeClass"]("collapse"),this},transition:function(b,c,d){var e=this,f=function(){c.type=="show"&&e.reset(),e.transitioning=0,e.$element.trigger(d)};this.$element.trigger(c);if(c.isDefaultPrevented())return;this.transitioning=1,this.$element[b]("in"),a.support.transition&&this.$element.hasClass("collapse")?this.$element.one(a.support.transition.end,f):f()},toggle:function(){this[this.$element.hasClass("in")?"hide":"show"]()}},a.fn.collapse=function(c){return this.each(function(){var d=a(this),e=d.data("collapse"),f=typeof c=="object"&&c;e||d.data("collapse",e=new b(this,f)),typeof c=="string"&&e[c]()})},a.fn.collapse.defaults={toggle:!0},a.fn.collapse.Constructor=b,a(function(){a("body").on("click.collapse.data-api","[data-toggle=collapse]",function(b){var c=a(this),d,e=c.attr("data-target")||b.preventDefault()||(d=c.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""),f=a(e).data("collapse")?"toggle":c.data();a(e).collapse(f)})})}(window.jQuery),!function(a){function d(){a(b).parent().removeClass("open")}"use strict";var b='[data-toggle="dropdown"]',c=function(b){var c=a(b).on("click.dropdown.data-api",this.toggle);a("html").on("click.dropdown.data-api",function(){c.parent().removeClass("open")})};c.prototype={constructor:c,toggle:function(b){var c=a(this),e,f,g;if(c.is(".disabled, :disabled"))return;return f=c.attr("data-target"),f||(f=c.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,"")),e=a(f),e.length||(e=c.parent()),g=e.hasClass("open"),d(),g||e.toggleClass("open"),!1}},a.fn.dropdown=function(b){return this.each(function(){var d=a(this),e=d.data("dropdown");e||d.data("dropdown",e=new c(this)),typeof b=="string"&&e[b].call(d)})},a.fn.dropdown.Constructor=c,a(function(){a("html").on("click.dropdown.data-api",d),a("body").on("click.dropdown",".dropdown form",function(a){a.stopPropagation()}).on("click.dropdown.data-api",b,c.prototype.toggle)})}(window.jQuery),!function(a){function c(){var b=this,c=setTimeout(function(){b.$element.off(a.support.transition.end),d.call(b)},500);this.$element.one(a.support.transition.end,function(){clearTimeout(c),d.call(b)})}function d(a){this.$element.hide().trigger("hidden"),e.call(this)}function e(b){var c=this,d=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var e=a.support.transition&&d;this.$backdrop=a('<div class="modal-backdrop '+d+'" />').appendTo(document.body),this.options.backdrop!="static"&&this.$backdrop.click(a.proxy(this.hide,this)),e&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),e?this.$backdrop.one(a.support.transition.end,b):b()}else!this.isShown&&this.$backdrop?(this.$backdrop.removeClass("in"),a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one(a.support.transition.end,a.proxy(f,this)):f.call(this)):b&&b()}function f(){this.$backdrop.remove(),this.$backdrop=null}function g(){var b=this;this.isShown&&this.options.keyboard?a(document).on("keyup.dismiss.modal",function(a){a.which==27&&b.hide()}):this.isShown||a(document).off("keyup.dismiss.modal")}"use strict";var b=function(b,c){this.options=c,this.$element=a(b).delegate('[data-dismiss="modal"]',"click.dismiss.modal",a.proxy(this.hide,this))};b.prototype={constructor:b,toggle:function(){return this[this.isShown?"hide":"show"]()},show:function(){var b=this,c=a.Event("show");this.$element.trigger(c);if(this.isShown||c.isDefaultPrevented())return;a("body").addClass("modal-open"),this.isShown=!0,g.call(this),e.call(this,function(){var c=a.support.transition&&b.$element.hasClass("fade");b.$element.parent().length||b.$element.appendTo(document.body),b.$element.show(),c&&b.$element[0].offsetWidth,b.$element.addClass("in"),c?b.$element.one(a.support.transition.end,function(){b.$element.trigger("shown")}):b.$element.trigger("shown")})},hide:function(b){b&&b.preventDefault();var e=this;b=a.Event("hide"),this.$element.trigger(b);if(!this.isShown||b.isDefaultPrevented())return;this.isShown=!1,a("body").removeClass("modal-open"),g.call(this),this.$element.removeClass("in"),a.support.transition&&this.$element.hasClass("fade")?c.call(this):d.call(this)}},a.fn.modal=function(c){return this.each(function(){var d=a(this),e=d.data("modal"),f=a.extend({},a.fn.modal.defaults,d.data(),typeof c=="object"&&c);e||d.data("modal",e=new b(this,f)),typeof c=="string"?e[c]():f.show&&e.show()})},a.fn.modal.defaults={backdrop:!0,keyboard:!0,show:!0},a.fn.modal.Constructor=b,a(function(){a("body").on("click.modal.data-api",'[data-toggle="modal"]',function(b){var c=a(this),d,e=a(c.attr("data-target")||(d=c.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,"")),f=e.data("modal")?"toggle":a.extend({},e.data(),c.data());b.preventDefault(),e.modal(f)})})}(window.jQuery),!function(a){"use strict";var b=function(a,b){this.init("tooltip",a,b)};b.prototype={constructor:b,init:function(b,c,d){var e,f;this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.enabled=!0,this.options.trigger!="manual"&&(e=this.options.trigger=="hover"?"mouseenter":"focus",f=this.options.trigger=="hover"?"mouseleave":"blur",this.$element.on(e,this.options.selector,a.proxy(this.enter,this)),this.$element.on(f,this.options.selector,a.proxy(this.leave,this))),this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},getOptions:function(b){return b=a.extend({},a.fn[this.type].defaults,b,this.$element.data()),b.delay&&typeof b.delay=="number"&&(b.delay={show:b.delay,hide:b.delay}),b},enter:function(b){var c=a(b.currentTarget)[this.type](this._options).data(this.type);if(!c.options.delay||!c.options.delay.show)return c.show();clearTimeout(this.timeout),c.hoverState="in",this.timeout=setTimeout(function(){c.hoverState=="in"&&c.show()},c.options.delay.show)},leave:function(b){var c=a(b.currentTarget)[this.type](this._options).data(this.type);this.timeout&&clearTimeout(this.timeout);if(!c.options.delay||!c.options.delay.hide)return c.hide();c.hoverState="out",this.timeout=setTimeout(function(){c.hoverState=="out"&&c.hide()},c.options.delay.hide)},show:function(){var a,b,c,d,e,f,g;if(this.hasContent()&&this.enabled){a=this.tip(),this.setContent(),this.options.animation&&a.addClass("fade"),f=typeof this.options.placement=="function"?this.options.placement.call(this,a[0],this.$element[0]):this.options.placement,b=/in/.test(f),a.remove().css({top:0,left:0,display:"block"}).appendTo(b?this.$element:document.body),c=this.getPosition(b),d=a[0].offsetWidth,e=a[0].offsetHeight;switch(b?f.split(" ")[1]:f){case"bottom":g={top:c.top+c.height,left:c.left+c.width/2-d/2};break;case"top":g={top:c.top-e,left:c.left+c.width/2-d/2};break;case"left":g={top:c.top+c.height/2-e/2,left:c.left-d};break;case"right":g={top:c.top+c.height/2-e/2,left:c.left+c.width}}a.css(g).addClass(f).addClass("in")}},isHTML:function(a){return typeof a!="string"||a.charAt(0)==="<"&&a.charAt(a.length-1)===">"&&a.length>=3||/^(?:[^<]*<[\w\W]+>[^>]*$)/.exec(a)},setContent:function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.isHTML(b)?"html":"text"](b),a.removeClass("fade in top bottom left right")},hide:function(){function d(){var b=setTimeout(function(){c.off(a.support.transition.end).remove()},500);c.one(a.support.transition.end,function(){clearTimeout(b),c.remove()})}var b=this,c=this.tip();c.removeClass("in"),a.support.transition&&this.$tip.hasClass("fade")?d():c.remove()},fixTitle:function(){var a=this.$element;(a.attr("title")||typeof a.attr("data-original-title")!="string")&&a.attr("data-original-title",a.attr("title")||"").removeAttr("title")},hasContent:function(){return this.getTitle()},getPosition:function(b){return a.extend({},b?{top:0,left:0}:this.$element.offset(),{width:this.$element[0].offsetWidth,height:this.$element[0].offsetHeight})},getTitle:function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||(typeof c.title=="function"?c.title.call(b[0]):c.title),a},tip:function(){return this.$tip=this.$tip||a(this.options.template)},validate:function(){this.$element[0].parentNode||(this.hide(),this.$element=null,this.options=null)},enable:function(){this.enabled=!0},disable:function(){this.enabled=!1},toggleEnabled:function(){this.enabled=!this.enabled},toggle:function(){this[this.tip().hasClass("in")?"hide":"show"]()}},a.fn.tooltip=function(c){return this.each(function(){var d=a(this),e=d.data("tooltip"),f=typeof c=="object"&&c;e||d.data("tooltip",e=new b(this,f)),typeof c=="string"&&e[c]()})},a.fn.tooltip.Constructor=b,a.fn.tooltip.defaults={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover",title:"",delay:0}}(window.jQuery),!function(a){"use strict";var b=function(a,b){this.init("popover",a,b)};b.prototype=a.extend({},a.fn.tooltip.Constructor.prototype,{constructor:b,setContent:function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.isHTML(b)?"html":"text"](b),a.find(".popover-content > *")[this.isHTML(c)?"html":"text"](c),a.removeClass("fade top bottom left right in")},hasContent:function(){return this.getTitle()||this.getContent()},getContent:function(){var a,b=this.$element,c=this.options;return a=b.attr("data-content")||(typeof c.content=="function"?c.content.call(b[0]):c.content),a},tip:function(){return this.$tip||(this.$tip=a(this.options.template)),this.$tip}}),a.fn.popover=function(c){return this.each(function(){var d=a(this),e=d.data("popover"),f=typeof c=="object"&&c;e||d.data("popover",e=new b(this,f)),typeof c=="string"&&e[c]()})},a.fn.popover.Constructor=b,a.fn.popover.defaults=a.extend({},a.fn.tooltip.defaults,{placement:"right",content:"",template:'<div class="popover"><div class="arrow"></div><div class="popover-inner"><h3 class="popover-title"></h3><div class="popover-content"><p></p></div></div></div>'})}(window.jQuery),!function(a){function b(b,c){var d=a.proxy(this.process,this),e=a(b).is("body")?a(window):a(b),f;this.options=a.extend({},a.fn.scrollspy.defaults,c),this.$scrollElement=e.on("scroll.scroll.data-api",d),this.selector=(this.options.target||(f=a(b).attr("href"))&&f.replace(/.*(?=#[^\s]+$)/,"")||"")+" .nav li > a",this.$body=a("body"),this.refresh(),this.process()}"use strict",b.prototype={constructor:b,refresh:function(){var b=this,c;this.offsets=a([]),this.targets=a([]),c=this.$body.find(this.selector).map(function(){var b=a(this),c=b.data("target")||b.attr("href"),d=/^#\w/.test(c)&&a(c);return d&&c.length&&[[d.position().top,c]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},process:function(){var a=this.$scrollElement.scrollTop()+this.options.offset,b=this.$scrollElement[0].scrollHeight||this.$body[0].scrollHeight,c=b-this.$scrollElement.height(),d=this.offsets,e=this.targets,f=this.activeTarget,g;if(a>=c)return f!=(g=e.last()[0])&&this.activate(g);for(g=d.length;g--;)f!=e[g]&&a>=d[g]&&(!d[g+1]||a<=d[g+1])&&this.activate(e[g])},activate:function(b){var c,d;this.activeTarget=b,a(this.selector).parent(".active").removeClass("active"),d=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',c=a(d).parent("li").addClass("active"),c.parent(".dropdown-menu")&&(c=c.closest("li.dropdown").addClass("active")),c.trigger("activate")}},a.fn.scrollspy=function(c){return this.each(function(){var d=a(this),e=d.data("scrollspy"),f=typeof c=="object"&&c;e||d.data("scrollspy",e=new b(this,f)),typeof c=="string"&&e[c]()})},a.fn.scrollspy.Constructor=b,a.fn.scrollspy.defaults={offset:10},a(function(){a('[data-spy="scroll"]').each(function(){var b=a(this);b.scrollspy(b.data())})})}(window.jQuery),!function(a){"use strict";var b=function(b){this.element=a(b)};b.prototype={constructor:b,show:function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.attr("data-target"),e,f,g;d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,""));if(b.parent("li").hasClass("active"))return;e=c.find(".active a").last()[0],g=a.Event("show",{relatedTarget:e}),b.trigger(g);if(g.isDefaultPrevented())return;f=a(d),this.activate(b.parent("li"),c),this.activate(f,f.parent(),function(){b.trigger({type:"shown",relatedTarget:e})})},activate:function(b,c,d){function g(){e.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),b.addClass("active"),f?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu")&&b.closest("li.dropdown").addClass("active"),d&&d()}var e=c.find("> .active"),f=d&&a.support.transition&&e.hasClass("fade");f?e.one(a.support.transition.end,g):g(),e.removeClass("in")}},a.fn.tab=function(c){return this.each(function(){var d=a(this),e=d.data("tab");e||d.data("tab",e=new b(this)),typeof c=="string"&&e[c]()})},a.fn.tab.Constructor=b,a(function(){a("body").on("click.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',function(b){b.preventDefault(),a(this).tab("show")})})}(window.jQuery),!function(a){"use strict";var b=function(b,c){this.$element=a(b),this.options=a.extend({},a.fn.typeahead.defaults,c),this.matcher=this.options.matcher||this.matcher,this.sorter=this.options.sorter||this.sorter,this.highlighter=this.options.highlighter||this.highlighter,this.updater=this.options.updater||this.updater,this.$menu=a(this.options.menu).appendTo("body"),this.source=this.options.source,this.shown=!1,this.listen()};b.prototype={constructor:b,select:function(){var a=this.$menu.find(".active").attr("data-value");return this.$element.val(this.updater(a)).change(),this.hide()},updater:function(a){return a},show:function(){var b=a.extend({},this.$element.offset(),{height:this.$element[0].offsetHeight});return this.$menu.css({top:b.top+b.height,left:b.left}),this.$menu.show(),this.shown=!0,this},hide:function(){return this.$menu.hide(),this.shown=!1,this},lookup:function(b){var c=this,d,e;return this.query=this.$element.val(),this.query?(d=a.grep(this.source,function(a){return c.matcher(a)}),d=this.sorter(d),d.length?this.render(d.slice(0,this.options.items)).show():this.shown?this.hide():this):this.shown?this.hide():this},matcher:function(a){return~a.toLowerCase().indexOf(this.query.toLowerCase())},sorter:function(a){var b=[],c=[],d=[],e;while(e=a.shift())e.toLowerCase().indexOf(this.query.toLowerCase())?~e.indexOf(this.query)?c.push(e):d.push(e):b.push(e);return b.concat(c,d)},highlighter:function(a){var b=this.query.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&");return a.replace(new RegExp("("+b+")","ig"),function(a,b){return"<strong>"+b+"</strong>"})},render:function(b){var c=this;return b=a(b).map(function(b,d){return b=a(c.options.item).attr("data-value",d),b.find("a").html(c.highlighter(d)),b[0]}),b.first().addClass("active"),this.$menu.html(b),this},next:function(b){var c=this.$menu.find(".active").removeClass("active"),d=c.next();d.length||(d=a(this.$menu.find("li")[0])),d.addClass("active")},prev:function(a){var b=this.$menu.find(".active").removeClass("active"),c=b.prev();c.length||(c=this.$menu.find("li").last()),c.addClass("active")},listen:function(){this.$element.on("blur",a.proxy(this.blur,this)).on("keypress",a.proxy(this.keypress,this)).on("keyup",a.proxy(this.keyup,this)),(a.browser.webkit||a.browser.msie)&&this.$element.on("keydown",a.proxy(this.keypress,this)),this.$menu.on("click",a.proxy(this.click,this)).on("mouseenter","li",a.proxy(this.mouseenter,this))},keyup:function(a){switch(a.keyCode){case 40:case 38:break;case 9:case 13:if(!this.shown)return;this.select();break;case 27:if(!this.shown)return;this.hide();break;default:this.lookup()}a.stopPropagation(),a.preventDefault()},keypress:function(a){if(!this.shown)return;switch(a.keyCode){case 9:case 13:case 27:a.preventDefault();break;case 38:if(a.type!="keydown")break;a.preventDefault(),this.prev();break;case 40:if(a.type!="keydown")break;a.preventDefault(),this.next()}a.stopPropagation()},blur:function(a){var b=this;setTimeout(function(){b.hide()},150)},click:function(a){a.stopPropagation(),a.preventDefault(),this.select()},mouseenter:function(b){this.$menu.find(".active").removeClass("active"),a(b.currentTarget).addClass("active")}},a.fn.typeahead=function(c){return this.each(function(){var d=a(this),e=d.data("typeahead"),f=typeof c=="object"&&c;e||d.data("typeahead",e=new b(this,f)),typeof c=="string"&&e[c]()})},a.fn.typeahead.defaults={source:[],items:8,menu:'<ul class="typeahead dropdown-menu"></ul>',item:'<li><a href="#"></a></li>'},a.fn.typeahead.Constructor=b,a(function(){a("body").on("focus.typeahead.data-api",'[data-provide="typeahead"]',function(b){var c=a(this);if(c.data("typeahead"))return;b.preventDefault(),c.typeahead(c.data())})})}(window.jQuery);
5367786dc871 Uploaded
greg
parents:
diff changeset
3411 </script>
5367786dc871 Uploaded
greg
parents:
diff changeset
3412
5367786dc871 Uploaded
greg
parents:
diff changeset
3413 <script type="text/javascript">
5367786dc871 Uploaded
greg
parents:
diff changeset
3414 /* ===========================================================
5367786dc871 Uploaded
greg
parents:
diff changeset
3415 * bootstrap-tooltip.js v2.0.4
5367786dc871 Uploaded
greg
parents:
diff changeset
3416 * http://twitter.github.com/bootstrap/javascript.html#tooltips
5367786dc871 Uploaded
greg
parents:
diff changeset
3417 * Inspired by the original jQuery.tipsy by Jason Frame
5367786dc871 Uploaded
greg
parents:
diff changeset
3418 * ===========================================================
5367786dc871 Uploaded
greg
parents:
diff changeset
3419 * Copyright 2012 Twitter, Inc.
5367786dc871 Uploaded
greg
parents:
diff changeset
3420 *
5367786dc871 Uploaded
greg
parents:
diff changeset
3421 * Licensed under the Apache License, Version 2.0 (the "License");
5367786dc871 Uploaded
greg
parents:
diff changeset
3422 * you may not use this file except in compliance with the License.
5367786dc871 Uploaded
greg
parents:
diff changeset
3423 * You may obtain a copy of the License at
5367786dc871 Uploaded
greg
parents:
diff changeset
3424 *
5367786dc871 Uploaded
greg
parents:
diff changeset
3425 * http://www.apache.org/licenses/LICENSE-2.0
5367786dc871 Uploaded
greg
parents:
diff changeset
3426 *
5367786dc871 Uploaded
greg
parents:
diff changeset
3427 * Unless required by applicable law or agreed to in writing, software
5367786dc871 Uploaded
greg
parents:
diff changeset
3428 * distributed under the License is distributed on an "AS IS" BASIS,
5367786dc871 Uploaded
greg
parents:
diff changeset
3429 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
5367786dc871 Uploaded
greg
parents:
diff changeset
3430 * See the License for the specific language governing permissions and
5367786dc871 Uploaded
greg
parents:
diff changeset
3431 * limitations under the License.
5367786dc871 Uploaded
greg
parents:
diff changeset
3432 * ========================================================== */
5367786dc871 Uploaded
greg
parents:
diff changeset
3433
5367786dc871 Uploaded
greg
parents:
diff changeset
3434
5367786dc871 Uploaded
greg
parents:
diff changeset
3435 !function ($) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3436
5367786dc871 Uploaded
greg
parents:
diff changeset
3437 "use strict"; // jshint ;_;
5367786dc871 Uploaded
greg
parents:
diff changeset
3438
5367786dc871 Uploaded
greg
parents:
diff changeset
3439
5367786dc871 Uploaded
greg
parents:
diff changeset
3440 /* TOOLTIP PUBLIC CLASS DEFINITION
5367786dc871 Uploaded
greg
parents:
diff changeset
3441 * =============================== */
5367786dc871 Uploaded
greg
parents:
diff changeset
3442
5367786dc871 Uploaded
greg
parents:
diff changeset
3443 var Tooltip = function (element, options) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3444 this.init('tooltip', element, options)
5367786dc871 Uploaded
greg
parents:
diff changeset
3445 };
5367786dc871 Uploaded
greg
parents:
diff changeset
3446
5367786dc871 Uploaded
greg
parents:
diff changeset
3447 Tooltip.prototype = {
5367786dc871 Uploaded
greg
parents:
diff changeset
3448
5367786dc871 Uploaded
greg
parents:
diff changeset
3449 constructor: Tooltip
5367786dc871 Uploaded
greg
parents:
diff changeset
3450
5367786dc871 Uploaded
greg
parents:
diff changeset
3451 , init: function (type, element, options) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3452 var eventIn
5367786dc871 Uploaded
greg
parents:
diff changeset
3453 , eventOut;
5367786dc871 Uploaded
greg
parents:
diff changeset
3454
5367786dc871 Uploaded
greg
parents:
diff changeset
3455 this.type = type;
5367786dc871 Uploaded
greg
parents:
diff changeset
3456 this.$element = $(element);
5367786dc871 Uploaded
greg
parents:
diff changeset
3457 this.options = this.getOptions(options);
5367786dc871 Uploaded
greg
parents:
diff changeset
3458 this.enabled = true;
5367786dc871 Uploaded
greg
parents:
diff changeset
3459
5367786dc871 Uploaded
greg
parents:
diff changeset
3460 if (this.options.trigger != 'manual') {
5367786dc871 Uploaded
greg
parents:
diff changeset
3461 eventIn = this.options.trigger == 'hover' ? 'mouseenter' : 'focus';
5367786dc871 Uploaded
greg
parents:
diff changeset
3462 eventOut = this.options.trigger == 'hover' ? 'mouseleave' : 'blur';
5367786dc871 Uploaded
greg
parents:
diff changeset
3463 this.$element.on(eventIn, this.options.selector, $.proxy(this.enter, this));
5367786dc871 Uploaded
greg
parents:
diff changeset
3464 this.$element.on(eventOut, this.options.selector, $.proxy(this.leave, this));
5367786dc871 Uploaded
greg
parents:
diff changeset
3465 }
5367786dc871 Uploaded
greg
parents:
diff changeset
3466
5367786dc871 Uploaded
greg
parents:
diff changeset
3467 this.options.selector ?
5367786dc871 Uploaded
greg
parents:
diff changeset
3468 (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
5367786dc871 Uploaded
greg
parents:
diff changeset
3469 this.fixTitle();
5367786dc871 Uploaded
greg
parents:
diff changeset
3470 }
5367786dc871 Uploaded
greg
parents:
diff changeset
3471
5367786dc871 Uploaded
greg
parents:
diff changeset
3472 , getOptions: function (options) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3473 options = $.extend({}, $.fn[this.type].defaults, options, this.$element.data())
5367786dc871 Uploaded
greg
parents:
diff changeset
3474
5367786dc871 Uploaded
greg
parents:
diff changeset
3475 if (options.delay && typeof options.delay == 'number') {
5367786dc871 Uploaded
greg
parents:
diff changeset
3476 options.delay = {
5367786dc871 Uploaded
greg
parents:
diff changeset
3477 show: options.delay
5367786dc871 Uploaded
greg
parents:
diff changeset
3478 , hide: options.delay
5367786dc871 Uploaded
greg
parents:
diff changeset
3479 };
5367786dc871 Uploaded
greg
parents:
diff changeset
3480 }
5367786dc871 Uploaded
greg
parents:
diff changeset
3481
5367786dc871 Uploaded
greg
parents:
diff changeset
3482 return options;
5367786dc871 Uploaded
greg
parents:
diff changeset
3483 }
5367786dc871 Uploaded
greg
parents:
diff changeset
3484
5367786dc871 Uploaded
greg
parents:
diff changeset
3485 , enter: function (e) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3486 if (dragTable && dragTable.isDragging)
5367786dc871 Uploaded
greg
parents:
diff changeset
3487 return;
5367786dc871 Uploaded
greg
parents:
diff changeset
3488
5367786dc871 Uploaded
greg
parents:
diff changeset
3489 var self = $(e.currentTarget)[this.type](this._options).data(this.type);
5367786dc871 Uploaded
greg
parents:
diff changeset
3490
5367786dc871 Uploaded
greg
parents:
diff changeset
3491 if (!self.options.delay || !self.options.delay.show) self.show();
5367786dc871 Uploaded
greg
parents:
diff changeset
3492
5367786dc871 Uploaded
greg
parents:
diff changeset
3493 clearTimeout(this.timeout);
5367786dc871 Uploaded
greg
parents:
diff changeset
3494 self.hoverState = 'in';
5367786dc871 Uploaded
greg
parents:
diff changeset
3495 this.timeout = setTimeout(
5367786dc871 Uploaded
greg
parents:
diff changeset
3496 function() { if (self.hoverState == 'in') self.show(); },
5367786dc871 Uploaded
greg
parents:
diff changeset
3497 self.options.delay.show
5367786dc871 Uploaded
greg
parents:
diff changeset
3498 );
5367786dc871 Uploaded
greg
parents:
diff changeset
3499 }
5367786dc871 Uploaded
greg
parents:
diff changeset
3500
5367786dc871 Uploaded
greg
parents:
diff changeset
3501 , leave: function (e) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3502 var self = $(e.currentTarget)[this.type](this._options).data(this.type);
5367786dc871 Uploaded
greg
parents:
diff changeset
3503
5367786dc871 Uploaded
greg
parents:
diff changeset
3504 if (this.timeout) clearTimeout(this.timeout);
5367786dc871 Uploaded
greg
parents:
diff changeset
3505 if (!self.options.delay || !self.options.delay.hide) self.hide();
5367786dc871 Uploaded
greg
parents:
diff changeset
3506
5367786dc871 Uploaded
greg
parents:
diff changeset
3507 self.hoverState = 'out';
5367786dc871 Uploaded
greg
parents:
diff changeset
3508 this.timeout = setTimeout(
5367786dc871 Uploaded
greg
parents:
diff changeset
3509 function() { if (self.hoverState == 'out') self.hide() },
5367786dc871 Uploaded
greg
parents:
diff changeset
3510 self.options.delay.hide
5367786dc871 Uploaded
greg
parents:
diff changeset
3511 );
5367786dc871 Uploaded
greg
parents:
diff changeset
3512 }
5367786dc871 Uploaded
greg
parents:
diff changeset
3513
5367786dc871 Uploaded
greg
parents:
diff changeset
3514 , show: function () {
5367786dc871 Uploaded
greg
parents:
diff changeset
3515 var $tip
5367786dc871 Uploaded
greg
parents:
diff changeset
3516 , inside
5367786dc871 Uploaded
greg
parents:
diff changeset
3517 , pos
5367786dc871 Uploaded
greg
parents:
diff changeset
3518 , actualWidth
5367786dc871 Uploaded
greg
parents:
diff changeset
3519 , actualHeight
5367786dc871 Uploaded
greg
parents:
diff changeset
3520 , placement
5367786dc871 Uploaded
greg
parents:
diff changeset
3521 , tp;
5367786dc871 Uploaded
greg
parents:
diff changeset
3522
5367786dc871 Uploaded
greg
parents:
diff changeset
3523 if (this.hasContent() && this.enabled) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3524 $tip = this.tip();
5367786dc871 Uploaded
greg
parents:
diff changeset
3525 this.setContent();
5367786dc871 Uploaded
greg
parents:
diff changeset
3526
5367786dc871 Uploaded
greg
parents:
diff changeset
3527 if (this.options.animation) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3528 $tip.addClass('fade');
5367786dc871 Uploaded
greg
parents:
diff changeset
3529 }
5367786dc871 Uploaded
greg
parents:
diff changeset
3530
5367786dc871 Uploaded
greg
parents:
diff changeset
3531 placement = typeof this.options.placement == 'function' ?
5367786dc871 Uploaded
greg
parents:
diff changeset
3532 this.options.placement.call(this, $tip[0], this.$element[0]) :
5367786dc871 Uploaded
greg
parents:
diff changeset
3533 this.options.placement;
5367786dc871 Uploaded
greg
parents:
diff changeset
3534
5367786dc871 Uploaded
greg
parents:
diff changeset
3535 inside = /in/.test(placement);
5367786dc871 Uploaded
greg
parents:
diff changeset
3536
5367786dc871 Uploaded
greg
parents:
diff changeset
3537 $tip
5367786dc871 Uploaded
greg
parents:
diff changeset
3538 .remove()
5367786dc871 Uploaded
greg
parents:
diff changeset
3539 .css({ top: 0, left: 0, display: 'block' })
5367786dc871 Uploaded
greg
parents:
diff changeset
3540 .appendTo(inside ? this.$element : document.body);
5367786dc871 Uploaded
greg
parents:
diff changeset
3541
5367786dc871 Uploaded
greg
parents:
diff changeset
3542 pos = this.getPosition(inside);
5367786dc871 Uploaded
greg
parents:
diff changeset
3543
5367786dc871 Uploaded
greg
parents:
diff changeset
3544 actualWidth = $tip[0].offsetWidth;
5367786dc871 Uploaded
greg
parents:
diff changeset
3545 actualHeight = $tip[0].offsetHeight;
5367786dc871 Uploaded
greg
parents:
diff changeset
3546
5367786dc871 Uploaded
greg
parents:
diff changeset
3547 switch (inside ? placement.split(' ')[1] : placement) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3548 case 'bottom':
5367786dc871 Uploaded
greg
parents:
diff changeset
3549 tp = {top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2};
5367786dc871 Uploaded
greg
parents:
diff changeset
3550 break;
5367786dc871 Uploaded
greg
parents:
diff changeset
3551 case 'top': // modificated by Vlad Saveliev: +4px to top position
5367786dc871 Uploaded
greg
parents:
diff changeset
3552 tp = {top: pos.top - actualHeight + 4, left: pos.left + pos.width / 2 - actualWidth / 2};
5367786dc871 Uploaded
greg
parents:
diff changeset
3553 break;
5367786dc871 Uploaded
greg
parents:
diff changeset
3554 case 'left':
5367786dc871 Uploaded
greg
parents:
diff changeset
3555 tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth};
5367786dc871 Uploaded
greg
parents:
diff changeset
3556 break;
5367786dc871 Uploaded
greg
parents:
diff changeset
3557 case 'right':
5367786dc871 Uploaded
greg
parents:
diff changeset
3558 tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width};
5367786dc871 Uploaded
greg
parents:
diff changeset
3559 break;
5367786dc871 Uploaded
greg
parents:
diff changeset
3560 }
5367786dc871 Uploaded
greg
parents:
diff changeset
3561
5367786dc871 Uploaded
greg
parents:
diff changeset
3562 $tip
5367786dc871 Uploaded
greg
parents:
diff changeset
3563 .css(tp)
5367786dc871 Uploaded
greg
parents:
diff changeset
3564 .addClass(placement)
5367786dc871 Uploaded
greg
parents:
diff changeset
3565 .addClass('in');
5367786dc871 Uploaded
greg
parents:
diff changeset
3566 }
5367786dc871 Uploaded
greg
parents:
diff changeset
3567 }
5367786dc871 Uploaded
greg
parents:
diff changeset
3568
5367786dc871 Uploaded
greg
parents:
diff changeset
3569 , isHTML: function(text) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3570 // html string detection logic adapted from jQuery
5367786dc871 Uploaded
greg
parents:
diff changeset
3571 return typeof text != 'string'
5367786dc871 Uploaded
greg
parents:
diff changeset
3572 || ( text.charAt(0) === "<"
5367786dc871 Uploaded
greg
parents:
diff changeset
3573 && text.charAt( text.length - 1 ) === ">"
5367786dc871 Uploaded
greg
parents:
diff changeset
3574 && text.length >= 3
5367786dc871 Uploaded
greg
parents:
diff changeset
3575 ) || /^(?:[^<]*<[\w\W]+>[^>]*$)/.exec(text);
5367786dc871 Uploaded
greg
parents:
diff changeset
3576 }
5367786dc871 Uploaded
greg
parents:
diff changeset
3577
5367786dc871 Uploaded
greg
parents:
diff changeset
3578 , setContent: function () {
5367786dc871 Uploaded
greg
parents:
diff changeset
3579 var $tip = this.tip()
5367786dc871 Uploaded
greg
parents:
diff changeset
3580 , title = this.getTitle();
5367786dc871 Uploaded
greg
parents:
diff changeset
3581
5367786dc871 Uploaded
greg
parents:
diff changeset
3582 $tip.find('.tooltip-inner')[this.isHTML(title) ? 'html' : 'text'](title);
5367786dc871 Uploaded
greg
parents:
diff changeset
3583 $tip.removeClass('fade in top bottom left right');
5367786dc871 Uploaded
greg
parents:
diff changeset
3584 }
5367786dc871 Uploaded
greg
parents:
diff changeset
3585
5367786dc871 Uploaded
greg
parents:
diff changeset
3586 , hide: function () {
5367786dc871 Uploaded
greg
parents:
diff changeset
3587 var that = this
5367786dc871 Uploaded
greg
parents:
diff changeset
3588 , $tip = this.tip();
5367786dc871 Uploaded
greg
parents:
diff changeset
3589
5367786dc871 Uploaded
greg
parents:
diff changeset
3590 $tip.removeClass('in');
5367786dc871 Uploaded
greg
parents:
diff changeset
3591
5367786dc871 Uploaded
greg
parents:
diff changeset
3592 function removeWithAnimation() {
5367786dc871 Uploaded
greg
parents:
diff changeset
3593 var timeout = setTimeout(function () {
5367786dc871 Uploaded
greg
parents:
diff changeset
3594 $tip.off($.support.transition.end).remove()
5367786dc871 Uploaded
greg
parents:
diff changeset
3595 }, 500);
5367786dc871 Uploaded
greg
parents:
diff changeset
3596
5367786dc871 Uploaded
greg
parents:
diff changeset
3597 $tip.one($.support.transition.end, function () {
5367786dc871 Uploaded
greg
parents:
diff changeset
3598 clearTimeout(timeout);
5367786dc871 Uploaded
greg
parents:
diff changeset
3599 $tip.remove();
5367786dc871 Uploaded
greg
parents:
diff changeset
3600 })
5367786dc871 Uploaded
greg
parents:
diff changeset
3601 }
5367786dc871 Uploaded
greg
parents:
diff changeset
3602
5367786dc871 Uploaded
greg
parents:
diff changeset
3603 $.support.transition && this.$tip.hasClass('fade') ?
5367786dc871 Uploaded
greg
parents:
diff changeset
3604 removeWithAnimation() :
5367786dc871 Uploaded
greg
parents:
diff changeset
3605 $tip.remove()
5367786dc871 Uploaded
greg
parents:
diff changeset
3606 }
5367786dc871 Uploaded
greg
parents:
diff changeset
3607
5367786dc871 Uploaded
greg
parents:
diff changeset
3608 , fixTitle: function () {
5367786dc871 Uploaded
greg
parents:
diff changeset
3609 var $e = this.$element;
5367786dc871 Uploaded
greg
parents:
diff changeset
3610 if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') {
5367786dc871 Uploaded
greg
parents:
diff changeset
3611 $e.attr('data-original-title', $e.attr('title') || '').removeAttr('title');
5367786dc871 Uploaded
greg
parents:
diff changeset
3612 }
5367786dc871 Uploaded
greg
parents:
diff changeset
3613 }
5367786dc871 Uploaded
greg
parents:
diff changeset
3614
5367786dc871 Uploaded
greg
parents:
diff changeset
3615 , hasContent: function () {
5367786dc871 Uploaded
greg
parents:
diff changeset
3616 return this.getTitle();
5367786dc871 Uploaded
greg
parents:
diff changeset
3617 }
5367786dc871 Uploaded
greg
parents:
diff changeset
3618
5367786dc871 Uploaded
greg
parents:
diff changeset
3619 , getPosition: function (inside) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3620 return $.extend({}, (inside ? {top: 0, left: 0} : this.$element.offset()), {
5367786dc871 Uploaded
greg
parents:
diff changeset
3621 width: this.$element[0].offsetWidth
5367786dc871 Uploaded
greg
parents:
diff changeset
3622 , height: this.$element[0].offsetHeight
5367786dc871 Uploaded
greg
parents:
diff changeset
3623 })
5367786dc871 Uploaded
greg
parents:
diff changeset
3624 }
5367786dc871 Uploaded
greg
parents:
diff changeset
3625
5367786dc871 Uploaded
greg
parents:
diff changeset
3626 , getTitle: function () {
5367786dc871 Uploaded
greg
parents:
diff changeset
3627 var title
5367786dc871 Uploaded
greg
parents:
diff changeset
3628 , $e = this.$element
5367786dc871 Uploaded
greg
parents:
diff changeset
3629 , o = this.options;
5367786dc871 Uploaded
greg
parents:
diff changeset
3630
5367786dc871 Uploaded
greg
parents:
diff changeset
3631 title = $e.attr('data-original-title')
5367786dc871 Uploaded
greg
parents:
diff changeset
3632 || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title);
5367786dc871 Uploaded
greg
parents:
diff changeset
3633
5367786dc871 Uploaded
greg
parents:
diff changeset
3634 return title;
5367786dc871 Uploaded
greg
parents:
diff changeset
3635 }
5367786dc871 Uploaded
greg
parents:
diff changeset
3636
5367786dc871 Uploaded
greg
parents:
diff changeset
3637 , tip: function () {
5367786dc871 Uploaded
greg
parents:
diff changeset
3638 return this.$tip = this.$tip || $(this.options.template);
5367786dc871 Uploaded
greg
parents:
diff changeset
3639 }
5367786dc871 Uploaded
greg
parents:
diff changeset
3640
5367786dc871 Uploaded
greg
parents:
diff changeset
3641 , validate: function () {
5367786dc871 Uploaded
greg
parents:
diff changeset
3642 if (!this.$element[0].parentNode) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3643 this.hide();
5367786dc871 Uploaded
greg
parents:
diff changeset
3644 this.$element = null;
5367786dc871 Uploaded
greg
parents:
diff changeset
3645 this.options = null;
5367786dc871 Uploaded
greg
parents:
diff changeset
3646 }
5367786dc871 Uploaded
greg
parents:
diff changeset
3647 }
5367786dc871 Uploaded
greg
parents:
diff changeset
3648
5367786dc871 Uploaded
greg
parents:
diff changeset
3649 , enable: function () {
5367786dc871 Uploaded
greg
parents:
diff changeset
3650 this.enabled = true;
5367786dc871 Uploaded
greg
parents:
diff changeset
3651 }
5367786dc871 Uploaded
greg
parents:
diff changeset
3652
5367786dc871 Uploaded
greg
parents:
diff changeset
3653 , disable: function () {
5367786dc871 Uploaded
greg
parents:
diff changeset
3654 this.enabled = false;
5367786dc871 Uploaded
greg
parents:
diff changeset
3655 }
5367786dc871 Uploaded
greg
parents:
diff changeset
3656
5367786dc871 Uploaded
greg
parents:
diff changeset
3657 , toggleEnabled: function () {
5367786dc871 Uploaded
greg
parents:
diff changeset
3658 this.enabled = !this.enabled;
5367786dc871 Uploaded
greg
parents:
diff changeset
3659 }
5367786dc871 Uploaded
greg
parents:
diff changeset
3660
5367786dc871 Uploaded
greg
parents:
diff changeset
3661 , toggle: function () {
5367786dc871 Uploaded
greg
parents:
diff changeset
3662 this[this.tip().hasClass('in') ? 'hide' : 'show']();
5367786dc871 Uploaded
greg
parents:
diff changeset
3663 }
5367786dc871 Uploaded
greg
parents:
diff changeset
3664
5367786dc871 Uploaded
greg
parents:
diff changeset
3665 };
5367786dc871 Uploaded
greg
parents:
diff changeset
3666
5367786dc871 Uploaded
greg
parents:
diff changeset
3667
5367786dc871 Uploaded
greg
parents:
diff changeset
3668 /* TOOLTIP PLUGIN DEFINITION
5367786dc871 Uploaded
greg
parents:
diff changeset
3669 * ========================= */
5367786dc871 Uploaded
greg
parents:
diff changeset
3670
5367786dc871 Uploaded
greg
parents:
diff changeset
3671 $.fn.tooltip = function ( option ) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3672 return this.each(function () {
5367786dc871 Uploaded
greg
parents:
diff changeset
3673 var $this = $(this)
5367786dc871 Uploaded
greg
parents:
diff changeset
3674 , data = $this.data('tooltip')
5367786dc871 Uploaded
greg
parents:
diff changeset
3675 , options = typeof option == 'object' && option;
5367786dc871 Uploaded
greg
parents:
diff changeset
3676 if (!data) $this.data('tooltip', (data = new Tooltip(this, options)));
5367786dc871 Uploaded
greg
parents:
diff changeset
3677 if (typeof option == 'string') data[option]();
5367786dc871 Uploaded
greg
parents:
diff changeset
3678 })
5367786dc871 Uploaded
greg
parents:
diff changeset
3679 };
5367786dc871 Uploaded
greg
parents:
diff changeset
3680
5367786dc871 Uploaded
greg
parents:
diff changeset
3681 $.fn.tooltip.Constructor = Tooltip;
5367786dc871 Uploaded
greg
parents:
diff changeset
3682
5367786dc871 Uploaded
greg
parents:
diff changeset
3683 $.fn.tooltip.defaults = {
5367786dc871 Uploaded
greg
parents:
diff changeset
3684 animation: true
5367786dc871 Uploaded
greg
parents:
diff changeset
3685 , placement: 'top'
5367786dc871 Uploaded
greg
parents:
diff changeset
3686 , selector: false
5367786dc871 Uploaded
greg
parents:
diff changeset
3687 , template: '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>'
5367786dc871 Uploaded
greg
parents:
diff changeset
3688 , trigger: 'hover'
5367786dc871 Uploaded
greg
parents:
diff changeset
3689 , title: ''
5367786dc871 Uploaded
greg
parents:
diff changeset
3690 , delay: 0
5367786dc871 Uploaded
greg
parents:
diff changeset
3691 };
5367786dc871 Uploaded
greg
parents:
diff changeset
3692
5367786dc871 Uploaded
greg
parents:
diff changeset
3693 }(window.jQuery);
5367786dc871 Uploaded
greg
parents:
diff changeset
3694
5367786dc871 Uploaded
greg
parents:
diff changeset
3695 </script>
5367786dc871 Uploaded
greg
parents:
diff changeset
3696
5367786dc871 Uploaded
greg
parents:
diff changeset
3697 <script type="text/javascript">
5367786dc871 Uploaded
greg
parents:
diff changeset
3698 function showPlotWithInfo(info, index) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3699 var newSeries = [];
5367786dc871 Uploaded
greg
parents:
diff changeset
3700 var newColors = [];
5367786dc871 Uploaded
greg
parents:
diff changeset
3701 var oldSeries = info.series;
5367786dc871 Uploaded
greg
parents:
diff changeset
3702 var usingSeries;
5367786dc871 Uploaded
greg
parents:
diff changeset
3703 var sortOrder;
5367786dc871 Uploaded
greg
parents:
diff changeset
3704 if ($("input[name=sortRefs]")[0])
5367786dc871 Uploaded
greg
parents:
diff changeset
3705 sortOrder = getSortOrder();
5367786dc871 Uploaded
greg
parents:
diff changeset
3706 if (index != undefined) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3707 oldSeries = info.series[index];
5367786dc871 Uploaded
greg
parents:
diff changeset
3708 }
5367786dc871 Uploaded
greg
parents:
diff changeset
3709 if (sortOrder == 'alphabet') {
5367786dc871 Uploaded
greg
parents:
diff changeset
3710 usingSeries = [];
5367786dc871 Uploaded
greg
parents:
diff changeset
3711 sortedRefs = info.references.slice(0).sort();
5367786dc871 Uploaded
greg
parents:
diff changeset
3712 for(var i = 0; i < oldSeries.length; i++) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3713 usingSeries.push($.extend(true, {}, oldSeries[i]));
5367786dc871 Uploaded
greg
parents:
diff changeset
3714 for(var j = 0; j < info.references.length; j++) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3715 usingSeries[i].data[j][1] = oldSeries[i].data[info.references.indexOf(sortedRefs[j])][1];
5367786dc871 Uploaded
greg
parents:
diff changeset
3716 }
5367786dc871 Uploaded
greg
parents:
diff changeset
3717 }
5367786dc871 Uploaded
greg
parents:
diff changeset
3718 }
5367786dc871 Uploaded
greg
parents:
diff changeset
3719 else usingSeries = oldSeries;
5367786dc871 Uploaded
greg
parents:
diff changeset
3720 $('#legend-placeholder').find('input[type="checkbox"]:checked').each(function() {
5367786dc871 Uploaded
greg
parents:
diff changeset
3721 var number = $(this).attr('name');
5367786dc871 Uploaded
greg
parents:
diff changeset
3722 if (number && usingSeries && usingSeries.length > 0) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3723 var i = 0;
5367786dc871 Uploaded
greg
parents:
diff changeset
3724 do {
5367786dc871 Uploaded
greg
parents:
diff changeset
3725 var series = usingSeries[i];
5367786dc871 Uploaded
greg
parents:
diff changeset
3726 i++;
5367786dc871 Uploaded
greg
parents:
diff changeset
3727 } while (i <= usingSeries.length && (series == null || series.number != number));
5367786dc871 Uploaded
greg
parents:
diff changeset
3728 //
5367786dc871 Uploaded
greg
parents:
diff changeset
3729 if (i <= usingSeries.length) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3730 newSeries.push(series);
5367786dc871 Uploaded
greg
parents:
diff changeset
3731 newColors.push(series.color);
5367786dc871 Uploaded
greg
parents:
diff changeset
3732 } else {
5367786dc871 Uploaded
greg
parents:
diff changeset
3733 console.log('no series with number ' + number);
5367786dc871 Uploaded
greg
parents:
diff changeset
3734 }
5367786dc871 Uploaded
greg
parents:
diff changeset
3735 }
5367786dc871 Uploaded
greg
parents:
diff changeset
3736 });
5367786dc871 Uploaded
greg
parents:
diff changeset
3737 if (sortOrder) sortReferences(sortOrder, info);
5367786dc871 Uploaded
greg
parents:
diff changeset
3738
5367786dc871 Uploaded
greg
parents:
diff changeset
3739 if (newSeries.length === 0) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3740 newSeries.push({
5367786dc871 Uploaded
greg
parents:
diff changeset
3741 data: []
5367786dc871 Uploaded
greg
parents:
diff changeset
3742 });
5367786dc871 Uploaded
greg
parents:
diff changeset
3743 newColors.push('#FFF');
5367786dc871 Uploaded
greg
parents:
diff changeset
3744 }
5367786dc871 Uploaded
greg
parents:
diff changeset
3745
5367786dc871 Uploaded
greg
parents:
diff changeset
3746 info.showWithData(newSeries, newColors);
5367786dc871 Uploaded
greg
parents:
diff changeset
3747 }
5367786dc871 Uploaded
greg
parents:
diff changeset
3748
5367786dc871 Uploaded
greg
parents:
diff changeset
3749 function recoverOrderFromCookies() {
5367786dc871 Uploaded
greg
parents:
diff changeset
3750 if (!navigator.cookieEnabled)
5367786dc871 Uploaded
greg
parents:
diff changeset
3751 return null;
5367786dc871 Uploaded
greg
parents:
diff changeset
3752
5367786dc871 Uploaded
greg
parents:
diff changeset
3753 var order_string = readCookie("order");
5367786dc871 Uploaded
greg
parents:
diff changeset
3754 if (!order_string)
5367786dc871 Uploaded
greg
parents:
diff changeset
3755 return null;
5367786dc871 Uploaded
greg
parents:
diff changeset
3756
5367786dc871 Uploaded
greg
parents:
diff changeset
3757 var order = [];
5367786dc871 Uploaded
greg
parents:
diff changeset
3758 var fail = false;
5367786dc871 Uploaded
greg
parents:
diff changeset
3759 forEach(order_string.split(' '), function(val) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3760 val = parseInt(val);
5367786dc871 Uploaded
greg
parents:
diff changeset
3761 if (isNaN(val))
5367786dc871 Uploaded
greg
parents:
diff changeset
3762 fail = true;
5367786dc871 Uploaded
greg
parents:
diff changeset
3763 else
5367786dc871 Uploaded
greg
parents:
diff changeset
3764 order.push(val);
5367786dc871 Uploaded
greg
parents:
diff changeset
3765 });
5367786dc871 Uploaded
greg
parents:
diff changeset
3766
5367786dc871 Uploaded
greg
parents:
diff changeset
3767 if (fail)
5367786dc871 Uploaded
greg
parents:
diff changeset
3768 return null;
5367786dc871 Uploaded
greg
parents:
diff changeset
3769
5367786dc871 Uploaded
greg
parents:
diff changeset
3770 return order;
5367786dc871 Uploaded
greg
parents:
diff changeset
3771 }
5367786dc871 Uploaded
greg
parents:
diff changeset
3772
5367786dc871 Uploaded
greg
parents:
diff changeset
3773
5367786dc871 Uploaded
greg
parents:
diff changeset
3774 function readJson(what) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3775 var result;
5367786dc871 Uploaded
greg
parents:
diff changeset
3776 try {
5367786dc871 Uploaded
greg
parents:
diff changeset
3777 result = JSON.parse($('#' + what + '-json').html());
5367786dc871 Uploaded
greg
parents:
diff changeset
3778 } catch (e) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3779 result = null;
5367786dc871 Uploaded
greg
parents:
diff changeset
3780 }
5367786dc871 Uploaded
greg
parents:
diff changeset
3781 return result;
5367786dc871 Uploaded
greg
parents:
diff changeset
3782 }
5367786dc871 Uploaded
greg
parents:
diff changeset
3783
5367786dc871 Uploaded
greg
parents:
diff changeset
3784
5367786dc871 Uploaded
greg
parents:
diff changeset
3785 function getToggleFunction(assembliesNames, order, name, title, drawPlot, data, refPlotValue, tickX) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3786 return function() {
5367786dc871 Uploaded
greg
parents:
diff changeset
3787 this.parentNode.getElementsByClassName('selected-switch')[0].className = 'plot-switch dotted-link';
5367786dc871 Uploaded
greg
parents:
diff changeset
3788 this.className = 'plot-switch selected-switch';
5367786dc871 Uploaded
greg
parents:
diff changeset
3789 togglePlots(assembliesNames, order, name, title, drawPlot, data, refPlotValue, tickX)
5367786dc871 Uploaded
greg
parents:
diff changeset
3790 };
5367786dc871 Uploaded
greg
parents:
diff changeset
3791 }
5367786dc871 Uploaded
greg
parents:
diff changeset
3792
5367786dc871 Uploaded
greg
parents:
diff changeset
3793 function togglePlots(assembliesNames, order, name, title, drawPlot, data, refPlotValue, tickX) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3794 var plotPlaceholder = document.getElementById('plot-placeholder');
5367786dc871 Uploaded
greg
parents:
diff changeset
3795 var legendPlaceholder = document.getElementById('legend-placeholder');
5367786dc871 Uploaded
greg
parents:
diff changeset
3796 var scalePlaceholder = document.getElementById('scale-placeholder');
5367786dc871 Uploaded
greg
parents:
diff changeset
3797
5367786dc871 Uploaded
greg
parents:
diff changeset
3798 var glossary = JSON.parse($('#glossary-json').html());
5367786dc871 Uploaded
greg
parents:
diff changeset
3799
5367786dc871 Uploaded
greg
parents:
diff changeset
3800 if (name === 'cumulative') {
5367786dc871 Uploaded
greg
parents:
diff changeset
3801 $(plotPlaceholder).addClass('cumulative-plot-placeholder');
5367786dc871 Uploaded
greg
parents:
diff changeset
3802 } else {
5367786dc871 Uploaded
greg
parents:
diff changeset
3803 $(plotPlaceholder).removeClass('cumulative-plot-placeholder');
5367786dc871 Uploaded
greg
parents:
diff changeset
3804 }
5367786dc871 Uploaded
greg
parents:
diff changeset
3805
5367786dc871 Uploaded
greg
parents:
diff changeset
3806 $('#contigs_are_ordered').hide();
5367786dc871 Uploaded
greg
parents:
diff changeset
3807 $('#gc_info').hide();
5367786dc871 Uploaded
greg
parents:
diff changeset
3808 $('#gc_contigs_info').hide();
5367786dc871 Uploaded
greg
parents:
diff changeset
3809 $('#frc_info').hide();
5367786dc871 Uploaded
greg
parents:
diff changeset
3810
5367786dc871 Uploaded
greg
parents:
diff changeset
3811 var selectedAssemblies = getSelectedAssemblies(assembliesNames);
5367786dc871 Uploaded
greg
parents:
diff changeset
3812 var sortBtnClass;
5367786dc871 Uploaded
greg
parents:
diff changeset
3813 if ($("input[name=sortRefs]")[0]) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3814 sortBtnClass = getSortRefsRule();
5367786dc871 Uploaded
greg
parents:
diff changeset
3815 }
5367786dc871 Uploaded
greg
parents:
diff changeset
3816 $('#legend-placeholder').empty();
5367786dc871 Uploaded
greg
parents:
diff changeset
3817 assembliesNames.forEach(function(filename, i) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3818 addLabelToLegend(i, filename, selectedAssemblies, colors);
5367786dc871 Uploaded
greg
parents:
diff changeset
3819 });
5367786dc871 Uploaded
greg
parents:
diff changeset
3820 if (refPlotValue) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3821 $('#legend-placeholder').append(
5367786dc871 Uploaded
greg
parents:
diff changeset
3822 '<div id="reference-label">' +
5367786dc871 Uploaded
greg
parents:
diff changeset
3823 '<label for="reference" style="color: #000000;">' +
5367786dc871 Uploaded
greg
parents:
diff changeset
3824 '<input type="checkbox" name="' + assembliesNames.length +
5367786dc871 Uploaded
greg
parents:
diff changeset
3825 '" checked="checked" id="reference">&nbsp;' + 'reference' +
5367786dc871 Uploaded
greg
parents:
diff changeset
3826 '</label>' +
5367786dc871 Uploaded
greg
parents:
diff changeset
3827 '</div>'
5367786dc871 Uploaded
greg
parents:
diff changeset
3828 );
5367786dc871 Uploaded
greg
parents:
diff changeset
3829 }
5367786dc871 Uploaded
greg
parents:
diff changeset
3830 if (sortBtnClass) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3831 addSortRefsBtn(sortBtnClass);
5367786dc871 Uploaded
greg
parents:
diff changeset
3832 }
5367786dc871 Uploaded
greg
parents:
diff changeset
3833
5367786dc871 Uploaded
greg
parents:
diff changeset
3834 drawPlot(name, title, colors, assembliesNames, data, refPlotValue, tickX,
5367786dc871 Uploaded
greg
parents:
diff changeset
3835 plotPlaceholder, legendPlaceholder, glossary, order, scalePlaceholder);
5367786dc871 Uploaded
greg
parents:
diff changeset
3836 }
5367786dc871 Uploaded
greg
parents:
diff changeset
3837
5367786dc871 Uploaded
greg
parents:
diff changeset
3838 function makePlot(firstPlot, assembliesNames, order, name, title, drawPlot, data, refPlotValue, tickX) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3839 var switchSpan = document.createElement('span');
5367786dc871 Uploaded
greg
parents:
diff changeset
3840 switchSpan.id = name + '-switch';
5367786dc871 Uploaded
greg
parents:
diff changeset
3841 switchSpan.innerHTML = title;
5367786dc871 Uploaded
greg
parents:
diff changeset
3842 var plotsSwitchesDiv = document.getElementById('plots-switches');
5367786dc871 Uploaded
greg
parents:
diff changeset
3843 plotsSwitchesDiv.appendChild(switchSpan);
5367786dc871 Uploaded
greg
parents:
diff changeset
3844
5367786dc871 Uploaded
greg
parents:
diff changeset
3845 if (firstPlot) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3846 switchSpan.className = 'plot-switch selected-switch';
5367786dc871 Uploaded
greg
parents:
diff changeset
3847 togglePlots(assembliesNames, order, name, title, drawPlot, data, refPlotValue, tickX);
5367786dc871 Uploaded
greg
parents:
diff changeset
3848 } else {
5367786dc871 Uploaded
greg
parents:
diff changeset
3849 switchSpan.className = 'plot-switch dotted-link';
5367786dc871 Uploaded
greg
parents:
diff changeset
3850 }
5367786dc871 Uploaded
greg
parents:
diff changeset
3851
5367786dc871 Uploaded
greg
parents:
diff changeset
3852 $(switchSpan).click(getToggleFunction(assembliesNames, order, name, title, drawPlot, data, refPlotValue, tickX));
5367786dc871 Uploaded
greg
parents:
diff changeset
3853 }
5367786dc871 Uploaded
greg
parents:
diff changeset
3854 </script>
5367786dc871 Uploaded
greg
parents:
diff changeset
3855
5367786dc871 Uploaded
greg
parents:
diff changeset
3856 <script type="text/javascript">
5367786dc871 Uploaded
greg
parents:
diff changeset
3857 String.prototype.trunc =
5367786dc871 Uploaded
greg
parents:
diff changeset
3858 function(n){
5367786dc871 Uploaded
greg
parents:
diff changeset
3859 return this.substr(0, n-1) + (this.length > n ? '&hellip;' : '');
5367786dc871 Uploaded
greg
parents:
diff changeset
3860 };
5367786dc871 Uploaded
greg
parents:
diff changeset
3861
5367786dc871 Uploaded
greg
parents:
diff changeset
3862
5367786dc871 Uploaded
greg
parents:
diff changeset
3863 function getColor (hue, lightness) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3864 lightness = lightness ? lightness : 92;
5367786dc871 Uploaded
greg
parents:
diff changeset
3865 var rgb = hslToRgb(hue / 360, 0.8, lightness / 100);
5367786dc871 Uploaded
greg
parents:
diff changeset
3866 return '#' + rgb[0].toString(16) + rgb[1].toString(16) + rgb[2].toString(16);
5367786dc871 Uploaded
greg
parents:
diff changeset
3867 }
5367786dc871 Uploaded
greg
parents:
diff changeset
3868
5367786dc871 Uploaded
greg
parents:
diff changeset
3869 function getMedian (x) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3870 if (x.length == 0) return null;
5367786dc871 Uploaded
greg
parents:
diff changeset
3871 if (x.length % 2 == 1) return x[(x.length - 1) / 2];
5367786dc871 Uploaded
greg
parents:
diff changeset
3872 else return (x[(x.length / 2) - 1] + x[(x.length / 2)]) / 2;
5367786dc871 Uploaded
greg
parents:
diff changeset
3873 }
5367786dc871 Uploaded
greg
parents:
diff changeset
3874
5367786dc871 Uploaded
greg
parents:
diff changeset
3875 function toggleSecondary(event, caller) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3876 event = event || window.event;
5367786dc871 Uploaded
greg
parents:
diff changeset
3877 if(event.target.nodeName == "IMG") return;
5367786dc871 Uploaded
greg
parents:
diff changeset
3878 if (!caller.hasClass('primary') || caller.hasClass('not_extend')) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3879 return;
5367786dc871 Uploaded
greg
parents:
diff changeset
3880 }
5367786dc871 Uploaded
greg
parents:
diff changeset
3881 var nextRow = caller.next('.content-row');
5367786dc871 Uploaded
greg
parents:
diff changeset
3882 $(caller).find('.metric-name').toggleClass('collapsed').toggleClass('expanded');
5367786dc871 Uploaded
greg
parents:
diff changeset
3883
5367786dc871 Uploaded
greg
parents:
diff changeset
3884 while (!nextRow.hasClass('primary') && (nextRow.length > 0)) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3885 nextRow.toggleClass('secondary_hidden');
5367786dc871 Uploaded
greg
parents:
diff changeset
3886 nextRow.find('.left_column_td').css('background-color', '#E8E8E8');
5367786dc871 Uploaded
greg
parents:
diff changeset
3887 nextRow = nextRow.next('.content-row');
5367786dc871 Uploaded
greg
parents:
diff changeset
3888 }
5367786dc871 Uploaded
greg
parents:
diff changeset
3889 }
5367786dc871 Uploaded
greg
parents:
diff changeset
3890
5367786dc871 Uploaded
greg
parents:
diff changeset
3891 function setUpHeatMap(table) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3892
5367786dc871 Uploaded
greg
parents:
diff changeset
3893 (function () {
5367786dc871 Uploaded
greg
parents:
diff changeset
3894 $(function () {
5367786dc871 Uploaded
greg
parents:
diff changeset
3895 $('tr.group_empty').removeClass('row_hidden');
5367786dc871 Uploaded
greg
parents:
diff changeset
3896 });
5367786dc871 Uploaded
greg
parents:
diff changeset
3897 })();
5367786dc871 Uploaded
greg
parents:
diff changeset
3898
5367786dc871 Uploaded
greg
parents:
diff changeset
3899 $('#main_report').append(table);
5367786dc871 Uploaded
greg
parents:
diff changeset
3900 var rows = $('#main_report_table').find('.content-row');
5367786dc871 Uploaded
greg
parents:
diff changeset
3901 var showHeatmap = false;
5367786dc871 Uploaded
greg
parents:
diff changeset
3902 for (var rows_n = 0; rows_n < rows.length; rows_n++) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3903 if ($(rows[rows_n]).find('td[number]').length > 1) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3904 showHeatmap = true;
5367786dc871 Uploaded
greg
parents:
diff changeset
3905 break
5367786dc871 Uploaded
greg
parents:
diff changeset
3906 }
5367786dc871 Uploaded
greg
parents:
diff changeset
3907 }
5367786dc871 Uploaded
greg
parents:
diff changeset
3908
5367786dc871 Uploaded
greg
parents:
diff changeset
3909 if (showHeatmap) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3910 var canvas = document.getElementById('gradientHeatmap');
5367786dc871 Uploaded
greg
parents:
diff changeset
3911 var context = canvas.getContext('2d');
5367786dc871 Uploaded
greg
parents:
diff changeset
3912 context.rect(0, 0, canvas.width, canvas.height);
5367786dc871 Uploaded
greg
parents:
diff changeset
3913
5367786dc871 Uploaded
greg
parents:
diff changeset
3914 var gradient = context.createLinearGradient(0, 0, canvas.width, canvas.height);
5367786dc871 Uploaded
greg
parents:
diff changeset
3915 gradient.addColorStop(0, getColor(0, 65));
5367786dc871 Uploaded
greg
parents:
diff changeset
3916 gradient.addColorStop(0.5, 'white');
5367786dc871 Uploaded
greg
parents:
diff changeset
3917 gradient.addColorStop(1, getColor(240, 65));
5367786dc871 Uploaded
greg
parents:
diff changeset
3918 canvas.style.border = "0px solid rgba(0, 0, 0, .1)";
5367786dc871 Uploaded
greg
parents:
diff changeset
3919 context.fillStyle = gradient;
5367786dc871 Uploaded
greg
parents:
diff changeset
3920 context.fill();
5367786dc871 Uploaded
greg
parents:
diff changeset
3921 $('#heatmaps_chbox').change(function(){
5367786dc871 Uploaded
greg
parents:
diff changeset
3922 if($(this).is(':checked')) toggleHeatMap('on');
5367786dc871 Uploaded
greg
parents:
diff changeset
3923 else toggleHeatMap('off');
5367786dc871 Uploaded
greg
parents:
diff changeset
3924 });
5367786dc871 Uploaded
greg
parents:
diff changeset
3925 toggleHeatMap('on');
5367786dc871 Uploaded
greg
parents:
diff changeset
3926 $('#heatmap_header').show();
5367786dc871 Uploaded
greg
parents:
diff changeset
3927 }
5367786dc871 Uploaded
greg
parents:
diff changeset
3928 }
5367786dc871 Uploaded
greg
parents:
diff changeset
3929
5367786dc871 Uploaded
greg
parents:
diff changeset
3930 function toggleHeatMap(state){
5367786dc871 Uploaded
greg
parents:
diff changeset
3931 var rows = $('#main_report_table').find('.content-row');
5367786dc871 Uploaded
greg
parents:
diff changeset
3932 for (var rows_n = 0; rows_n < rows.length; rows_n++) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3933 var cells = $(rows[rows_n]).find('td[number]');
5367786dc871 Uploaded
greg
parents:
diff changeset
3934 if (state == 'on') {
5367786dc871 Uploaded
greg
parents:
diff changeset
3935 var quality = $(rows[rows_n]).attr('quality');
5367786dc871 Uploaded
greg
parents:
diff changeset
3936 heatMapOneRow(cells, quality);
5367786dc871 Uploaded
greg
parents:
diff changeset
3937 }
5367786dc871 Uploaded
greg
parents:
diff changeset
3938 else cells.each(function (i) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3939 $(this).css('background', 'white');
5367786dc871 Uploaded
greg
parents:
diff changeset
3940 $(this).css('color', 'black');
5367786dc871 Uploaded
greg
parents:
diff changeset
3941 });
5367786dc871 Uploaded
greg
parents:
diff changeset
3942 }
5367786dc871 Uploaded
greg
parents:
diff changeset
3943 }
5367786dc871 Uploaded
greg
parents:
diff changeset
3944
5367786dc871 Uploaded
greg
parents:
diff changeset
3945 function heatMapOneRow (cells, quality) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3946 if (quality == 'Equal')
5367786dc871 Uploaded
greg
parents:
diff changeset
3947 return;
5367786dc871 Uploaded
greg
parents:
diff changeset
3948 var BLUE_HUE = 240;
5367786dc871 Uploaded
greg
parents:
diff changeset
3949 var BLUE_OUTER_BRT = 55;
5367786dc871 Uploaded
greg
parents:
diff changeset
3950 var BLUE_INNER_BRT = 65;
5367786dc871 Uploaded
greg
parents:
diff changeset
3951
5367786dc871 Uploaded
greg
parents:
diff changeset
3952 var RED_HUE = 0;
5367786dc871 Uploaded
greg
parents:
diff changeset
3953 var RED_OUTER_BRT = 50;
5367786dc871 Uploaded
greg
parents:
diff changeset
3954 var RED_INNER_BRT = 60;
5367786dc871 Uploaded
greg
parents:
diff changeset
3955
5367786dc871 Uploaded
greg
parents:
diff changeset
3956 var MIN_NORMAL_BRT = 80;
5367786dc871 Uploaded
greg
parents:
diff changeset
3957 var MEDIAN_BRT = 100;
5367786dc871 Uploaded
greg
parents:
diff changeset
3958
5367786dc871 Uploaded
greg
parents:
diff changeset
3959 var numbers = $.map(cells, function (cell) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3960 return parseFloat($(cell).attr('number'));
5367786dc871 Uploaded
greg
parents:
diff changeset
3961 });
5367786dc871 Uploaded
greg
parents:
diff changeset
3962
5367786dc871 Uploaded
greg
parents:
diff changeset
3963 var min = Math.min.apply(null, numbers);
5367786dc871 Uploaded
greg
parents:
diff changeset
3964 var max = Math.max.apply(null, numbers);
5367786dc871 Uploaded
greg
parents:
diff changeset
3965
5367786dc871 Uploaded
greg
parents:
diff changeset
3966 var topHue = BLUE_HUE;
5367786dc871 Uploaded
greg
parents:
diff changeset
3967 var lowHue = RED_HUE;
5367786dc871 Uploaded
greg
parents:
diff changeset
3968
5367786dc871 Uploaded
greg
parents:
diff changeset
3969 var innerTopBrt = BLUE_INNER_BRT;
5367786dc871 Uploaded
greg
parents:
diff changeset
3970 var outerTopBrt = BLUE_OUTER_BRT;
5367786dc871 Uploaded
greg
parents:
diff changeset
3971 var innerLowBrt = RED_INNER_BRT;
5367786dc871 Uploaded
greg
parents:
diff changeset
3972 var outerLowBrt = RED_OUTER_BRT;
5367786dc871 Uploaded
greg
parents:
diff changeset
3973
5367786dc871 Uploaded
greg
parents:
diff changeset
3974 if (quality == 'Less is better') {
5367786dc871 Uploaded
greg
parents:
diff changeset
3975 topHue = RED_HUE;
5367786dc871 Uploaded
greg
parents:
diff changeset
3976 lowHue = BLUE_HUE;
5367786dc871 Uploaded
greg
parents:
diff changeset
3977
5367786dc871 Uploaded
greg
parents:
diff changeset
3978 innerTopBrt = RED_INNER_BRT;
5367786dc871 Uploaded
greg
parents:
diff changeset
3979 outerTopBrt = RED_OUTER_BRT;
5367786dc871 Uploaded
greg
parents:
diff changeset
3980 innerLowBrt = BLUE_INNER_BRT;
5367786dc871 Uploaded
greg
parents:
diff changeset
3981 outerLowBrt = BLUE_OUTER_BRT;
5367786dc871 Uploaded
greg
parents:
diff changeset
3982 }
5367786dc871 Uploaded
greg
parents:
diff changeset
3983
5367786dc871 Uploaded
greg
parents:
diff changeset
3984 var twoCols = cells.length == 2;
5367786dc871 Uploaded
greg
parents:
diff changeset
3985
5367786dc871 Uploaded
greg
parents:
diff changeset
3986 if (max == min) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3987 $(cells).css('color', MEDIAN_BRT);
5367786dc871 Uploaded
greg
parents:
diff changeset
3988 } else {
5367786dc871 Uploaded
greg
parents:
diff changeset
3989 var sortedValues = numbers.slice().sort(function(a, b) {
5367786dc871 Uploaded
greg
parents:
diff changeset
3990 return a - b;
5367786dc871 Uploaded
greg
parents:
diff changeset
3991 });
5367786dc871 Uploaded
greg
parents:
diff changeset
3992 var median = getMedian(sortedValues);
5367786dc871 Uploaded
greg
parents:
diff changeset
3993 var l = numbers.length;
5367786dc871 Uploaded
greg
parents:
diff changeset
3994 var q1 = sortedValues[Math.floor((l - 1) / 4)];
5367786dc871 Uploaded
greg
parents:
diff changeset
3995 var q3 = sortedValues[Math.floor((l - 1) * 3 / 4)];
5367786dc871 Uploaded
greg
parents:
diff changeset
3996
5367786dc871 Uploaded
greg
parents:
diff changeset
3997 var d = q3 - q1;
5367786dc871 Uploaded
greg
parents:
diff changeset
3998 var low_outer_fence = q1 - 3 * d;
5367786dc871 Uploaded
greg
parents:
diff changeset
3999 var low_inner_fence = q1 - 1.5 * d;
5367786dc871 Uploaded
greg
parents:
diff changeset
4000 var top_inner_fence = q3 + 1.5 * d;
5367786dc871 Uploaded
greg
parents:
diff changeset
4001 var top_outer_fence = q3 + 3 * d;
5367786dc871 Uploaded
greg
parents:
diff changeset
4002 cells.each(function (i) {
5367786dc871 Uploaded
greg
parents:
diff changeset
4003 var number = numbers[i];
5367786dc871 Uploaded
greg
parents:
diff changeset
4004 if (number < low_outer_fence) {
5367786dc871 Uploaded
greg
parents:
diff changeset
4005 $(this).css('background', getColor(lowHue, twoCols ? null : outerLowBrt));
5367786dc871 Uploaded
greg
parents:
diff changeset
4006 if (twoCols != true) $(this).css('color', 'white');
5367786dc871 Uploaded
greg
parents:
diff changeset
4007 }
5367786dc871 Uploaded
greg
parents:
diff changeset
4008 else if (number < low_inner_fence) {
5367786dc871 Uploaded
greg
parents:
diff changeset
4009 $(this).css('background', getColor(lowHue, twoCols ? null : innerLowBrt));
5367786dc871 Uploaded
greg
parents:
diff changeset
4010 }
5367786dc871 Uploaded
greg
parents:
diff changeset
4011 else if (number < median) {
5367786dc871 Uploaded
greg
parents:
diff changeset
4012 var k = (MEDIAN_BRT - MIN_NORMAL_BRT) / (median - low_inner_fence);
5367786dc871 Uploaded
greg
parents:
diff changeset
4013 var brt = Math.round(MEDIAN_BRT - (median - number) * k);
5367786dc871 Uploaded
greg
parents:
diff changeset
4014 $(this).css('background', getColor(lowHue, twoCols ? null : brt));
5367786dc871 Uploaded
greg
parents:
diff changeset
4015 }
5367786dc871 Uploaded
greg
parents:
diff changeset
4016 else if (number > top_inner_fence) {
5367786dc871 Uploaded
greg
parents:
diff changeset
4017 $(this).css('background', getColor(topHue, twoCols ? null : innerTopBrt));
5367786dc871 Uploaded
greg
parents:
diff changeset
4018 }
5367786dc871 Uploaded
greg
parents:
diff changeset
4019 else if (number > top_outer_fence) {
5367786dc871 Uploaded
greg
parents:
diff changeset
4020 $(this).css('background', getColor(topHue, twoCols ? null : outerTopBrt));
5367786dc871 Uploaded
greg
parents:
diff changeset
4021 if (twoCols != true) $(this).css('color', 'white');
5367786dc871 Uploaded
greg
parents:
diff changeset
4022 }
5367786dc871 Uploaded
greg
parents:
diff changeset
4023 else if (number > median) {
5367786dc871 Uploaded
greg
parents:
diff changeset
4024 var k = (MEDIAN_BRT - MIN_NORMAL_BRT) / (top_inner_fence - median);
5367786dc871 Uploaded
greg
parents:
diff changeset
4025 var brt = Math.round(MEDIAN_BRT - (number - median) * k);
5367786dc871 Uploaded
greg
parents:
diff changeset
4026 $(this).css('background', getColor(topHue, twoCols ? null : brt));
5367786dc871 Uploaded
greg
parents:
diff changeset
4027 }
5367786dc871 Uploaded
greg
parents:
diff changeset
4028 });
5367786dc871 Uploaded
greg
parents:
diff changeset
4029 }
5367786dc871 Uploaded
greg
parents:
diff changeset
4030 }
5367786dc871 Uploaded
greg
parents:
diff changeset
4031 function extendedClick() {
5367786dc871 Uploaded
greg
parents:
diff changeset
4032 $('.row_to_hide').toggleClass('row_hidden');
5367786dc871 Uploaded
greg
parents:
diff changeset
4033
5367786dc871 Uploaded
greg
parents:
diff changeset
4034 var link = $('#extended_report_link');
5367786dc871 Uploaded
greg
parents:
diff changeset
4035 if (link.html() == 'Extended report') {
5367786dc871 Uploaded
greg
parents:
diff changeset
4036 link.html('Short report');
5367786dc871 Uploaded
greg
parents:
diff changeset
4037 } else {
5367786dc871 Uploaded
greg
parents:
diff changeset
4038 link.html('Extended report');
5367786dc871 Uploaded
greg
parents:
diff changeset
4039 }
5367786dc871 Uploaded
greg
parents:
diff changeset
4040 }
5367786dc871 Uploaded
greg
parents:
diff changeset
4041
5367786dc871 Uploaded
greg
parents:
diff changeset
4042 function buildExtendedLinkClick() {
5367786dc871 Uploaded
greg
parents:
diff changeset
4043 return '<p id="extended_link"><a class="dotted-link" id="extended_report_link" onclick="extendedClick($(this))">Extended report</a></p>';
5367786dc871 Uploaded
greg
parents:
diff changeset
4044 }
5367786dc871 Uploaded
greg
parents:
diff changeset
4045
5367786dc871 Uploaded
greg
parents:
diff changeset
4046 function appendIcarusLinks() {
5367786dc871 Uploaded
greg
parents:
diff changeset
4047 if (icarusLinks = readJson('icarus')) {
5367786dc871 Uploaded
greg
parents:
diff changeset
4048 if (icarusLinks.links != undefined) {
5367786dc871 Uploaded
greg
parents:
diff changeset
4049 var links = '';
5367786dc871 Uploaded
greg
parents:
diff changeset
4050 for (var link_n = 0; link_n < icarusLinks.links.length; link_n++) {
5367786dc871 Uploaded
greg
parents:
diff changeset
4051 //links += '<a href="' + icarusLinks.links[link_n] + '">' + icarusLinks.links_names[link_n] + '</a><br>'
5367786dc871 Uploaded
greg
parents:
diff changeset
4052 links += '<a class="btn btn-default btn-xs" role="button" href="' + icarusLinks.links[link_n] + '">' + icarusLinks.links_names[link_n] + '</a><br>'
5367786dc871 Uploaded
greg
parents:
diff changeset
4053 }
5367786dc871 Uploaded
greg
parents:
diff changeset
4054 $('#icarus').html(links);
5367786dc871 Uploaded
greg
parents:
diff changeset
4055 }
5367786dc871 Uploaded
greg
parents:
diff changeset
4056 }
5367786dc871 Uploaded
greg
parents:
diff changeset
4057 }
5367786dc871 Uploaded
greg
parents:
diff changeset
4058
5367786dc871 Uploaded
greg
parents:
diff changeset
4059 </script>
5367786dc871 Uploaded
greg
parents:
diff changeset
4060
5367786dc871 Uploaded
greg
parents:
diff changeset
4061
5367786dc871 Uploaded
greg
parents:
diff changeset
4062 <script type="text/javascript">
5367786dc871 Uploaded
greg
parents:
diff changeset
4063 var colors = ["#FF0000","#0000FF"];
5367786dc871 Uploaded
greg
parents:
diff changeset
4064 var broken_scaffolds_labels = [];
5367786dc871 Uploaded
greg
parents:
diff changeset
4065 </script>
5367786dc871 Uploaded
greg
parents:
diff changeset
4066 <script type="text/javascript">
5367786dc871 Uploaded
greg
parents:
diff changeset
4067 function addRow(metric, mainMetrics, rowName, group_n, order, glossary, isExpandable, isPrimary) {
5367786dc871 Uploaded
greg
parents:
diff changeset
4068 (function(group_n) {
5367786dc871 Uploaded
greg
parents:
diff changeset
4069 var id_group = '#group_' + group_n;
5367786dc871 Uploaded
greg
parents:
diff changeset
4070 $(function() {
5367786dc871 Uploaded
greg
parents:
diff changeset
4071 $(id_group).removeClass('group_empty');
5367786dc871 Uploaded
greg
parents:
diff changeset
4072 });
5367786dc871 Uploaded
greg
parents:
diff changeset
4073 })(group_n);
5367786dc871 Uploaded
greg
parents:
diff changeset
4074
5367786dc871 Uploaded
greg
parents:
diff changeset
4075 var table = '';
5367786dc871 Uploaded
greg
parents:
diff changeset
4076 metricName = metric.metricName;
5367786dc871 Uploaded
greg
parents:
diff changeset
4077 var quality = metric.quality;
5367786dc871 Uploaded
greg
parents:
diff changeset
4078 var values = metric.values;
5367786dc871 Uploaded
greg
parents:
diff changeset
4079
5367786dc871 Uploaded
greg
parents:
diff changeset
4080 var trClass = 'content-row';
5367786dc871 Uploaded
greg
parents:
diff changeset
4081 if (metric.isMain || $.inArray(metricName, mainMetrics) > -1) {
5367786dc871 Uploaded
greg
parents:
diff changeset
4082 (function(group_n) {
5367786dc871 Uploaded
greg
parents:
diff changeset
4083 var id_group = '#group_' + group_n;
5367786dc871 Uploaded
greg
parents:
diff changeset
4084 $(function() {
5367786dc871 Uploaded
greg
parents:
diff changeset
4085 $(id_group).removeClass('row_hidden');
5367786dc871 Uploaded
greg
parents:
diff changeset
4086 $(id_group).removeClass('row_to_hide');
5367786dc871 Uploaded
greg
parents:
diff changeset
4087 });
5367786dc871 Uploaded
greg
parents:
diff changeset
4088 })(group_n);
5367786dc871 Uploaded
greg
parents:
diff changeset
4089 } else {
5367786dc871 Uploaded
greg
parents:
diff changeset
4090 trClass = 'content-row row_hidden row_to_hide';
5367786dc871 Uploaded
greg
parents:
diff changeset
4091 }
5367786dc871 Uploaded
greg
parents:
diff changeset
4092 var tdClass = '';
5367786dc871 Uploaded
greg
parents:
diff changeset
4093 if (!isPrimary) {
5367786dc871 Uploaded
greg
parents:
diff changeset
4094 trClass += ' secondary_hidden';
5367786dc871 Uploaded
greg
parents:
diff changeset
4095 tdClass = 'secondary_td';
5367786dc871 Uploaded
greg
parents:
diff changeset
4096 }
5367786dc871 Uploaded
greg
parents:
diff changeset
4097 else {
5367786dc871 Uploaded
greg
parents:
diff changeset
4098 trClass += ' primary';
5367786dc871 Uploaded
greg
parents:
diff changeset
4099 }
5367786dc871 Uploaded
greg
parents:
diff changeset
4100 if (isExpandable) {
5367786dc871 Uploaded
greg
parents:
diff changeset
4101 table +=
5367786dc871 Uploaded
greg
parents:
diff changeset
4102 '<tr class="' + trClass + '" quality="' + quality + '" onclick="toggleSecondary(event, $(this))">' +
5367786dc871 Uploaded
greg
parents:
diff changeset
4103 '<td class="left_column_td ' + tdClass + '">' +
5367786dc871 Uploaded
greg
parents:
diff changeset
4104 '<span class="metric-name expandable collapsed">' +
5367786dc871 Uploaded
greg
parents:
diff changeset
4105 initial_spaces_to_nbsp(addTooltipIfDefinitionExists(glossary, rowName.trunc(55)), metricName) +
5367786dc871 Uploaded
greg
parents:
diff changeset
4106 '</span></td>';
5367786dc871 Uploaded
greg
parents:
diff changeset
4107 }
5367786dc871 Uploaded
greg
parents:
diff changeset
4108 else {
5367786dc871 Uploaded
greg
parents:
diff changeset
4109 table +=
5367786dc871 Uploaded
greg
parents:
diff changeset
4110 '<tr class="' + trClass + '" quality="' + quality + '">' +
5367786dc871 Uploaded
greg
parents:
diff changeset
4111 '<td class="left_column_td"><span class="metric-name">' +
5367786dc871 Uploaded
greg
parents:
diff changeset
4112 initial_spaces_to_nbsp(addTooltipIfDefinitionExists(glossary, rowName.trunc(55)), metricName) +
5367786dc871 Uploaded
greg
parents:
diff changeset
4113 '</span>' +
5367786dc871 Uploaded
greg
parents:
diff changeset
4114 '</td>';
5367786dc871 Uploaded
greg
parents:
diff changeset
4115 }
5367786dc871 Uploaded
greg
parents:
diff changeset
4116 for (var val_n = 0; val_n < values.length; val_n++) {
5367786dc871 Uploaded
greg
parents:
diff changeset
4117 value = values[order[val_n]];
5367786dc871 Uploaded
greg
parents:
diff changeset
4118
5367786dc871 Uploaded
greg
parents:
diff changeset
4119 if (value === null || value === '') {
5367786dc871 Uploaded
greg
parents:
diff changeset
4120 table += '<td><span>-</span></td>';
5367786dc871 Uploaded
greg
parents:
diff changeset
4121 } else {
5367786dc871 Uploaded
greg
parents:
diff changeset
4122 if (typeof value === 'number') {
5367786dc871 Uploaded
greg
parents:
diff changeset
4123 table +=
5367786dc871 Uploaded
greg
parents:
diff changeset
4124 '<td number="' + value + '"><span>'
5367786dc871 Uploaded
greg
parents:
diff changeset
4125 + toPrettyString(value) + '</span></td>';
5367786dc871 Uploaded
greg
parents:
diff changeset
4126 } else {
5367786dc871 Uploaded
greg
parents:
diff changeset
4127 var result = /([0-9\.]+)(.*)/.exec(value);
5367786dc871 Uploaded
greg
parents:
diff changeset
4128 var num = parseFloat(result[1]);
5367786dc871 Uploaded
greg
parents:
diff changeset
4129 var rest = result[2];
5367786dc871 Uploaded
greg
parents:
diff changeset
4130 // alert('value = ' + value + ' result = ' + result);
5367786dc871 Uploaded
greg
parents:
diff changeset
4131
5367786dc871 Uploaded
greg
parents:
diff changeset
4132 // var num = parseFloat(value);
5367786dc871 Uploaded
greg
parents:
diff changeset
4133
5367786dc871 Uploaded
greg
parents:
diff changeset
4134 if (num !== null) {
5367786dc871 Uploaded
greg
parents:
diff changeset
4135 table += '<td number="' + num + '"><span>' + toPrettyString(num) + rest + '</span></td>';
5367786dc871 Uploaded
greg
parents:
diff changeset
4136 } else {
5367786dc871 Uploaded
greg
parents:
diff changeset
4137 table += '<td><span>' + value + '</span></td>';
5367786dc871 Uploaded
greg
parents:
diff changeset
4138 }
5367786dc871 Uploaded
greg
parents:
diff changeset
4139 }
5367786dc871 Uploaded
greg
parents:
diff changeset
4140 }
5367786dc871 Uploaded
greg
parents:
diff changeset
4141 }
5367786dc871 Uploaded
greg
parents:
diff changeset
4142 return table;
5367786dc871 Uploaded
greg
parents:
diff changeset
4143 }
5367786dc871 Uploaded
greg
parents:
diff changeset
4144
5367786dc871 Uploaded
greg
parents:
diff changeset
4145 function getSubRows(subReports, groupName, metricName) {
5367786dc871 Uploaded
greg
parents:
diff changeset
4146 rows = [];
5367786dc871 Uploaded
greg
parents:
diff changeset
4147 if (subReports) {
5367786dc871 Uploaded
greg
parents:
diff changeset
4148 for (var report_n = 0; report_n < subReports.length; report_n++) {
5367786dc871 Uploaded
greg
parents:
diff changeset
4149 subReport = subReports[report_n];
5367786dc871 Uploaded
greg
parents:
diff changeset
4150 for (var group_n = 0; group_n < subReport.length; group_n++) {
5367786dc871 Uploaded
greg
parents:
diff changeset
4151 if (subReport[group_n][0] != groupName)
5367786dc871 Uploaded
greg
parents:
diff changeset
4152 continue;
5367786dc871 Uploaded
greg
parents:
diff changeset
4153 metrics = subReport[group_n][1];
5367786dc871 Uploaded
greg
parents:
diff changeset
4154 for (var metric_n = 0; metric_n < metrics.length; metric_n++) {
5367786dc871 Uploaded
greg
parents:
diff changeset
4155 if (metrics[metric_n].metricName == metricName)
5367786dc871 Uploaded
greg
parents:
diff changeset
4156 rows.push(metrics[metric_n])
5367786dc871 Uploaded
greg
parents:
diff changeset
4157 }
5367786dc871 Uploaded
greg
parents:
diff changeset
4158 }
5367786dc871 Uploaded
greg
parents:
diff changeset
4159 }
5367786dc871 Uploaded
greg
parents:
diff changeset
4160 }
5367786dc871 Uploaded
greg
parents:
diff changeset
4161 return rows;
5367786dc871 Uploaded
greg
parents:
diff changeset
4162 }
5367786dc871 Uploaded
greg
parents:
diff changeset
4163
5367786dc871 Uploaded
greg
parents:
diff changeset
4164 function buildTotalReport(assembliesNames, totalReport, order, glossary, qualities, mainMetrics) {
5367786dc871 Uploaded
greg
parents:
diff changeset
4165 var report = totalReport.report,
5367786dc871 Uploaded
greg
parents:
diff changeset
4166 date = totalReport.date,
5367786dc871 Uploaded
greg
parents:
diff changeset
4167 minContig = totalReport.minContig,
5367786dc871 Uploaded
greg
parents:
diff changeset
4168 referenceName = totalReport.referenceName,
5367786dc871 Uploaded
greg
parents:
diff changeset
4169 subReports = totalReport.subreports,
5367786dc871 Uploaded
greg
parents:
diff changeset
4170 subReferences = totalReport.subreferences;
5367786dc871 Uploaded
greg
parents:
diff changeset
4171 $('#report_date').html('<p>' + date + '</p>');
5367786dc871 Uploaded
greg
parents:
diff changeset
4172 var extraInfo = '<p>All statistics are based on contigs of size >= ' + minContig +
5367786dc871 Uploaded
greg
parents:
diff changeset
4173 '<span class="rhs">&nbsp;</span>bp, unless otherwise noted (e.g., "# contigs (>= 0 bp)" and "Total length (>= 0 bp)" include all contigs).</p>';
5367786dc871 Uploaded
greg
parents:
diff changeset
4174 $('#extrainfo').html(extraInfo);
5367786dc871 Uploaded
greg
parents:
diff changeset
4175 $('#plot-caption').show();
5367786dc871 Uploaded
greg
parents:
diff changeset
4176
5367786dc871 Uploaded
greg
parents:
diff changeset
4177 var table = '';
5367786dc871 Uploaded
greg
parents:
diff changeset
4178 table += '<table cellspacing="0" class="report_table draggable" id="main_report_table">';
5367786dc871 Uploaded
greg
parents:
diff changeset
4179
5367786dc871 Uploaded
greg
parents:
diff changeset
4180 if (referenceName) {
5367786dc871 Uploaded
greg
parents:
diff changeset
4181 $('#reference_name').show().find('.val').html(referenceName);
5367786dc871 Uploaded
greg
parents:
diff changeset
4182 }
5367786dc871 Uploaded
greg
parents:
diff changeset
4183
5367786dc871 Uploaded
greg
parents:
diff changeset
4184 if (report[0][0] == 'Genome statistics') { // if first section is empty (no reference), swap it and w/o reference statistics
5367786dc871 Uploaded
greg
parents:
diff changeset
4185 var genomeMetrics = report[0][1];
5367786dc871 Uploaded
greg
parents:
diff changeset
4186 var isSectionEmpty = true;
5367786dc871 Uploaded
greg
parents:
diff changeset
4187 for (var index = 0; index < genomeMetrics.length; index++) {
5367786dc871 Uploaded
greg
parents:
diff changeset
4188 if (genomeMetrics[index].isMain || $.inArray(genomeMetrics[index].metric_name, mainMetrics) > -1)
5367786dc871 Uploaded
greg
parents:
diff changeset
4189 isSectionEmpty = false;
5367786dc871 Uploaded
greg
parents:
diff changeset
4190 }
5367786dc871 Uploaded
greg
parents:
diff changeset
4191 if (isSectionEmpty) {
5367786dc871 Uploaded
greg
parents:
diff changeset
4192 for (var group_n = 0; group_n < report.length; group_n++) {
5367786dc871 Uploaded
greg
parents:
diff changeset
4193 if (report[group_n][0] == 'Statistics without reference') {
5367786dc871 Uploaded
greg
parents:
diff changeset
4194 report[0] = report.splice(group_n, 1, report[0])[0];
5367786dc871 Uploaded
greg
parents:
diff changeset
4195 }
5367786dc871 Uploaded
greg
parents:
diff changeset
4196 }
5367786dc871 Uploaded
greg
parents:
diff changeset
4197 }
5367786dc871 Uploaded
greg
parents:
diff changeset
4198 }
5367786dc871 Uploaded
greg
parents:
diff changeset
4199
5367786dc871 Uploaded
greg
parents:
diff changeset
4200 for (var group_n = 0; group_n < report.length; group_n++) {
5367786dc871 Uploaded
greg
parents:
diff changeset
4201 var group = report[group_n];
5367786dc871 Uploaded
greg
parents:
diff changeset
4202 var groupName = group[0];
5367786dc871 Uploaded
greg
parents:
diff changeset
4203 var metrics = group[1];
5367786dc871 Uploaded
greg
parents:
diff changeset
4204 var width = assembliesNames.length + 1;
5367786dc871 Uploaded
greg
parents:
diff changeset
4205
5367786dc871 Uploaded
greg
parents:
diff changeset
4206 if (groupName == 'Reference statistics') {
5367786dc871 Uploaded
greg
parents:
diff changeset
4207 var referenceValues = {};
5367786dc871 Uploaded
greg
parents:
diff changeset
4208 for (var metric_n = 0; metric_n < metrics.length; metric_n++) {
5367786dc871 Uploaded
greg
parents:
diff changeset
4209 var metric = metrics[metric_n];
5367786dc871 Uploaded
greg
parents:
diff changeset
4210 var metricName = metric.metricName;
5367786dc871 Uploaded
greg
parents:
diff changeset
4211 var value = metric.values[0];
5367786dc871 Uploaded
greg
parents:
diff changeset
4212 referenceValues[metricName] = value;
5367786dc871 Uploaded
greg
parents:
diff changeset
4213 }
5367786dc871 Uploaded
greg
parents:
diff changeset
4214 var refLen = referenceValues['Reference length'];
5367786dc871 Uploaded
greg
parents:
diff changeset
4215 var refFragments = referenceValues['Reference fragments'];
5367786dc871 Uploaded
greg
parents:
diff changeset
4216 var refGC = referenceValues['Reference GC (%)'];
5367786dc871 Uploaded
greg
parents:
diff changeset
4217 var refFeatures = referenceValues['Reference genomic features'];
5367786dc871 Uploaded
greg
parents:
diff changeset
4218 var refOperons = referenceValues['Reference operons'];
5367786dc871 Uploaded
greg
parents:
diff changeset
4219 var refChr = referenceValues['Reference chromosomes'];
5367786dc871 Uploaded
greg
parents:
diff changeset
4220 var totalReads = referenceValues['# total reads'];
5367786dc871 Uploaded
greg
parents:
diff changeset
4221 var refMappedReads = referenceValues['Reference mapped (%)'];
5367786dc871 Uploaded
greg
parents:
diff changeset
4222 var refPairedReads = referenceValues['Reference properly paired (%)'];
5367786dc871 Uploaded
greg
parents:
diff changeset
4223 var estRefLen = referenceValues['Estimated reference length'];
5367786dc871 Uploaded
greg
parents:
diff changeset
4224
5367786dc871 Uploaded
greg
parents:
diff changeset
4225 if (refLen)
5367786dc871 Uploaded
greg
parents:
diff changeset
4226 $('#reference_length').show().find('.val').html(toPrettyString(refLen));
5367786dc871 Uploaded
greg
parents:
diff changeset
4227 else if (estRefLen)
5367786dc871 Uploaded
greg
parents:
diff changeset
4228 $('#est_reference_length').show().find('.val').html(toPrettyString(estRefLen));
5367786dc871 Uploaded
greg
parents:
diff changeset
4229 if (refFragments) {
5367786dc871 Uploaded
greg
parents:
diff changeset
4230 $('#reference_fragments').show().find('.val').html(refFragments);
5367786dc871 Uploaded
greg
parents:
diff changeset
4231 if (refFragments > 1)
5367786dc871 Uploaded
greg
parents:
diff changeset
4232 $('#reference_fragments').find('.plural_ending').show();
5367786dc871 Uploaded
greg
parents:
diff changeset
4233 }
5367786dc871 Uploaded
greg
parents:
diff changeset
4234 if (refGC)
5367786dc871 Uploaded
greg
parents:
diff changeset
4235 $('#reference_gc').show().find('.val').html(toPrettyString(refGC));
5367786dc871 Uploaded
greg
parents:
diff changeset
4236 if (refFeatures)
5367786dc871 Uploaded
greg
parents:
diff changeset
4237 $('#reference_features').show().find('.val').html(toPrettyString(refFeatures));
5367786dc871 Uploaded
greg
parents:
diff changeset
4238 if (refOperons)
5367786dc871 Uploaded
greg
parents:
diff changeset
4239 $('#reference_operons').show().find('.val').html(toPrettyString(refOperons));
5367786dc871 Uploaded
greg
parents:
diff changeset
4240 if (refChr) {
5367786dc871 Uploaded
greg
parents:
diff changeset
4241 $('#reference_chr').show().find('.val').html(refChr);
5367786dc871 Uploaded
greg
parents:
diff changeset
4242 if (refChr > 1)
5367786dc871 Uploaded
greg
parents:
diff changeset
4243 $('#reference_chr').find('.plural_ending').show();
5367786dc871 Uploaded
greg
parents:
diff changeset
4244 }
5367786dc871 Uploaded
greg
parents:
diff changeset
4245 if (totalReads)
5367786dc871 Uploaded
greg
parents:
diff changeset
4246 $('#total_reads').show().find('.val').html(toPrettyString(totalReads));
5367786dc871 Uploaded
greg
parents:
diff changeset
4247 if (refMappedReads !== undefined)
5367786dc871 Uploaded
greg
parents:
diff changeset
4248 $('#reference_mapped_reads').show().find('.val').html(toPrettyString(refMappedReads));
5367786dc871 Uploaded
greg
parents:
diff changeset
4249 if (refPairedReads !== undefined)
5367786dc871 Uploaded
greg
parents:
diff changeset
4250 $('#reference_paired_reads').show().find('.val').html(toPrettyString(refPairedReads));
5367786dc871 Uploaded
greg
parents:
diff changeset
4251 continue;
5367786dc871 Uploaded
greg
parents:
diff changeset
4252 }
5367786dc871 Uploaded
greg
parents:
diff changeset
4253
5367786dc871 Uploaded
greg
parents:
diff changeset
4254 if (group_n == 0) {
5367786dc871 Uploaded
greg
parents:
diff changeset
4255 table += '<tr class="top_row_tr"><td id="top_left_td" class="left_column_td"><span>' + groupName + '</span></td>';
5367786dc871 Uploaded
greg
parents:
diff changeset
4256
5367786dc871 Uploaded
greg
parents:
diff changeset
4257 for (var assembly_n = 0; assembly_n < assembliesNames.length; assembly_n++) {
5367786dc871 Uploaded
greg
parents:
diff changeset
4258 var assemblyName = assembliesNames[order[assembly_n]];
5367786dc871 Uploaded
greg
parents:
diff changeset
4259 if (assemblyName.length > 30) {
5367786dc871 Uploaded
greg
parents:
diff changeset
4260 assemblyName =
5367786dc871 Uploaded
greg
parents:
diff changeset
4261 '<span class="tooltip-link" rel="tooltip" title="' + assemblyName + '">' +
5367786dc871 Uploaded
greg
parents:
diff changeset
4262 assemblyName.trunc(30) +
5367786dc871 Uploaded
greg
parents:
diff changeset
4263 '</span>'
5367786dc871 Uploaded
greg
parents:
diff changeset
4264 }
5367786dc871 Uploaded
greg
parents:
diff changeset
4265
5367786dc871 Uploaded
greg
parents:
diff changeset
4266 table += '<td class="second_through_last_col_headers_td" position="' + order[assembly_n] + '">' +
5367786dc871 Uploaded
greg
parents:
diff changeset
4267 '<span class="drag_handle"><span class="drag_image"></span></span>' +
5367786dc871 Uploaded
greg
parents:
diff changeset
4268 '<span class="assembly_name">' + assemblyName + '</span>' +
5367786dc871 Uploaded
greg
parents:
diff changeset
4269 '</td>';
5367786dc871 Uploaded
greg
parents:
diff changeset
4270 }
5367786dc871 Uploaded
greg
parents:
diff changeset
4271
5367786dc871 Uploaded
greg
parents:
diff changeset
4272 } else {
5367786dc871 Uploaded
greg
parents:
diff changeset
4273 table +=
5367786dc871 Uploaded
greg
parents:
diff changeset
4274 '<tr class="group_header row_to_hide row_hidden group_empty" id="group_' + group_n + '">' +
5367786dc871 Uploaded
greg
parents:
diff changeset
4275 '<td class="left_column_td"><span>' + groupName + '</span></td>'; //colspan="' + width + '"
5367786dc871 Uploaded
greg
parents:
diff changeset
4276 for (var i = 1; i < width; i++) {
5367786dc871 Uploaded
greg
parents:
diff changeset
4277 table += '<td></td>';
5367786dc871 Uploaded
greg
parents:
diff changeset
4278 }
5367786dc871 Uploaded
greg
parents:
diff changeset
4279 table += '</tr>';
5367786dc871 Uploaded
greg
parents:
diff changeset
4280 }
5367786dc871 Uploaded
greg
parents:
diff changeset
4281
5367786dc871 Uploaded
greg
parents:
diff changeset
4282 for (metric_n = 0; metric_n < metrics.length; metric_n++) {
5367786dc871 Uploaded
greg
parents:
diff changeset
4283 isExpandable = false;
5367786dc871 Uploaded
greg
parents:
diff changeset
4284 isPrimary = true;
5367786dc871 Uploaded
greg
parents:
diff changeset
4285 metricName = metrics[metric_n].metricName;
5367786dc871 Uploaded
greg
parents:
diff changeset
4286 subRows = getSubRows(subReports, groupName, metricName);
5367786dc871 Uploaded
greg
parents:
diff changeset
4287 if (subRows && subRows.length > 0) {
5367786dc871 Uploaded
greg
parents:
diff changeset
4288 isExpandable = true;
5367786dc871 Uploaded
greg
parents:
diff changeset
4289 table += addRow(metrics[metric_n], mainMetrics, metricName, group_n, order, glossary, isExpandable, isPrimary);
5367786dc871 Uploaded
greg
parents:
diff changeset
4290 for (var rows_n = 0; rows_n < subRows.length; rows_n++) {
5367786dc871 Uploaded
greg
parents:
diff changeset
4291 isExpandable = false;
5367786dc871 Uploaded
greg
parents:
diff changeset
4292 isPrimary = false;
5367786dc871 Uploaded
greg
parents:
diff changeset
4293 table += addRow(subRows[rows_n], mainMetrics, subReferences[rows_n], group_n, order, glossary, isExpandable, isPrimary);
5367786dc871 Uploaded
greg
parents:
diff changeset
4294 }
5367786dc871 Uploaded
greg
parents:
diff changeset
4295 }
5367786dc871 Uploaded
greg
parents:
diff changeset
4296 else table += addRow(metrics[metric_n], mainMetrics, metricName, group_n, order, glossary, isExpandable, isPrimary);
5367786dc871 Uploaded
greg
parents:
diff changeset
4297 }
5367786dc871 Uploaded
greg
parents:
diff changeset
4298 table += '</tr>';
5367786dc871 Uploaded
greg
parents:
diff changeset
4299 }
5367786dc871 Uploaded
greg
parents:
diff changeset
4300 table += '</table>';
5367786dc871 Uploaded
greg
parents:
diff changeset
4301
5367786dc871 Uploaded
greg
parents:
diff changeset
4302 table += buildExtendedLinkClick();
5367786dc871 Uploaded
greg
parents:
diff changeset
4303
5367786dc871 Uploaded
greg
parents:
diff changeset
4304 setUpHeatMap(table);
5367786dc871 Uploaded
greg
parents:
diff changeset
4305 }
5367786dc871 Uploaded
greg
parents:
diff changeset
4306
5367786dc871 Uploaded
greg
parents:
diff changeset
4307 </script>
5367786dc871 Uploaded
greg
parents:
diff changeset
4308
5367786dc871 Uploaded
greg
parents:
diff changeset
4309
5367786dc871 Uploaded
greg
parents:
diff changeset
4310 <script type="text/javascript">
5367786dc871 Uploaded
greg
parents:
diff changeset
4311
5367786dc871 Uploaded
greg
parents:
diff changeset
4312 function buildReport() {
5367786dc871 Uploaded
greg
parents:
diff changeset
4313 var assembliesNames;
5367786dc871 Uploaded
greg
parents:
diff changeset
4314 var order;
5367786dc871 Uploaded
greg
parents:
diff changeset
4315
5367786dc871 Uploaded
greg
parents:
diff changeset
4316 var totalReport = null;
5367786dc871 Uploaded
greg
parents:
diff changeset
4317 var qualities = null;
5367786dc871 Uploaded
greg
parents:
diff changeset
4318 var mainMetrics = null;
5367786dc871 Uploaded
greg
parents:
diff changeset
4319 var contigsLens = null;
5367786dc871 Uploaded
greg
parents:
diff changeset
4320 var coordNx = null;
5367786dc871 Uploaded
greg
parents:
diff changeset
4321 var contigsLensNx = null;
5367786dc871 Uploaded
greg
parents:
diff changeset
4322 var alignedContigsLens = null;
5367786dc871 Uploaded
greg
parents:
diff changeset
4323 var refLengths = null;
5367786dc871 Uploaded
greg
parents:
diff changeset
4324 var contigs = null;
5367786dc871 Uploaded
greg
parents:
diff changeset
4325 var featuresInContigs = null;
5367786dc871 Uploaded
greg
parents:
diff changeset
4326 var operonsInContigs = null;
5367786dc871 Uploaded
greg
parents:
diff changeset
4327 var gcInfos = null;
5367786dc871 Uploaded
greg
parents:
diff changeset
4328
5367786dc871 Uploaded
greg
parents:
diff changeset
4329 var glossary = JSON.parse($('#glossary-json').html());
5367786dc871 Uploaded
greg
parents:
diff changeset
4330
5367786dc871 Uploaded
greg
parents:
diff changeset
4331 var plotsSwitchesDiv = document.getElementById('plots-switches');
5367786dc871 Uploaded
greg
parents:
diff changeset
4332 var toRemoveRefLabel = true;
5367786dc871 Uploaded
greg
parents:
diff changeset
4333 var firstPlot = true;
5367786dc871 Uploaded
greg
parents:
diff changeset
4334
5367786dc871 Uploaded
greg
parents:
diff changeset
4335 /****************/
5367786dc871 Uploaded
greg
parents:
diff changeset
4336 /* Total report */
5367786dc871 Uploaded
greg
parents:
diff changeset
4337
5367786dc871 Uploaded
greg
parents:
diff changeset
4338 if (!(totalReport = readJson('total-report'))) {
5367786dc871 Uploaded
greg
parents:
diff changeset
4339 console.log("Error: cannot read #total-report-json");
5367786dc871 Uploaded
greg
parents:
diff changeset
4340 return 1;
5367786dc871 Uploaded
greg
parents:
diff changeset
4341 }
5367786dc871 Uploaded
greg
parents:
diff changeset
4342
5367786dc871 Uploaded
greg
parents:
diff changeset
4343 assembliesNames = totalReport.assembliesNames;
5367786dc871 Uploaded
greg
parents:
diff changeset
4344
5367786dc871 Uploaded
greg
parents:
diff changeset
4345 order = recoverOrderFromCookies() || totalReport.order || Range(0, assembliesNames.length);
5367786dc871 Uploaded
greg
parents:
diff changeset
4346
5367786dc871 Uploaded
greg
parents:
diff changeset
4347 buildTotalReport(assembliesNames, totalReport, order, glossary, qualities, mainMetrics);
5367786dc871 Uploaded
greg
parents:
diff changeset
4348
5367786dc871 Uploaded
greg
parents:
diff changeset
4349 if (refLengths = readJson('reference-length'))
5367786dc871 Uploaded
greg
parents:
diff changeset
4350 refLengths = refLengths.reflen;
5367786dc871 Uploaded
greg
parents:
diff changeset
4351
5367786dc871 Uploaded
greg
parents:
diff changeset
4352 /****************/
5367786dc871 Uploaded
greg
parents:
diff changeset
4353 /* Plots */
5367786dc871 Uploaded
greg
parents:
diff changeset
4354
5367786dc871 Uploaded
greg
parents:
diff changeset
4355 while (assembliesNames.length > colors.length) { // colors is defined in utils.js
5367786dc871 Uploaded
greg
parents:
diff changeset
4356 colors = colors.concat(colors);
5367786dc871 Uploaded
greg
parents:
diff changeset
4357 }
5367786dc871 Uploaded
greg
parents:
diff changeset
4358
5367786dc871 Uploaded
greg
parents:
diff changeset
4359 $(plotsSwitchesDiv).html('<b>Plots:</b>');
5367786dc871 Uploaded
greg
parents:
diff changeset
4360
5367786dc871 Uploaded
greg
parents:
diff changeset
4361 var selectedAssemblies = Array.apply(null, {length: assembliesNames}).map(Number.call, Number);
5367786dc871 Uploaded
greg
parents:
diff changeset
4362 assembliesNames.forEach(function(filename, i) {
5367786dc871 Uploaded
greg
parents:
diff changeset
4363 addLabelToLegend(i, filename, selectedAssemblies, colors)
5367786dc871 Uploaded
greg
parents:
diff changeset
4364 });
5367786dc871 Uploaded
greg
parents:
diff changeset
4365
5367786dc871 Uploaded
greg
parents:
diff changeset
4366 var tickX = 1;
5367786dc871 Uploaded
greg
parents:
diff changeset
4367 if (tickX = readJson('tick-x'))
5367786dc871 Uploaded
greg
parents:
diff changeset
4368 tickX = tickX.tickX;
5367786dc871 Uploaded
greg
parents:
diff changeset
4369
5367786dc871 Uploaded
greg
parents:
diff changeset
4370 if (contigsLens = readJson('contigs-lengths')) {
5367786dc871 Uploaded
greg
parents:
diff changeset
4371 makePlot(firstPlot, assembliesNames, order, 'cumulative', 'Cumulative length', cumulative.draw, contigsLens.lists_of_lengths, refLengths, tickX);
5367786dc871 Uploaded
greg
parents:
diff changeset
4372 firstPlot = false;
5367786dc871 Uploaded
greg
parents:
diff changeset
4373 }
5367786dc871 Uploaded
greg
parents:
diff changeset
4374
5367786dc871 Uploaded
greg
parents:
diff changeset
4375 if (coordNx = readJson('coord-nx')) {
5367786dc871 Uploaded
greg
parents:
diff changeset
4376 makePlot(firstPlot, assembliesNames, order, 'nx', 'Nx', nx.draw, {
5367786dc871 Uploaded
greg
parents:
diff changeset
4377 coord_x: coordNx.coord_x,
5367786dc871 Uploaded
greg
parents:
diff changeset
4378 coord_y: coordNx.coord_y,
5367786dc871 Uploaded
greg
parents:
diff changeset
4379 filenames: coordNx.filenames
5367786dc871 Uploaded
greg
parents:
diff changeset
4380 },
5367786dc871 Uploaded
greg
parents:
diff changeset
4381 null, null
5367786dc871 Uploaded
greg
parents:
diff changeset
4382 );
5367786dc871 Uploaded
greg
parents:
diff changeset
4383 firstPlot = false;
5367786dc871 Uploaded
greg
parents:
diff changeset
4384 }
5367786dc871 Uploaded
greg
parents:
diff changeset
4385
5367786dc871 Uploaded
greg
parents:
diff changeset
4386 if (coordNx = readJson('coord-nax')) {
5367786dc871 Uploaded
greg
parents:
diff changeset
4387 makePlot(firstPlot, assembliesNames, order, 'nax', 'NAx', nx.draw, {
5367786dc871 Uploaded
greg
parents:
diff changeset
4388 coord_x: coordNx.coord_x,
5367786dc871 Uploaded
greg
parents:
diff changeset
4389 coord_y: coordNx.coord_y,
5367786dc871 Uploaded
greg
parents:
diff changeset
4390 filenames: coordNx.filenames
5367786dc871 Uploaded
greg
parents:
diff changeset
4391 },
5367786dc871 Uploaded
greg
parents:
diff changeset
4392 null, null
5367786dc871 Uploaded
greg
parents:
diff changeset
4393 );
5367786dc871 Uploaded
greg
parents:
diff changeset
4394 firstPlot = false;
5367786dc871 Uploaded
greg
parents:
diff changeset
4395 }
5367786dc871 Uploaded
greg
parents:
diff changeset
4396
5367786dc871 Uploaded
greg
parents:
diff changeset
4397 if (coordNx = readJson('coord-ngx')) {
5367786dc871 Uploaded
greg
parents:
diff changeset
4398 makePlot(firstPlot, assembliesNames, order, 'ngx', 'NGx', nx.draw, {
5367786dc871 Uploaded
greg
parents:
diff changeset
4399 coord_x: coordNx.coord_x,
5367786dc871 Uploaded
greg
parents:
diff changeset
4400 coord_y: coordNx.coord_y,
5367786dc871 Uploaded
greg
parents:
diff changeset
4401 filenames: coordNx.filenames
5367786dc871 Uploaded
greg
parents:
diff changeset
4402 },
5367786dc871 Uploaded
greg
parents:
diff changeset
4403 null, null
5367786dc871 Uploaded
greg
parents:
diff changeset
4404 );
5367786dc871 Uploaded
greg
parents:
diff changeset
4405 firstPlot = false;
5367786dc871 Uploaded
greg
parents:
diff changeset
4406 }
5367786dc871 Uploaded
greg
parents:
diff changeset
4407
5367786dc871 Uploaded
greg
parents:
diff changeset
4408 if (coordNx = readJson('coord-ngax')) {
5367786dc871 Uploaded
greg
parents:
diff changeset
4409 makePlot(firstPlot, assembliesNames, order, 'ngax', 'NGAx', nx.draw, {
5367786dc871 Uploaded
greg
parents:
diff changeset
4410 coord_x: coordNx.coord_x,
5367786dc871 Uploaded
greg
parents:
diff changeset
4411 coord_y: coordNx.coord_y,
5367786dc871 Uploaded
greg
parents:
diff changeset
4412 filenames: coordNx.filenames
5367786dc871 Uploaded
greg
parents:
diff changeset
4413 },
5367786dc871 Uploaded
greg
parents:
diff changeset
4414 null, null
5367786dc871 Uploaded
greg
parents:
diff changeset
4415 );
5367786dc871 Uploaded
greg
parents:
diff changeset
4416 firstPlot = false;
5367786dc871 Uploaded
greg
parents:
diff changeset
4417 }
5367786dc871 Uploaded
greg
parents:
diff changeset
4418
5367786dc871 Uploaded
greg
parents:
diff changeset
4419 if (coordMisassemblies = readJson('coord-misassemblies')) {
5367786dc871 Uploaded
greg
parents:
diff changeset
4420 makePlot(firstPlot, assembliesNames, order, 'misassemblies', 'Misassemblies', frc.draw, {
5367786dc871 Uploaded
greg
parents:
diff changeset
4421 coord_x: coordMisassemblies.coord_x,
5367786dc871 Uploaded
greg
parents:
diff changeset
4422 coord_y: coordMisassemblies.coord_y,
5367786dc871 Uploaded
greg
parents:
diff changeset
4423 filenames: coordMisassemblies.filenames
5367786dc871 Uploaded
greg
parents:
diff changeset
4424 },
5367786dc871 Uploaded
greg
parents:
diff changeset
4425 null, 1
5367786dc871 Uploaded
greg
parents:
diff changeset
4426 );
5367786dc871 Uploaded
greg
parents:
diff changeset
4427 firstPlot = false;
5367786dc871 Uploaded
greg
parents:
diff changeset
4428 }
5367786dc871 Uploaded
greg
parents:
diff changeset
4429
5367786dc871 Uploaded
greg
parents:
diff changeset
4430 featuresInContigs = readJson('features-in-contigs');
5367786dc871 Uploaded
greg
parents:
diff changeset
4431 operonsInContigs = readJson('operons-in-contigs');
5367786dc871 Uploaded
greg
parents:
diff changeset
4432 // if (genesInContigs || operonsInContigs)
5367786dc871 Uploaded
greg
parents:
diff changeset
4433 // contigs = readJson('contigs');
5367786dc871 Uploaded
greg
parents:
diff changeset
4434
5367786dc871 Uploaded
greg
parents:
diff changeset
4435 if (featuresInContigs) {
5367786dc871 Uploaded
greg
parents:
diff changeset
4436 makePlot(firstPlot, assembliesNames, order, 'features', 'Genomic features', gns.draw, {
5367786dc871 Uploaded
greg
parents:
diff changeset
4437 filesFeatureInContigs: featuresInContigs.features_in_contigs,
5367786dc871 Uploaded
greg
parents:
diff changeset
4438 kind: 'gene',
5367786dc871 Uploaded
greg
parents:
diff changeset
4439 filenames: featuresInContigs.filenames
5367786dc871 Uploaded
greg
parents:
diff changeset
4440 },
5367786dc871 Uploaded
greg
parents:
diff changeset
4441 featuresInContigs.ref_features_number, tickX
5367786dc871 Uploaded
greg
parents:
diff changeset
4442 );
5367786dc871 Uploaded
greg
parents:
diff changeset
4443 firstPlot = false;
5367786dc871 Uploaded
greg
parents:
diff changeset
4444 }
5367786dc871 Uploaded
greg
parents:
diff changeset
4445 if (operonsInContigs) {
5367786dc871 Uploaded
greg
parents:
diff changeset
4446 makePlot(firstPlot, assembliesNames, order, 'operons', 'Operons', gns.draw, {
5367786dc871 Uploaded
greg
parents:
diff changeset
4447 filesFeatureInContigs: operonsInContigs.operons_in_contigs,
5367786dc871 Uploaded
greg
parents:
diff changeset
4448 kind: 'operon',
5367786dc871 Uploaded
greg
parents:
diff changeset
4449 filenames: operonsInContigs.filenames
5367786dc871 Uploaded
greg
parents:
diff changeset
4450 },
5367786dc871 Uploaded
greg
parents:
diff changeset
4451 operonsInContigs.ref_operons_number, tickX
5367786dc871 Uploaded
greg
parents:
diff changeset
4452 );
5367786dc871 Uploaded
greg
parents:
diff changeset
4453 firstPlot = false;
5367786dc871 Uploaded
greg
parents:
diff changeset
4454 }
5367786dc871 Uploaded
greg
parents:
diff changeset
4455 gcInfos = readJson('gc');
5367786dc871 Uploaded
greg
parents:
diff changeset
4456 if (gcInfos && (gcInfos.lists_of_gc_info || gcInfos.list_of_GC_distributions)) {
5367786dc871 Uploaded
greg
parents:
diff changeset
4457 makePlot(firstPlot, assembliesNames, order, 'gc', 'GC content', gc.draw, gcInfos, gcInfos.reference_index);
5367786dc871 Uploaded
greg
parents:
diff changeset
4458 }
5367786dc871 Uploaded
greg
parents:
diff changeset
4459
5367786dc871 Uploaded
greg
parents:
diff changeset
4460 var noReference = true;
5367786dc871 Uploaded
greg
parents:
diff changeset
4461 var report = totalReport.report;
5367786dc871 Uploaded
greg
parents:
diff changeset
4462 for (var group_n = 0; group_n < report.length; group_n++) {
5367786dc871 Uploaded
greg
parents:
diff changeset
4463 var group = report[group_n];
5367786dc871 Uploaded
greg
parents:
diff changeset
4464 var groupName = group[0];
5367786dc871 Uploaded
greg
parents:
diff changeset
4465 if (groupName == 'Reference statistics' && group[1].length > 0) {
5367786dc871 Uploaded
greg
parents:
diff changeset
4466 noReference = false;
5367786dc871 Uploaded
greg
parents:
diff changeset
4467 }
5367786dc871 Uploaded
greg
parents:
diff changeset
4468 }
5367786dc871 Uploaded
greg
parents:
diff changeset
4469 if (noReference) extendAll();
5367786dc871 Uploaded
greg
parents:
diff changeset
4470 appendIcarusLinks();
5367786dc871 Uploaded
greg
parents:
diff changeset
4471 return 0;
5367786dc871 Uploaded
greg
parents:
diff changeset
4472 }
5367786dc871 Uploaded
greg
parents:
diff changeset
4473
5367786dc871 Uploaded
greg
parents:
diff changeset
4474 function extendAll() {
5367786dc871 Uploaded
greg
parents:
diff changeset
4475 $('.row_to_hide').toggleClass('row_hidden');
5367786dc871 Uploaded
greg
parents:
diff changeset
4476
5367786dc871 Uploaded
greg
parents:
diff changeset
4477 var link = $('#extended_report_link');
5367786dc871 Uploaded
greg
parents:
diff changeset
4478 link.hide();
5367786dc871 Uploaded
greg
parents:
diff changeset
4479 }
5367786dc871 Uploaded
greg
parents:
diff changeset
4480 </script>
5367786dc871 Uploaded
greg
parents:
diff changeset
4481
5367786dc871 Uploaded
greg
parents:
diff changeset
4482
5367786dc871 Uploaded
greg
parents:
diff changeset
4483 <script type="text/javascript">
5367786dc871 Uploaded
greg
parents:
diff changeset
4484 $(function() {
5367786dc871 Uploaded
greg
parents:
diff changeset
4485
5367786dc871 Uploaded
greg
parents:
diff changeset
4486 buildReport();
5367786dc871 Uploaded
greg
parents:
diff changeset
4487
5367786dc871 Uploaded
greg
parents:
diff changeset
4488 dragTable.init();
5367786dc871 Uploaded
greg
parents:
diff changeset
4489
5367786dc871 Uploaded
greg
parents:
diff changeset
4490 $("[rel=tooltip]").tooltip({ animation: false, });
5367786dc871 Uploaded
greg
parents:
diff changeset
4491 });
5367786dc871 Uploaded
greg
parents:
diff changeset
4492 </script>
5367786dc871 Uploaded
greg
parents:
diff changeset
4493 </head>
5367786dc871 Uploaded
greg
parents:
diff changeset
4494
5367786dc871 Uploaded
greg
parents:
diff changeset
4495 <body>
5367786dc871 Uploaded
greg
parents:
diff changeset
4496 <div class="top-panel">
5367786dc871 Uploaded
greg
parents:
diff changeset
4497 <table class="layout-table">
5367786dc871 Uploaded
greg
parents:
diff changeset
4498 <tr>
5367786dc871 Uploaded
greg
parents:
diff changeset
4499 <td class='layout-table-td'>
5367786dc871 Uploaded
greg
parents:
diff changeset
4500 <div class="page_title">
5367786dc871 Uploaded
greg
parents:
diff changeset
4501 <h1>
5367786dc871 Uploaded
greg
parents:
diff changeset
4502 QUAST
5367786dc871 Uploaded
greg
parents:
diff changeset
4503 </h1>
5367786dc871 Uploaded
greg
parents:
diff changeset
4504 <p class="page_subtitle">
5367786dc871 Uploaded
greg
parents:
diff changeset
4505 <b>Quality Assessment Tool for Genome Assemblies</b>
5367786dc871 Uploaded
greg
parents:
diff changeset
4506 by <a href="http://cab.spbu.ru" class='dark_bg_link'>CAB</a>
5367786dc871 Uploaded
greg
parents:
diff changeset
4507 </p>
5367786dc871 Uploaded
greg
parents:
diff changeset
4508 </div>
5367786dc871 Uploaded
greg
parents:
diff changeset
4509 </td>
5367786dc871 Uploaded
greg
parents:
diff changeset
4510 </tr>
5367786dc871 Uploaded
greg
parents:
diff changeset
4511 </table>
5367786dc871 Uploaded
greg
parents:
diff changeset
4512 </div>
5367786dc871 Uploaded
greg
parents:
diff changeset
4513 <div class="content">
5367786dc871 Uploaded
greg
parents:
diff changeset
4514 <div id='header'>
5367786dc871 Uploaded
greg
parents:
diff changeset
4515 <p id='report_date'></p>
5367786dc871 Uploaded
greg
parents:
diff changeset
4516
5367786dc871 Uploaded
greg
parents:
diff changeset
4517 <p id='icarus'></p>
5367786dc871 Uploaded
greg
parents:
diff changeset
4518 <p id='extrainfo'>Loading...</p>
5367786dc871 Uploaded
greg
parents:
diff changeset
4519 <p id='per_ref_msg'></p>
5367786dc871 Uploaded
greg
parents:
diff changeset
4520 <p id='krona'></p>
5367786dc871 Uploaded
greg
parents:
diff changeset
4521
5367786dc871 Uploaded
greg
parents:
diff changeset
4522 <p id="data_set_p">
5367786dc871 Uploaded
greg
parents:
diff changeset
4523 <span style="display: none;" id="reference_name">Aligned to
5367786dc871 Uploaded
greg
parents:
diff changeset
4524 "<span class='val'></span>"
5367786dc871 Uploaded
greg
parents:
diff changeset
4525 </span>
5367786dc871 Uploaded
greg
parents:
diff changeset
4526
5367786dc871 Uploaded
greg
parents:
diff changeset
4527 <span style="display: none;" id="combined_reference_name">
5367786dc871 Uploaded
greg
parents:
diff changeset
4528 Combined reference
5367786dc871 Uploaded
greg
parents:
diff changeset
4529 </span>
5367786dc871 Uploaded
greg
parents:
diff changeset
4530
5367786dc871 Uploaded
greg
parents:
diff changeset
4531 <span style="display: none;" id="est_reference_length">Estimated reference size:
5367786dc871 Uploaded
greg
parents:
diff changeset
4532 <span class='val'></span><span class='rhs'>&nbsp;</span>bp
5367786dc871 Uploaded
greg
parents:
diff changeset
4533 </span>
5367786dc871 Uploaded
greg
parents:
diff changeset
4534
5367786dc871 Uploaded
greg
parents:
diff changeset
4535 <span style="display: none;" id="reference_length">|
5367786dc871 Uploaded
greg
parents:
diff changeset
4536 <span class='val'></span><span class='rhs'>&nbsp;</span>bp
5367786dc871 Uploaded
greg
parents:
diff changeset
4537 </span>
5367786dc871 Uploaded
greg
parents:
diff changeset
4538
5367786dc871 Uploaded
greg
parents:
diff changeset
4539 <span style="display: none;" id="combined_reference_files">|
5367786dc871 Uploaded
greg
parents:
diff changeset
4540 <span class='val'></span><span class='rhs'>&nbsp;</span>reference<span style="display: none;" class='plural_ending'>s</span>
5367786dc871 Uploaded
greg
parents:
diff changeset
4541 </span>
5367786dc871 Uploaded
greg
parents:
diff changeset
4542
5367786dc871 Uploaded
greg
parents:
diff changeset
4543 <span style="display: none;" id="reference_fragments">|
5367786dc871 Uploaded
greg
parents:
diff changeset
4544 <span class='val'></span><span class='rhs'>&nbsp;</span>fragment<span style="display: none;" class='plural_ending'>s</span>
5367786dc871 Uploaded
greg
parents:
diff changeset
4545 </span>
5367786dc871 Uploaded
greg
parents:
diff changeset
4546
5367786dc871 Uploaded
greg
parents:
diff changeset
4547 <span style="display: none;" id="reference_gc">|
5367786dc871 Uploaded
greg
parents:
diff changeset
4548 <span class='val'></span><span class='rhs'>&nbsp;</span>% G+C
5367786dc871 Uploaded
greg
parents:
diff changeset
4549 </span>
5367786dc871 Uploaded
greg
parents:
diff changeset
4550
5367786dc871 Uploaded
greg
parents:
diff changeset
4551 <span style="display: none;" id="reference_chr">|
5367786dc871 Uploaded
greg
parents:
diff changeset
4552 <span class='val'></span> chromosome<span style="display: none;" class='plural_ending'>s</span>
5367786dc871 Uploaded
greg
parents:
diff changeset
4553 </span>
5367786dc871 Uploaded
greg
parents:
diff changeset
4554
5367786dc871 Uploaded
greg
parents:
diff changeset
4555 <span style="display: none;" id="total_reads"><br>
5367786dc871 Uploaded
greg
parents:
diff changeset
4556 <span class='val'></span> reads
5367786dc871 Uploaded
greg
parents:
diff changeset
4557 </span>
5367786dc871 Uploaded
greg
parents:
diff changeset
4558
5367786dc871 Uploaded
greg
parents:
diff changeset
4559 <span style="display: none;" id="reference_mapped_reads">|
5367786dc871 Uploaded
greg
parents:
diff changeset
4560 <span class='val'></span>% mapped
5367786dc871 Uploaded
greg
parents:
diff changeset
4561 </span>
5367786dc871 Uploaded
greg
parents:
diff changeset
4562
5367786dc871 Uploaded
greg
parents:
diff changeset
4563 <span style="display: none;" id="reference_paired_reads">|
5367786dc871 Uploaded
greg
parents:
diff changeset
4564 <span class='val'></span>% properly paired
5367786dc871 Uploaded
greg
parents:
diff changeset
4565 </span>
5367786dc871 Uploaded
greg
parents:
diff changeset
4566
5367786dc871 Uploaded
greg
parents:
diff changeset
4567 <span style="display: none;" id="reference_features"><br>
5367786dc871 Uploaded
greg
parents:
diff changeset
4568 <span class='val'></span> genomic features
5367786dc871 Uploaded
greg
parents:
diff changeset
4569 </span>
5367786dc871 Uploaded
greg
parents:
diff changeset
4570
5367786dc871 Uploaded
greg
parents:
diff changeset
4571 <span style="display: none;" id="reference_operons">|
5367786dc871 Uploaded
greg
parents:
diff changeset
4572 <span class='val'></span> operons
5367786dc871 Uploaded
greg
parents:
diff changeset
4573 </span>
5367786dc871 Uploaded
greg
parents:
diff changeset
4574 </p>
5367786dc871 Uploaded
greg
parents:
diff changeset
4575 </div>
5367786dc871 Uploaded
greg
parents:
diff changeset
4576
5367786dc871 Uploaded
greg
parents:
diff changeset
4577 <noscript>
5367786dc871 Uploaded
greg
parents:
diff changeset
4578 <div style="margin-left: 0;">
5367786dc871 Uploaded
greg
parents:
diff changeset
4579 Unfortunately, <span style="font-weight: bold">JavaScript</span> in your
5367786dc871 Uploaded
greg
parents:
diff changeset
4580 browser <span style="font-weight: bold">is disabled</span> or is not supported.</br>
5367786dc871 Uploaded
greg
parents:
diff changeset
4581 We need JavaScript to build report and plots.
5367786dc871 Uploaded
greg
parents:
diff changeset
4582 </div>
5367786dc871 Uploaded
greg
parents:
diff changeset
4583 </noscript>
5367786dc871 Uploaded
greg
parents:
diff changeset
4584
5367786dc871 Uploaded
greg
parents:
diff changeset
4585 <div class='report-and-plots'>
5367786dc871 Uploaded
greg
parents:
diff changeset
4586 <div class='report' id='main_report'>
5367786dc871 Uploaded
greg
parents:
diff changeset
4587 <div id="heatmap_header" style='display: none; float: left;'>
5367786dc871 Uploaded
greg
parents:
diff changeset
4588 <div style="padding-right: 10px; display: inline-block; vertical-align:top;">
5367786dc871 Uploaded
greg
parents:
diff changeset
4589 <canvas id="gradientHeatmap" width="150" height="6"></canvas>
5367786dc871 Uploaded
greg
parents:
diff changeset
4590 <div style="margin-left: 0; text-align: justify;">
5367786dc871 Uploaded
greg
parents:
diff changeset
4591 <span class="heatmap_legend">Worst</span>
5367786dc871 Uploaded
greg
parents:
diff changeset
4592 <span style="margin-left: -5px;" class="heatmap_legend">Median</span>
5367786dc871 Uploaded
greg
parents:
diff changeset
4593 <span class="heatmap_legend">Best</span>
5367786dc871 Uploaded
greg
parents:
diff changeset
4594 <span class="heatmap_legend" style='width: 100%; height: 0;'></span>
5367786dc871 Uploaded
greg
parents:
diff changeset
4595 </div>
5367786dc871 Uploaded
greg
parents:
diff changeset
4596 </div>
5367786dc871 Uploaded
greg
parents:
diff changeset
4597 <label for="heatmaps_chbox"><input type="checkbox" checked="checked" id="heatmaps_chbox">Show heatmap</label>
5367786dc871 Uploaded
greg
parents:
diff changeset
4598 </div>
5367786dc871 Uploaded
greg
parents:
diff changeset
4599 <div style="clear: both;"></div>
5367786dc871 Uploaded
greg
parents:
diff changeset
4600 </div>
5367786dc871 Uploaded
greg
parents:
diff changeset
4601 <div class='plots'>
5367786dc871 Uploaded
greg
parents:
diff changeset
4602 <table style='margin: -3px;'>
5367786dc871 Uploaded
greg
parents:
diff changeset
4603 <tr id='all-switches'>
5367786dc871 Uploaded
greg
parents:
diff changeset
4604 <td>
5367786dc871 Uploaded
greg
parents:
diff changeset
4605 <div id='plots-switches'></div>
5367786dc871 Uploaded
greg
parents:
diff changeset
4606 </td>
5367786dc871 Uploaded
greg
parents:
diff changeset
4607 <td style='text-align: right; padding-right: 22px;'>
5367786dc871 Uploaded
greg
parents:
diff changeset
4608 <span id='scale-placeholder'></span>
5367786dc871 Uploaded
greg
parents:
diff changeset
4609 </td>
5367786dc871 Uploaded
greg
parents:
diff changeset
4610 </tr>
5367786dc871 Uploaded
greg
parents:
diff changeset
4611 <tr>
5367786dc871 Uploaded
greg
parents:
diff changeset
4612 <td colspan="2">
5367786dc871 Uploaded
greg
parents:
diff changeset
4613 <div id='plot-placeholder' style=''></div>
5367786dc871 Uploaded
greg
parents:
diff changeset
4614 </td>
5367786dc871 Uploaded
greg
parents:
diff changeset
4615 <td>
5367786dc871 Uploaded
greg
parents:
diff changeset
4616 <div id='legend-placeholder'></div>
5367786dc871 Uploaded
greg
parents:
diff changeset
4617 </td>
5367786dc871 Uploaded
greg
parents:
diff changeset
4618 </tr>
5367786dc871 Uploaded
greg
parents:
diff changeset
4619 <tr>
5367786dc871 Uploaded
greg
parents:
diff changeset
4620 <td colspan="3" id="plot-caption" style="display: none;">
5367786dc871 Uploaded
greg
parents:
diff changeset
4621 <p id="contigs_are_ordered">Contigs are ordered from largest (contig #1) to smallest.</p>
5367786dc871 Uploaded
greg
parents:
diff changeset
4622 <p id="frc_info">FRCurve:
5367786dc871 Uploaded
greg
parents:
diff changeset
4623 Y is the total number of aligned bases divided by the reference length,
5367786dc871 Uploaded
greg
parents:
diff changeset
4624 in the contigs having the total number of <span class="frc_plot_name"></span> at most X.</p>
5367786dc871 Uploaded
greg
parents:
diff changeset
4625 <p id="gc_info">Contigs are broken into nonoverlapping 100 bp windows.
5367786dc871 Uploaded
greg
parents:
diff changeset
4626 Plot shows number of windows for each GC percentage.</p>
5367786dc871 Uploaded
greg
parents:
diff changeset
4627 <p id="gc_contigs_info">Plot shows number of contigs with GC percentage in a certain range.</p>
5367786dc871 Uploaded
greg
parents:
diff changeset
4628 </td>
5367786dc871 Uploaded
greg
parents:
diff changeset
4629 </tr>
5367786dc871 Uploaded
greg
parents:
diff changeset
4630 </table>
5367786dc871 Uploaded
greg
parents:
diff changeset
4631 </div>
5367786dc871 Uploaded
greg
parents:
diff changeset
4632
5367786dc871 Uploaded
greg
parents:
diff changeset
4633 <p>
5367786dc871 Uploaded
greg
parents:
diff changeset
4634 <span id="main_ref_genome"></span>
5367786dc871 Uploaded
greg
parents:
diff changeset
4635 </p>
5367786dc871 Uploaded
greg
parents:
diff changeset
4636
5367786dc871 Uploaded
greg
parents:
diff changeset
4637 <div style="clear: left"></div>
5367786dc871 Uploaded
greg
parents:
diff changeset
4638 <div style="clear: right"></div>
5367786dc871 Uploaded
greg
parents:
diff changeset
4639
5367786dc871 Uploaded
greg
parents:
diff changeset
4640 <div class='json-code'>
5367786dc871 Uploaded
greg
parents:
diff changeset
4641 <div id='total-report-json'>
5367786dc871 Uploaded
greg
parents:
diff changeset
4642 {"date":"07 July 2022, Thursday, 16:55:14","assembliesNames":["contigs1_fna","contigs2_fna"],"referenceName":"","order":[0,1],"report":[["Genome statistics",[]],["Reads mapping",[]],["Misassemblies",[]],["Unaligned",[]],["Mismatches",[{"metricName":"# N's per 100 kbp","quality":"Less is better","values":["0.00","0.00"],"isMain":true},{"metricName":"# N's","quality":"Less is better","values":[0,0],"isMain":false}]],["Statistics without reference",[{"metricName":"# contigs","quality":"Equal","values":[3,1],"isMain":true},{"metricName":"# contigs (>= 0 bp)","quality":"Equal","values":[3,1],"isMain":false},{"metricName":"# contigs (>= 1000 bp)","quality":"Equal","values":[3,1],"isMain":false},{"metricName":"# contigs (>= 500 bp)","quality":"Equal","values":[3,1],"isMain":false},{"metricName":"Largest contig","quality":"More is better","values":[3980,6650],"isMain":true},{"metricName":"Total length","quality":"More is better","values":[6710,6650],"isMain":true},{"metricName":"Total length (>= 0 bp)","quality":"More is better","values":[6710,6650],"isMain":false},{"metricName":"Total length (>= 1000 bp)","quality":"More is better","values":[6710,6650],"isMain":true},{"metricName":"Total length (>= 500 bp)","quality":"More is better","values":[6710,6650],"isMain":false},{"metricName":"N50","quality":"More is better","values":[3980,6650],"isMain":false},{"metricName":"N90","quality":"More is better","values":[1120,6650],"isMain":false},{"metricName":"auN","quality":"More is better","values":["2934.0","6650.0"],"isMain":false},{"metricName":"L50","quality":"Less is better","values":[1,1],"isMain":false},{"metricName":"L90","quality":"Less is better","values":[3,1],"isMain":false},{"metricName":"GC (%)","quality":"Equal","values":["51.28","52.00"],"isMain":false}]],["K-mer-based statistics",[]],["Predicted genes",[]],["Similarity statistics",[]],["Reference statistics",[]]],"subreferences":[],"subreports":[],"minContig":500}
5367786dc871 Uploaded
greg
parents:
diff changeset
4643 </div>
5367786dc871 Uploaded
greg
parents:
diff changeset
4644 <div id='qualities-json'>
5367786dc871 Uploaded
greg
parents:
diff changeset
4645 {{ qualities }}
5367786dc871 Uploaded
greg
parents:
diff changeset
4646 </div>
5367786dc871 Uploaded
greg
parents:
diff changeset
4647 <div id='main-metrics-json'>
5367786dc871 Uploaded
greg
parents:
diff changeset
4648 {{ mainMetrics }}
5367786dc871 Uploaded
greg
parents:
diff changeset
4649 </div>
5367786dc871 Uploaded
greg
parents:
diff changeset
4650
5367786dc871 Uploaded
greg
parents:
diff changeset
4651 <div id="contigs-lengths-json">
5367786dc871 Uploaded
greg
parents:
diff changeset
4652 {"filenames":["contigs1_fna","contigs2_fna"],"lists_of_lengths":[[3980,1610,1120],[6650]]}
5367786dc871 Uploaded
greg
parents:
diff changeset
4653 </div>
5367786dc871 Uploaded
greg
parents:
diff changeset
4654 <div id='assemblies-lengths-json'>
5367786dc871 Uploaded
greg
parents:
diff changeset
4655 {{ assembliesLengths }}
5367786dc871 Uploaded
greg
parents:
diff changeset
4656 </div>
5367786dc871 Uploaded
greg
parents:
diff changeset
4657 <div id='reference-length-json'>
5367786dc871 Uploaded
greg
parents:
diff changeset
4658 {{ referenceLength }}
5367786dc871 Uploaded
greg
parents:
diff changeset
4659 </div>
5367786dc871 Uploaded
greg
parents:
diff changeset
4660 <div id='tick-x-json'>
5367786dc871 Uploaded
greg
parents:
diff changeset
4661 {"tickX":1}
5367786dc871 Uploaded
greg
parents:
diff changeset
4662 </div>
5367786dc871 Uploaded
greg
parents:
diff changeset
4663 <div id='coord-nx-json'>
5367786dc871 Uploaded
greg
parents:
diff changeset
4664 {"coord_x":[[0.0,1e-10,59.31445603576751,59.314456035867515,83.30849478390462,83.30849478400462,100.0,100.0000000001],[0.0,1e-10,100.0,100.0000000001]],"coord_y":[[3980,3980,3980,1610,1610,1120,1120,0.0],[6650,6650,6650,0.0]],"filenames":["contigs1_fna","contigs2_fna"]}
5367786dc871 Uploaded
greg
parents:
diff changeset
4665 </div>
5367786dc871 Uploaded
greg
parents:
diff changeset
4666 <div id='coord-ngx-json'>
5367786dc871 Uploaded
greg
parents:
diff changeset
4667 {{ coordNGx }}
5367786dc871 Uploaded
greg
parents:
diff changeset
4668 </div>
5367786dc871 Uploaded
greg
parents:
diff changeset
4669 <div id='coord-nax-json'>
5367786dc871 Uploaded
greg
parents:
diff changeset
4670 {{ coordNAx }}
5367786dc871 Uploaded
greg
parents:
diff changeset
4671 </div>
5367786dc871 Uploaded
greg
parents:
diff changeset
4672 <div id='coord-ngax-json'>
5367786dc871 Uploaded
greg
parents:
diff changeset
4673 {{ coordNGAx }}
5367786dc871 Uploaded
greg
parents:
diff changeset
4674 </div>
5367786dc871 Uploaded
greg
parents:
diff changeset
4675 <div id='coord-misassemblies-json'>
5367786dc871 Uploaded
greg
parents:
diff changeset
4676 {{ coordmisassemblies }}
5367786dc871 Uploaded
greg
parents:
diff changeset
4677 </div>
5367786dc871 Uploaded
greg
parents:
diff changeset
4678 <div id='features-in-contigs-json'>
5367786dc871 Uploaded
greg
parents:
diff changeset
4679 {{ featuresInContigs }}
5367786dc871 Uploaded
greg
parents:
diff changeset
4680 </div>
5367786dc871 Uploaded
greg
parents:
diff changeset
4681 <div id='operons-in-contigs-json'>
5367786dc871 Uploaded
greg
parents:
diff changeset
4682 {{ operonsInContigs }}
5367786dc871 Uploaded
greg
parents:
diff changeset
4683 </div>
5367786dc871 Uploaded
greg
parents:
diff changeset
4684 <div id='summary-json'>
5367786dc871 Uploaded
greg
parents:
diff changeset
4685 [{{ num_contigs }},
5367786dc871 Uploaded
greg
parents:
diff changeset
4686 {{ Largest_alignment }},
5367786dc871 Uploaded
greg
parents:
diff changeset
4687 {{ Total_aligned_length }},
5367786dc871 Uploaded
greg
parents:
diff changeset
4688 {{ num_misassemblies }},
5367786dc871 Uploaded
greg
parents:
diff changeset
4689 {{ Misassembled_contigs_length }},
5367786dc871 Uploaded
greg
parents:
diff changeset
4690 {{ num_mismatches_per_100_kbp }},
5367786dc871 Uploaded
greg
parents:
diff changeset
4691 {{ num_indels_per_100_kbp }},
5367786dc871 Uploaded
greg
parents:
diff changeset
4692 {{ num_N's_per_100_kbp }},
5367786dc871 Uploaded
greg
parents:
diff changeset
4693 {{ Genome_fraction }},
5367786dc871 Uploaded
greg
parents:
diff changeset
4694 {{ Duplication_ratio }},
5367786dc871 Uploaded
greg
parents:
diff changeset
4695 {{ NGA50 }}]
5367786dc871 Uploaded
greg
parents:
diff changeset
4696 </div>
5367786dc871 Uploaded
greg
parents:
diff changeset
4697 <div id='misassemblies-json'>
5367786dc871 Uploaded
greg
parents:
diff changeset
4698 {{ allMisassemblies }}
5367786dc871 Uploaded
greg
parents:
diff changeset
4699 </div>
5367786dc871 Uploaded
greg
parents:
diff changeset
4700 <div id='krona-json'>
5367786dc871 Uploaded
greg
parents:
diff changeset
4701 {{ krona }}
5367786dc871 Uploaded
greg
parents:
diff changeset
4702 </div>
5367786dc871 Uploaded
greg
parents:
diff changeset
4703 <div id='gc-json'>
5367786dc871 Uploaded
greg
parents:
diff changeset
4704 {"filenames":["contigs1_fna","contigs2_fna"],"reference_index":null,"list_of_GC_distributions":[[[0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0,16.0,17.0,18.0,19.0,20.0,21.0,22.0,23.0,24.0,25.0,26.0,27.0,28.0,29.0,30.0,31.0,32.0,33.0,34.0,35.0,36.0,37.0,38.0,39.0,40.0,41.0,42.0,43.0,44.0,45.0,46.0,47.0,48.0,49.0,50.0,51.0,52.0,53.0,54.0,55.0,56.0,57.0,58.0,59.0,60.0,61.0,62.0,63.0,64.0,65.0,66.0,67.0,68.0,69.0,70.0,71.0,72.0,73.0,74.0,75.0,76.0,77.0,78.0,79.0,80.0,81.0,82.0,83.0,84.0,85.0,86.0,87.0,88.0,89.0,90.0,91.0,92.0,93.0,94.0,95.0,96.0,97.0,98.0,99.0,100.0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,3,1,0,1,2,1,5,5,5,2,5,4,4,7,1,6,2,5,1,0,1,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]],[[0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0,16.0,17.0,18.0,19.0,20.0,21.0,22.0,23.0,24.0,25.0,26.0,27.0,28.0,29.0,30.0,31.0,32.0,33.0,34.0,35.0,36.0,37.0,38.0,39.0,40.0,41.0,42.0,43.0,44.0,45.0,46.0,47.0,48.0,49.0,50.0,51.0,52.0,53.0,54.0,55.0,56.0,57.0,58.0,59.0,60.0,61.0,62.0,63.0,64.0,65.0,66.0,67.0,68.0,69.0,70.0,71.0,72.0,73.0,74.0,75.0,76.0,77.0,78.0,79.0,80.0,81.0,82.0,83.0,84.0,85.0,86.0,87.0,88.0,89.0,90.0,91.0,92.0,93.0,94.0,95.0,96.0,97.0,98.0,99.0,100.0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,3,2,1,0,0,5,3,4,4,7,3,5,2,4,7,0,10,1,1,2,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]]],"list_of_GC_contigs_distributions":[[[0,5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100],[0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0]],[[0,5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100],[0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0]]],"lists_of_gc_info":null}
5367786dc871 Uploaded
greg
parents:
diff changeset
4705 </div>
5367786dc871 Uploaded
greg
parents:
diff changeset
4706 <div id='icarus-json'>
5367786dc871 Uploaded
greg
parents:
diff changeset
4707 {"links":["icarus_viewers/contig_size_viewer.html"],"links_names":["View in Icarus contig browser"]}
5367786dc871 Uploaded
greg
parents:
diff changeset
4708 </div>
5367786dc871 Uploaded
greg
parents:
diff changeset
4709 </div>
5367786dc871 Uploaded
greg
parents:
diff changeset
4710 </div>
5367786dc871 Uploaded
greg
parents:
diff changeset
4711
5367786dc871 Uploaded
greg
parents:
diff changeset
4712 <div class='json-code'>
5367786dc871 Uploaded
greg
parents:
diff changeset
4713 <div id='glossary-json'>
5367786dc871 Uploaded
greg
parents:
diff changeset
4714 {
5367786dc871 Uploaded
greg
parents:
diff changeset
4715 "# contigs" : "<span>is the total number of contigs in the assembly.</span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4716 "Largest contig" : "<span>is the length of the longest contig in the assembly.</span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4717 "Total length" : "<span>is the total number of bases in the assembly.</span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4718 "Reference length" : "<span>is the total number of bases in the reference.</span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4719
5367786dc871 Uploaded
greg
parents:
diff changeset
4720 "# contigs (>= 0 bp)" : "<span>is the total number of contigs in the assembly that have size greater than or equal to 0 bp.</span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4721 "Total length (>= 0 bp)" : "<span>is the total number of bases in the contigs having size greater than or equal to 0 bp.</span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4722
5367786dc871 Uploaded
greg
parents:
diff changeset
4723 "N50" : "<span>is the contig length such that using longer or equal length contigs produces half (50%) of the bases of the assembly. Usually there is no value that produces exactly 50%, so the technical definition is the maximum length x such that using contigs of length at least x accounts for at least 50% of the total assembly length. Similarly, Nx for any x between 0 and 100 could be computed (x% of assembly).</span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4724 "NG50" : "<span>is the contig length such that using longer or equal length contigs produces half (50%) of the bases of the reference genome. This metric is computed only if a reference genome is provided. Similarly, NGx for any x between 0 and 100 could be computed (x% of the reference).</span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4725
5367786dc871 Uploaded
greg
parents:
diff changeset
4726 "L50" : "<span>is the minimum number of contigs that produce half (50%) of the bases of the assembly. In other words, it's the number of contigs of length at least N50. Similarly, Lx for any x between 0 and 100 could be computed.</span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4727 "LG50" : "<span>is the minimum number of contigs that produce half (50%) of the bases of the reference genome. In other words, it's the number of contigs of length at least NG50. This metric is computed only if a reference genome is provided. Similarly, LGx for any x between 0 and 100 could be computed.</span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4728
5367786dc871 Uploaded
greg
parents:
diff changeset
4729 "NA50" : "<span>is N50 where the lengths of aligned blocks are counted instead of contig lengths. I.e., if a contig has a misassembly with respect to the reference, the contig is broken into smaller pieces. This metric is computed only if a reference genome is provided. Similarly, NAx for any x between 0 and 100 could be computed.</span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4730 "NGA50" : "<span>is NG50 where the lengths of aligned blocks are counted instead of contig lengths. I.e., if a contig has a misassembly with respect to the reference, the contig is broken into smaller pieces. This metric is computed only if a reference genome is provided. Similarly, NGAx for any x between 0 and 100 could be computed.</span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4731
5367786dc871 Uploaded
greg
parents:
diff changeset
4732 "LA50" : "<span>is L50 where aligned blocks are counted instead of contigs. I.e., if a contig has a misassembly with respect to the reference, the contig is broken into smaller pieces. Similarly, LAx for any x between 0 and 100 could be computed.</span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4733 "LGA50" : "<span>is LG50 where aligned blocks are counted instead of contigs. I.e., if a contig has a misassembly with respect to the reference, the contig is broken into smaller pieces. Similarly, LGAx for any x between 0 and 100 could be computed.</span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4734
5367786dc871 Uploaded
greg
parents:
diff changeset
4735 "auN" : "<span>is the area under the Nx curve.</span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4736 "auNG" : "<span>is the area under the NGx curve.</span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4737 "auNA" : "<span>is the area under the NAx curve.</span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4738 "auNGA" : "<span>is the area under the NGAx curve.</span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4739
5367786dc871 Uploaded
greg
parents:
diff changeset
4740 "Average %IDY" : "<span>is the average of alignment identity percent (alignment accuracy) among all contigs.</span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4741 "# misassemblies" : "<span>is the number of positions in the assembled contigs where the left flanking sequence aligns over 1 kbp away from the right flanking sequence on the reference (<i>relocation</i>) or they overlap on more than 1 kbp (<i>relocation</i>) or flanking sequences align on different strands (<i>inversion</i>) or different chromosomes (<i>translocation</i>).</span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4742 "# large block misassemblies" : "<span>is the number of misassemblies between alignments with length greater than or equal to 3 kbp and with the misassembly threshold equal to 5 kbp (instead of default 1 kbp for regular misassemblies).</span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4743 "# misassembled contigs" : "<span>is the number of contigs that contain misassembly events.</span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4744 "Misassembled contigs length" : "<span>is the number of total bases contained in all contigs that have one or more misassemblies.</span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4745
5367786dc871 Uploaded
greg
parents:
diff changeset
4746 "# relocations" : "<span>is the number of relocation events among all misassembly events. Relocation is a misassembly where the left flanking sequence aligns over 1 kbp away from the right flanking sequence on the reference, or they overlap by more than 1 kbp and both flanking sequences align on the same chromosome.</span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4747 "# translocations" : "<span>is the number of translocation events among all misassembly events. Translocation is a misassembly where the flanking sequences align on different chromosomes.</span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4748 "# interspecies translocations" : "<span>is the number of interspecies translocation events among all misassembly events. Interspecies translocation is a misassembly where the flanking sequences align on different references (based on alignments to the combined reference).</span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4749 "# inversions" : "<span>is the number of inversion events among all misassembly events. Inversion is a misassembly where it is not a <i>relocation</i> and the flanking sequences align on opposite strands of the same chromosome.</span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4750 "# large relocations" : "<span>is the number of relocation events among all large block misassemblies. Relocation is a misassembly where the left flanking sequence aligns over 5 kbp away from the right flanking sequence on the reference, or they overlap by more than 5 kbp and both flanking sequences align on the same chromosome.</span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4751 "# large translocations" : "<span>is the number of translocation events among all large block misassemblies. Translocation is a misassembly where the flanking sequences align on different chromosomes.</span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4752 "# large i/s translocations" : "<span>is the number of interspecies translocation events among all large block misassemblies. Interspecies translocation is a misassembly where the flanking sequences align on different references (based on alignments to the combined reference).</span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4753 "# large inversions" : "<span>is the number of inversion events among all large block misassemblies. Inversion is a misassembly where it is not a <i>relocation</i> and the flanking sequences align on opposite strands of the same chromosome.</span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4754 "# local misassemblies" : "<span>is the number of local misassemblies. We define a local misassembly breakpoint as a breakpoint that satisfies these conditions: <ol> <li>Two or more distinct alignments cover the breakpoint.</li> <li>The gap between left and right flanking sequences is less than the misassembly threshold (1 kbp by default).</li> <li>The left and right flanking sequences both are on the same strand of the same chromosome of the reference genome.</li> </ol> </span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4755 "# scaffold gap ext. mis." : "<span>is the number of scaffold gap size extensive misassemblies. We define a scaffold gap size misassembly as a breakpoint where the flanking sequences are combined in a scaffold on the wrong distance. These misassemblies are not included in the total number of misassemblies. </span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4756 "# scaffold gap loc. mis." : "<span>is the number of scaffold gap size local misassemblies. Such breakpoints satisfy the local misassembly conditions but they occur inside scaffolds. These misassemblies are not included in the total number of local misassemblies. </span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4757 "# possibly misassembled contigs": "<span>is the number of contigs that contain large unaligned fragment (default min length is 500 bp) and thus could possibly contain interspecies translocation with unknown reference.</span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4758 "# possible misassemblies" : "<span>is the number of putative interspecies translocations in possibly misassembled contigs if each large unaligned fragment is supposed to be a fragment of unknown reference.</span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4759 "# intergenomic misassemblies" : "<span>is the number of all found and putative (possible) interspecies translocations.</span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4760 "# structural variations" : "<span>is the number of misassemblies matched with structural variations.</span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4761 "# possible TEs" : "<span>is the number of misassemblies possibly caused by transposable elements (TEs). We define a possible TE as an event that satisfies these conditions: <ol> <li>There are two misassembly breakpoints of the same type around a short alignment (less than 7 kbp by default)</li> <li>The gap between two long flanking sequences on the sides of the short alignment is less than 7 kbp.</li> <li> The long flanking sequences both are on the same strand of the same chromosome of the reference genome.</li> </ol> </span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4762 "# unaligned mis. contigs" : "<span>is the number of contigs that have the number of unaligned bases more than 50% of the contig length and a misassembly event in their aligned fragment. Note that such misassemblies are not counted in <i># misassemblies</i> and other <i>misassemblies</i> statistics.</span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4763
5367786dc871 Uploaded
greg
parents:
diff changeset
4764 "# fully unaligned contigs" : "<span>is the number of contigs that have no alignment to the reference sequence.</span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4765 "Fully unaligned length" : "<span>is the total number of bases contained in all fully unaligned contigs. Uncalled bases (N's) are not counted.</span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4766 "# partially unaligned contigs" : "<span>is the number of contigs that have at least one alignment to the reference sequence but also have at least one unaligned fragment of length &ge; <i>unaligned-part-size threshold</i> (uncalled bases (N's) are not counted towards the fragment length).</span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4767 "Partially unaligned length" : "<span>is the total number of unaligned bases in all partially unaligned contigs. Uncalled bases (N's) are not counted.</span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4768
5367786dc871 Uploaded
greg
parents:
diff changeset
4769 "# ambiguous contigs" : "<span>is the number of contigs that have reference alignments of equal quality in multiple locations on the reference.</span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4770 "Ambiguous contigs length" : "<span>is the total number of bases contained in all ambiguous contigs.</span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4771
5367786dc871 Uploaded
greg
parents:
diff changeset
4772 "Genome fraction (%)" : "<span>is the total number of aligned bases in the reference, divided by the genome size. A base in the reference genome is counted as aligned if there is at least one contig with at least one alignment to this base. Contigs from repeat regions may map to multiple places, and thus may be counted multiple times in this quantity.</span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4773 "GC (%)" : "<span>is the total number of G and C nucleotides in the assembly, divided by the total length of the assembly.</span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4774 "Reference GC (%)" : "<span>is the total number of G and C nucleotides in the reference, divided by the total length of the reference.</span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4775
5367786dc871 Uploaded
greg
parents:
diff changeset
4776 "# mismatches per 100 kbp" : "<span>is the average number of mismatches per 100,000 aligned bases in the assembly.</span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4777 "# mismatches" : "<span>is the number of mismatches in all aligned bases in the assembly.</span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4778 "# indels per 100 kbp" : "<span>is the average number of indels per 100,000 aligned bases in the assembly.</span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4779 "# indels" : "<span>is the number of indels in all aligned bases in the assembly.</span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4780 "# indels (<= 5 bp)" : "<span>is the number of indels of length less than or equal to 5 bp.</span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4781 "# indels (> 5 bp)" : "<span>is the number of indels of length greater than 5 bp.</span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4782 "Indels length" : "<span>is the number of total bases contained in all indels.</span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4783
5367786dc871 Uploaded
greg
parents:
diff changeset
4784 "# genomic features" : "<span>is the number of genomic features (genes, transcripts, CDS) in the assembly (complete and partial), based on a user-provided annotated list of gene positions in the reference genome. A feature counts as 'partially covered' if the assembly contains at least 100 bp of this feature but not the whole feature.</span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4785 "# operons" : "<span>is the number of operons in the assembly (complete and partial), based on a user-provided annotated list of operon positions in the reference genome. An operon counts as 'partially covered' if the assembly contains at least 100 bp of this operon but not the whole operon.</span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4786 "# predicted genes (unique)" : "<span>is the number of unique genes in the assembly found by a gene prediction tool.</span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4787 "# predicted genes (>= 0 bp)" : "<span>is the number of found genes having length greater than or equal to 0 bp.</span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4788
5367786dc871 Uploaded
greg
parents:
diff changeset
4789 "Complete BUSCO (%)" : "<span>is the percent of BUSCO (Universal Single-Copy Ortholog) genes found in the assembly in a complete form.</span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4790 "Partial BUSCO (%)" : "<span>is the percent of BUSCO (Universal Single-Copy Ortholog) genes found in the assembly in a partial form.</span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4791
5367786dc871 Uploaded
greg
parents:
diff changeset
4792 "Cumulative length" : "<span>plot shows the growth of assembly contig lengths. On the x-axis, contigs are ordered from largest (contig #1) to smallest. The y-axis gives the size of the x largest contigs in the assembly.</span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4793 "Nx" : "<span>plot shows the Nx metric value as x varies from 0 to 100.</span> <span>Nx is the minimum contig length <b>y</b> such that using contigs of length at least <b>y</b> accounts for at least x% of the total assembly length.</span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4794 "NGx" : "<span>plot shows the NGx metric value as x varies from 0 to 100.</span> <span>NGx is the minimum contig length <b>y</b> such that using contigs of length at least <b>y</b> accounts for at least x% of the bases of the reference genome. This metric is computed only if a reference genome is provided.</span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4795 "NAx" : "<span>plot shows the NAx metric value as x varies from 0 to 100.</span> <span>NAx is computed similarly to Nx, but based on lengths of aligned blocks instead of contig lengths. Contigs are broken into aligned blocks at misassembly breakpoints. NAx is the minimum block length <b>y</b> such that using blocks of length at least <b>y</b> accounts for at least x% of the bases of the assembly. This metric is computed only if a reference genome is provided.</span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4796 "NGAx" : "<span>plot shows the NGAx metric value as x varies from 0 to 100.</span><span>NGAx is computed similarly to NGx, but based on lengths of aligned blocks instead of contig lengths. Contigs are broken at misassembly breakpoints. NGAx is the minimum block length <b>y</b> such that using blocks of length at least <b>y</b> accounts for at least x% of the bases of the reference genome. This metric is computed only if a reference genome is provided.</span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4797 "GC content" : "<span>plot shows the distribution of GC percentage among the contigs, i.e., the total number of bases in contigs with such GC content. Typically, the distribution is approximately Gaussian. However, for some genomes it is not Gaussian. For assembly projects with contaminants, the GC distribution of the contaminants often differs from the reference genome and may give a superposition of multiple curves with different peaks.</span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4798
5367786dc871 Uploaded
greg
parents:
diff changeset
4799 "Duplication ratio" : "<span>is the total number of aligned bases in the assembly, divided by the total number of aligned bases in the reference (see the <b>Genome fraction (%)</b> metric). If the assembly contains many contigs that cover the same regions of the reference, its <i>Duplication ratio</i> may be much larger than 1. This may occur due to overestimating repeat multiplicities and due to small overlaps between contigs, among other reasons.</span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4800 "Largest alignment" : "<span>is the length of the largest continuous alignment in the assembly. This metric is always equal to the <i>Largest contig</i> metric but it can be smaller if the largest contig of the assembly contains a misassembly event.</span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4801 "Total aligned length" : "<span>is the total number of aligned bases in the assembly.</span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4802 "Avg contig read support" : "<span>is the average coverage of contigs that have large unique alignments to the reference. Read coverage is extracted from contig names (SPAdes/Velvet naming scheme only).</span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4803
5367786dc871 Uploaded
greg
parents:
diff changeset
4804 "# N's" : "<span>is the total number of uncalled bases (N's) in the assembly.</span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4805 "# N's per 100 kbp" : "<span>is the average number of uncalled bases (N's) per 100,000 assembly bases.</span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4806
5367786dc871 Uploaded
greg
parents:
diff changeset
4807 "# mapped" : "<span>is the number of reads that mapped to the assembly.</span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4808 "Mapped (%)" : "<span>is the percent of reads that mapped to the assembly.</span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4809 "# properly paired" : "<span>is the number of reads that mapped within expected range and orientation of each other to the assembly.</span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4810 "Properly paired (%)" : "<span>is the percent of reads that mapped within expected range and orientation of each other to the assembly.</span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4811 "# singletons" : "<span>is the number of reads which do not overlap any other reads.</span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4812 "Singletons (%)" : "<span>is the percent of reads which do not overlap any other reads.</span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4813 "# misjoint mates" : "<span>is the number of reads with mate mapped to a different contig.</span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4814 "Misjoint mates (%)" : "<span>is the percent of reads with mate mapped to a different contig.</span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4815 "Avg. coverage depth" : "<span>is the average depth of coverage.</span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4816 "Coverage >= 1x (%)" : "<span>is the total number of bases with at least 1x coverage, divided by the total length of the assembly.</span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4817
5367786dc871 Uploaded
greg
parents:
diff changeset
4818 "# similar correct contigs" : "<span>is the number of correct contigs similar among > 50% assemblies (see Icarus for visualization).</span>",
5367786dc871 Uploaded
greg
parents:
diff changeset
4819 "# similar misassembled blocks" : "<span>is the number of misassembled blocks similar among > 50% assemblies (see Icarus for visualization).</span>"
5367786dc871 Uploaded
greg
parents:
diff changeset
4820 }
5367786dc871 Uploaded
greg
parents:
diff changeset
4821
5367786dc871 Uploaded
greg
parents:
diff changeset
4822 </div>
5367786dc871 Uploaded
greg
parents:
diff changeset
4823 </div>
5367786dc871 Uploaded
greg
parents:
diff changeset
4824 </div>
5367786dc871 Uploaded
greg
parents:
diff changeset
4825 </body>
5367786dc871 Uploaded
greg
parents:
diff changeset
4826 </html>