graphical filtering of accession search
[sgn.git] / mason / chado / cvterm.mas
blob3cdad26017d50ab1e08b3880f53d63788cdfe422
1 <%doc>
3 =head1 NAME
5 /chado/cvterm.mas - a component for printing the cvterm page
7 =head1 DESCRIPTION
9 Parameters:
11 =over 1
13 =item cvterm
15 CXGN::Chado::Cvterm object
19 =back
21 =head1 AUTHOR
23 Naama Menda <nm249@cornell.edu>
25 =cut
27 </%doc>
29 <%args>
30   $cvterm
31 </%args>
33 <%once>
34 use CXGN::Page::FormattingHelpers qw/
35  info_section_html
36  page_title_html
37  columnar_table_html
39 use CXGN::Phenome::Qtl::Tools;
40 </%once>
42 <%perl>
43 my $cvterm_id   = $cvterm->get_cvterm_id;
44 my $db_name     = $cvterm->get_db_name;
45 my $accession   = $cvterm->get_accession;
46 my $cvterm_name = $cvterm->get_cvterm_name;
47 my $definition  = $cvterm->get_definition;
48 my $comment     = $cvterm->comment;
50 my $is_obsolete = $cvterm->get_obsolete();
51 my @synonyms    = $cvterm->get_synonyms();
52 my @def_dbxrefs = $cvterm->get_def_dbxref();
53 my @secondary_dbxrefs = $cvterm->get_secondary_dbxrefs();
54 my @image_ids = $cvterm->get_image_ids;
56 my @def_accessions = map( $_->get_db_name . ":" . $_->get_accession , @def_dbxrefs);
58 my @secondary_accessions = ();
59 foreach ( @secondary_dbxrefs) {
60   my $db =       $_->get_db_name;
61   my $acc =      $_->get_accession;
62   my $urlprefix= $_->get_urlprefix;
63   my $url =      $_->get_url;
64   my $full_acc = $db . ":" . $acc;
65   my $link = $full_acc;
66   if ( $url ) {
67     my $xref_link = $urlprefix . $url . $acc;
68     $link = qq | <a href="$xref_link">$full_acc</a> |
69   }
70   push @secondary_accessions , $link ;
73 my @qtl_pops = CXGN::Phenome::Qtl::Tools->new()->is_from_qtl( $cvterm_id );
74 my @qtl_data;
76 if ( @qtl_pops )
77  {
78     foreach my $pop (@qtl_pops)
79     {
80       my $pop_id   = $pop->get_population_id();
81       my $name     = $pop->get_name();
82       my $desc     = $pop->get_description();
83       my $qtl_link = qq | <a href="/phenome/qtl_analysis.pl?population_id=$pop_id&amp;cvterm_id=$cvterm_id" onClick="Qtl.waitPage()">$name</a> |;
84       push @qtl_data, [ $qtl_link, $desc ];
85     }
86  }
88 my $this_page = "/cvterm/$cvterm_id/view/";
89 my $image_subtitle =
90    " <a href=\"/image/add?type_id=$cvterm_id&type=cvterm&refering_page=$this_page\">[Add image]</a>" ;
93 </%perl>
96 <& /util/import_javascript.mas, classes => [qw [CXGN.AJAX.Ontology  CXGN.Phenome.Qtl thickbox jquery  jquery.dataTables] ] &>
99 <script language="javascript">
100   function recursiveAnnotations( a ) {
101       jQuery.ajax( { url:      a.url+"?cvterm_id=<% $cvterm_id %>" ,
102                      dataType: "json",
103                      success: function(response) {
104                               //jQuery("#"+a.content_id).html(response.html);
105                               jQuery("#"+a.count_id).html( response.count + ' ' + a.inflect[ response.count == 1 ? 0 : 1 ]);
106                        if( response.error )  {
107                              alert(response.error);
108                       }
109                      }
110                   });
111   }
112 </script>
115 <& /page/page_title.mas, title=> "$db_name:$accession '$cvterm_name' " &>
118 <&| /page/info_section.mas, title=>"Cvterm details" &>
119 <table>
120 <tr><td>Term id</td><td><b><% $accession %></b></td></tr>
121 <tr><td>Term name</td><td><b><% $cvterm_name %></b></td></tr>
122 <tr><td>Term definition</td><td><b><% $definition %></b></td></tr>
123 <tr><td>Comment</td><td><b><% $comment %></b></td></tr>
124 </table>
126 % if ($is_obsolete) {
127 <b>Obsolete:</b> TRUE <br />
128 % }
130 <br /><b>Synoyms</b><br />
131 % foreach my $synonym (@synonyms) {
132 <% $synonym %> <br />
133 % }
135 <br /><b> Definition dbxrefs</b><br />
136 % foreach my $da (@def_accessions) {
137 <% $da %><br />
138 % }
140 <br /><b> Related dbxrefs</b><br />
141 % foreach my $sa (@secondary_accessions) {
142 <% $sa %><br />
143 %  }
145 </&>
146 <br />
148 <h4>Add this term to a list</h4>
150 <div id="cvterm_id" style="display:none" ><% $cvterm_name %>|<% $db_name %>:<% $accession %></div>
152 <&| /page/info_section.mas, title=>"Add to list", collapsible=>1, collapsed=>1 &>
153 <div id="paste_to_list">
154 LOAD...
155 </div>
157 </&>
158 <script>
160   if (isLoggedIn()) { 
161     addToListMenu('paste_to_list', 'cvterm_id', { listType: 'traits' } );
162   }
163   else { 
164     jQuery('#paste_to_list').html("&nbsp;Please log in to use lists.");
165   }
166   
167 </script>
169 <br />
172 <& /ontology/embedded_browser.mas, cvterm => $cvterm &>
176 <&| /page/info_section.mas,
177     title=> "Annotated loci",
178     subtitle => '',
179     collapsible => 1,
180     collapsed   => 1,
183 <table id="loci_data" class="display">
184 <thead>
185   <tr>
186     <th>Organism</th>
187     <th>Locus symbol</th>
188     <th>Locus name</th>
189   </tr>
190 </thead>
192 </table>
194 <script>
196   jQuery(document).ready(function () {
197   
198     jQuery('#loci_data').DataTable( { 
199       'ajax': '/cvterm/'+ <% $cvterm_id %> + '/datatables/annotated_loci',
200      });
201   });
203 </script>
206 </&>
210 <&| /page/info_section.mas,
211        title=> "Annotated stocks",
212        collapsible => 1,
213        collapsed=>1,
214        subtitle => '',
215        hide_if_empty => 1,
216  &>
218 <table id="annotated_stocks_data" class="display">
219 <thead>
220   <tr>
221      <th>Type</th>
222     <th>Stock name</th>
223     <th>Description</th>
224   </tr>
225 </thead>
227 </table>
229 <script>
231   jQuery(document).ready(function () {
232   
233     jQuery('#annotated_stocks_data').DataTable( { 
234       'ajax': '/cvterm/'+ <% $cvterm_id %> + '/datatables/annotated_stocks',
235      });
236   });
238 </script>
241 </&>
245 % if ( @qtl_pops )
246 % {
247     <&| /page/info_section.mas,
248         title       => "QTL analysis",
249         collapsible => 1,
250    &>
251      <& /page/columnar_table.mas,
252         headings     => ["Analyze QTL in population", "Population description"], 
253         data         => \@qtl_data,
254         __alt_freq   => 2,
255         __align      =>'l',
256      &>
257   </&>
258 % }
262 <&| /page/info_section.mas,
263       title       => "Phenotyped accessions",
264       collapsible => 1,
265       collapsed=>1,
266       subtitle    => '' ,
270 <table id="phen_stocks_data" class="display">
271 <thead>
272   <tr>
273      <th>Type</th>
274     <th>Stock name</th>
275     <th>Description</th>
276   </tr>
277 </thead>
279 </table>
281 <script>
283   jQuery(document).ready(function () {
284   
285     jQuery('#phen_stocks_data').DataTable( { 
286       'ajax': '/cvterm/'+ <% $cvterm_id %> + '/datatables/phenotyped_stocks',
287      });
288   });
290 </script>
293 </&>
297 <&| /page/info_section.mas,
298       title       => "Phenotyping trials",
299       collapsible => 1,
300       collapsed=>1,
301       subtitle    => '<span id="trial_count"></span>',
304 <script language="javascript">
305     recursiveAnnotations({
306                          url:        "/cvterm/"+<% $cvterm_id %>+"/datatables/direct_trials",
307                          content_id: "trial_div",
308                          count_id:   "trial_count",
309                          inflect:    [ 'trial', 'trials' ],
310                        });
311 </script>
315 <table id="trial_data" class="display">
316 <thead>
317   <tr>
318      <th>Trial name</th>
319      <th>Description</th>
320   </tr>
321 </thead>
323 </table>
325 <script>
327   jQuery(document).ready(function () {
328   
329     jQuery('#trial_data').DataTable( { 
330       'ajax': '/cvterm/'+ <% $cvterm_id %> + '/datatables/direct_trials',
331        }
332      );
333   });
335 </script>
337 </&>
339 <&| /page/info_section.mas, 
340     title => "Images and figures",
341     subtitle      => $image_subtitle,
342     collapsible   => 1,
343     collapsed     => 0,
344     hide_if_empty => 1,
347 <& /image/print_images.mas, images => \@image_ids &>
349 </&>
351 <& /qtl/waitmessage.mas &>