Merge pull request #4106 from solgenomics/topic/wishlist
[sgn.git] / mason / util / markup_string.mas
blob904f0d47b310bd460197191636da36fe52d614d6
1 <%doc>
3 =head1 NAME
5 markup_string.mas - display an arbitrary string, marked up for display using Text.Markup
7 =head1 ARGS
9 =head2 string
11 the string to display
13 =head2 id
15 optional unique HTML id for the string
17 =head2 styles
19 hashref of Text.Markup style definitions to use
21 =head2 regions
23 arrayref of Text.Markup regions of the string to apply said styles
25 =cut
27 </%doc>
29 <%args>
30   $string
31   $id     => undef
32   $styles  => {}
33   $regions => []
34 </%args>
36 % if( $styles && %$styles && $regions && @$regions ) {
37 %   $id ||= next_auto_id();
39 <& /util/import_javascript.mas, classes => 'Text.Markup' &>
40 <span id="<% $id %>"><% $string %></span>
41 <script type="text/javascript">
42   var markup = new Text.Markup(<% $json->encode($styles) %>);
43   var markup_el = document.getElementById('<% $id %>');
44   markup_el.innerHTML = markup.markup( <% $json->encode($regions) %>, document.all ? markup_el.innerText : markup_el.textContent );
45 </script>
47 % } else {
49 <% $string %>
51 % }
54 <%init>
55 use JSON::Any;
56 my $json = JSON::Any->new;
57 sub next_auto_id {
58   our $auto_id;
59   'markup_string_'.($auto_id++)
61 </%init>