aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Makefile.PL1
-rw-r--r--lib/ComponentUI/View/Site/Widget/Index.pm2
-rw-r--r--lib/ComponentUI/View/Site/Widget/Layout.pm10
-rw-r--r--lib/Reaction/UI/Widget/ActionForm.pm18
-rw-r--r--lib/Reaction/UI/Widget/DisplayField.pm6
-rw-r--r--lib/Reaction/UI/Widget/DisplayField/Boolean.pm2
-rw-r--r--lib/Reaction/UI/Widget/DisplayField/Collection.pm8
-rw-r--r--lib/Reaction/UI/Widget/DisplayField/DateTime.pm2
-rw-r--r--lib/Reaction/UI/Widget/DisplayField/List.pm8
-rw-r--r--lib/Reaction/UI/Widget/DisplayField/RelatedObject.pm2
-rw-r--r--lib/Reaction/UI/Widget/Field.pm8
-rw-r--r--lib/Reaction/UI/Widget/Field/ChooseMany.pm14
-rw-r--r--lib/Reaction/UI/Widget/Field/ChooseOne.pm4
-rw-r--r--lib/Reaction/UI/Widget/Field/DateTime.pm2
-rw-r--r--lib/Reaction/UI/Widget/Field/HiddenArray.pm4
-rw-r--r--lib/Reaction/UI/Widget/GridView.pm16
-rw-r--r--lib/Reaction/UI/Widget/GridView/Action.pm2
-rw-r--r--lib/Reaction/UI/Widget/GridView/Entity.pm12
-rw-r--r--lib/Reaction/UI/Widget/GridView/Entity/WithActions.pm10
-rw-r--r--lib/Reaction/UI/Widget/ListView.pm26
-rw-r--r--lib/Reaction/UI/Widget/ObjectView.pm10
-rw-r--r--lib/Reaction/UI/Widget/Value.pm2
-rw-r--r--lib/Reaction/UI/Widget/Value/Collection.pm6
-rw-r--r--lib/Reaction/UI/Widget/Value/List.pm6
-rw-r--r--lib/Reaction/UI/WidgetClass.pm41
-rw-r--r--share/skin/default/layout/action_form.tt4
-rw-r--r--share/skin/default/layout/grid_view/entity.tt4
-rw-r--r--share/skin/default/layout/grid_view/entity/with_actions.tt8
-rw-r--r--share/skin/default/layout/object_view.tt4
29 files changed, 129 insertions, 113 deletions
diff --git a/Makefile.PL b/Makefile.PL
index db1b95f..ee71807 100644
--- a/Makefile.PL
+++ b/Makefile.PL
@@ -28,6 +28,7 @@ requires 'Email::Send';
requires 'Email::MIME';
requires 'Email::MIME::Creator';
requires 'Text::CSV_XS';
+requires 'Devel::Declare' => '0.001004';
catalyst;
diff --git a/lib/ComponentUI/View/Site/Widget/Index.pm b/lib/ComponentUI/View/Site/Widget/Index.pm
index 21175ae..0d3df27 100644
--- a/lib/ComponentUI/View/Site/Widget/Index.pm
+++ b/lib/ComponentUI/View/Site/Widget/Index.pm
@@ -4,7 +4,7 @@ use Reaction::UI::WidgetClass;
class Index which {
- widget renders [ string {"DUMMY"} ];
+ fragment widget [ string {"DUMMY"} ];
};
diff --git a/lib/ComponentUI/View/Site/Widget/Layout.pm b/lib/ComponentUI/View/Site/Widget/Layout.pm
index 5d1b57c..ad1953b 100644
--- a/lib/ComponentUI/View/Site/Widget/Layout.pm
+++ b/lib/ComponentUI/View/Site/Widget/Layout.pm
@@ -4,12 +4,12 @@ use Reaction::UI::WidgetClass;
class Layout which {
- widget renders [ qw(menu sidebar header main_content) ];
+ fragment widget [ qw(menu sidebar header main_content) ];
- menu renders [ string { "DUMMY" } ];
- sidebar renders [ string { "Sidebar Shit" } ];
- header renders [ string { "DUMMY" } ];
- main_content renders [ viewport over func('viewport', 'inner')];
+ fragment menu [ string { "DUMMY" } ];
+ fragment sidebar [ string { "Sidebar Shit" } ];
+ fragment header [ string { "DUMMY" } ];
+ fragment main_content [ viewport => over func('viewport', 'inner')];
};
diff --git a/lib/Reaction/UI/Widget/ActionForm.pm b/lib/Reaction/UI/Widget/ActionForm.pm
index fc876eb..2f587e9 100644
--- a/lib/Reaction/UI/Widget/ActionForm.pm
+++ b/lib/Reaction/UI/Widget/ActionForm.pm
@@ -3,22 +3,22 @@ package Reaction::UI::Widget::ActionForm;
use Reaction::UI::WidgetClass;
class ActionForm, which {
- widget renders [ qw/header fields buttons footer/ ],
- {id => sub { $_{viewport}->location } };
+ fragment widget [ qw/header field_list buttons footer/ ]
+ => {id => sub { $_{viewport}->location } };
- fields renders [field over func('viewport','ordered_fields')];
- field renders [ 'viewport' ];
+ fragment field_list [field => over func('viewport','ordered_fields')];
+ fragment field [ 'viewport' ];
#move button logic here
- buttons renders [ string {"DUMMY"} ],
+ fragment buttons [ string {"DUMMY"} ],
{ message => sub{ $_{viewport}->can('message') ? $_{viewport}->message : "" },
ok_label => func(viewport => 'ok_label'),
close_label => func(viewport => 'close_label'),
apply_label => func(viewport => 'apply_label'),
};
- header renders [ string {"DUMMY"} ];
- footer renders [ string {"DUMMY"} ];
+ fragment header [ string {"DUMMY"} ];
+ fragment footer [ string {"DUMMY"} ];
};
@@ -38,9 +38,9 @@ Reaction::UI::Widget::ActionForm
Additional variables available in topic hash: "viewport".
-Renders "header", "fields", "buttons" and "footer"
+Renders "header", "field_list", "buttons" and "footer"
-=head2 fields
+=head2 field_list
Sequentially renders the C<ordered_fields> of the viewport
diff --git a/lib/Reaction/UI/Widget/DisplayField.pm b/lib/Reaction/UI/Widget/DisplayField.pm
index 86672a0..a688c28 100644
--- a/lib/Reaction/UI/Widget/DisplayField.pm
+++ b/lib/Reaction/UI/Widget/DisplayField.pm
@@ -3,9 +3,9 @@ package Reaction::UI::Widget::DisplayField;
use Reaction::UI::WidgetClass;
class DisplayField, which {
- widget renders [ qw/label value/ ];
- label renders [ string { $_{viewport}->label } ];
- value renders [ string { $_{viewport}->value } ];
+ fragment widget [ qw/label value/ ];
+ fragment label [ string { $_{viewport}->label } ];
+ fragment value [ string { $_{viewport}->value } ];
};
1;
diff --git a/lib/Reaction/UI/Widget/DisplayField/Boolean.pm b/lib/Reaction/UI/Widget/DisplayField/Boolean.pm
index 93dfc59..82f3b22 100644
--- a/lib/Reaction/UI/Widget/DisplayField/Boolean.pm
+++ b/lib/Reaction/UI/Widget/DisplayField/Boolean.pm
@@ -3,7 +3,7 @@ package Reaction::UI::Widget::DisplayField::Boolean;
use Reaction::UI::WidgetClass;
class Boolean is 'Reaction::UI::Widget::DisplayField', which {
- value renders [ string { $_{viewport}->value_string } ];
+ fragment value [ string { $_{viewport}->value_string } ];
};
1;
diff --git a/lib/Reaction/UI/Widget/DisplayField/Collection.pm b/lib/Reaction/UI/Widget/DisplayField/Collection.pm
index c4c16e7..bcac990 100644
--- a/lib/Reaction/UI/Widget/DisplayField/Collection.pm
+++ b/lib/Reaction/UI/Widget/DisplayField/Collection.pm
@@ -3,10 +3,10 @@ package Reaction::UI::Widget::DisplayField::Collection;
use Reaction::UI::WidgetClass;
class Collection, which {
- widget renders [ qw/label list/ ];
- label renders [ string { $_{viewport}->label } ];
- list renders [ item over func('viewport', 'value_names') ];
- item renders [ string { $_ } ];
+ fragment widget [ qw/label list/ ];
+ fragment label [ string { $_{viewport}->label } ];
+ fragment list [ item => over func('viewport', 'value_names') ];
+ fragment item [ string { $_ } ];
};
1;
diff --git a/lib/Reaction/UI/Widget/DisplayField/DateTime.pm b/lib/Reaction/UI/Widget/DisplayField/DateTime.pm
index e403a9a..8f44d9e 100644
--- a/lib/Reaction/UI/Widget/DisplayField/DateTime.pm
+++ b/lib/Reaction/UI/Widget/DisplayField/DateTime.pm
@@ -3,7 +3,7 @@ package Reaction::UI::Widget::DisplayField::DateTime;
use Reaction::UI::WidgetClass;
class DateTime is 'Reaction::UI::Widget::DisplayField', which {
- value renders [ string { $_{viewport}->value_string } ];
+ fragment value [ string { $_{viewport}->value_string } ];
};
1;
diff --git a/lib/Reaction/UI/Widget/DisplayField/List.pm b/lib/Reaction/UI/Widget/DisplayField/List.pm
index f8cfcce..f53b704 100644
--- a/lib/Reaction/UI/Widget/DisplayField/List.pm
+++ b/lib/Reaction/UI/Widget/DisplayField/List.pm
@@ -3,10 +3,10 @@ package Reaction::UI::Widget::DisplayField::List;
use Reaction::UI::WidgetClass;
class List, which {
- widget renders [ qw/label list item/ ];
- label renders [ string { $_{viewport}->label } ];
- list renders [ item over func('viewport', 'value_names') ];
- item renders [ string { $_ } ];
+ fragment widget [ qw/label list item/ ];
+ fragment label [ string { $_{viewport}->label } ];
+ fragment list [ item => over func('viewport', 'value_names') ];
+ fragment item [ string { $_ } ];
};
1;
diff --git a/lib/Reaction/UI/Widget/DisplayField/RelatedObject.pm b/lib/Reaction/UI/Widget/DisplayField/RelatedObject.pm
index fa415e7..a477ef7 100644
--- a/lib/Reaction/UI/Widget/DisplayField/RelatedObject.pm
+++ b/lib/Reaction/UI/Widget/DisplayField/RelatedObject.pm
@@ -3,7 +3,7 @@ package Reaction::UI::Widget::DisplayField::RelatedObject;
use Reaction::UI::WidgetClass;
class RelatedObject is 'Reaction::UI::Widget::DisplayField', which {
- value renders [ string { $_{viewport}->value_string } ];
+ fragment value [ string { $_{viewport}->value_string } ];
};
1;
diff --git a/lib/Reaction/UI/Widget/Field.pm b/lib/Reaction/UI/Widget/Field.pm
index 1e5de08..13276c2 100644
--- a/lib/Reaction/UI/Widget/Field.pm
+++ b/lib/Reaction/UI/Widget/Field.pm
@@ -10,15 +10,15 @@ class Field, which {
implements _build_id => as { shift->viewport->event_id_for('value'); };
implements _build_name => as { shift->viewport->event_id_for('value'); };
- widget renders [qw/label field message/
+ fragment widget [qw/label field message/
=> { id => func('self', 'id'),
name => func('self', 'name'), }
];
- field renders [ string { $_{viewport}->value }, ];
+ fragment field [ string { $_{viewport}->value }, ];
- label renders [ string { $_{viewport}->label }, ];
- message renders [ string { $_{viewport}->message }, ];
+ fragment label [ string { $_{viewport}->label }, ];
+ fragment message [ string { $_{viewport}->message }, ];
};
diff --git a/lib/Reaction/UI/Widget/Field/ChooseMany.pm b/lib/Reaction/UI/Widget/Field/ChooseMany.pm
index 6e9ef47..8520068 100644
--- a/lib/Reaction/UI/Widget/Field/ChooseMany.pm
+++ b/lib/Reaction/UI/Widget/Field/ChooseMany.pm
@@ -4,15 +4,15 @@ use Reaction::UI::WidgetClass;
class ChooseMany is 'Reaction::UI::Widget::Field', which {
- field renders [qw/available_values action_buttons selected_values current_values/];
+ fragment field [qw/available_values action_buttons selected_values current_values/];
- current_values renders [ hidden_value over func('viewport', 'current_value_choices') ];
- hidden_value renders [ string { $_->{value} } ];
+ fragment current_values [ hidden_value => over func('viewport', 'current_value_choices') ];
+ fragment hidden_value [ string { $_->{value} } ];
- available_values renders [ option over func('viewport', 'available_value_choices') ];
- selected_values renders [ option over func('viewport', 'current_value_choices') ];
- option renders [string {"DUMMY"}], { v_value => sub {$_->{value}}, v_name => sub {$_->{name}} };
- action_buttons renders [ string {"DUMMY"} ];
+ fragment available_values [ option => over func('viewport', 'available_value_choices') ];
+ fragment selected_values [ option => over func('viewport', 'current_value_choices') ];
+ fragment option [string {"DUMMY"}], { v_value => sub {$_->{value}}, v_name => sub {$_->{name}} };
+ fragment action_buttons [ string {"DUMMY"} ];
};
diff --git a/lib/Reaction/UI/Widget/Field/ChooseOne.pm b/lib/Reaction/UI/Widget/Field/ChooseOne.pm
index 9754e71..c127cef 100644
--- a/lib/Reaction/UI/Widget/Field/ChooseOne.pm
+++ b/lib/Reaction/UI/Widget/Field/ChooseOne.pm
@@ -4,10 +4,10 @@ use Reaction::UI::WidgetClass;
class ChooseOne is 'Reaction::UI::Widget::Field', which {
- field renders [ option over func('viewport', 'value_choices') ],
+ fragment field [ option => over func('viewport', 'value_choices') ],
{ is_required => sub{ $_{viewport}->attribute->required } };
- option renders [string {"DUMMY"}],
+ fragment option [string {"DUMMY"}],
{
v_value => sub { $_->{value} },
v_name => sub { $_->{name} },
diff --git a/lib/Reaction/UI/Widget/Field/DateTime.pm b/lib/Reaction/UI/Widget/Field/DateTime.pm
index deea805..21e0069 100644
--- a/lib/Reaction/UI/Widget/Field/DateTime.pm
+++ b/lib/Reaction/UI/Widget/Field/DateTime.pm
@@ -4,7 +4,7 @@ use Reaction::UI::WidgetClass;
class DateTime is 'Reaction::UI::Widget::Field', which {
- field renders [ string { $_{viewport}->value_string }, ];
+ fragment field [ string { $_{viewport}->value_string }, ];
};
diff --git a/lib/Reaction/UI/Widget/Field/HiddenArray.pm b/lib/Reaction/UI/Widget/Field/HiddenArray.pm
index 7ccead9..a7d4a2d 100644
--- a/lib/Reaction/UI/Widget/Field/HiddenArray.pm
+++ b/lib/Reaction/UI/Widget/Field/HiddenArray.pm
@@ -4,8 +4,8 @@ use Reaction::UI::WidgetClass;
class HiddenArray is 'Reaction::UI::Widget::Field', which {
- field renders [ item over func('viewport', 'value') ];
- item renders [ string { $_ } ];
+ fragment field [ item => over func('viewport', 'value') ];
+ fragment item [ string { $_ } ];
};
diff --git a/lib/Reaction/UI/Widget/GridView.pm b/lib/Reaction/UI/Widget/GridView.pm
index d623d2f..1f73adb 100644
--- a/lib/Reaction/UI/Widget/GridView.pm
+++ b/lib/Reaction/UI/Widget/GridView.pm
@@ -3,19 +3,19 @@ package Reaction::UI::Widget::GridView;
use Reaction::UI::WidgetClass;
class GridView, which {
- widget renders [ qw/header body footer/ ];
+ fragment widget [ qw/header body footer/ ];
- header renders [ 'header_row' ];
- header_row renders [ header_cell over func('viewport', 'field_order'),
+ fragment header [ 'header_row' ];
+ fragment header_row [ header_cell => over func('viewport', 'field_order'),
{ labels => func(viewport => 'field_labels') } ];
- header_cell renders [ string { $_{labels}->{$_} } ], { field_name => $_ };
+ fragment header_cell [ string { $_{labels}->{$_} } ], { field_name => $_ };
- footer renders [ 'footer_row' ];
- footer_row renders [ footer_cell over func('viewport', 'field_order'),
+ fragment footer [ 'footer_row' ];
+ fragment footer_row [ footer_cell => over func('viewport', 'field_order'),
{ labels => func(viewport => 'field_labels') } ];
- footer_cell renders [ string { $_{labels}->{$_} } ], { field_name => $_ };
+ fragment footer_cell [ string { $_{labels}->{$_} } ], { field_name => $_ };
- body renders [ viewport over func('viewport','entities')];
+ fragment body [ viewport => over func('viewport','entities')];
};
diff --git a/lib/Reaction/UI/Widget/GridView/Action.pm b/lib/Reaction/UI/Widget/GridView/Action.pm
index ceea339..a1988e5 100644
--- a/lib/Reaction/UI/Widget/GridView/Action.pm
+++ b/lib/Reaction/UI/Widget/GridView/Action.pm
@@ -3,7 +3,7 @@ package Reaction::UI::Widget::GridView::Action;
use Reaction::UI::WidgetClass;
class Action, which {
- widget renders [ string{ "DUMMY" } ],
+ fragment widget [ string{ "DUMMY" } ],
{ uri => func(viewport => 'uri'), label => func(viewport => 'label') };
};
diff --git a/lib/Reaction/UI/Widget/GridView/Entity.pm b/lib/Reaction/UI/Widget/GridView/Entity.pm
index 84ad162..1530bf5 100644
--- a/lib/Reaction/UI/Widget/GridView/Entity.pm
+++ b/lib/Reaction/UI/Widget/GridView/Entity.pm
@@ -4,11 +4,11 @@ use Reaction::UI::WidgetClass;
class Entity, which {
#this could be flattened if i could do:
- # widget renders [field over sub{ $_{self}->viewport->fields } ];
+ # fragment widget [field => over sub{ $_{self}->viewport->fields } ];
#to be honest, I think that the key viewport should be available by default in %_
- widget renders [ 'fields' ];
- fields renders [ field over func('viewport', 'fields') ];
- field renders [ 'viewport' ];
+ fragment widget [ 'field_list' ];
+ fragment field_list [ field => over func('viewport', 'fields') ];
+ fragment field [ 'viewport' ];
};
1;
@@ -28,9 +28,9 @@ Reaction::UI::Widget::GridView::Entity
Additional variables available in topic hash: "viewport".
-Renders "fields"
+Renders "field_list"
-=head2 fields
+=head2 field_list
Sequentially renders the C<fields> of the viewport as "field"
diff --git a/lib/Reaction/UI/Widget/GridView/Entity/WithActions.pm b/lib/Reaction/UI/Widget/GridView/Entity/WithActions.pm
index a68e662..66db4b9 100644
--- a/lib/Reaction/UI/Widget/GridView/Entity/WithActions.pm
+++ b/lib/Reaction/UI/Widget/GridView/Entity/WithActions.pm
@@ -4,12 +4,12 @@ use Reaction::UI::WidgetClass;
#should I use inheritance here??
class WithActions, which {
- widget renders [ qw/fields actions/ ];
- fields renders [ field over func(viewport => 'fields') ];
- field renders [ 'viewport' ];
+ fragment widget [ qw(field_list actions) ];
+ fragment field_list [ field => over func('viewport', 'fields') ];
+ fragment field [ 'viewport' ];
- actions renders [ action over func(viewport => 'actions')];
- action renders [ 'viewport' ];
+ fragment actions [ action => over func(viewport => 'actions')];
+ fragment action [ 'viewport' ];
};
1;
diff --git a/lib/Reaction/UI/Widget/ListView.pm b/lib/Reaction/UI/Widget/ListView.pm
index 26b1204..47e65a5 100644
--- a/lib/Reaction/UI/Widget/ListView.pm
+++ b/lib/Reaction/UI/Widget/ListView.pm
@@ -3,7 +3,7 @@ package Reaction::UI::Widget::ListView;
use Reaction::UI::WidgetClass;
class ListView is 'Reaction::UI::Widget::GridView', which {
- widget renders [ qw/pager header body footer actions/,
+ fragment widget [ qw/pager header body footer actions/,
{
pager => sub{ $_{viewport}->pager },
object_action_count => sub{ $_{viewport}->object_action_count },
@@ -11,7 +11,7 @@ class ListView is 'Reaction::UI::Widget::GridView', which {
}
];
- pager renders
+ fragment pager
[ qw/first_page previous_page current_page next_page last_page page_list/,
{
first_page => sub{ $_{pager}->first_page },
@@ -23,36 +23,36 @@ class ListView is 'Reaction::UI::Widget::GridView', which {
}
];
- first_page renders [ string{ "First" } ],
+ fragment first_page [ string{ "First" } ],
{ uri => sub{ $_{self}->connect_uri( {page => $_{first_page} } ) } };
- previous_page renders [ string{ "Previous" } ],
+ fragment previous_page [ string{ "Previous" } ],
{ uri => sub{ $_{self}->connect_uri( {page => $_{previous_page} } ) } };
- current_page renders [ string{ "Current" } ],
+ fragment current_page [ string{ "Current" } ],
{ uri => sub{ $_{self}->connect_uri( {page => $_{current_page} } ) } };
- next_page renders [ string{ "Next" } ],
+ fragment next_page [ string{ "Next" } ],
{ uri => sub{ $_{self}->connect_uri( {page => $_{next_page} } ) } };
- last_page renders [ string{ "Last" } ],
+ fragment last_page [ string{ "Last" } ],
{ uri => sub{ $_{self}->connect_uri( {page => $_{last_page} } ) } };
- page_list renders [ page over $_{page_list} ];
- page renders [ string{ $_ } ],
+ fragment page_list [ page => over $_{page_list} ];
+ fragment page [ string{ $_ } ],
{ uri => sub{ $_{self}->connect_uri( {page => $_ } ) } };
- actions renders [ action over func(viewport => 'actions') ];
- action renders [ 'viewport' ];
+ fragment actions [ action => over func(viewport => 'actions') ];
+ fragment action [ 'viewport' ];
- header_cell renders [ string { $_{labels}->{$_} } ],
+ fragment header_cell [ string { $_{labels}->{$_} } ],
{ uri => sub{
my $ev = {order_by => $_, order_by_desc => $_{viewport}->order_by_desc ? 0 : 1 };
return $_{self}->connect_uri($ev);
}
};
- footer_cell renders [ string { $_{labels}->{$_} } ],
+ fragment footer_cell [ string { $_{labels}->{$_} } ],
{ uri => sub{
my $ev = {order_by => $_, order_by_desc => $_{viewport}->order_by_desc ? 0 : 1 };
return $_{self}->connect_uri($ev);
diff --git a/lib/Reaction/UI/Widget/ObjectView.pm b/lib/Reaction/UI/Widget/ObjectView.pm
index 923c592..6da4c34 100644
--- a/lib/Reaction/UI/Widget/ObjectView.pm
+++ b/lib/Reaction/UI/Widget/ObjectView.pm
@@ -3,9 +3,9 @@ package Reaction::UI::Widget::ObjectView;
use Reaction::UI::WidgetClass;
class ObjectView, which {
- widget renders [ 'fields' ];
- fields renders [ field over func('viewport', 'ordered_fields') ];
- field renders [ 'viewport' ];
+ fragment widget [ 'field_list' ];
+ fragment field_list [ field => over func('viewport', 'ordered_fields') ];
+ fragment field [ 'viewport' ];
};
1;
@@ -25,9 +25,9 @@ Reaction::UI::Widget::ObjectView
Additional variables available in topic hash: "viewport".
-Renders "fields"
+Renders "field_list"
-=head2 fields
+=head2 field_list
Sequentially renders the C<ordered_fields> of the viewport
diff --git a/lib/Reaction/UI/Widget/Value.pm b/lib/Reaction/UI/Widget/Value.pm
index 959d72a..88d7eb6 100644
--- a/lib/Reaction/UI/Widget/Value.pm
+++ b/lib/Reaction/UI/Widget/Value.pm
@@ -3,7 +3,7 @@ package Reaction::UI::Widget::Value;
use Reaction::UI::WidgetClass;
class Value, which {
- widget renders [ string {""} ],
+ fragment widget [ string {""} ],
{ value => sub{
my $vp = $_{viewport};
$vp->can('value_string') ? $vp->value_string : $vp->value;
diff --git a/lib/Reaction/UI/Widget/Value/Collection.pm b/lib/Reaction/UI/Widget/Value/Collection.pm
index aecd20f..e87d881 100644
--- a/lib/Reaction/UI/Widget/Value/Collection.pm
+++ b/lib/Reaction/UI/Widget/Value/Collection.pm
@@ -3,9 +3,9 @@ package Reaction::UI::Widget::Value::Collection;
use Reaction::UI::WidgetClass;
class Collection, which {
- widget renders [ qw/list/ ];
- list renders [ item over func('viewport', 'value_names') ];
- item renders [ string {""} ], { value => $_ };
+ fragment widget [ qw/list/ ];
+ fragment list [ item => over func('viewport', 'value_names') ];
+ fragment item [ string {""} ], { value => $_ };
};
1;
diff --git a/lib/Reaction/UI/Widget/Value/List.pm b/lib/Reaction/UI/Widget/Value/List.pm
index fcae21b..89598d8 100644
--- a/lib/Reaction/UI/Widget/Value/List.pm
+++ b/lib/Reaction/UI/Widget/Value/List.pm
@@ -3,9 +3,9 @@ package Reaction::UI::Widget::Value::List;
use Reaction::UI::WidgetClass;
class List, which {
- widget renders [ qw/list/ ];
- list renders [ item over func('viewport', 'value_names') ];
- item renders [ string {""} ], { value => $_ };
+ fragment widget [ qw/list/ ];
+ fragment list [ item => over func('viewport', 'value_names') ];
+ fragment item [ string {""} ], { value => $_ };
};
1;
diff --git a/lib/Reaction/UI/WidgetClass.pm b/lib/Reaction/UI/WidgetClass.pm
index 83e3076..3e28300 100644
--- a/lib/Reaction/UI/WidgetClass.pm
+++ b/lib/Reaction/UI/WidgetClass.pm
@@ -4,6 +4,7 @@ use Reaction::ClassExporter;
use Reaction::Class;
use Reaction::UI::Widget;
use Data::Dumper;
+use Devel::Declare;
no warnings 'once';
@@ -23,6 +24,22 @@ class WidgetClass, which {
}, # XXX zis is not ze grand design. OBSERVABLE.
string => sub (&) { -string => [ @_ ] }, # meh (maybe &;@ later?)
wrap => sub { $self->do_wrap_sub($package, @_); }, # should have class.
+ fragment => sub (@) { }, # placeholder rewritten by do_import
+ over => sub { -over => @_ },
+ );
+ };
+
+ after do_import => sub {
+ my ($self, $pkg, $args) = @_;
+
+ Devel::Declare->install_declarator(
+ $pkg, 'fragment', DECLARE_NAME,
+ sub { },
+ sub {
+ our $FRAGMENT_CLOSURE;
+ splice(@_, 1, 1); # remove undef proto arg
+ $FRAGMENT_CLOSURE->(@_);
+ }
);
};
@@ -31,18 +48,9 @@ class WidgetClass, which {
overrides do_class_sub => sub {
my ($self, $package, $class) = @_;
# intercepts 'foo renders ...'
- local *renders::AUTOLOAD = sub {
- our $AUTOLOAD;
- shift;
- $AUTOLOAD =~ /^renders::(.*)$/;
- $self->do_renders_meth($package, $class, $1, @_);
- };
- # intercepts 'foo over ...'
- local *over::AUTOLOAD = sub {
- our $AUTOLOAD;
- shift;
- $AUTOLOAD =~ /^over::(.*)$/;
- $self->do_over_meth($package, $class, $1, @_);
+ our $FRAGMENT_CLOSURE;
+ local $FRAGMENT_CLOSURE = sub {
+ $self->do_renders_meth($package, $class, @_);
};
# $_ returns '-topic:_', $_{foo} returns '-topic:foo'
local $_ = '-topic:_';
@@ -65,7 +73,7 @@ class WidgetClass, which {
if (defined($args) && (ref($args) ne 'HASH'));
$sig .= '
-where content spec is [ fragment_name over (func(...)|$_|$_{keyname}), \%args? ]
+where content spec is [ fragment_name => over (func(...)|$_|$_{keyname}), \%args? ]
or [ qw(list of fragment names), \%args ]'; # explain the mistake, yea
my $inner_args = ((ref($content->[-1]) eq 'HASH') ? pop(@$content) : {});
@@ -81,6 +89,13 @@ where content spec is [ fragment_name over (func(...)|$_|$_{keyname}), \%args? ]
confess "Content spec invalid, ${sig}"
unless defined($content->[0]) && !ref($content->[0]);
+ # new-style over gives 'frag, -over, $func'. massage.
+
+ if (defined($content->[1]) && !ref($content->[1])
+ && ($content->[1] eq '-over')) {
+ @$content[0,1] = @$content[1,0];
+ }
+
if (my ($key) = ($content->[0] =~ /^-(.*)?/)) {
# if first content value is -foo, pull it off the front and then
diff --git a/share/skin/default/layout/action_form.tt b/share/skin/default/layout/action_form.tt
index 89cab92..473c4cd 100644
--- a/share/skin/default/layout/action_form.tt
+++ b/share/skin/default/layout/action_form.tt
@@ -2,7 +2,7 @@
<form action="" method="post" enctype="multipart/form-data">
[% header %]
- [% fields %]
+ [% field_list %]
[% buttons %]
[% footer %]
</form>
@@ -11,7 +11,7 @@
<h2>Le Header</h2>
-=for layout fields
+=for layout field_list
<p> [% content %] </p>
diff --git a/share/skin/default/layout/grid_view/entity.tt b/share/skin/default/layout/grid_view/entity.tt
index 9c69baf..c66af93 100644
--- a/share/skin/default/layout/grid_view/entity.tt
+++ b/share/skin/default/layout/grid_view/entity.tt
@@ -4,7 +4,7 @@
[% content %]
<tr>
-=for layout fields
+=for layout field_list
[% content %]
@@ -12,4 +12,4 @@
<td>[% content %]</td>
-=cut \ No newline at end of file
+=cut
diff --git a/share/skin/default/layout/grid_view/entity/with_actions.tt b/share/skin/default/layout/grid_view/entity/with_actions.tt
index ea78ed8..438a168 100644
--- a/share/skin/default/layout/grid_view/entity/with_actions.tt
+++ b/share/skin/default/layout/grid_view/entity/with_actions.tt
@@ -1,11 +1,11 @@
=for layout widget
<tr>
- [% fields %]
- [% actions %]
+ [% field_list %]
+ [% actions %]
<tr>
-=for layout fields
+=for layout field_list
[% content %]
@@ -22,4 +22,4 @@
<td>[% content %]</td>
-=cut \ No newline at end of file
+=cut
diff --git a/share/skin/default/layout/object_view.tt b/share/skin/default/layout/object_view.tt
index 4e6e1b3..55b15bf 100644
--- a/share/skin/default/layout/object_view.tt
+++ b/share/skin/default/layout/object_view.tt
@@ -1,8 +1,8 @@
=for layout widget
- [% fields %]
+ [% field_list %]
-=for layout fields
+=for layout field_list
<p> [% content %] </p>