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