X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FPresenter%2FTag.pm;h=e5690e79df63bb667274961fbfcef8fa2187cf05;hb=10ca9778ea95bb53b0f8a8988bb0f1ed130823de;hp=e65ca7722ef27abed26c402f62f22e58d6d2a242;hpb=081e2bbcae187497b961a1d19d856c8da6e6204b;p=kivitendo-erp.git diff --git a/SL/Presenter/Tag.pm b/SL/Presenter/Tag.pm index e65ca7722..e5690e79d 100644 --- a/SL/Presenter/Tag.pm +++ b/SL/Presenter/Tag.pm @@ -19,6 +19,15 @@ sub _call_on { return $object->$method(@params); } +{ # 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 _id { + return ( $_id_sequence = ($_id_sequence + 1) % 1e7 ); +} +} + sub stringify_attributes { my ($self, %params) = @_; @@ -45,7 +54,7 @@ sub html_tag { sub input_tag { my ($self, $name, $value, %attributes) = @_; - $attributes{id} ||= $self->name_to_id($name); + _set_id_attribute(\%attributes, $name); $attributes{type} ||= 'text'; return $self->html_tag('input', undef, %attributes, name => $name, value => $value); @@ -68,6 +77,7 @@ sub man_days_tag { sub name_to_id { my ($self, $name) = @_; + $name =~ s/\[\+?\]/ _id() /ge; # give constructs with [] or [+] unique ids $name =~ s/[^\w_]/_/g; $name =~ s/_+/_/g; @@ -77,7 +87,7 @@ sub name_to_id { sub select_tag { my ($self, $name, $collection, %attributes) = @_; - $attributes{id} ||= $self->name_to_id($name); + _set_id_attribute(\%attributes, $name); my $value_key = delete($attributes{value_key}) || 'id'; my $title_key = delete($attributes{title_key}) || $value_key; @@ -173,6 +183,14 @@ sub select_tag { return $self->html_tag('select', $code, %attributes, name => $name); } +sub _set_id_attribute { + my ($attributes, $name) = @_; + + $attributes->{id} = name_to_id(undef, $name) if !delete($attributes->{no_id}) && !$attributes->{id}; + + return %{ $attributes }; +} + 1; __END__ @@ -205,6 +223,10 @@ Usage from a template: A module modeled a bit after Rails' ActionView helpers. Several small functions that create HTML tags from various kinds of data sources. +The C attribute is usually calculated automatically. This can be +overridden by either specifying an C attribute or by setting +C to trueish. + =head1 FUNCTIONS =head2 LOW-LEVEL FUNCTIONS