aboutsummaryrefslogtreecommitdiffstats
path: root/perllib/FixMyStreet/Template.pm
diff options
context:
space:
mode:
authorM Somerville <matthew-github@dracos.co.uk>2020-10-01 11:34:22 +0100
committerM Somerville <matthew-github@dracos.co.uk>2020-10-01 11:35:21 +0100
commit598bb52cb46aaca98e85328d34b58bbcb7581d71 (patch)
tree80999d1c192a4f98c601ce17bc7c6e50da13057d /perllib/FixMyStreet/Template.pm
parent57f4048942a8caaf702f47373fabdfa31932659e (diff)
Move some templating functions to ::Template.
Most of the functions called by them are in that module, so seems easiest to keep them together, plus this fixes lack of Web module import in the Template module.
Diffstat (limited to 'perllib/FixMyStreet/Template.pm')
-rw-r--r--perllib/FixMyStreet/Template.pm50
1 files changed, 49 insertions, 1 deletions
diff --git a/perllib/FixMyStreet/Template.pm b/perllib/FixMyStreet/Template.pm
index 35efcc1cf..bc087de9a 100644
--- a/perllib/FixMyStreet/Template.pm
+++ b/perllib/FixMyStreet/Template.pm
@@ -238,7 +238,55 @@ sub email_sanitize_html : Fn('email_sanitize_html') {
my $staff = $extra->{is_superuser} || $extra->{is_body_user};
- return FixMyStreet::App::View::Web::_staff_html_markup($text, $staff);
+ return _staff_html_markup($text, $staff);
+}
+
+sub _staff_html_markup {
+ my ( $text, $staff ) = @_;
+ unless ($staff) {
+ return html_paragraph(add_links($text));
+ }
+
+ $text = sanitize($text);
+
+ # Apply Markdown-style italics
+ $text =~ s{\*(\S.*?\S)\*}{<i>$1</i>};
+
+ # Mark safe so add_links doesn't escape everything.
+ $text = FixMyStreet::Template::SafeString->new($text);
+
+ $text = add_links($text);
+
+ # If the update already has block-level elements then don't wrap
+ # individual lines in <p> elements, as we assume the user knows what
+ # they're doing.
+ unless ($text =~ /<(p|ol|ul)>/) {
+ $text = html_paragraph($text);
+ }
+
+ return $text;
+}
+
+=head2 add_links
+
+ [% text | add_links | html_para %]
+
+Add some links to some text (and thus HTML-escapes the other text).
+
+=cut
+
+sub add_links {
+ my $text = shift;
+ $text = conditional_escape($text);
+ $text =~ s/\r//g;
+ $text =~ s{(?<!["'])(https?://)([^\s]+)}{"<a href=\"$1$2\">$1" . _space_slash($2) . '</a>'}ge;
+ return FixMyStreet::Template::SafeString->new($text);
+}
+
+sub _space_slash {
+ my $t = shift;
+ $t =~ s{/(?!$)}{/ }g;
+ return $t;
}
1;