diff options
author | matthewt <matthewt@03d0b0b2-0e1a-0410-a411-fdb2f4bd65d7> | 2008-08-13 11:43:07 +0000 |
---|---|---|
committer | matthewt <matthewt@03d0b0b2-0e1a-0410-a411-fdb2f4bd65d7> | 2008-08-13 11:43:07 +0000 |
commit | bae75beec20b3b73faa2118db8ebfa5b93c9918a (patch) | |
tree | 9a6155b95af1ca9f1fe8db75b5facda89f8a878a | |
parent | a3c28d596b414a9d98d9f60b69d2bb4811fbafc8 (diff) | |
download | reaction-bae75beec20b3b73faa2118db8ebfa5b93c9918a.tar.gz reaction-bae75beec20b3b73faa2118db8ebfa5b93c9918a.zip |
remove class blocks from widget code
46 files changed, 747 insertions, 594 deletions
diff --git a/lib/ComponentUI/View/Site/Widget/Index.pm b/lib/ComponentUI/View/Site/Widget/Index.pm index b7f0372..0f0bd64 100644 --- a/lib/ComponentUI/View/Site/Widget/Index.pm +++ b/lib/ComponentUI/View/Site/Widget/Index.pm @@ -2,8 +2,10 @@ package ComponentUI::View::Site::Widget::Index; use Reaction::UI::WidgetClass; -class Index which { +use namespace::clean -except => [ qw(meta) ]; + + +__PACKAGE__->meta->make_immutable; -}; 1; diff --git a/lib/Reaction/UI/Widget.pm b/lib/Reaction/UI/Widget.pm index 3a9bc5c..07a109f 100644 --- a/lib/Reaction/UI/Widget.pm +++ b/lib/Reaction/UI/Widget.pm @@ -5,134 +5,129 @@ use aliased 'Reaction::UI::ViewPort'; use aliased 'Reaction::UI::View'; use aliased 'Reaction::UI::LayoutSet'; -class Widget which { - - sub DEBUG_FRAGMENTS () { $ENV{REACTION_UI_WIDGET_DEBUG_FRAGMENTS} } - sub DEBUG_LAYOUTS () { $ENV{REACTION_UI_WIDGET_DEBUG_LAYOUTS} } - - has 'view' => (isa => View, is => 'ro', required => 1); - has 'layout_set' => (isa => LayoutSet, is => 'ro', required => 1); - has 'fragment_names' => (is => 'ro', lazy_build => 1); - has 'basic_layout_args' => (is => 'ro', lazy_build => 1); - - implements '_build_fragment_names' => as { - my ($self) = shift; - return [ - map { /^_fragment_(.*)/; $1; } - grep { /^_fragment_/ } - map { $_->{name} } - $self->meta->compute_all_applicable_methods - ]; - }; - - implements 'render' => as { - my ($self, $fragment_name, $rctx, $passed_args) = @_; - confess "\$passed_args not hashref" unless ref($passed_args) eq 'HASH'; - if (DEBUG_FRAGMENTS) { - my $vp = $passed_args->{viewport}; - $self->view->app->log->debug( - "Rendering fragment ${fragment_name} for ".ref($self) - ." for VP ${vp} at ".$vp->location - ); - } - my $args = { self => $self, %$passed_args }; - my $new_args = { %$args }; - my $render_tree = $self->_render_dispatch_order( - $fragment_name, $args, $new_args - ); - $rctx->dispatch($render_tree, $new_args); - }; - - implements '_method_for_fragment_name' => as { - my ($self, $fragment_name) = @_; - return $self->can("_fragment_${fragment_name}"); - }; - - implements '_render_dispatch_order' => as { - my ($self, $fragment_name, $args, $new_args) = @_; - - my @render_stack = (my $render_deep = (my $render_curr = [])); - my @layout_order = $self->layout_set->widget_order_for($fragment_name); - - if (my $f_meth = $self->_method_for_fragment_name($fragment_name)) { - my @wclass_stack; - my $do_render = sub { - my $package = shift; - if (@layout_order) { - while ($package eq $layout_order[0][0] - || $layout_order[0][0]->isa($package)) { - my $new_curr = []; - my @l = @{shift(@layout_order)}; - if (DEBUG_LAYOUTS) { - $self->view->app->log->debug( - "Layout ${fragment_name} in ${\$l[1]->name} from ${\$l[1]->source_file}" - ); - } - push(@$render_curr, [ -layout, $l[1], $fragment_name, $new_curr ]); - push(@render_stack, $new_curr); - push(@wclass_stack, $l[0]); - $render_deep = $render_curr = $new_curr; - last unless @layout_order; - } - } - if (@wclass_stack) { - while ($package ne $wclass_stack[-1] - && $package->isa($wclass_stack[-1])) { - pop(@wclass_stack); - $render_curr = pop(@render_stack); +use namespace::clean -except => [ qw(meta) ]; + + +sub DEBUG_FRAGMENTS () { $ENV{REACTION_UI_WIDGET_DEBUG_FRAGMENTS} } +sub DEBUG_LAYOUTS () { $ENV{REACTION_UI_WIDGET_DEBUG_LAYOUTS} } + +has 'view' => (isa => View, is => 'ro', required => 1); +has 'layout_set' => (isa => LayoutSet, is => 'ro', required => 1); +has 'fragment_names' => (is => 'ro', lazy_build => 1); +has 'basic_layout_args' => (is => 'ro', lazy_build => 1); +sub _build_fragment_names { + my ($self) = shift; + return [ + map { /^_fragment_(.*)/; $1; } + grep { /^_fragment_/ } + map { $_->{name} } + $self->meta->compute_all_applicable_methods + ]; +}; +sub render { + my ($self, $fragment_name, $rctx, $passed_args) = @_; + confess "\$passed_args not hashref" unless ref($passed_args) eq 'HASH'; + if (DEBUG_FRAGMENTS) { + my $vp = $passed_args->{viewport}; + $self->view->app->log->debug( + "Rendering fragment ${fragment_name} for ".ref($self) + ." for VP ${vp} at ".$vp->location + ); + } + my $args = { self => $self, %$passed_args }; + my $new_args = { %$args }; + my $render_tree = $self->_render_dispatch_order( + $fragment_name, $args, $new_args + ); + $rctx->dispatch($render_tree, $new_args); +}; +sub _method_for_fragment_name { + my ($self, $fragment_name) = @_; + return $self->can("_fragment_${fragment_name}"); +}; +sub _render_dispatch_order { + my ($self, $fragment_name, $args, $new_args) = @_; + + my @render_stack = (my $render_deep = (my $render_curr = [])); + my @layout_order = $self->layout_set->widget_order_for($fragment_name); + + if (my $f_meth = $self->_method_for_fragment_name($fragment_name)) { + my @wclass_stack; + my $do_render = sub { + my $package = shift; + if (@layout_order) { + while ($package eq $layout_order[0][0] + || $layout_order[0][0]->isa($package)) { + my $new_curr = []; + my @l = @{shift(@layout_order)}; + if (DEBUG_LAYOUTS) { + $self->view->app->log->debug( + "Layout ${fragment_name} in ${\$l[1]->name} from ${\$l[1]->source_file}" + ); } + push(@$render_curr, [ -layout, $l[1], $fragment_name, $new_curr ]); + push(@render_stack, $new_curr); + push(@wclass_stack, $l[0]); + $render_deep = $render_curr = $new_curr; + last unless @layout_order; } - push(@{$render_curr}, [ -render, @_ ]); - }; - $self->$f_meth($do_render, $args, $new_args); - } - # if we had no fragment method or if we still have layouts left - if (@layout_order) { - while (my $l = shift(@layout_order)) { - if (DEBUG_LAYOUTS) { - $self->view->app->log->debug( - "Layout ${fragment_name} in ${\$l->[1]->name} from ${\$l->[1]->source_file}" - ); + } + if (@wclass_stack) { + while ($package ne $wclass_stack[-1] + && $package->isa($wclass_stack[-1])) { + pop(@wclass_stack); + $render_curr = pop(@render_stack); } - push(@$render_deep, [ - -layout => $l->[1], $fragment_name, ($render_deep = []) - ]); } + push(@{$render_curr}, [ '-render', @_ ]); + }; + $self->$f_meth($do_render, $args, $new_args); + } + # if we had no fragment method or if we still have layouts left + if (@layout_order) { + while (my $l = shift(@layout_order)) { + if (DEBUG_LAYOUTS) { + $self->view->app->log->debug( + "Layout ${fragment_name} in ${\$l->[1]->name} from ${\$l->[1]->source_file}" + ); + } + push(@$render_deep, [ + -layout => $l->[1], $fragment_name, ($render_deep = []) + ]); } + } - return $render_stack[0]; - }; - - implements '_build_basic_layout_args' => as { - my ($self) = @_; - my $args; - foreach my $name (@{$self->fragment_names}, - @{$self->layout_set->layout_names}) { - $args->{$name} ||= sub { $self->render($name, @_); }; - } - return $args; - }; - - implements '_fragment_viewport' => as { - my ($self, $do_render, $args, $new_args) = @_; - my $vp = $args->{'_'}; - my ($widget, $merge_args) = $self->view->render_viewport_args($vp); - $merge_args->{outer} = { %$new_args }; - delete @{$new_args}{keys %$new_args}; # fresh start - @{$new_args}{keys %$merge_args} = values %$merge_args; - $do_render->(Widget, $widget, 'widget'); - }; - - implements '_fragment_widget' => as { - my ($self, $do_render, $args, $new_args) = @_; - my $merge = $self->basic_layout_args; + return $render_stack[0]; +}; +sub _build_basic_layout_args { + my ($self) = @_; + my $args; + foreach my $name (@{$self->fragment_names}, + @{$self->layout_set->layout_names}) { + $args->{$name} ||= sub { $self->render($name, @_); }; + } + return $args; +}; +sub _fragment_viewport { + my ($self, $do_render, $args, $new_args) = @_; + my $vp = $args->{'_'}; + my ($widget, $merge_args) = $self->view->render_viewport_args($vp); + $merge_args->{outer} = { %$new_args }; + delete @{$new_args}{keys %$new_args}; # fresh start + @{$new_args}{keys %$merge_args} = values %$merge_args; + $do_render->(Widget, $widget, 'widget'); +}; +sub _fragment_widget { + my ($self, $do_render, $args, $new_args) = @_; + my $merge = $self->basic_layout_args; #warn "Merge: ".join(', ', keys %$merge)." into: ".join(', ', keys %$new_args); - delete @{$merge}{keys %$new_args}; # nuke 'self' and 'viewport' - @{$new_args}{keys %$merge} = values %$merge; - }; - + delete @{$merge}{keys %$new_args}; # nuke 'self' and 'viewport' + @{$new_args}{keys %$merge} = values %$merge; }; +__PACKAGE__->meta->make_immutable; + + 1; =head1 NAME diff --git a/lib/Reaction/UI/Widget/Action.pm b/lib/Reaction/UI/Widget/Action.pm index fa62596..e773d92 100644 --- a/lib/Reaction/UI/Widget/Action.pm +++ b/lib/Reaction/UI/Widget/Action.pm @@ -2,38 +2,42 @@ package Reaction::UI::Widget::Action; use Reaction::UI::WidgetClass; -class Action is 'Reaction::UI::Widget::Object', which { - - after fragment widget { - arg 'method' => $_{viewport}->method; - }; - - implements fragment ok_button_fragment { - if (grep { $_ eq 'ok' } $_{viewport}->accept_events) { - arg 'event_id' => event_id 'ok'; - arg 'label' => $_{viewport}->ok_label; - render 'ok_button'; - } - }; - - implements fragment apply_button_fragment { - if (grep { $_ eq 'apply' } $_{viewport}->accept_events) { - arg 'event_id' => event_id 'apply'; - arg 'label' => $_{viewport}->apply_label; - render 'apply_button'; - } - }; - - implements fragment cancel_button_fragment { - if (grep { $_ eq 'close' } $_{viewport}->accept_events) { - arg 'event_id' => event_id 'close'; - arg 'label' => $_{viewport}->close_label; - render 'cancel_button'; - } - }; +use namespace::clean -except => [ qw(meta) ]; +extends 'Reaction::UI::Widget::Object'; + + +after fragment widget { + arg 'method' => $_{viewport}->method; +}; + +implements fragment ok_button_fragment { + if (grep { $_ eq 'ok' } $_{viewport}->accept_events) { + arg 'event_id' => event_id 'ok'; + arg 'label' => $_{viewport}->ok_label; + render 'ok_button'; + } +}; + +implements fragment apply_button_fragment { + if (grep { $_ eq 'apply' } $_{viewport}->accept_events) { + arg 'event_id' => event_id 'apply'; + arg 'label' => $_{viewport}->apply_label; + render 'apply_button'; + } +}; + +implements fragment cancel_button_fragment { + if (grep { $_ eq 'close' } $_{viewport}->accept_events) { + arg 'event_id' => event_id 'close'; + arg 'label' => $_{viewport}->close_label; + render 'cancel_button'; + } }; +__PACKAGE__->meta->make_immutable; + + 1; __END__; diff --git a/lib/Reaction/UI/Widget/Action/Link.pm b/lib/Reaction/UI/Widget/Action/Link.pm index 4c766b2..7530fea 100644 --- a/lib/Reaction/UI/Widget/Action/Link.pm +++ b/lib/Reaction/UI/Widget/Action/Link.pm @@ -3,15 +3,17 @@ package Reaction::UI::Widget::Action::Link; use Reaction::UI::WidgetClass; #I want to change this at some point. -class Link, which { +use namespace::clean -except => [ qw(meta) ]; - before fragment widget { - arg uri => $_{viewport}->uri; - arg label => $_{viewport}->label; - }; +before fragment widget { + arg uri => $_{viewport}->uri; + arg label => $_{viewport}->label; }; +__PACKAGE__->meta->make_immutable; + + 1; __END__; diff --git a/lib/Reaction/UI/Widget/Collection.pm b/lib/Reaction/UI/Widget/Collection.pm index f219525..e679740 100644 --- a/lib/Reaction/UI/Widget/Collection.pm +++ b/lib/Reaction/UI/Widget/Collection.pm @@ -2,18 +2,20 @@ package Reaction::UI::Widget::Collection; use Reaction::UI::WidgetClass; -class Collection, which { +use namespace::clean -except => [ qw(meta) ]; - implements fragment members { - render member => over $_{viewport}->members; - }; - implements fragment member { - render 'viewport'; - }; +implements fragment members { + render member => over $_{viewport}->members; +}; +implements fragment member { + render 'viewport'; }; +__PACKAGE__->meta->make_immutable; + + 1; __END__; diff --git a/lib/Reaction/UI/Widget/Collection/Grid.pm b/lib/Reaction/UI/Widget/Collection/Grid.pm index 5e05d96..2526a62 100644 --- a/lib/Reaction/UI/Widget/Collection/Grid.pm +++ b/lib/Reaction/UI/Widget/Collection/Grid.pm @@ -2,19 +2,23 @@ package Reaction::UI::Widget::Collection::Grid; use Reaction::UI::WidgetClass; -class Grid is 'Reaction::UI::Widget::Collection', which { +use namespace::clean -except => [ qw(meta) ]; +extends 'Reaction::UI::Widget::Collection'; - implements fragment header_cells { - arg 'labels' => $_{viewport}->field_labels; - render header_cell => over $_{viewport}->computed_field_order; - }; - implements fragment header_cell { - arg label => $_{labels}->{$_}; - }; +implements fragment header_cells { + arg 'labels' => $_{viewport}->field_labels; + render header_cell => over $_{viewport}->computed_field_order; }; +implements fragment header_cell { + arg label => $_{labels}->{$_}; +}; + +__PACKAGE__->meta->make_immutable; + + 1; __END__; diff --git a/lib/Reaction/UI/Widget/Collection/Grid/Member.pm b/lib/Reaction/UI/Widget/Collection/Grid/Member.pm index a2a1b0a..4274204 100644 --- a/lib/Reaction/UI/Widget/Collection/Grid/Member.pm +++ b/lib/Reaction/UI/Widget/Collection/Grid/Member.pm @@ -2,10 +2,14 @@ package Reaction::UI::Widget::Collection::Grid::Member; use Reaction::UI::WidgetClass; -class Member is 'Reaction::UI::Widget::Object', which { +use namespace::clean -except => [ qw(meta) ]; +extends 'Reaction::UI::Widget::Object'; -}; + + +__PACKAGE__->meta->make_immutable; + 1; diff --git a/lib/Reaction/UI/Widget/Collection/Grid/Member/WithActions.pm b/lib/Reaction/UI/Widget/Collection/Grid/Member/WithActions.pm index 0ed6727..59c27bb 100644 --- a/lib/Reaction/UI/Widget/Collection/Grid/Member/WithActions.pm +++ b/lib/Reaction/UI/Widget/Collection/Grid/Member/WithActions.pm @@ -2,16 +2,20 @@ package Reaction::UI::Widget::Collection::Grid::Member::WithActions; use Reaction::UI::WidgetClass; -class WithActions, is 'Reaction::UI::Widget::Collection::Grid::Member', which { +use namespace::clean -except => [ qw(meta) ]; +extends 'Reaction::UI::Widget::Collection::Grid::Member'; - implements fragment actions { - render action => over $_{viewport}->actions; - }; - implements fragment action { - render 'viewport'; - }; +implements fragment actions { + render action => over $_{viewport}->actions; }; +implements fragment action { + render 'viewport'; +}; + +__PACKAGE__->meta->make_immutable; + + 1; diff --git a/lib/Reaction/UI/Widget/Container.pm b/lib/Reaction/UI/Widget/Container.pm index 3b11afb..11ac72f 100644 --- a/lib/Reaction/UI/Widget/Container.pm +++ b/lib/Reaction/UI/Widget/Container.pm @@ -4,56 +4,58 @@ use Reaction::UI::WidgetClass; use aliased 'Reaction::UI::ViewPort'; -class Container which { - - our $child_name; - - # somewhat evil. fragment returns ($name, $code) to pass to implements - # or a method modifier name, so [1] will get us just the code - - # This is convenient to do here but DO NOT duplicate this code outside of - # the same dist as WidgetClass since it's internals-dependent. - - my $child_fragment_method - = (fragment container_child { - arg '_' => $_{viewport}->$child_name; - render 'viewport'; - })[1]; - - around _method_for_fragment_name => sub { - my $orig = shift; - my $self = shift; - my ($fragment_name) = @_; - if (defined($child_name) - && $fragment_name eq $child_name) { - return $self->$orig(@_) || $child_fragment_method; - } - return $self->$orig(@_); - }; - - before _fragment_widget => sub { - my ($self, $do_render, $args, $new_args) = @_; - my @contained_names = $self->_contained_names($args->{viewport}); - foreach my $name (@contained_names) { - $new_args->{$name} ||= sub { - local $child_name = $name; - $self->render($name, @_); - }; - } - }; - - implements _contained_names => sub { - my ($self, $vp) = @_; - my @names; - foreach my $attr ($vp->meta->compute_all_applicable_attributes) { - next unless eval { $attr->type_constraint->name->isa(ViewPort) }; - my $name = $attr->name; - next if ($name eq 'outer'); - push(@names, $name); - } - return @names; - }; +use namespace::clean -except => [ qw(meta) ]; + +our $child_name; + +# somewhat evil. fragment returns ($name, $code) to pass to implements +# or a method modifier name, so [1] will get us just the code + +# This is convenient to do here but DO NOT duplicate this code outside of +# the same dist as WidgetClass since it's internals-dependent. + +my $child_fragment_method + = (fragment container_child { + arg '_' => $_{viewport}->$child_name; + render 'viewport'; + })[1]; + +around _method_for_fragment_name => sub { + my $orig = shift; + my $self = shift; + my ($fragment_name) = @_; + if (defined($child_name) + && $fragment_name eq $child_name) { + return $self->$orig(@_) || $child_fragment_method; + } + return $self->$orig(@_); }; + +before _fragment_widget => sub { + my ($self, $do_render, $args, $new_args) = @_; + my @contained_names = $self->_contained_names($args->{viewport}); + foreach my $name (@contained_names) { + $new_args->{$name} ||= sub { + local $child_name = $name; + $self->render($name, @_); + }; + } +}; + +implements _contained_names => sub { + my ($self, $vp) = @_; + my @names; + foreach my $attr ($vp->meta->compute_all_applicable_attributes) { + next unless eval { $attr->type_constraint->name->isa(ViewPort) }; + my $name = $attr->name; + next if ($name eq 'outer'); + push(@names, $name); + } + return @names; +}; + +__PACKAGE__->meta->make_immutable; + 1; diff --git a/lib/Reaction/UI/Widget/Field.pm b/lib/Reaction/UI/Widget/Field.pm index a15f880..faf70a6 100644 --- a/lib/Reaction/UI/Widget/Field.pm +++ b/lib/Reaction/UI/Widget/Field.pm @@ -2,25 +2,27 @@ package Reaction::UI::Widget::Field; use Reaction::UI::WidgetClass; -class Field, which { - - before fragment widget { - if ($_{viewport}->can('value_string')) { - arg 'field_value' => $_{viewport}->value_string; - } else { - arg 'field_value' => ''; #$_{viewport}->value; - } - }; - - implements fragment label_fragment { - if (my $label = $_{viewport}->label) { - arg label => $label; - render 'label'; - } - }; +use namespace::clean -except => [ qw(meta) ]; + +before fragment widget { + if ($_{viewport}->can('value_string')) { + arg 'field_value' => $_{viewport}->value_string; + } else { + arg 'field_value' => ''; #$_{viewport}->value; + } +}; + +implements fragment label_fragment { + if (my $label = $_{viewport}->label) { + arg label => $label; + render 'label'; + } }; +__PACKAGE__->meta->make_immutable; + + 1; __END__; diff --git a/lib/Reaction/UI/Widget/Field/Array.pm b/lib/Reaction/UI/Widget/Field/Array.pm index cf318c9..d8d8c58 100644 --- a/lib/Reaction/UI/Widget/Field/Array.pm +++ b/lib/Reaction/UI/Widget/Field/Array.pm @@ -2,22 +2,24 @@ package Reaction::UI::Widget::Field::Array; use Reaction::UI::WidgetClass; -class Array, which { +use namespace::clean -except => [ qw(meta) ]; - before fragment widget { - arg 'label' => $_{viewport}->label; - }; - implements fragment list { - render 'item' => over $_{viewport}->value_names; - }; +before fragment widget { + arg 'label' => $_{viewport}->label; +}; - implements fragment item { - arg 'name' => $_; - }; +implements fragment list { + render 'item' => over $_{viewport}->value_names; +}; +implements fragment item { + arg 'name' => $_; }; +__PACKAGE__->meta->make_immutable; + + 1; __END__; diff --git a/lib/Reaction/UI/Widget/Field/Boolean.pm b/lib/Reaction/UI/Widget/Field/Boolean.pm index a205e9f..e53a724 100644 --- a/lib/Reaction/UI/Widget/Field/Boolean.pm +++ b/lib/Reaction/UI/Widget/Field/Boolean.pm @@ -2,9 +2,13 @@ package Reaction::UI::Widget::Field::Boolean; use Reaction::UI::WidgetClass; -class Boolean is 'Reaction::UI::Widget::Field', which { +use namespace::clean -except => [ qw(meta) ]; +extends 'Reaction::UI::Widget::Field'; + + + +__PACKAGE__->meta->make_immutable; -}; 1; diff --git a/lib/Reaction/UI/Widget/Field/Collection.pm b/lib/Reaction/UI/Widget/Field/Collection.pm index 7d01cbb..2cb6c78 100644 --- a/lib/Reaction/UI/Widget/Field/Collection.pm +++ b/lib/Reaction/UI/Widget/Field/Collection.pm @@ -2,22 +2,24 @@ package Reaction::UI::Widget::Field::Collection; use Reaction::UI::WidgetClass; -class Collection, which { +use namespace::clean -except => [ qw(meta) ]; - before fragment widget { - arg 'label' => $_{viewport}->label; - }; - implements fragment list { - render 'item' => over $_{viewport}->value_names; - }; +before fragment widget { + arg 'label' => $_{viewport}->label; +}; - implements fragment item { - arg 'name' => $_; - }; +implements fragment list { + render 'item' => over $_{viewport}->value_names; +}; +implements fragment item { + arg 'name' => $_; }; +__PACKAGE__->meta->make_immutable; + + 1; __END__; diff --git a/lib/Reaction/UI/Widget/Field/DateTime.pm b/lib/Reaction/UI/Widget/Field/DateTime.pm index 0ada1a4..c449e50 100644 --- a/lib/Reaction/UI/Widget/Field/DateTime.pm +++ b/lib/Reaction/UI/Widget/Field/DateTime.pm @@ -2,9 +2,13 @@ package Reaction::UI::Widget::Field::DateTime; use Reaction::UI::WidgetClass; -class DateTime is 'Reaction::UI::Widget::Field', which { +use namespace::clean -except => [ qw(meta) ]; +extends 'Reaction::UI::Widget::Field'; + + + +__PACKAGE__->meta->make_immutable; -}; 1; diff --git a/lib/Reaction/UI/Widget/Field/Image.pm b/lib/Reaction/UI/Widget/Field/Image.pm index 1759d98..839545e 100644 --- a/lib/Reaction/UI/Widget/Field/Image.pm +++ b/lib/Reaction/UI/Widget/Field/Image.pm @@ -2,17 +2,21 @@ package Reaction::UI::Widget::Field::Image; use Reaction::UI::WidgetClass; -class Image is 'Reaction::UI::Widget::Field', which { - - implements fragment image { - if($_{viewport}->value_string) { - arg uri => $_{viewport}->uri; - render 'has_image'; - } else { - render 'no_image'; - } - }; +use namespace::clean -except => [ qw(meta) ]; +extends 'Reaction::UI::Widget::Field'; + + +implements fragment image { + if($_{viewport}->value_string) { + arg uri => $_{viewport}->uri; + render 'has_image'; + } else { + render 'no_image'; + } }; +__PACKAGE__->meta->make_immutable; + + 1; diff --git a/lib/Reaction/UI/Widget/Field/Integer.pm b/lib/Reaction/UI/Widget/Field/Integer.pm index 5b5e724..671227d 100644 --- a/lib/Reaction/UI/Widget/Field/Integer.pm +++ b/lib/Reaction/UI/Widget/Field/Integer.pm @@ -2,9 +2,13 @@ package Reaction::UI::Widget::Field::Integer; use Reaction::UI::WidgetClass; -class Integer is 'Reaction::UI::Widget::Field', which { +use namespace::clean -except => [ qw(meta) ]; +extends 'Reaction::UI::Widget::Field'; + + + +__PACKAGE__->meta->make_immutable; -}; 1; diff --git a/lib/Reaction/UI/Widget/Field/Mutable.pm b/lib/Reaction/UI/Widget/Field/Mutable.pm index 6e6674c..2f9c9da 100644 --- a/lib/Reaction/UI/Widget/Field/Mutable.pm +++ b/lib/Reaction/UI/Widget/Field/Mutable.pm @@ -2,40 +2,44 @@ package Reaction::UI::Widget::Field::Mutable; use Reaction::UI::WidgetClass; -class Mutable is 'Reaction::UI::Widget::Field', which { - - before fragment widget { - arg 'field_id' => event_id 'value_string'; - arg 'field_name' => event_id 'value_string' unless defined $_{field_name}; - arg 'field_type' => 'text'; - arg 'field_class' => "action-field " . $_{viewport}->name; - - # these two are to fire force_events in viewports - # where you can end up without an event for e.g. - # HTML checkbox fields - - arg 'exists_event' => event_id 'exists'; - arg 'exists_value' => 1; - }; - - implements fragment message_fragment { - if (my $message = $_{viewport}->message) { - arg message => $message; - render 'message'; - } - }; - - implements fragment field_is_required { - my $model = $_{viewport}->model; - my $attr = $_{viewport}->attribute; - if ( $model->attribute_is_required($attr) ) { - render 'field_is_required_yes'; - } else { - render 'field_is_required_no'; - } - }; - -}; +use namespace::clean -except => [ qw(meta) ]; +extends 'Reaction::UI::Widget::Field'; + + + + before fragment widget { + arg 'field_id' => event_id 'value_string'; + arg 'field_name' => event_id 'value_string' unless defined $_{field_name}; + arg 'field_type' => 'text'; + arg 'field_class' => "action-field " . $_{viewport}->name; + + # these two are to fire force_events in viewports + # where you can end up without an event for e.g. + # HTML checkbox fields + + arg 'exists_event' => event_id 'exists'; + arg 'exists_value' => 1; + }; + + implements fragment message_fragment { + if (my $message = $_{viewport}->message) { + arg message => $message; + render 'message'; + } + }; + + implements fragment field_is_required { + my $model = $_{viewport}->model; + my $attr = $_{viewport}->attribute; + if ( $model->attribute_is_required($attr) ) { + render 'field_is_required_yes'; + } else { + render 'field_is_required_no'; + } + }; + +__PACKAGE__->meta->make_immutable; + 1; diff --git a/lib/Reaction/UI/Widget/Field/Mutable/Boolean.pm b/lib/Reaction/UI/Widget/Field/Mutable/Boolean.pm index b94eaa0..97c1803 100644 --- a/lib/Reaction/UI/Widget/Field/Mutable/Boolean.pm +++ b/lib/Reaction/UI/Widget/Field/Mutable/Boolean.pm @@ -2,22 +2,26 @@ package Reaction::UI::Widget::Field::Mutable::Boolean; use Reaction::UI::WidgetClass; -class Boolean is 'Reaction::UI::Widget::Field::Mutable', which { - - after fragment widget { - arg 'field_type' => 'checkbox'; - }; - - implements fragment is_checked { - if ($_{viewport}->value_string) { - render 'is_checked_yes'; - } else { - render 'is_checked_no'; - } - }; +use namespace::clean -except => [ qw(meta) ]; +extends 'Reaction::UI::Widget::Field::Mutable'; + + +after fragment widget { + arg 'field_type' => 'checkbox'; +}; + +implements fragment is_checked { + if ($_{viewport}->value_string) { + render 'is_checked_yes'; + } else { + render 'is_checked_no'; + } }; +__PACKAGE__->meta->make_immutable; + + 1; __END__; diff --git a/lib/Reaction/UI/Widget/Field/Mutable/ChooseMany.pm b/lib/Reaction/UI/Widget/Field/Mutable/ChooseMany.pm index 4078bdc..bb80615 100644 --- a/lib/Reaction/UI/Widget/Field/Mutable/ChooseMany.pm +++ b/lib/Reaction/UI/Widget/Field/Mutable/ChooseMany.pm @@ -2,49 +2,53 @@ package Reaction::UI::Widget::Field::Mutable::ChooseMany; use Reaction::UI::WidgetClass; -class ChooseMany is 'Reaction::UI::Widget::Field::Mutable', which { - - implements fragment action_buttons { - foreach my $event ( - qw(add_all_values do_add_values do_remove_values remove_all_values) - ) { - arg "event_id_${event}" => event_id $event; - } - }; - - implements fragment current_values { - my $current_choices = $_{viewport}->current_value_choices; - if( @$current_choices ){ - arg field_name => event_id 'value'; - render hidden_value => over $current_choices; - } else { - arg field_name => event_id 'no_current_value'; - arg '_' => {value => 1}; - render 'hidden_value'; - } - }; - - implements fragment selected_values { - arg event_id_remove_values => event_id 'remove_values'; - render value_option => over $_{viewport}->current_value_choices; - }; - - implements fragment available_values { - arg event_id_add_values => event_id 'add_values'; - render value_option => over $_{viewport}->available_value_choices; - }; - - implements fragment value_option { - arg option_name => $_->{name}; - arg option_value => $_->{value}; - }; - - implements fragment hidden_value { - arg hidden_value => $_->{value}; - }; +use namespace::clean -except => [ qw(meta) ]; +extends 'Reaction::UI::Widget::Field::Mutable'; + + +implements fragment action_buttons { + foreach my $event ( + qw(add_all_values do_add_values do_remove_values remove_all_values) + ) { + arg "event_id_${event}" => event_id $event; + } +}; + +implements fragment current_values { + my $current_choices = $_{viewport}->current_value_choices; + if( @$current_choices ){ + arg field_name => event_id 'value'; + render hidden_value => over $current_choices; + } else { + arg field_name => event_id 'no_current_value'; + arg '_' => {value => 1}; + render 'hidden_value'; + } +}; + +implements fragment selected_values { + arg event_id_remove_values => event_id 'remove_values'; + render value_option => over $_{viewport}->current_value_choices; +}; + +implements fragment available_values { + arg event_id_add_values => event_id 'add_values'; + render value_option => over $_{viewport}->available_value_choices; +}; + +implements fragment value_option { + arg option_name => $_->{name}; + arg option_value => $_->{value}; }; +implements fragment hidden_value { + arg hidden_value => $_->{value}; +}; + +__PACKAGE__->meta->make_immutable; + + 1; __END__; diff --git a/lib/Reaction/UI/Widget/Field/Mutable/ChooseOne.pm b/lib/Reaction/UI/Widget/Field/Mutable/ChooseOne.pm index b0ab7b3..98b9b7d 100644 --- a/lib/Reaction/UI/Widget/Field/Mutable/ChooseOne.pm +++ b/lib/Reaction/UI/Widget/Field/Mutable/ChooseOne.pm @@ -2,35 +2,39 @@ package Reaction::UI::Widget::Field::Mutable::ChooseOne; use Reaction::UI::WidgetClass; -class ChooseOne is 'Reaction::UI::Widget::Field::Mutable', which { - - implements fragment option_is_required { - if ($_{viewport}->value_is_required) { - render 'option_is_required_yes'; - } else { - render 'option_is_required_no'; - } - }; - - implements fragment option_list { - render option => over $_{viewport}->value_choices; - }; - - implements fragment option { - arg option_name => $_->{name}; - arg option_value => $_->{value}; - }; - - implements fragment option_is_selected { - if ($_{viewport}->is_current_value($_->{value})) { - render 'option_is_selected_yes'; - } else { - render 'option_is_selected_no'; - } - }; +use namespace::clean -except => [ qw(meta) ]; +extends 'Reaction::UI::Widget::Field::Mutable'; + + +implements fragment option_is_required { + if ($_{viewport}->value_is_required) { + render 'option_is_required_yes'; + } else { + render 'option_is_required_no'; + } +}; + +implements fragment option_list { + render option => over $_{viewport}->value_choices; +}; + +implements fragment option { + arg option_name => $_->{name}; + arg option_value => $_->{value}; +}; + +implements fragment option_is_selected { + if ($_{viewport}->is_current_value($_->{value})) { + render 'option_is_selected_yes'; + } else { + render 'option_is_selected_no'; + } }; +__PACKAGE__->meta->make_immutable; + + 1; __END__; diff --git a/lib/Reaction/UI/Widget/Field/Mutable/DateTime.pm b/lib/Reaction/UI/Widget/Field/Mutable/DateTime.pm index f4a28e8..ab626fa 100644 --- a/lib/Reaction/UI/Widget/Field/Mutable/DateTime.pm +++ b/lib/Reaction/UI/Widget/Field/Mutable/DateTime.pm @@ -2,13 +2,17 @@ package Reaction::UI::Widget::Field::Mutable::DateTime; use Reaction::UI::WidgetClass; -class DateTime is 'Reaction::UI::Widget::Field::Mutable', which { +use namespace::clean -except => [ qw(meta) ]; +extends 'Reaction::UI::Widget::Field::Mutable'; - after fragment widget { - arg 'field_name' => event_id 'value_string'; - }; -}; + +after fragment widget { + arg 'field_name' => event_id 'value_string'; + }; + +__PACKAGE__->meta->make_immutable; + 1; diff --git a/lib/Reaction/UI/Widget/Field/Mutable/File.pm b/lib/Reaction/UI/Widget/Field/Mutable/File.pm index 42c1137..b8d399f 100644 --- a/lib/Reaction/UI/Widget/Field/Mutable/File.pm +++ b/lib/Reaction/UI/Widget/Field/Mutable/File.pm @@ -2,14 +2,18 @@ package Reaction::UI::Widget::Field::Mutable::File; use Reaction::UI::WidgetClass; -class File is 'Reaction::UI::Widget::Field::Mutable', which { +use namespace::clean -except => [ qw(meta) ]; +extends 'Reaction::UI::Widget::Field::Mutable'; - after fragment widget { - arg field_type => 'file'; - }; + +after fragment widget { + arg field_type => 'file'; }; +__PACKAGE__->meta->make_immutable; + + 1; __END__; diff --git a/lib/Reaction/UI/Widget/Field/Mutable/HiddenArray.pm b/lib/Reaction/UI/Widget/Field/Mutable/HiddenArray.pm index 82d2965..0cecc5e 100644 --- a/lib/Reaction/UI/Widget/Field/Mutable/HiddenArray.pm +++ b/lib/Reaction/UI/Widget/Field/Mutable/HiddenArray.pm @@ -3,18 +3,22 @@ package Reaction::UI::Widget::Field::Mutable::HiddenArray; use Reaction::UI::WidgetClass; #move this to a normal list and let the hidden part be decided by the template.. -class HiddenArray is 'Reaction::UI::Widget::Field::Mutable', which { +use namespace::clean -except => [ qw(meta) ]; +extends 'Reaction::UI::Widget::Field::Mutable'; - implements fragment hidden_list { - render hidden_field => over $_{viewport}->value; - }; - implements fragment hidden_field { - arg field_value => $_; - }; +implements fragment hidden_list { + render hidden_field => over $_{viewport}->value; }; +implements fragment hidden_field { + arg field_value => $_; +}; + +__PACKAGE__->meta->make_immutable; + + 1; __END__; diff --git a/lib/Reaction/UI/Widget/Field/Mutable/Integer.pm b/lib/Reaction/UI/Widget/Field/Mutable/Integer.pm index 677082d..5125eab 100644 --- a/lib/Reaction/UI/Widget/Field/Mutable/Integer.pm +++ b/lib/Reaction/UI/Widget/Field/Mutable/Integer.pm @@ -2,9 +2,13 @@ package Reaction::UI::Widget::Field::Mutable::Integer; use Reaction::UI::WidgetClass; -class Integer is 'Reaction::UI::Widget::Field::Mutable', which { +use namespace::clean -except => [ qw(meta) ]; +extends 'Reaction::UI::Widget::Field::Mutable'; + + + +__PACKAGE__->meta->make_immutable; -}; 1; diff --git a/lib/Reaction/UI/Widget/Field/Mutable/MatchingPasswords.pm b/lib/Reaction/UI/Widget/Field/Mutable/MatchingPasswords.pm index 02ec220..2812f89 100644 --- a/lib/Reaction/UI/Widget/Field/Mutable/MatchingPasswords.pm +++ b/lib/Reaction/UI/Widget/Field/Mutable/MatchingPasswords.pm @@ -3,23 +3,27 @@ package Reaction::UI::Widget::Field::Mutable::MatchingPasswords; use Reaction::UI::WidgetClass; use aliased 'Reaction::UI::Widget::Field::Mutable::Password'; -class MatchingPasswords is Password, which { +use namespace::clean -except => [ qw(meta) ]; +extends Password; - implements fragment check_field { - arg 'field_id' => event_id 'check_value'; - arg 'field_name' => event_id 'check_value'; - arg 'label' => 'Confirm:'; - render 'field'; #piggyback! - }; - implements fragment check_label { - if (my $label = $_{viewport}->check_label) { - arg label => $label; - render 'label'; - } - }; +implements fragment check_field { + arg 'field_id' => event_id 'check_value'; + arg 'field_name' => event_id 'check_value'; + arg 'label' => 'Confirm:'; + render 'field'; #piggyback! +}; +implements fragment check_label { + if (my $label = $_{viewport}->check_label) { + arg label => $label; + render 'label'; + } }; + +__PACKAGE__->meta->make_immutable; + + 1; diff --git a/lib/Reaction/UI/Widget/Field/Mutable/Number.pm b/lib/Reaction/UI/Widget/Field/Mutable/Number.pm index d73079c..2ee3f46 100644 --- a/lib/Reaction/UI/Widget/Field/Mutable/Number.pm +++ b/lib/Reaction/UI/Widget/Field/Mutable/Number.pm @@ -2,9 +2,13 @@ package Reaction::UI::Widget::Field::Mutable::Number; use Reaction::UI::WidgetClass; -class Number is 'Reaction::UI::Widget::Field::Mutable', which { +use namespace::clean -except => [ qw(meta) ]; +extends 'Reaction::UI::Widget::Field::Mutable'; + + + +__PACKAGE__->meta->make_immutable; -}; 1; diff --git a/lib/Reaction/UI/Widget/Field/Mutable/Password.pm b/lib/Reaction/UI/Widget/Field/Mutable/Password.pm index 890770e..e83b564 100644 --- a/lib/Reaction/UI/Widget/Field/Mutable/Password.pm +++ b/lib/Reaction/UI/Widget/Field/Mutable/Password.pm @@ -2,16 +2,20 @@ package Reaction::UI::Widget::Field::Mutable::Password; use Reaction::UI::WidgetClass; -class Password is 'Reaction::UI::Widget::Field::Mutable', which { +use namespace::clean -except => [ qw(meta) ]; +extends 'Reaction::UI::Widget::Field::Mutable'; - around fragment widget { - call_next; - arg field_type => 'password'; - arg field_value => ''; # no sending password to user. really. - }; + +around fragment widget { + call_next; + arg field_type => 'password'; + arg field_value => ''; # no sending password to user. really. }; +__PACKAGE__->meta->make_immutable; + + 1; __END__; diff --git a/lib/Reaction/UI/Widget/Field/Mutable/String.pm b/lib/Reaction/UI/Widget/Field/Mutable/String.pm index 7405c4a..f93a087 100644 --- a/lib/Reaction/UI/Widget/Field/Mutable/String.pm +++ b/lib/Reaction/UI/Widget/Field/Mutable/String.pm @@ -2,9 +2,13 @@ package Reaction::UI::Widget::Field::Mutable::String; use Reaction::UI::WidgetClass; -class String is 'Reaction::UI::Widget::Field::Mutable', which { +use namespace::clean -except => [ qw(meta) ]; +extends 'Reaction::UI::Widget::Field::Mutable'; + + + +__PACKAGE__->meta->make_immutable; -}; 1; diff --git a/lib/Reaction/UI/Widget/Field/Mutable/Text.pm b/lib/Reaction/UI/Widget/Field/Mutable/Text.pm index 2cb7134..d902f18 100644 --- a/lib/Reaction/UI/Widget/Field/Mutable/Text.pm +++ b/lib/Reaction/UI/Widget/Field/Mutable/Text.pm @@ -2,9 +2,13 @@ package Reaction::UI::Widget::Field::Mutable::Text; use Reaction::UI::WidgetClass; -class Text is 'Reaction::UI::Widget::Field::Mutable', which { +use namespace::clean -except => [ qw(meta) ]; +extends 'Reaction::UI::Widget::Field::Mutable'; + + + +__PACKAGE__->meta->make_immutable; -}; 1; diff --git a/lib/Reaction/UI/Widget/Field/Mutable/TimeRange.pm b/lib/Reaction/UI/Widget/Field/Mutable/TimeRange.pm index 0cdb4aa..aad4895 100644 --- a/lib/Reaction/UI/Widget/Field/Mutable/TimeRange.pm +++ b/lib/Reaction/UI/Widget/Field/Mutable/TimeRange.pm @@ -2,9 +2,13 @@ package Reaction::UI::Widget::Field::Mutable::TimeRange; use Reaction::UI::WidgetClass; -class TimeRange is 'Reaction::UI::Widget::Field::Mutable', which { +use namespace::clean -except => [ qw(meta) ]; +extends 'Reaction::UI::Widget::Field::Mutable'; + + + +__PACKAGE__->meta->make_immutable; -}; 1; diff --git a/lib/Reaction/UI/Widget/Field/Number.pm b/lib/Reaction/UI/Widget/Field/Number.pm index 0691768..a986afd 100644 --- a/lib/Reaction/UI/Widget/Field/Number.pm +++ b/lib/Reaction/UI/Widget/Field/Number.pm @@ -2,9 +2,13 @@ package Reaction::UI::Widget::Field::Number; use Reaction::UI::WidgetClass; -class Number is 'Reaction::UI::Widget::Field', which { +use namespace::clean -except => [ qw(meta) ]; +extends 'Reaction::UI::Widget::Field'; + + + +__PACKAGE__->meta->make_immutable; -}; 1; diff --git a/lib/Reaction/UI/Widget/Field/RelatedObject.pm b/lib/Reaction/UI/Widget/Field/RelatedObject.pm index 010e7c0..0fd0938 100644 --- a/lib/Reaction/UI/Widget/Field/RelatedObject.pm +++ b/lib/Reaction/UI/Widget/Field/RelatedObject.pm @@ -2,9 +2,13 @@ package Reaction::UI::Widget::Field::RelatedObject; use Reaction::UI::WidgetClass; -class RelatedObject is 'Reaction::UI::Widget::Field', which { +use namespace::clean -except => [ qw(meta) ]; +extends 'Reaction::UI::Widget::Field'; + + + +__PACKAGE__->meta->make_immutable; -}; 1; diff --git a/lib/Reaction/UI/Widget/Field/String.pm b/lib/Reaction/UI/Widget/Field/String.pm index 023c082..3a4a4ae 100644 --- a/lib/Reaction/UI/Widget/Field/String.pm +++ b/lib/Reaction/UI/Widget/Field/String.pm @@ -2,9 +2,13 @@ package Reaction::UI::Widget::Field::String; use Reaction::UI::WidgetClass; -class String is 'Reaction::UI::Widget::Field', which { +use namespace::clean -except => [ qw(meta) ]; +extends 'Reaction::UI::Widget::Field'; + + + +__PACKAGE__->meta->make_immutable; -}; 1; diff --git a/lib/Reaction/UI/Widget/Field/Text.pm b/lib/Reaction/UI/Widget/Field/Text.pm index 9d5e603..293c6da 100644 --- a/lib/Reaction/UI/Widget/Field/Text.pm +++ b/lib/Reaction/UI/Widget/Field/Text.pm @@ -2,9 +2,13 @@ package Reaction::UI::Widget::Field::Text; use Reaction::UI::WidgetClass; -class Text is 'Reaction::UI::Widget::Field', which { +use namespace::clean -except => [ qw(meta) ]; +extends 'Reaction::UI::Widget::Field'; + + + +__PACKAGE__->meta->make_immutable; -}; 1; diff --git a/lib/Reaction/UI/Widget/ListView.pm b/lib/Reaction/UI/Widget/ListView.pm index ab041e6..9c0e7d1 100644 --- a/lib/Reaction/UI/Widget/ListView.pm +++ b/lib/Reaction/UI/Widget/ListView.pm @@ -2,95 +2,99 @@ package Reaction::UI::Widget::ListView; use Reaction::UI::WidgetClass; -class ListView is 'Reaction::UI::Widget::Collection::Grid', which { +use namespace::clean -except => [ qw(meta) ]; +extends 'Reaction::UI::Widget::Collection::Grid'; - after fragment widget { - arg pager_obj => $_{viewport}->pager; - }; - implements fragment pager_fragment { - my $pager = $_{pager_obj}; - if( $pager->last_page > $pager->first_page ) { - render 'pager'; - } - }; - implements fragment actions { - render action => over $_{viewport}->actions; - }; +after fragment widget { + arg pager_obj => $_{viewport}->pager; +}; - implements fragment action { - render 'viewport'; - }; +implements fragment pager_fragment { + my $pager = $_{pager_obj}; + if( $pager->last_page > $pager->first_page ) { + render 'pager'; + } +}; - after fragment header_cells { - if ($_{viewport}->object_action_count) { - render 'header_action_cell'; - } - }; +implements fragment actions { + render action => over $_{viewport}->actions; +}; - around fragment header_cell { - arg order_uri => event_uri { - order_by => $_, - order_by_desc => ((($_{viewport}->order_by||'') ne $_ - || $_{viewport}->order_by_desc) ? 0 : 1) - }; - call_next; - }; +implements fragment action { + render 'viewport'; +}; - implements fragment header_action_cell { - arg col_count => $_{viewport}->object_action_count; - }; +after fragment header_cells { + if ($_{viewport}->object_action_count) { + render 'header_action_cell'; + } +}; - implements fragment page_list { - render numbered_page_fragment - => over [ $_{pager_obj}->first_page .. $_{pager_obj}->last_page ]; +around fragment header_cell { + arg order_uri => event_uri { + order_by => $_, + order_by_desc => ((($_{viewport}->order_by||'') ne $_ + || $_{viewport}->order_by_desc) ? 0 : 1) }; + call_next; +}; - implements fragment numbered_page_fragment { - arg page_uri => event_uri { page => $_ }; - arg page_number => $_; - if ($_{pager_obj}->current_page == $_) { - render 'numbered_page_this_page'; - } else { - render 'numbered_page'; - } - }; +implements fragment header_action_cell { + arg col_count => $_{viewport}->object_action_count; +}; - implements fragment first_page { - arg page_uri => event_uri { page => $_{pager_obj}->first_page }; - arg page_name => 'First'; - render 'named_page'; - }; +implements fragment page_list { + render numbered_page_fragment + => over [ $_{pager_obj}->first_page .. $_{pager_obj}->last_page ]; +}; - implements fragment last_page { - arg page_uri => event_uri { page => $_{pager_obj}->last_page }; - arg page_name => 'Last'; - render 'named_page'; - }; +implements fragment numbered_page_fragment { + arg page_uri => event_uri { page => $_ }; + arg page_number => $_; + if ($_{pager_obj}->current_page == $_) { + render 'numbered_page_this_page'; + } else { + render 'numbered_page'; + } +}; - implements fragment next_page { - arg page_name => 'Next'; - if (my $page = $_{pager_obj}->next_page) { - arg page_uri => event_uri { page => $page }; - render 'named_page'; - } else { - render 'named_page_no_page'; - } - }; +implements fragment first_page { + arg page_uri => event_uri { page => $_{pager_obj}->first_page }; + arg page_name => 'First'; + render 'named_page'; +}; - implements fragment previous_page { - arg page_name => 'Previous'; - if (my $page = $_{pager_obj}->previous_page) { - arg page_uri => event_uri { page => $page }; - render 'named_page'; - } else { - render 'named_page_no_page'; - } - }; +implements fragment last_page { + arg page_uri => event_uri { page => $_{pager_obj}->last_page }; + arg page_name => 'Last'; + render 'named_page'; +}; +implements fragment next_page { + arg page_name => 'Next'; + if (my $page = $_{pager_obj}->next_page) { + arg page_uri => event_uri { page => $page }; + render 'named_page'; + } else { + render 'named_page_no_page'; + } }; +implements fragment previous_page { + arg page_name => 'Previous'; + if (my $page = $_{pager_obj}->previous_page) { + arg page_uri => event_uri { page => $page }; + render 'named_page'; + } else { + render 'named_page_no_page'; + } +}; + +__PACKAGE__->meta->make_immutable; + + 1; __END__; diff --git a/lib/Reaction/UI/Widget/Object.pm b/lib/Reaction/UI/Widget/Object.pm index 1ec86a3..dc898cc 100644 --- a/lib/Reaction/UI/Widget/Object.pm +++ b/lib/Reaction/UI/Widget/Object.pm @@ -2,18 +2,20 @@ package Reaction::UI::Widget::Object; use Reaction::UI::WidgetClass; -class Object, which { +use namespace::clean -except => [ qw(meta) ]; - implements fragment field_list { - render field => over $_{viewport}->fields; - }; - implements fragment field { - render 'viewport'; - }; +implements fragment field_list { + render field => over $_{viewport}->fields; +}; +implements fragment field { + render 'viewport'; }; +__PACKAGE__->meta->make_immutable; + + 1; __END__; diff --git a/lib/Reaction/UI/Widget/SiteLayout.pm b/lib/Reaction/UI/Widget/SiteLayout.pm index fce46e2..89f91ed 100644 --- a/lib/Reaction/UI/Widget/SiteLayout.pm +++ b/lib/Reaction/UI/Widget/SiteLayout.pm @@ -4,37 +4,41 @@ use Reaction::UI::WidgetClass; use aliased 'Reaction::UI::Widget::Container'; use MooseX::Types::Moose 'HashRef'; -class SiteLayout is Container, which { - - has 'http_header' => ( - isa => HashRef, is => 'rw', - default => sub { {} } - ); - - after fragment widget { - arg static_base => $_{viewport}->static_base_uri; - arg title => $_{viewport}->title; - }; - - implements fragment meta_info { - my $self = shift; - if ( $_{viewport}->meta_info->{'http_header'} ) { - $self->http_header( delete $_{viewport}->meta_info->{'http_header'} ); - render 'meta_http_header' => over [keys %{$self->http_header}]; - } - render 'meta_member' => over [keys %{$_{viewport}->meta_info}]; - }; - - implements fragment meta_http_header { - arg 'meta_name' => $_; - arg 'meta_value' => shift->http_header->{$_}; - }; - - implements fragment meta_member { - arg 'meta_name' => $_; - arg 'meta_value' => $_{viewport}->meta_info->{$_}; - }; +use namespace::clean -except => [ qw(meta) ]; +extends Container; + + +has 'http_header' => ( + isa => HashRef, is => 'rw', + default => sub { {} } +); + +after fragment widget { + arg static_base => $_{viewport}->static_base_uri; + arg title => $_{viewport}->title; }; +implements fragment meta_info { + my $self = shift; + if ( $_{viewport}->meta_info->{'http_header'} ) { + $self->http_header( delete $_{viewport}->meta_info->{'http_header'} ); + render 'meta_http_header' => over [keys %{$self->http_header}]; + } + render 'meta_member' => over [keys %{$_{viewport}->meta_info}]; +}; + +implements fragment meta_http_header { + arg 'meta_name' => $_; + arg 'meta_value' => shift->http_header->{$_}; +}; + +implements fragment meta_member { + arg 'meta_name' => $_; + arg 'meta_value' => $_{viewport}->meta_info->{$_}; +}; + +__PACKAGE__->meta->make_immutable; + + 1; diff --git a/lib/Reaction/UI/Widget/Value.pm b/lib/Reaction/UI/Widget/Value.pm index b2498dd..1ab37be 100644 --- a/lib/Reaction/UI/Widget/Value.pm +++ b/lib/Reaction/UI/Widget/Value.pm @@ -2,18 +2,20 @@ package Reaction::UI::Widget::Value; use Reaction::UI::WidgetClass; -class Value, which { +use namespace::clean -except => [ qw(meta) ]; - before fragment widget { - if ($_{viewport}->can('value_string')) { - arg value => $_{viewport}->value_string; - } elsif($_{viewport}->can('value')) { - arg value => $_{viewport}->value; - } - }; +before fragment widget { + if ($_{viewport}->can('value_string')) { + arg value => $_{viewport}->value_string; + } elsif($_{viewport}->can('value')) { + arg value => $_{viewport}->value; + } }; +__PACKAGE__->meta->make_immutable; + + 1; __END__; diff --git a/lib/Reaction/UI/Widget/Value/Boolean.pm b/lib/Reaction/UI/Widget/Value/Boolean.pm index 392f79d..df1066c 100644 --- a/lib/Reaction/UI/Widget/Value/Boolean.pm +++ b/lib/Reaction/UI/Widget/Value/Boolean.pm @@ -2,9 +2,13 @@ package Reaction::UI::Widget::Value::Boolean; use Reaction::UI::WidgetClass; -class Boolean is 'Reaction::UI::Widget::Value', which { +use namespace::clean -except => [ qw(meta) ]; +extends 'Reaction::UI::Widget::Value'; + + + +__PACKAGE__->meta->make_immutable; -}; 1; diff --git a/lib/Reaction/UI/Widget/Value/Collection.pm b/lib/Reaction/UI/Widget/Value/Collection.pm index d081216..208fa7f 100644 --- a/lib/Reaction/UI/Widget/Value/Collection.pm +++ b/lib/Reaction/UI/Widget/Value/Collection.pm @@ -2,22 +2,24 @@ package Reaction::UI::Widget::Value::Collection; use Reaction::UI::WidgetClass; -class Collection, which { +use namespace::clean -except => [ qw(meta) ]; - before fragment widget { - arg 'label' => $_{viewport}->label; - }; - implements fragment list { - render 'item' => over $_{viewport}->value_names; - }; +before fragment widget { + arg 'label' => $_{viewport}->label; +}; - implements fragment item { - arg 'name' => $_; - }; +implements fragment list { + render 'item' => over $_{viewport}->value_names; +}; +implements fragment item { + arg 'name' => $_; }; +__PACKAGE__->meta->make_immutable; + + 1; __END__; diff --git a/lib/Reaction/UI/Widget/Value/DateTime.pm b/lib/Reaction/UI/Widget/Value/DateTime.pm index b598c71..15afbbb 100644 --- a/lib/Reaction/UI/Widget/Value/DateTime.pm +++ b/lib/Reaction/UI/Widget/Value/DateTime.pm @@ -2,9 +2,13 @@ package Reaction::UI::Widget::Value::DateTime; use Reaction::UI::WidgetClass; -class DateTime is 'Reaction::UI::Widget::Value', which { +use namespace::clean -except => [ qw(meta) ]; +extends 'Reaction::UI::Widget::Value'; + + + +__PACKAGE__->meta->make_immutable; -}; 1; diff --git a/lib/Reaction/UI/Widget/Value/Image.pm b/lib/Reaction/UI/Widget/Value/Image.pm index a958a4f..c072255 100644 --- a/lib/Reaction/UI/Widget/Value/Image.pm +++ b/lib/Reaction/UI/Widget/Value/Image.pm @@ -2,17 +2,19 @@ package Reaction::UI::Widget::Value::Image; use Reaction::UI::WidgetClass; -class Image, which { +use namespace::clean -except => [ qw(meta) ]; - implements fragment image { - if($_{viewport}->value_string) { - arg uri => $_{viewport}->uri; - render 'has_image'; - } else { - render 'no_image'; - } - }; +implements fragment image { + if($_{viewport}->value_string) { + arg uri => $_{viewport}->uri; + render 'has_image'; + } else { + render 'no_image'; + } }; +__PACKAGE__->meta->make_immutable; + + 1; diff --git a/lib/Reaction/UI/Widget/Value/Number.pm b/lib/Reaction/UI/Widget/Value/Number.pm index 4d895e1..ce4586d 100644 --- a/lib/Reaction/UI/Widget/Value/Number.pm +++ b/lib/Reaction/UI/Widget/Value/Number.pm @@ -2,9 +2,13 @@ package Reaction::UI::Widget::Value::Number; use Reaction::UI::WidgetClass; -class Number is 'Reaction::UI::Widget::Value', which { +use namespace::clean -except => [ qw(meta) ]; +extends 'Reaction::UI::Widget::Value'; + + + +__PACKAGE__->meta->make_immutable; -}; 1; diff --git a/lib/Reaction/UI/Widget/Value/RelatedObject.pm b/lib/Reaction/UI/Widget/Value/RelatedObject.pm index b7fbd6f..a7558ca 100644 --- a/lib/Reaction/UI/Widget/Value/RelatedObject.pm +++ b/lib/Reaction/UI/Widget/Value/RelatedObject.pm @@ -2,9 +2,13 @@ package Reaction::UI::Widget::Value::RelatedObject; use Reaction::UI::WidgetClass; -class RelatedObject is 'Reaction::UI::Widget::Value', which { +use namespace::clean -except => [ qw(meta) ]; +extends 'Reaction::UI::Widget::Value'; + + + +__PACKAGE__->meta->make_immutable; -}; 1; diff --git a/lib/Reaction/UI/Widget/Value/String.pm b/lib/Reaction/UI/Widget/Value/String.pm index 366355d..c383979 100644 --- a/lib/Reaction/UI/Widget/Value/String.pm +++ b/lib/Reaction/UI/Widget/Value/String.pm @@ -2,9 +2,13 @@ package Reaction::UI::Widget::Value::String; use Reaction::UI::WidgetClass; -class String is 'Reaction::UI::Widget::Value', which { +use namespace::clean -except => [ qw(meta) ]; +extends 'Reaction::UI::Widget::Value'; + + + +__PACKAGE__->meta->make_immutable; -}; 1; diff --git a/lib/Reaction/UI/Widget/Value/Text.pm b/lib/Reaction/UI/Widget/Value/Text.pm index 0fe4cdd..ae95ee7 100644 --- a/lib/Reaction/UI/Widget/Value/Text.pm +++ b/lib/Reaction/UI/Widget/Value/Text.pm @@ -2,9 +2,13 @@ package Reaction::UI::Widget::Value::Text; use Reaction::UI::WidgetClass; -class Text is 'Reaction::UI::Widget::Value', which { +use namespace::clean -except => [ qw(meta) ]; +extends 'Reaction::UI::Widget::Value'; + + + +__PACKAGE__->meta->make_immutable; -}; 1; |