X-Git-Url: http://wagnertech.de/gitweb/gitweb.cgi/mfinanz.git/blobdiff_plain/3cc77e53893f90f6434e1adb1fdd4a227e220cf0..0e0ff15052f7cb7ed1a2b04235a8a217da97a183:/SL/Template/Plugin/L.pm diff --git a/SL/Template/Plugin/L.pm b/SL/Template/Plugin/L.pm index 4f5632b9d..d1ecdbd8c 100644 --- a/SL/Template/Plugin/L.pm +++ b/SL/Template/Plugin/L.pm @@ -5,6 +5,15 @@ use Template::Plugin; use strict; +{ # This will give you an id for identifying html tags and such. + # It's guaranteed to be unique unless you exceed 10 mio calls per request. + # Do not use these id's to store information across requests. +my $_id_sequence = int rand 1e7; +sub _tag_id { + return $_id_sequence = ($_id_sequence + 1) % 1e7; +} +} + sub _H { my $string = shift; return $::locale->quote_special_chars('HTML', $string); @@ -107,7 +116,9 @@ sub options_for_select { my $value_key = $options{value} || 'id'; my $title_key = $options{title} || $value_key; - my @tags = (); + my @elements = (); + push @elements, [ undef, $options{empty_title} || '' ] if $options{with_empty}; + if ($collection && (ref $collection eq 'ARRAY')) { foreach my $element (@{ $collection }) { my @result = !ref $element ? ( $element, $element ) @@ -115,14 +126,49 @@ sub options_for_select { : ref $element eq 'HASH' ? ( $element->{$value_key}, $element->{$title_key} ) : ( $element->$value_key, $element->$title_key ); - my %attributes = ( value => $result[0] ); - $attributes{selected} = 'selected' if $options{default} && ($options{default} eq ($result[0] || '')); - - push @tags, $self->html_tag('option', _H($result[1]), %attributes); + push @elements, \@result; } } - return join('', @tags); + my $code = ''; + foreach my $result (@elements) { + my %attributes = ( value => $result->[0] ); + $attributes{selected} = 'selected' if $options{default} && ($options{default} eq ($result->[0] || '')); + + $code .= $self->html_tag('option', _H($result->[1]), %attributes); + } + + return $code; +} + +sub javascript { + my ($self, $data) = @_; + return $self->html_tag('script', $data, type => 'text/javascript'); +} + +sub date_tag { + my ($self, $name, $value, @slurp) = @_; + my %params = _hashify(@slurp); + my $name_e = _H($name); + my $seq = _tag_id(); + + $params{cal_align} ||= 'BR'; + + $self->input_tag($name, $value, + size => 11, + title => _H($::myconfig{dateformat}), + onBlur => 'check_right_date_format(this)', + %params, + ) . ((!$params{no_cal}) ? + $self->html_tag('img', undef, + src => 'image/calendar.png', + id => "trigger$seq", + title => _H($::myconfig{dateformat}), + %params, + ) . + $self->javascript( + "Calendar.setup({ inputField: '$name_e', ifFormat: '$::myconfig{jsc_dateformat}', align: '$params{cal_align}', button: 'trigger$seq' });" + ) : ''); } 1; @@ -206,6 +252,16 @@ If C<%attributes> contains a key C