Date:   Saturday February 8, 2003 @ 15:46
Author: matt

Update of /home/cvs/AxKit-XSP-PerForm
In directory ted.sergeant.org:/home/matt/Perl/AxKit-XSP-PerForm

Modified Files:
        Changes PerForm.pm 
Log Message:
    - Change to use can() so we can use XSP inheritance
    - Added onload and onvalidate attributes to each tag (allow to specify

Log:
PR:

Index: Changes
===================================================================
RCS file: /home/cvs/AxKit-XSP-PerForm/Changes,v
retrieving revision 1.5
retrieving revision 1.6
diff -b -u -r1.5 -r1.6
--- Changes     2002/12/23 14:05:42     1.5
+++ Changes     2003/02/08 15:46:13     1.6
@@ -1,7 +1,12 @@
 Revision history for Perl extension AxKit::XSP::PerForm.
 
 1.7
-    - Patch from nachoman to finally properly support single and multiple select
+    - Patch from nachoman to finally properly support single and
+      multiple select
+    - Change to use can() so we can use XSP inheritance
+    - Added onload and onvalidate attributes to each tag (allow to specify
+      external code to validate/load, or use single function for multiple
+      tags)
     - Patch from Mark Hershberger fixing:
       - If the error message contains the word "at", everything
         from that "at" to the end of the error is deleted.
Index: PerForm.pm
===================================================================
RCS file: /home/cvs/AxKit-XSP-PerForm/PerForm.pm,v
retrieving revision 1.13
retrieving revision 1.14
diff -b -u -r1.13 -r1.14
--- PerForm.pm  2002/12/23 14:05:42     1.13
+++ PerForm.pm  2003/02/08 15:46:13     1.14
@@ -1,4 +1,4 @@
-# $Id: PerForm.pm,v 1.13 2002/12/23 14:05:42 matt Exp $
+# $Id: PerForm.pm,v 1.14 2003/02/08 15:46:13 matt Exp $
 
 package AxKit::XSP::PerForm;
 
@@ -14,16 +14,16 @@
 @ISA = qw(Apache::AxKit::Language::XSP);
 
 @EXPORT_TAGLIB = (
-    'textfield($name;$default,$width,$maxlength,$index)',
-    'password($name;$default,$width,$maxlength,$index)',
-    'submit($name;$value,$image,$alt,$border,$align,$goto,$index)',
-    'cancel($name;$value,$image,$alt,$border,$align,$goto,$index)',
-    'checkbox($name;$value,$checked,$label,$index)',
-    'file_upload($name;$value,$accept)',
-    'hidden($name;$value,$index)',
-    'textarea($name;$cols,$rows,$wrap,$default,$index)',
-    'single_select($name;$default,$index,*options):itemtag=option',
-    'multi_select($name;@default,$index,*option):itemtag=option',
+    'textfield($name;$default,$width,$maxlength,$index,$onvalidate,$onload)',
+    'password($name;$default,$width,$maxlength,$index,$onvalidate,$onload)',
+    
+'submit($name;$value,$image,$alt,$border,$align,$goto,$index,$onvalidate,$onload)',
+    
+'cancel($name;$value,$image,$alt,$border,$align,$goto,$index,$onvalidate,$onload)',
+    'checkbox($name;$value,$checked,$label,$index,$onvalidate,$onload)',
+    'file_upload($name;$value,$accept,$onvalidate,$onload)',
+    'hidden($name;$value,$index,$onload)',
+    'textarea($name;$cols,$rows,$wrap,$default,$index,$onvalidate,$onload)',
+    
+'single_select($name;$default,$index,$onvalidate,$onload,*options):itemtag=option',
+    'multi_select($name;@default,$index,$onvalidate,$onload,*option):itemtag=option',
 );
 
 use strict;
@@ -149,8 +149,8 @@
     }
 }
 
-sub textfield ($;$$$$) {
-    my ($name, $default, $width, $maxlength, $index) = @_;
+sub textfield ($;$$$$$$) {
+    my ($name, $default, $width, $maxlength, $index, $onval, $onload) = @_;
     my ($package) = caller;
     
     no strict 'refs';
@@ -163,9 +163,9 @@
     
     # validate
     if ($params->{'__submitting'}) {
-        if (defined &{"${package}::validate_${name}"}) {
+        if (my $sub = $package->can($onval || "validate_${name}")) {
             eval {
-                "${package}::validate_${name}"->($ctxt, $params->{$name.$index}, 
$index);
+                $sub->($ctxt, $params->{$name.$index}, $index);
             };
             $error = $@;
             $ctxt->{_Failed}++ if $error;
@@ -173,8 +173,8 @@
         }
     }
     # load
-    elsif (defined &{"${package}::load_${name}"}) {
-        $params->{$name.$index} = "${package}::load_${name}"->($ctxt, $default, 
$params->{$name.$index}, $index);
+    elsif (my $sub = $package->can($onload || "load_${name}")) {
+        $params->{$name.$index} = $sub->($ctxt, $default, $params->{$name.$index}, 
+$index);
     }
     else{ 
         $params->{$name.$index} = $default;
@@ -283,8 +283,8 @@
     # TODO: What do we want buttons to do?
 }
 
-sub checkbox ($;$$$$) {
-    my ($name, $value, $checked, $label, $index) = @_;
+sub checkbox ($;$$$$$$) {
+    my ($name, $value, $checked, $label, $index, $onval, $onload) = @_;
     my ($package) = caller;
     $value = 1 unless $value;
     
@@ -298,9 +298,9 @@
     
     # validate
     if ($params->{'__submitting'}) {
-        if (defined &{"${package}::validate_${name}"}) {
+        if (my $sub = $package->can($onval || "validate_${name}")) {
             eval {
-                "${package}::validate_${name}"->($ctxt, $params->{$name.$index}, 
$index);
+                $sub->($ctxt, $params->{$name.$index}, $index);
             };
             $error = $@;
             $ctxt->{_Failed}++ if $error;
@@ -308,8 +308,8 @@
         }
     }
     # load
-    elsif (defined &{"${package}::load_${name}"}) {
-        my @vals = "${package}::load_${name}"->($ctxt, $params->{$name.$index}, 
$index);
+    elsif (my $sub = $package->can($onload || "load_${name}")) {
+        my @vals = $sub->($ctxt, $value, $params->{$name.$index}, $index);
         $checked = shift @vals;
         $value = shift @vals if @vals;
     }
@@ -336,8 +336,8 @@
     };
 }
 
-sub file_upload ($;$$) {
-    my ($name, $value, $accept) = @_;
+sub file_upload ($;$$$$) {
+    my ($name, $value, $accept, $onval, $onload) = @_;
     my ($package) = caller;
     
     no strict 'refs';
@@ -350,7 +350,7 @@
     
     # validate
     if ($params->{'__submitting'}) {
-        if (defined &{"${package}::validate_${name}"}) {
+        if (my $sub = $package->can($onval || "validate_${name}")) {
             my $upload = Apache::Request->instance(Apache->request)->upload($name);
             
             my $filename;
@@ -361,7 +361,7 @@
             }
     
             eval {
-               "${package}::validate_${name}"->($ctxt, 
+               $sub->($ctxt, 
                        ($upload ? 
                             (   $filename,
                                 $upload->fh, 
@@ -379,8 +379,8 @@
         }
     }
     # load
-    elsif (defined &{"${package}::load_${name}"}) {
-        $params->{$name} = "${package}::load_${name}"->($ctxt, $value, 
$params->{$name});
+    elsif (my $sub = $package->can($onload || "load_${name}")) {
+        $params->{$name} = $sub->($ctxt, $value, $params->{$name});
     }
     else {
         $params->{$name} = $value;
@@ -396,8 +396,8 @@
     };
 }
 
-sub hidden ($;$$) {
-    my ($name, $value, $index) = @_;
+sub hidden ($;$$$) {
+    my ($name, $value, $index, $onload) = @_;
     my ($package) = caller;
     
     no strict 'refs';
@@ -405,9 +405,10 @@
     my $ctxt = ${"${package}::_form_ctxt"};
     my $params = $ctxt->{Form};
 
-    if (!defined($value) && defined &{"${package}::load_${name}"}) {
+    if (!defined($value) && $package->can($onload || "load_${name}")) {
        # load value if not defined
-       $value = "${package}::load_${name}"->($ctxt, $value, $index);
+        my $sub = $package->can($onload || "load_${name}");
+       $value = $sub->($ctxt, $value, $index);
     }
     if ($params->{'__submitting'} && ($value ne $params->{$name.$index})) {
        die "Someone tried to change your hidden form value!";
@@ -422,8 +423,8 @@
     };
 }
 
-sub multi_select ($;$$$) {
-    my ($name, $default, $index, $option) = @_;
+sub multi_select ($;$$$$$) {
+    my ($name, $default, $index, $onval, $onload, $option) = @_;
     my ($package) = caller;
     
     no strict 'refs';
@@ -437,9 +438,9 @@
     
     # validate
     if ($params->{'__submitting'}) {
-        if (defined &{"${package}::validate_${name}"}) {
+        if (my $sub = $package->can($onval || "validate_${name}")) {
             eval {
-                "${package}::validate_${name}"->($ctxt, [$params->get($name.$index)], 
$index);
+                $sub->($ctxt, [$params->get($name.$index)], $index);
             };
             $error = $@;
             $ctxt->{_Failed}++ if $error;
@@ -447,8 +448,8 @@
         }
     }
     # load
-    elsif (defined &{"${package}::load_${name}"}) {
-        ($selected, @options) = "${package}::load_${name}"->($ctxt, 
[$params->get($name.$index)], $default, $index);
+    elsif (my $sub = $package->can($onload || "load_${name}")) {
+        ($selected, @options) = $sub->($ctxt, [$params->get($name.$index)], $default, 
+$index);
     }
     elsif (!$params->{'__submitting'}) {
         $selected = [@{$default}];
@@ -482,8 +483,8 @@
     };
 }
 
-sub password ($;$$$$) {
-    my ($name, $default, $width, $maxlength, $index) = @_;
+sub password ($;$$$$$$) {
+    my ($name, $default, $width, $maxlength, $index, $onval, $onload) = @_;
     my ($package) = caller;
     
     no strict 'refs';
@@ -496,9 +497,9 @@
     
     # validate
     if ($params->{'__submitting'}) {
-        if (defined &{"${package}::validate_${name}"}) {
+        if (my $sub = $package->can($onval || "validate_${name}")) {
             eval {
-                "${package}::validate_${name}"->($ctxt, $params->{$name,$index}, 
$index);
+                $sub->($ctxt, $params->{$name.$index}, $index);
             };
             $error = $@;
             $ctxt->{_Failed}++ if $error;
@@ -506,8 +507,8 @@
         }
     }
     # load
-    elsif (defined &{"${package}::load_${name}"}) {
-        $params->{$name.$index} = "${package}::load_${name}"->($ctxt, $default, 
$params->{$name,$index}, $index);
+    elsif (my $sub = $package->can($onload || "load_${name}")) {
+        $params->{$name.$index} = $sub->($ctxt, $default, $params->{$name,$index}, 
+$index);
     }
     else {
         $params->{$name.$index} = $default;
@@ -540,8 +541,8 @@
     };
 }
 
-sub single_select ($$$$) {
-    my ($name, $default, $index, $option) = @_;
+sub single_select ($;$$$$$) {
+    my ($name, $default, $index, $onval, $onload, $option) = @_;
     my ($package) = caller;
     
     no strict 'refs';
@@ -555,9 +556,9 @@
     
     # validate
     if ($params->{'__submitting'}) {
-        if (defined &{"${package}::validate_${name}"}) {
+        if (my $sub = $package->can($onval || "validate_${name}")) {
             eval {
-                "${package}::validate_${name}"->($ctxt, $params->{$name.$index}, 
$index);
+                $sub->($ctxt, $params->{$name.$index}, $index);
             };
             $error = $@;
             $ctxt->{_Failed}++ if $error;
@@ -565,8 +566,8 @@
         }
     }
     # load
-    elsif (defined &{"${package}::load_${name}"}) {
-        ($selected, @options) = "${package}::load_${name}"->($ctxt, 
$params->{$name.$index}, $default, $index);
+    elsif (my $sub = $package->can($onload || "load_${name}")) {
+        ($selected, @options) = $sub->($ctxt, $params->{$name.$index}, $default, 
+$index);
     }
     elsif (!$params->{'__submitting'}) {
         $selected = $default;
@@ -598,8 +599,8 @@
     };
 }
 
-sub textarea ($;$$$$$) {
-    my ($name, $cols, $rows, $wrap, $default, $index) = @_;
+sub textarea ($;$$$$$$$) {
+    my ($name, $cols, $rows, $wrap, $default, $index, $onval, $onload) = @_;
     
     my ($package) = caller;
     
@@ -613,9 +614,9 @@
     
     # validate
     if ($params->{'__submitting'}) {
-        if (defined &{"${package}::validate_${name}"}) {
+        if (my $sub = $package->can($onval || "validate_${name}")) {
             eval {
-                "${package}::validate_${name}"->($ctxt, $params->{$name.$index}, 
$index);
+                $sub->($ctxt, $params->{$name.$index}, $index);
             };
             $error = $@;
             $ctxt->{_Failed}++ if $error;
@@ -623,8 +624,8 @@
         }
     }
     # load
-    elsif (defined &{"${package}::load_${name}"}) {
-        $params->{$name.$index} = "${package}::load_${name}"->($ctxt, $default, 
$params->{$name.$index}, $index);
+    elsif (my $sub = $package->can($onload || "load_${name}")) {
+        $params->{$name.$index} = $sub->($ctxt, $default, $params->{$name.$index}, 
+$index);
     }
     else {
         $params->{$name.$index} = $default;

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to