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/</&lt;/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

Reply via email to