Mercurial > pub > Impl
comparison Lib/IMPL/DOM/Transform/QueryToDOM.pm @ 238:b8c724f6de36
DOM model refactoring
TT view refactoring, controls are no longer derived from DOM nodes
bugfixes
author | sergey |
---|---|
date | Tue, 16 Oct 2012 01:33:06 +0400 |
parents | 61db68166c37 |
children | a02b110da931 |
comparison
equal
deleted
inserted
replaced
237:61db68166c37 | 238:b8c724f6de36 |
---|---|
6 base => [ | 6 base => [ |
7 'IMPL::DOM::Transform::ObjectToDOM' => '@_' | 7 'IMPL::DOM::Transform::ObjectToDOM' => '@_' |
8 ], | 8 ], |
9 props => [ | 9 props => [ |
10 prefix => PROP_RO, | 10 prefix => PROP_RO, |
11 delimier => PROP_RO | 11 delimiter => PROP_RO |
12 ] | 12 ] |
13 }; | 13 }; |
14 | 14 |
15 sub CTOR { | 15 sub CTOR { |
16 my ($this) = @_; | 16 my ($this) = @_; |
17 | 17 |
18 $this->templates->{'CGI'} = \&TransformCGI; | 18 $this->templates->{'CGI'} = \&TransformCGI; |
19 $this->templates->{'CGIWrapper'} = \&TransformCGI; | 19 $this->templates->{'CGIWrapper'} = \&TransformCGI; |
20 | 20 |
21 $this->delimier('.'); | 21 $this->delimiter('[.]'); |
22 $this->prefix(''); | |
22 } | 23 } |
23 | 24 |
24 sub TransformCGI { | 25 sub TransformCGI { |
25 my ($this,$query) = @_; | 26 my ($this,$query) = @_; |
26 | 27 |
30 my $delim = $this->delimiter; | 31 my $delim = $this->delimiter; |
31 | 32 |
32 foreach my $param (grep index($_,$prefix) >= 0 , $query->param()) { | 33 foreach my $param (grep index($_,$prefix) >= 0 , $query->param()) { |
33 length (my $value = $query->param($param)) or next; | 34 length (my $value = $query->param($param)) or next; |
34 | 35 |
35 my @parts = split /\//,$param; | 36 my @parts = split /$delim/,$param; |
36 | 37 |
37 my $node = $data; | 38 my $node = $data; |
38 while ( my $part = shift @parts ) { | 39 while ( my $part = shift @parts ) { |
39 if (@parts) { | 40 if (my ($name,$index) = ($part =~ m/^(\w+)(?:\[(\d+)\])?$/) ) { |
40 $node = ($node->{$part} ||= {}); | 41 if (@parts) { |
41 } else { | 42 if(defined $index) { |
42 $node->{$part} = $value; | 43 $node = ($node->{$name}[$index] ||= {}); |
44 } else { | |
45 $node = ($node->{$name} ||= {}); | |
46 } | |
47 } else { | |
48 if(defined $index) { | |
49 $node->{$name}[$index] = $value; | |
50 } else { | |
51 $node->{$name} = $value; | |
52 } | |
53 } | |
43 } | 54 } |
44 } | 55 } |
45 } | 56 } |
46 | 57 |
47 if (keys %$data > 1) { | |
48 $data = { document => $data }; | |
49 } | |
50 | |
51 return $this->Transform($data); | 58 return $this->Transform($data); |
52 } | 59 } |
60 | |
61 1; |