X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FClientJS.pm;h=7f8bee01111305937a85fd7425c30d3109ff9191;hb=f27794056c50783ab7af7fb4af5c48097001cc3b;hp=335bf8163107cdfcf383cd7c7e19a9de039d36cd;hpb=35cf7c7029b4aa69eb9d02c7533d1a15aafb118b;p=kivitendo-erp.git diff --git a/SL/ClientJS.pm b/SL/ClientJS.pm index 335bf8163..7f8bee011 100644 --- a/SL/ClientJS.pm +++ b/SL/ClientJS.pm @@ -9,8 +9,8 @@ use SL::JSON (); use Rose::Object::MakeMethods::Generic ( - scalar => [ qw(controller) ], - 'scalar --get_set_init' => [ qw(_actions _flash _error) ], + scalar => [ qw() ], + 'scalar --get_set_init' => [ qw(controller _actions _flash _flash_detail _no_flash_clear _error) ], ); my %supported_methods = ( @@ -115,6 +115,8 @@ my %supported_methods = ( redirect_to => 1, # window.location.href = flash => 2, # kivi.display_flash(, ) + flash_detail => 2, # kivi.display_flash_detail(, ) + clear_flash => 2, # kivi.clear_flash(, ) reinit_widgets => 0, # kivi.reinit_widgets() run => -1, # kivi.run(, ) run_once_for => 3, # kivi.run_once_for(, ) @@ -180,15 +182,23 @@ sub init__flash { return {}; } +sub init__flash_detail { + return {}; +} + sub init__error { return ''; } +sub init__no_flash_clear { + return ''; +} + sub to_json { my ($self) = @_; - return SL::JSON::to_json({ error => $self->_error }) if $self->_error; - return SL::JSON::to_json({ eval_actions => $self->_actions }); + return SL::JSON::to_json({ error => $self->_error }) if $self->_error; + return SL::JSON::to_json({ no_flash_clear => $self->_no_flash_clear, eval_actions => $self->_actions }); } sub to_array { @@ -236,6 +246,27 @@ sub flash { return $self; } +sub flash_detail { + my ($self, $type, @messages) = @_; + + my $message = join '
', grep { $_ } @messages; + + if (!$self->_flash_detail->{$type}) { + $self->_flash_detail->{$type} = [ 'flash_detail', $type, $message ]; + push @{ $self->_actions }, $self->_flash_detail->{$type}; + } else { + $self->_flash_detail->{$type}->[-1] .= ' ' . $message; + } + + return $self; +} + +sub no_flash_clear{ + my ($self) = @_; + $self->_no_flash_clear('1'); + return $self; +} + sub error { my ($self, @messages) = @_; @@ -244,6 +275,12 @@ sub error { return $self; } +sub init_controller { + # fallback + require SL::Controller::Base; + SL::Controller::Base->new; +} + 1; __END__ @@ -457,6 +494,17 @@ C on the same C<$self> will be merged by type. On the client side the flashes of all types will be cleared after each successful ClientJS call that did not end with C<$js-Eerror(...)>. +This clearing can be switched of by the function C + +=item C + +Display a detailed message C<$message> in the flash of type C<$type>. Multiple calls of +C on the same C<$self> will be merged by type. +So the flash message can be hold short and the visibility of details can toggled by the user. + +=item C + +No automatic clearing of flash after successful ClientJS call =item C