From 22ae0bf076b11483f200300b039ae284dd09b324 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Sven=20Sch=C3=B6ling?= Date: Fri, 22 Oct 2010 14:25:05 +0200 Subject: [PATCH] date_tag MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Beispiel ist hier nicht mit enthalten, weil der date_tag gleichzeitig einen graphischen datepicker rendert, deshalb hier im Commit: [% USE L %] [% L.date_tag('orddate', orddate, cal_align => 'BL') %] Das erste ist der name in html, das zweite der Wert zum befüllen, das dritte die Orientierung des Popups. --- SL/Form.pm | 14 ++++++------ SL/Template/Plugin/L.pm | 49 ++++++++++++++++++++++++++++++++++++++++ image/calendar.png | Bin 0 -> 603 bytes 3 files changed, 56 insertions(+), 7 deletions(-) create mode 100644 image/calendar.png diff --git a/SL/Form.pm b/SL/Form.pm index 56e46f798..77581a0c6 100644 --- a/SL/Form.pm +++ b/SL/Form.pm @@ -56,7 +56,7 @@ use SL::User; use Template; use URI; use List::Util qw(first max min sum); -use List::MoreUtils qw(any); +use List::MoreUtils qw(any apply); use strict; @@ -828,13 +828,13 @@ sub _prepare_html_template { } if (%main::myconfig) { - map({ $additional_params->{"myconfig_${_}"} = $main::myconfig{$_}; } keys(%main::myconfig)); - my $jsc_dateformat = $main::myconfig{"dateformat"}; - $jsc_dateformat =~ s/d+/\%d/gi; - $jsc_dateformat =~ s/m+/\%m/gi; - $jsc_dateformat =~ s/y+/\%Y/gi; - $additional_params->{"myconfig_jsc_dateformat"} = $jsc_dateformat; + $::myconfig{jsc_dateformat} = apply { + s/d+/\%d/gi; + s/m+/\%m/gi; + s/y+/\%Y/gi; + } $::myconfig{"dateformat"}; $additional_params->{"myconfig"} ||= \%::myconfig; + map { $additional_params->{"myconfig_${_}"} = $main::myconfig{$_}; } keys %::myconfig; } $additional_params->{"conf_dbcharset"} = $main::dbcharset; diff --git a/SL/Template/Plugin/L.pm b/SL/Template/Plugin/L.pm index 692c39663..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); @@ -132,6 +141,36 @@ sub options_for_select { 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; __END__ @@ -213,6 +252,16 @@ If C<%attributes> contains a key C