From 4f15b8f0ee316711afb118db91f057eec5924d43 Mon Sep 17 00:00:00 2001
From: Moritz Bunkus
Date: Fri, 8 Mar 2013 13:17:22 +0100
Subject: [PATCH] L: "truncate" und "simple_format" in Presenter verschoben
---
SL/Presenter.pm | 1 +
SL/Presenter/Text.pm | 84 +++++++++++++++++++++++++++++++++++++++++
SL/Template/Plugin/L.pm | 40 ++++++++++++--------
3 files changed, 109 insertions(+), 16 deletions(-)
create mode 100644 SL/Presenter/Text.pm
diff --git a/SL/Presenter.pm b/SL/Presenter.pm
index 36acc73dd..abfd561fa 100644
--- a/SL/Presenter.pm
+++ b/SL/Presenter.pm
@@ -14,6 +14,7 @@ use SL::Presenter::Invoice;
use SL::Presenter::Order;
use SL::Presenter::Project;
use SL::Presenter::Record;
+use SL::Presenter::Text;
sub get {
return $::request->presenter;
diff --git a/SL/Presenter/Text.pm b/SL/Presenter/Text.pm
new file mode 100644
index 000000000..bcae2f96f
--- /dev/null
+++ b/SL/Presenter/Text.pm
@@ -0,0 +1,84 @@
+package SL::Presenter::Text;
+
+use strict;
+
+use parent qw(Exporter);
+
+use Exporter qw(import);
+our @EXPORT = qw(simple_format truncate);
+
+use Carp;
+
+sub truncate {
+ my ($self, $text, %params) = @_;
+
+ $params{at} ||= 50;
+ $params{at} = 3 if 3 > $params{at};
+ $params{at} -= 3;
+
+ return $text if length($text) < $params{at};
+ return substr($text, 0, $params{at}) . '...';
+}
+
+sub simple_format {
+ my ($self, $text, %params) = @_;
+
+ $text = $::locale->quote_special_chars('HTML', $text || '');
+
+ $text =~ s{\r\n?}{\n}g; # \r\n and \r -> \n
+ $text =~ s{\n\n+}{
\n\n}g; # 2+ newline -> paragraph
+ $text =~ s{([^\n]\n)(?=[^\n])}{$1
}g; # 1 newline -> br
+
+ return '
' . $text;
+}
+
+1;
+__END__
+
+=pod
+
+=encoding utf8
+
+=head1 NAME
+
+SL::Presenter::Text - Presenter module for assorted text helpers
+
+=head1 SYNOPSIS
+
+ my $long_text = "This is very, very long. Need shorter, surely.";
+ my $truncated = $::request->presenter->truncate($long_text, at => 10);
+ # Result: "This is..."
+
+=head1 FUNCTIONS
+
+=over 4
+
+=item C
+
+Returns the C<$text> truncated after a certain number of
+characters.
+
+The number of characters to truncate at is determined by the parameter
+C which defaults to 50. If the text is longer than C<$params{at}>
+then it will be truncated and postfixed with '...'. Otherwise it will
+be returned unmodified.
+
+=item C
+
+Applies simple formatting rules to C<$text>: The text is put into
+paragraph HTML tags. Two consecutive newlines are interpreted as a
+paragraph change: they close the current paragraph tag and start a new
+one. Single newlines are converted to line breaks. Carriage returns
+are removed.
+
+=back
+
+=head1 BUGS
+
+Nothing here yet.
+
+=head1 AUTHOR
+
+Moritz Bunkus Em.bunkus@linet-services.deE
+
+=cut
diff --git a/SL/Template/Plugin/L.pm b/SL/Template/Plugin/L.pm
index bac6f7f12..66f6fcc58 100644
--- a/SL/Template/Plugin/L.pm
+++ b/SL/Template/Plugin/L.pm
@@ -52,6 +52,18 @@ sub _context {
return $_[0]->{CONTEXT};
}
+sub _call_presenter {
+ my ($method, @args) = @_;
+
+ my $presenter = $::request->presenter;
+
+ return '' unless $presenter->can($method);
+
+ splice @args, -1, 1, %{ $args[-1] } if @args && (ref($args[-1]) eq 'HASH');
+
+ $presenter->$method(@args);
+}
+
sub name_to_id {
my $self = shift;
my $name = shift;
@@ -596,15 +608,8 @@ sub dump {
}
sub truncate {
- my ($self, $text, @slurp) = @_;
- my %params = _hashify(@slurp);
-
- $params{at} ||= 50;
- $params{at} = 3 if 3 > $params{at};
- $params{at} -= 3;
-
- return $text if length($text) < $params{at};
- return substr($text, 0, $params{at}) . '...';
+ my $self = shift;
+ return _call_presenter('truncate', @_);
}
sub sortable_table_header {
@@ -651,6 +656,11 @@ sub paginate_controls {
return SL::Presenter->get->render('common/paginate', %template_params);
}
+sub simple_format {
+ my $self = shift;
+ return _call_presenter('simple_format', @_);
+}
+
1;
__END__
@@ -1005,15 +1015,13 @@ the resulting tab will get ignored by C:
L.tab('Awesome tab wih much info', '_much_info.html', if => SELF.wants_all)
-=item C
+=item C
+
+See L.
-Returns the C<$text> truncated after a certain number of
-characters.
+=item C
-The number of characters to truncate at is determined by the parameter
-C which defaults to 50. If the text is longer than C<$params{at}>
-then it will be truncated and postfixed with '...'. Otherwise it will
-be returned unmodified.
+See L.
=back
--
2.20.1