Mercurial > pub > Impl
comparison Lib/IMPL/Web/TT/Form.pm @ 124:e30bdd040fe3
IMPL::Web::TT::Form concept
author | wizard |
---|---|
date | Thu, 10 Jun 2010 02:45:59 +0400 |
parents | a7efb3117295 |
children | c8dfbbdd8005 |
comparison
equal
deleted
inserted
replaced
123:1d7e370a91fa | 124:e30bdd040fe3 |
---|---|
1 use strict; | 1 use strict; |
2 package IMPL::Web::TT::Form; | 2 package IMPL::Web::TT::Form; |
3 | 3 |
4 use base qw(IMPL::Web::TT::Control); | 4 use base qw(IMPL::Web::TT::Control); |
5 | |
6 use IMPL::Class::Property; | |
7 use IMPL::DOM::Navigator::SchemaNavigator; | |
8 use IMPL::DOM::Property qw(_dom); | |
9 | |
10 __PACKAGE__->PasssThroughArgs; | |
11 | |
12 BEGIN { | |
13 public property base => prop_all; | |
14 public property schema => prop_all; | |
15 public property errors => prop_all; | |
16 public property data => prop_all; | |
17 } | |
18 | |
19 sub CTOR { | |
20 my ($this) = @_; | |
21 | |
22 $this->base($this->nodeName) unless $this->base; | |
23 | |
24 die new IMPL::InvalidArgumentException('A schema is required for a form',$this->nodeName) | |
25 unless eval { $this->schema->isa( typeof IMPL::DOM::Schema ) }; | |
26 | |
27 die new IMPL::InvalidOperationException('Can\'t find a form definition in a schema',$this->nodeName,$this->base) | |
28 unless $this->schema->selectNodes(sub { $_->nodeName eq 'ComplexNode' and $_->name eq $this->base }); | |
29 } | |
30 | |
31 sub createControl { | |
32 my ($this, $path, $class, $hashArgs) = @_; | |
33 | |
34 my $navi = new IMPL::DOM::Navigator::SchemaNavigator($this->schema); | |
35 | |
36 $navi->NavigateName($_) or die new IMPL::InvalidAgrumentException( | |
37 "Can't find a definition for an element", | |
38 $_, | |
39 $path, | |
40 $this->element | |
41 ) foreach $this->base, split /\./,$path; | |
42 | |
43 my $schema = $navi->Current; | |
44 my @errors = grep $_->Source == $navi->SourceSchemaNode | |
45 } | |
5 | 46 |
6 | 47 |
7 1; | 48 1; |
8 | 49 |
9 __END__ | 50 __END__ |