diff options
18 files changed, 145 insertions, 68 deletions
diff --git a/lib/Reaction/UI/ViewPort/Field/Role/Mutable.pm b/lib/Reaction/UI/ViewPort/Field/Role/Mutable.pm index a93caf6..422c33b 100644 --- a/lib/Reaction/UI/ViewPort/Field/Role/Mutable.pm +++ b/lib/Reaction/UI/ViewPort/Field/Role/Mutable.pm @@ -51,7 +51,6 @@ sub can_sync_to_action { }; sub sync_to_action { my ($self) = @_; - return unless $self->needs_sync; return unless $self->can_sync_to_action; my $attr = $self->attribute; diff --git a/lib/Reaction/UI/Widget/Field/Mutable.pm b/lib/Reaction/UI/Widget/Field/Mutable.pm index 93900e2..0e670e5 100644 --- a/lib/Reaction/UI/Widget/Field/Mutable.pm +++ b/lib/Reaction/UI/Widget/Field/Mutable.pm @@ -29,9 +29,8 @@ extends 'Reaction::UI::Widget::Field'; }; implements fragment field_is_required { - my $model = $_{viewport}->model; - my $attr = $_{viewport}->attribute; - if ( $model->attribute_is_required($attr) ) { + my $vp = $_{viewport}; + if ( $vp->value_is_required && !$vp->value_string ) { render 'field_is_required_yes'; } else { render 'field_is_required_no'; diff --git a/lib/Reaction/UI/Widget/SiteLayout.pm b/lib/Reaction/UI/Widget/SiteLayout.pm index 89f91ed..d37003f 100644 --- a/lib/Reaction/UI/Widget/SiteLayout.pm +++ b/lib/Reaction/UI/Widget/SiteLayout.pm @@ -7,13 +7,6 @@ use MooseX::Types::Moose 'HashRef'; 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; @@ -22,15 +15,16 @@ after fragment widget { 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}]; + my $http_header = delete $_{viewport}->meta_info->{'http_header'}; + arg 'http_header' => $http_header; + render 'meta_http_header' => over [keys %$http_header]; } render 'meta_member' => over [keys %{$_{viewport}->meta_info}]; }; implements fragment meta_http_header { arg 'meta_name' => $_; - arg 'meta_value' => shift->http_header->{$_}; + arg 'meta_value' => $_{'http_header'}->{$_}; }; implements fragment meta_member { diff --git a/lib/Reaction/UI/WidgetClass.pm b/lib/Reaction/UI/WidgetClass.pm index e1a797b..622eec4 100644 --- a/lib/Reaction/UI/WidgetClass.pm +++ b/lib/Reaction/UI/WidgetClass.pm @@ -47,7 +47,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"; } diff --git a/lib/Reaction/UI/Window.pm b/lib/Reaction/UI/Window.pm index 8257c28..860bda8 100644 --- a/lib/Reaction/UI/Window.pm +++ b/lib/Reaction/UI/Window.pm @@ -8,7 +8,7 @@ use namespace::clean -except => [ qw(meta) ]; has ctx => (isa => 'Catalyst', is => 'ro', required => 1); has view_name => (isa => 'Str', is => 'ro', lazy_fail => 1); -has content_type => (isa => 'Str', is => 'ro', lazy_fail => 1); +has content_type => (isa => 'Str', is => 'rw', lazy_fail => 1); has title => (isa => 'Str', is => 'rw', default => sub { 'Untitled window' }); has view => ( # XXX compile failure because the Catalyst::View constraint would be diff --git a/share/skin/base/layout/action/link.tt b/share/skin/base/layout/action/link.tt index 41cee96..bd5013c 100644 --- a/share/skin/base/layout/action/link.tt +++ b/share/skin/base/layout/action/link.tt @@ -1,7 +1,5 @@ =for layout widget -<span class="action_link"> - <a href="[% uri %]">[% label %]</a> -</span> +<a href="[% uri %]">[% label %]</a> =cut diff --git a/share/skin/base/layout/collection/grid.tt b/share/skin/base/layout/collection/grid.tt index bfde10d..4042652 100644 --- a/share/skin/base/layout/collection/grid.tt +++ b/share/skin/base/layout/collection/grid.tt @@ -1,26 +1,20 @@ =for layout widget -<table> - [% header %] - [% body %] - [% footer %] -</table> +[% header %] +[% body %] +[% footer %] =for layout header -<thead> - [% header_row %] -</thead> +[% header_row %] =for layout header_row -<tr> - [% header_cells %] -</tr> +[% header_cells %] =for layout header_cell -<th> [% header_cell_contents %] </th> +[% header_cell_contents %] =for layout header_cell_contents @@ -28,10 +22,6 @@ =for layout body -<tbody> - - [% members %] - -</tbody> +[% members %] =cut diff --git a/share/skin/base/layout/collection/grid/member.tt b/share/skin/base/layout/collection/grid/member.tt index 9cf24e2..377f97c 100644 --- a/share/skin/base/layout/collection/grid/member.tt +++ b/share/skin/base/layout/collection/grid/member.tt @@ -1,11 +1,9 @@ =for layout widget -<tr> - [% field_list %] -</tr> +[% field_list %] =for layout field -<td>[% call_next %]</td> +[% call_next %] =cut diff --git a/share/skin/base/layout/collection/grid/member/with_actions.tt b/share/skin/base/layout/collection/grid/member/with_actions.tt index a0bca88..e7ba750 100644 --- a/share/skin/base/layout/collection/grid/member/with_actions.tt +++ b/share/skin/base/layout/collection/grid/member/with_actions.tt @@ -7,6 +7,6 @@ =for layout action -<td>[% call_next %]</td> +[% call_next %] =cut diff --git a/share/skin/base/layout/field/mutable/choose_many.tt b/share/skin/base/layout/field/mutable/choose_many.tt index 06a543a..51f315e 100644 --- a/share/skin/base/layout/field/mutable/choose_many.tt +++ b/share/skin/base/layout/field/mutable/choose_many.tt @@ -50,4 +50,6 @@ <input type="submit" value="<<" name="[% event_id_remove_all_values %]" /> </div> +=for layout message + =cut diff --git a/share/skin/base/layout/field/mutable/choose_one.tt b/share/skin/base/layout/field/mutable/choose_one.tt index 74e8d8c..0db3ffd 100644 --- a/share/skin/base/layout/field/mutable/choose_one.tt +++ b/share/skin/base/layout/field/mutable/choose_one.tt @@ -24,4 +24,6 @@ selected="selected" =for layout option_is_selected_no +=for layout message + =cut diff --git a/share/skin/base/layout/list_view.tt b/share/skin/base/layout/list_view.tt index e1cf3a4..8a0197d 100644 --- a/share/skin/base/layout/list_view.tt +++ b/share/skin/base/layout/list_view.tt @@ -12,7 +12,7 @@ =for layout header_action_cell -<th colspan="[% col_count %]"> Actions </th> +Actions =for layout header_cell_contents @@ -20,42 +20,34 @@ =for layout actions -<div class="list_view_actions"> -<ul> - [% call_next %] -</ul> -</div> +[% call_next %] =for layout action -<li>[% call_next %]</li> +[% call_next %] =for layout pager -<div class="list_view_pager"> -<ul> - [% first_page %] - [% previous_page %] - [% page_list %] - [% next_page %] - [% last_page %] -</ul> -</div> +[% first_page %] +[% previous_page %] +[% page_list %] +[% next_page %] +[% last_page %] =for layout numbered_page_this_page -<li> [% page_number %] </li> +[% page_number %] =for layout numbered_page -<li> <a href="[% page_uri %]">[% page_number %]</a> </li> +<a href="[% page_uri %]">[% page_number %]</a> =for layout named_page -<li> <a href="[% page_uri %]">[% page_name %]</a> </li> +<a href="[% page_uri %]">[% page_name %]</a> =for layout named_page_no_page -<li> [% page_name %] </li> +[% page_name %] =cut diff --git a/share/skin/base/layout/site_layout.tt b/share/skin/base/layout/site_layout.tt index 6d48d28..4ab1cf2 100644 --- a/share/skin/base/layout/site_layout.tt +++ b/share/skin/base/layout/site_layout.tt @@ -1,4 +1,5 @@ =for layout widget +[% doctype %] <html> @@ -36,6 +37,8 @@ =for layout head_style +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> + =for layout body [% inner %] diff --git a/share/skin/componentui/web/componentui-basic.css b/share/skin/componentui/web/componentui-basic.css index 1f25ddb..c8be739 100644 --- a/share/skin/componentui/web/componentui-basic.css +++ b/share/skin/componentui/web/componentui-basic.css @@ -172,19 +172,19 @@ input{ border: 1px solid #369; } -.collection_actions ul { +.collection_actions { display: inline margin: 0px; padding: 0px; list-style-type: none; } -.collection_actions ul li { +.collection_actions li { display: inline; margin: 0.2em; } -.collection_actions ul li a { +.collection_actions li a { /* background-color #9CF; */ /* padding: 0.2em .2em; */ /* text-decoration: none; */ diff --git a/share/skin/default/layout/collection/grid.tt b/share/skin/default/layout/collection/grid.tt new file mode 100644 index 0000000..ecfc7d6 --- /dev/null +++ b/share/skin/default/layout/collection/grid.tt @@ -0,0 +1,33 @@ +=extends NEXT + +=for layout widget + +<table> + [% call_next %] +</table> + +=for layout header + +<thead> + [% call_next %] +</thead> + +=for layout header_row + +<tr> + [% call_next %] +</tr> + +=for layout header_cell + +<th> [% call_next %] </th> + +=for layout body + +<tbody> + + [% call_next %] + +</tbody> + +=cut diff --git a/share/skin/default/layout/collection/grid/member.tt b/share/skin/default/layout/collection/grid/member.tt new file mode 100644 index 0000000..f0583d7 --- /dev/null +++ b/share/skin/default/layout/collection/grid/member.tt @@ -0,0 +1,13 @@ +=extends NEXT + +=for layout widget + +<tr> + [% call_next %] +</tr> + +=for layout field + +<td>[% call_next %]</td> + +=cut diff --git a/share/skin/default/layout/collection/grid/member/with_actions.tt b/share/skin/default/layout/collection/grid/member/with_actions.tt new file mode 100644 index 0000000..a0bca88 --- /dev/null +++ b/share/skin/default/layout/collection/grid/member/with_actions.tt @@ -0,0 +1,12 @@ +=extends collection/grid/member + +=for layout field_list + +[% call_next %] +[% actions %] + +=for layout action + +<td>[% call_next %]</td> + +=cut diff --git a/share/skin/default/layout/list_view.tt b/share/skin/default/layout/list_view.tt index 78ab34f..f1a72b1 100644 --- a/share/skin/default/layout/list_view.tt +++ b/share/skin/default/layout/list_view.tt @@ -1,15 +1,57 @@ -=extends NEXT +=extends collection/grid + +=for layout widget + +[% pager_fragment %] + +[% call_next %] + +[% pager_fragment %] + +[% actions %] + +=for layout header_action_cell + +<th colspan="[% col_count %]"> Actions </th> + +=for layout header_cell_contents + +<a href="[% order_uri %]">[% call_next %]</a> + +=for layout actions + +<ul class="collection_actions"> + [% call_next %] +</ul> + +=for layout action + +<li>[% call_next %]</li> =for layout pager -<div class="pager"> -<ul> +<ul class="pager"> [% first_page %] [% previous_page %] [% page_list %] [% next_page %] [% last_page %] </ul> -</div> + +=for layout numbered_page_this_page + +<li> [% page_number %] </li> + +=for layout numbered_page + +<li> <a href="[% page_uri %]">[% page_number %]</a> </li> + +=for layout named_page + +<li> <a href="[% page_uri %]">[% page_name %]</a> </li> + +=for layout named_page_no_page + +<li> [% page_name %] </li> =cut |