X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FReaction%2FUI%2FWidgetClass.pm;h=e68add0227e200f52737d62f3f8aa3b247ae9802;hb=86db4be7223283effc37a875d0c3e665c55d0418;hp=22e00e6040ae86d4acc141d776e2dd87f58429c3;hpb=a86de581e80ee37e60860bde8ddaa975ff7dd6c9;p=catagits%2FReaction.git diff --git a/lib/Reaction/UI/WidgetClass.pm b/lib/Reaction/UI/WidgetClass.pm index 22e00e6..e68add0 100644 --- a/lib/Reaction/UI/WidgetClass.pm +++ b/lib/Reaction/UI/WidgetClass.pm @@ -5,6 +5,7 @@ use Reaction::Class; use Reaction::UI::Widget; use Data::Dumper; use Devel::Declare; +use HTML::Entities (); use aliased 'Reaction::UI::WidgetClass::_OVER'; no warnings 'once'; @@ -47,7 +48,7 @@ override exports_for_package => sub { my $sig = "should be: render 'name' or render 'name' => over \$coll"; if (!defined $name) { confess "name undefined: $sig"; } - if (ref $name) { confess "name not string: $sig"; } + if (ref $name) { confess "name is a ${\ref $name} ref, not a plain string: $sig"; } if (defined $over && !(blessed($over) && $over->isa(_OVER))) { confess "invalid args after name, $sig"; } @@ -57,12 +58,20 @@ override exports_for_package => sub { my ($name, $value) = @_; my $sig = "should be: arg 'name' => \$value"; - if (@_ < 2) { confess "Not enough arguments, $sig"; } + if (@_ < 2) { + $name ||= 'undef'; + $value ||= 'undef'; + confess "Not enough arguments, $sig, got: $name => $value"; + } if (!defined $name) { confess "name undefined, $sig"; } if (ref $name) { confess "name is not a string, $sig"; } $new_args->{$name} = $value; }, + localized => sub { + my($value) = @_; + return $_{self}->view->localize($value); + }, call_next => sub { confess "args passed, should be just call_next; or call_next();" if @_; @@ -81,16 +90,14 @@ override exports_for_package => sub { attrs => sub { my ($attrs) = @_; return join(' ', map { - my $text = $attrs->{$_}; - for ($text) { - s/&/&/g; - s//>/g; - s/"/"/g; - } + my $text = HTML::Entities::encode_entities( $attrs->{$_} ); qq{$_="${text}"}; } keys %$attrs); }, + implements => sub { + my ($name, $sub) = @_; + $package->meta->add_method($name, $sub); + }, ); }; override default_base => sub { ('Reaction::UI::Widget') };