Merge pull request #4327 from solgenomics/topic/reduce_pheno_dl_query_length
[sgn.git] / mason / page / info_section.mas
blob22daedee6262ec04ff7935e8df98f38e46d9b172
1 <%doc>
3 =head1 NAME
5 info_section.mas
7 =head1 SYNOPSIS
9  <&| info_section.mas, title => 'Search Results',
10                       subtitle      => '3 matches',
11                       empty_message => 'No matching monkeys found',
12                       is_subsection => 0,
13   &>
15   HTML and Mason contents of the info section,
16   as much stuff as you want.
18  </&>
22 =head1 DESCRIPTION
24 Displays a paragraph with a title bar and provides a way to collapse
25 the content. A mason wrapper around
26 CXGN::Page::FormattingHelpers::info_section_html.
28 =head1 ARGUMENTS
30 =over 14
32 =item $title
34 the title to be displayed in the title bar. Required.
36 =item $subtitle
38 a subtitle that goes next to the title. Optional.
40 =item $empty_message
42 The message that should appear when $contents is empty.
44 =item $is_empty
46 if true, forces this info_section to be drawn in the empty state,
47 content will not be shown.
49 =item $hide_if_empty
51 if true, hide the info section completely (do not print anything) if
52 it is empty
54 =item $collapsible
56 boolean - default false, a true value makes the section collapsible
57 (with javascript)
59 =item $collapsed
61 boolean - a true value will draw the section in the collapsed state
63 =item $is_subsection
65 boolean - a true value will draw the section as a subsection, with
66 slighly altered title bar and text rendering.
68 =item $align
70 if set, add a text-align: $align CSS property to the div holding the
71 main content
73 =back
75 =head1 SEE ALSO
77 L<CXGN::Page::FormattingHelpers>
79 =head1 AUTHOR
81 Lukas Mueller, based on the Perl code from Rob Buels.
84 =cut
86 </%doc>
88 <%args>
89     $title
90     $subtitle      => ""
91     $empty_message => "None"
92     $collapsible   => 0
93     $collapsed     => 0
94     $id            => ""
95     $is_empty      => 0
96     $is_subsection => 0
97     $align         => ''
98     $contents      => ''
99     $hide_if_empty => 0
100 </%args>
102 % my $sub = $is_subsection ? 'sub_' : '';
104 <a class="info_section_anchor<% $sub ? ' info_subsection_anchor' : '' %>" name="<% anchor_name( $title ) %>"></a>
106 <%perl>
108     $contents ||= $m->content || '';
110     #if we have been given content, and we aren't told that this section
111     #is supposed to be empty, print a full section
112     if ( $contents =~ /\S/ && !$is_empty ) {
113         $align &&= qq| style="text-align: $align|;
114         $id ||= "sgnc" . int( rand(10000) );
115         $contents = <<EOC;
116 <div class="${sub}infosectioncontent" $align>
117 $contents
118 </div>
121         if ( $collapsible ) {
122             ( $title, $contents ) = collapser(
123                 {
124                     linktext            => $title,
125                     hide_state_linktext => $title,
126                     content             => $contents,
127                     collapsed           => $collapsed,
128                     id                  => $id,
129                 }
130             );
131         }
132         $subtitle ||= '';
133         my $title_bar = <<EOHTML;
134 <table cellspacing="0" cellpadding="0" class="${sub}infosectionhead" summary=""><tr><td class="${sub}infosectiontitle">$title</td><td class="${sub}infosectionsubtitle" role="button" tabindex="0">$subtitle&nbsp;</td></tr></table>
135 EOHTML
136         print "$title_bar\n$contents\n";
137     }
139     #otherwise, if it's actually empty, just print a collapsed section
140     #with the empty message
141     elsif( $hide_if_empty ) {
142         # print nothing
143     }
144     else {
145         my $maybe_subtitle =
146           $subtitle
147           ? qq|<td class="${sub}infosectionsubtitle_empty" role="button" tabindex="0" align="right">$subtitle&nbsp;</td>|
148           : '';
149         print <<EOT;
150 <table cellspacing="0" cellpadding="0" class="${sub}infosectionhead_empty" summary=""><tr><td class="${sub}infosectiontitle_empty">$title</td><td class="${sub}infosection_emptymessage">$empty_message</td>$maybe_subtitle</tr></table>
152     }
154 </%perl>
156 <%once>
157   use CXGN::Page::Widgets qw/collapser/;
158   use HTML::Entities;
160   no warnings 'redefine';
161   sub anchor_name {
162       local $_ = lc shift;
163       s/<[^>]+>//g; # strip html tags
164       s/\s+/_/g;    # whitespace to underscores
165       s/\W//g;      # remove any weird chars
166       return $_;
167   }
168 </%once>