Author: richter Date: Fri Jan 2 14:16:26 2015 New Revision: 1649037 URL: http://svn.apache.org/r1649037 Log: Perfomance: Use perl instead of embedded Embperl for select control
Modified: perl/embperl/trunk/Embperl/Form/Control/select.pm Modified: perl/embperl/trunk/Embperl/Form/Control/select.pm URL: http://svn.apache.org/viewvc/perl/embperl/trunk/Embperl/Form/Control/select.pm?rev=1649037&r1=1649036&r2=1649037&view=diff ============================================================================== --- perl/embperl/trunk/Embperl/Form/Control/select.pm (original) +++ perl/embperl/trunk/Embperl/Form/Control/select.pm Fri Jan 2 14:16:26 2015 @@ -18,13 +18,60 @@ package Embperl::Form::Control::select ; use strict ; -use vars qw{%fdat} ; +use vars qw{%fdat $escmode} ; use base 'Embperl::Form::ControlMultValue' ; use Embperl::Inline ; +#use HTML::Escape qw/escape_html/ ; +sub escape_html + { + my $v = shift ; + $v =~ s/&/&/g ; + $v =~ s/"/"/g ; + $v =~ s/>/>/g ; + $v =~ s/</</g ; + return $v ; + } + +sub show_control + { + my ($self, $req, $filter) = @_ ; +push @{$req -> {timing}}, ([Time::HiRes::gettimeofday], 'start show_control ' . $self->{name} . ' ' . __FILE__ . '#' . __LINE__) if ($req -> {timing}); + + my $name = $self -> {name} ; + $filter ||= $self -> {filter} ; + my $nsprefix = $self -> form -> {jsnamespace} ; + my $val ; + my $i = 0 ; + my ($values, $options) = $self -> get_all_values ($req) ; + my ($ctlattrs, $ctlid, $ctlname) = $self -> get_std_control_attr($req) ; + $values ||= [] ; + + my $multiple = $self->{multiple}?'multiple':'' ; + my @opt ; + my $out = '<select name="' .escape_html ($ctlname) . '" ' . $ctlattrs ; + $out .= ' size="' . escape_html ($self->{rows}) . '" ' if ($self->{rows}) ; + $out .= ' _ef_attach="ef_select" ' if ($self -> {trigger}) ; + push @{$req -> {timing}}, ([Time::HiRes::gettimeofday], 'start show_control4 ' . $self->{name} . ' value: ' . scalar(@$values) . ' : ' . __FILE__ . '#' . __LINE__) if ($req -> {timing}); + my $i = 0 ; + foreach $val (@$values) + { + my $escval = escape_html ($val) ; + my $escopt = escape_html ($options ->[$i]) ; + push @opt, qq{<option value="$escval">} . ($escopt) . q{</option>} if (!defined ($filter) || ($val =~ /$filter/i)) ; + $i++ ; + } + $out .= ">\n" . join ("\n", @opt) . "\n" . '</select>' . "\n" ; + + local $escmode = 0 ; + print OUT $out ; + +push @{$req -> {timing}}, ([Time::HiRes::gettimeofday], 'end show_control ' . $self->{name} . ' ' . __FILE__ . '#' . __LINE__) if ($req -> {timing}); + } + 1 ; __EMBPERL__ @@ -43,21 +90,27 @@ __EMBPERL__ # show_control - output the control #] -[$ sub show_control ($self, $req, $filter) +[$ sub xshow_control ($self, $req, $filter) my $name = $self -> {name} ; $filter ||= $self -> {filter} ; my $nsprefix = $self -> form -> {jsnamespace} ; my $val ; my $i = 0 ; +push @{$req -> {timing}}, ([Time::HiRes::gettimeofday], 'start show_control ' . $self->{name} . ' ' . __FILE__ . '#' . __LINE__) if ($req -> {timing}); my ($values, $options) = $self -> get_all_values ($req) ; +push @{$req -> {timing}}, ([Time::HiRes::gettimeofday], 'start show_control2 ' . $self->{name} . ' ' . __FILE__ . '#' . __LINE__) if ($req -> {timing}); my ($ctlattrs, $ctlid, $ctlname) = $self -> get_std_control_attr($req) ; +push @{$req -> {timing}}, ([Time::HiRes::gettimeofday], 'start show_control3 ' . $self->{name} . ' ' . __FILE__ . '#' . __LINE__) if ($req -> {timing}); $values ||= [] ; $] <select name="[+ $ctlname +]" [+ $self->{multiple}?'multiple':''+] [+ do { local $escmode = 0 ; $ctlattrs } +] [$if ($self -> {rows}) $] size="[+ $self->{rows} +]" [$endif$] [$if ($self -> {trigger}) $]_ef_attach="ef_select"[$endif$] > +[- +push @{$req -> {timing}}, ([Time::HiRes::gettimeofday], 'start show_control4 ' . $self->{name} . ' value: ' . scalar(@$values) . ' : ' . __FILE__ . '#' . __LINE__) if ($req -> {timing}); +-] [* $i = 0 ; *] [$ foreach $val (@$values) $] [$if !defined ($filter) || ($val =~ /$filter/i) $] @@ -66,6 +119,9 @@ $] [* $i++ ; *] [$endforeach$] </select> +[- +push @{$req -> {timing}}, ([Time::HiRes::gettimeofday], 'end show_control3 ' . $self->{name} . ' ' . __FILE__ . '#' . __LINE__) if ($req -> {timing}); +-] [$endsub$] __END__ --------------------------------------------------------------------- To unsubscribe, e-mail: embperl-cvs-unsubscr...@perl.apache.org For additional commands, e-mail: embperl-cvs-h...@perl.apache.org