Continuity-Widget

 view release on metacpan or  search on metacpan

lib/Continuity/Widget.pm  view on Meta::CPAN

package Continuity::Widget;

our $VERSION = '0.01';

=head1 NAME

Continuity::Widget - Handy Moose-based Widget Thingie for Continuity Apps

=head1 SYNOPSIS

  use Continuity::Widget;

=head1 DESCRIPTION

Don't quite know what this will be yet.

=cut

use Data::UUID;
use Moose;
with 'Continuity::Coro::Moose';

# List of callbacks, buttons for now
has callback => ( is => 'rw', default => sub {{}} );

has renderer => ( is => 'rw', isa => 'HashRef', default => sub {{}});

has 'uuid'   => (
  is      => 'ro', 
  isa     => 'Str', 
  default => sub { Data::UUID->new->create_str }
);

# Given a name generate a unique field ID
sub field_name {
  my ($self, $name) = @_;
  return $self->uuid . '-' . $name;
}

# This renders an input form. Need to make the renderer selection dynamic
sub render_edit {
  my ($self) = @_;
  my $out = '<div class="editform">';
  my %attrmap = %{ $self->meta->get_attribute_map };
  while( my ($name, $attr) = each %attrmap ) {
    my $reader = $attr->get_read_method;
    my $val = $self->$reader || '';
    my $field_name = $self->field_name($name);
    $out .= qq|
      <div class=fieldholder>
        <div class=label> @{[$attr->label]} </div>
        <div class=field>
          <input type=text id="$field_name" name="$field_name" value="@{[$val]}">
        </div>
      </div>
    |;
  }
  $out .= $self->render_buttons;
  $out .= '</div>';
  return $out;
}

sub render_view {
  my ($self) = @_;
  my $out = '<div class="view">';
  my %attrmap = %{ $self->meta->get_attribute_map };
  while( my ($name, $attr) = each %attrmap ) {
    my $reader = $attr->get_read_method;
    my $val = $self->$reader || '';
    my $field_name = $self->field_name($name);
    $out .= qq|
      <div class=fieldholder>
        <div class=label> @{[$attr->label]} </div>
        <div class=field>
          @{[$val]}
        </div>
      </div>
    |;
  }
  $out .= $self->render_buttons;
  $out .= '</div>';
  return $out;
}



( run in 0.726 second using v1.01-cache-2.11-cpan-140bd7fdf52 )