/lib/HTML/FormHandler/Pages.pm

http://github.com/gshank/html-formhandler · Perl · 68 lines · 57 code · 8 blank · 3 comment · 7 complexity · 10024b0c33c232feb742abdd3e9dd597 MD5 · raw file

  1. package HTML::FormHandler::Pages;
  2. # ABSTRACT: used in Wizard
  3. use Moose::Role;
  4. has 'pages' => (
  5. traits => ['Array'],
  6. isa => 'ArrayRef[HTML::FormHandler::Page]',
  7. is => 'rw',
  8. default => sub { [] },
  9. auto_deref => 1,
  10. handles => {
  11. all_pages => 'elements',
  12. clear_pages => 'clear',
  13. push_page => 'push',
  14. num_pages => 'count',
  15. has_pages => 'count',
  16. set_page_at => 'set',
  17. get_page => 'get',
  18. }
  19. );
  20. has 'page_name_space' => (
  21. isa => 'Str|ArrayRef[Str]|Undef',
  22. is => 'rw',
  23. lazy => 1,
  24. builder => 'build_page_name_space',
  25. );
  26. sub build_page_name_space { '' }
  27. sub page_index {
  28. my ( $self, $name ) = @_;
  29. my $index = 0;
  30. for my $page ( $self->all_pages ) {
  31. return $index if $page->name eq $name;
  32. $index++;
  33. }
  34. return;
  35. }
  36. sub page {
  37. my ( $self, $name, $die ) = @_;
  38. my $index;
  39. # if this is a full_name for a compound page
  40. # walk through the pages to get to it
  41. return undef unless ( defined $name );
  42. if ( $name =~ /\./ ) {
  43. my @names = split /\./, $name;
  44. my $f = $self->form || $self;
  45. foreach my $pname (@names) {
  46. $f = $f->page($pname);
  47. return unless $f;
  48. }
  49. return $f;
  50. }
  51. else # not a compound name
  52. {
  53. for my $page ( $self->all_pages ) {
  54. return $page if ( $page->name eq $name );
  55. }
  56. }
  57. return unless $die;
  58. die "Page '$name' not found in '$self'";
  59. }
  60. 1;