
richter at apache
Jul 11, 2012, 10:53 AM
Post #1 of 1
(165 views)
Permalink
|
|
svn commit: r1360320 - in /perl/embperl/trunk/Embperl/Form/Control: datetime.pm dynctrl.pm grid.pm selectdyn.pm
|
|
Author: richter Date: Wed Jul 11 17:53:21 2012 New Revision: 1360320 URL: http://svn.apache.org/viewvc?rev=1360320&view=rev Log: dynamic control for Embperl::Forms Added: perl/embperl/trunk/Embperl/Form/Control/dynctrl.pm Modified: perl/embperl/trunk/Embperl/Form/Control/datetime.pm perl/embperl/trunk/Embperl/Form/Control/grid.pm perl/embperl/trunk/Embperl/Form/Control/selectdyn.pm Modified: perl/embperl/trunk/Embperl/Form/Control/datetime.pm URL: http://svn.apache.org/viewvc/perl/embperl/trunk/Embperl/Form/Control/datetime.pm?rev=1360320&r1=1360319&r2=1360320&view=diff ============================================================================== --- perl/embperl/trunk/Embperl/Form/Control/datetime.pm (original) +++ perl/embperl/trunk/Embperl/Form/Control/datetime.pm Wed Jul 11 17:53:21 2012 @@ -59,22 +59,31 @@ sub init_data my $time = $fdat->{$name} ; return if ($time eq '' || $req -> {"ef_datetime_init_done_$name"}) ; + if ($self -> {dynamic} && ($time =~ /^\s*((?:d|m|y)(?:\+|-)?(?:\d+)?)\s*$/)) + { + $fdat->{$name} = $1 ; + + $req -> {"ef_datetime_init_done_$name"} = 1 ; + return ; + } + + my ($y, $m, $d, $h, $min, $s, $z) = ($time =~ /^(\d\d\d\d)(\d\d)(\d\d)(\d\d)(\d\d)(\d\d)(.)/) ; # Getting the local timezone my $date = eval - { - my @time = gmtime(timegm_nocheck($s,$min,$h,$d,$m-1,$y-1900)+($tz_local*60)); + { + my @time = gmtime(timegm_nocheck($s,$min,$h,$d,$m-1,$y-1900)+($tz_local*60)); - my $format = $self -> {notime} || ($s == 0 && $h == 0 && $min == 0)?'%d.%m.%Y':'%d.%m.%Y, %H:%M' ; - strftime ($format, @time[0..5]) ; - } ; + my $format = $self -> {notime} || ($s == 0 && $h == 0 && $min == 0)?'%d.%m.%Y':'%d.%m.%Y, %H:%M' ; + strftime ($format, @time[0..5]) ; + } ; if ($time && !$date && ($time =~ /\d+\.\d+\.\d+/)) - { - $date = $time ; - } + { + $date = $time ; + } $fdat->{$name} = $date ; $req -> {"ef_datetime_init_done_$name"} = 1 ; @@ -95,6 +104,14 @@ sub prepare_fdat my $name = $self->{name} ; my $date = $fdat -> {$name} ; return if ($date eq '') ; + + if ($self -> {dynamic} && ($date =~ /^\s*((?:d|m|y)\s*(?:\+|-)?\s*(?:\d+)?)\s*$/)) + { + $fdat->{$name} = $1 ; + $fdat->{$name} =~ s/\s//g ; + return ; + } + my ($year, $mon, $day, $hour, $min, $sec) ; if ($date eq '*' || $date eq '.') @@ -168,7 +185,10 @@ $] [$if $self -> {maxlength} $]maxlength="[+ $self->{maxlength} +]"[$endif$] > <script type="text/javascript"> - $('#[+ $fullid +]').datepicker ({ showWeek: true }) ; + $('#[+ $fullid +]').datepicker ({ showWeek: true, + [$if $self -> {dynamic} $]constrainInput: false, [$endif$] + showButtonPanel: true + }) ; </script> @@ -221,7 +241,16 @@ Gives the size in characters. (Default: =head3 notime -doe not display time +does not display time + +=head3 dynamic + +allows the following values to be entered: + +d, m, y, d-N, d+N, m-N, m+N, y-N, y+N + +N is any number. This values are simply passed through and need +to be process somewhere else. =head1 Author Added: perl/embperl/trunk/Embperl/Form/Control/dynctrl.pm URL: http://svn.apache.org/viewvc/perl/embperl/trunk/Embperl/Form/Control/dynctrl.pm?rev=1360320&view=auto ============================================================================== --- perl/embperl/trunk/Embperl/Form/Control/dynctrl.pm (added) +++ perl/embperl/trunk/Embperl/Form/Control/dynctrl.pm Wed Jul 11 17:53:21 2012 @@ -0,0 +1,202 @@ + +################################################################################### +# +# Embperl - Copyright (c) 1997-2012 Gerald Richter / ecos gmbh www.ecos.de +# +# You may distribute under the terms of either the GNU General Public +# License or the Artistic License, as specified in the Perl README file. +# +# THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +# WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. +# +# $Id$ +# +################################################################################### + +package Embperl::Form::Control::dynctrl ; + +use strict ; +use base 'Embperl::Form::Control' ; + +use Embperl::Inline ; + +# ---------------------------------------------------------------------------- +# +# creatre_ctrl - creates the dynamic control based on the current data +# + +sub create_ctrl + { + my ($self, $req) = @_ ; + + my $fdat = ($req -> {form} && keys (%{$req -> {form}}) > 0)?$req -> {form}:\%Embperl::fdat ; + my $id = $self -> {id} . $self -> {name} ; +::dbg('create_control id = ', $id, ' name = ', $self -> {name}, ' value = ', $fdat -> {$self -> {name}}, $req -> {form}, \%Embperl::fdat, $fdat) ; + return $req -> {"dynctrl_$id"} if ($req -> {"dynctrl_$id"}) ; + + my $ctrl ; + my $ctrlattr = $self -> {ctrlattr} ; + if (ref $ctrlattr eq 'CODE') + { + $ctrl = &{$ctrlattr}($self, $fdat) ; + } + else + { + my $ctrl = {} ; + foreach my $f (keys %$ctrlattr) + { + my $val = $ctrlattr -> {$f} ; + if (ref $val eq 'CODE') + { + $val = &{$val}($self, $fdat) ; + } + + $ctrl -> {$f} = $val ; + } + } + + foreach my $attr (keys %$self) + { + $ctrl -> {$attr} = $self -> {$attr} + if ($attr ne 'ctrlattr' && + $attr ne 'type' && + !exists ($ctrl -> {$attr})) ; + } + + $ctrl -> {text} = $ctrl -> {textprefix} . $ctrl -> {text} if ($ctrl -> {textprefix}) ; + my $form = $self -> form ; + my $ctrlform = [$ctrl] ; + $form -> new_controls ($ctrlform, undef, undef, undef, undef, undef, undef, 1) ; + + return $req -> {"dynctrl_$id"} = $ctrlform -> [0] ; + } + +# ---------------------------------------------------------------------------- + +sub show + { + my $self = shift ; + my $ctrl = $self -> create_ctrl ($_[0]) ; + $ctrl -> show (@_) if ($ctrl) ; + } + +# ---------------------------------------------------------------------------- + +sub show_control + { + my $self = shift ; + my $ctrl = $self -> create_ctrl ($_[0]) ; + $ctrl -> show_control (@_) if ($ctrl) ; + } + + +# ---------------------------------------------------------------------------- + +sub show_readonly + { + my $self = shift ; + my $ctrl = $self -> create_ctrl ($_[0]) ; + $ctrl -> show_readonly (@_) if ($ctrl) ; + } + +# ---------------------------------------------------------------------------- + +sub init_data + { + my $self = shift ; + my $ctrl = $self -> create_ctrl ($_[0]) ; + + $ctrl -> init_data (@_) if ($ctrl && $ctrl -> can ('init_data')); + } + +# ---------------------------------------------------------------------------- + +sub prepare_fdat + { + my $self = shift ; + my $ctrl = $self -> create_ctrl ($_[0]) ; + + $ctrl -> prepare_fdat (@_) if ($ctrl && $ctrl -> can ('prepare_fdat')) ; + } + + +1 ; + +__EMBPERL__ + + +__END__ + +=pod + +=head1 NAME + +Embperl::Form::Control::dynctrl - A dynamic control which is build depending on form data inside an Embperl Form + + +=head1 SYNOPSIS + + { + type => 'dynctrl', + text => 'blabla', + name => 'foo', + ctrlattr => + { + type => sub { my ($ctrl, $fdat) = @_ ; return $fdat{foo} }, + size => sub { my ($ctrl, $fdat) = @_ ; return $fdat{bar} }, + } + } + +or + + { + type => 'dynctrl', + text => 'blabla', + name => 'foo', + ctrlattr => sub { my ($ctrl, $fdat) = @_ ; return { type => $fdat{foo}, size => $fdat{bar} }, + } + + + +=head1 DESCRIPTION + +Used to create a dynamic control which is build depending on form data inside an Embperl Form. +See Embperl::Form on how to specify parameters. + +Use the ctrlattr parameter to specify a callback that delviers the control parameter +at runtime. + +=head2 PARAMETER + +=head3 type + +Needs to be 'dynctrl' + +=head3 name + +Specifies the name of the control + +=head3 text + +Will be used as label for the text input control + + +=head3 ctrlattr + +Code Referenz or hash of values and code references which returns the +attributes for the real control. + +=head3 textprefix + +Prefix for text + +=head1 Author + +G. Richter (richter [at] dev) + +=head1 See Also + +perl(1), Embperl, Embperl::Form + + Modified: perl/embperl/trunk/Embperl/Form/Control/grid.pm URL: http://svn.apache.org/viewvc/perl/embperl/trunk/Embperl/Form/Control/grid.pm?rev=1360320&r1=1360319&r2=1360320&view=diff ============================================================================== --- perl/embperl/trunk/Embperl/Form/Control/grid.pm (original) +++ perl/embperl/trunk/Embperl/Form/Control/grid.pm Wed Jul 11 17:53:21 2012 @@ -143,7 +143,7 @@ sub init_data $i++ ; } $fdat->{"__${name}_max"} = $i?$i:1; - $self -> {rowclasses} = \@rowclass ; + $self -> {rowclasses} ||= \@rowclass ; } # ------------------------------------------------------------------------------------------ @@ -284,7 +284,7 @@ $]<table class="ef-element ef-element-wi </table> [.- $self -> show_grid_title ($req) if ($max > $self -> {header_bottom} && !$self -> {disable_controls}) -] - <table id="__[+ $self -> {fullid} +]_newrow" style="display: none" class="[+ $self -> {state} +]"> + <table id="__[+ $self -> {fullid} +]_newrow" style="display: none"> [.- local $req -> {epf_no_script} = 1 ; $self -> show_grid_table_row ($req, '%row%') ; Modified: perl/embperl/trunk/Embperl/Form/Control/selectdyn.pm URL: http://svn.apache.org/viewvc/perl/embperl/trunk/Embperl/Form/Control/selectdyn.pm?rev=1360320&r1=1360319&r2=1360320&view=diff ============================================================================== --- perl/embperl/trunk/Embperl/Form/Control/selectdyn.pm (original) +++ perl/embperl/trunk/Embperl/Form/Control/selectdyn.pm Wed Jul 11 17:53:21 2012 @@ -151,22 +151,28 @@ control_link_setup($( "#_inp_[.+ $self -> $self -> {datasrcurl} ||= '/epfctrl/datasrc.json?datasrc=%datasrc%' ; my $class = $self -> {class} ; $] -<div class="ui-widget"> +[# <div class="ui-widget"> #] [# --- input --- #] <input name="_inp_[+ $name +]" [.+ do { local $escmode = 0 ; $self -> get_std_control_attr($req, "_inp_$jsname") } +] type="text" [$if $self -> {size} $]size="[+ $self->{size} +]"[$endif$] value="[+ $initval +]" > + <input type="hidden" name="[+ $name +]" id="[+ $jsname +]" > +[# <input type="hidden" name="[+ "_id_$jsname" +]" id="[+ "_id_$jsname" +]" value="[+ $self -> get_id_from_value ($fdat{$name}) +]"> +#] <[$if $noscript $]x-[$endif$]script type="text/javascript"> -autocomplete_setup($( "#_inp_[+ $jsname +]" ), { - showurl: '[.+ do { local $escmode = 0 ; $self -> {showurl} } +]', - popupurl: '[.+ do { local $escmode = 0 ; $self -> {popupurl} } +]', - datasrcurl: '[.+ do { local $escmode = 0 ; $self -> {datasrcurl} } +]', +$( "#_inp_[+ $jsname +]" ).ef_selectdyn( + { + show_url: '[.+ do { local $escmode = 0 ; $self -> {showurl} } +]', + popup_url: '[.+ do { local $escmode = 0 ; $self -> {popupurl} } +]', + datasrc_url: '[.+ do { local $escmode = 0 ; $self -> {datasrcurl} } +]', datasrc: '[+ $self->{datasrc} +]', use_ajax: '[+ $self->{use_ajax} +]', - show_on_select: [+ $self->{show_on_select}?'true':'false' +] + show_on_select: [+ $self->{show_on_select}?'true':'false' +], + initial_id: "[+ $self -> get_id_from_value ($fdat{$name}) +]", + input_value: $('#[+ $jsname +]') }) ; </[$if $noscript $]x-[$endif$]script > --------------------------------------------------------------------- To unsubscribe, e-mail: embperl-cvs-unsubscribe [at] perl For additional commands, e-mail: embperl-cvs-help [at] perl
|