comparison Lib/IMPL/Web/View/TTFactory.pm @ 336:86336d451b82

sync
author cin
date Fri, 14 Jun 2013 03:32:55 +0400
parents 75a78cbf7dcf
children f4e14f32cf54
comparison
equal deleted inserted replaced
335:e8be9062ecf2 336:86336d451b82
5 5
6 use Carp qw(carp); 6 use Carp qw(carp);
7 use IMPL::lang qw(:hash is); 7 use IMPL::lang qw(:hash is);
8 use IMPL::Exception(); 8 use IMPL::Exception();
9 use Scalar::Util qw(weaken); 9 use Scalar::Util qw(weaken);
10 use IMPL::Resources::Format qw(FormatMessage);
11 use IMPL::Resources::Strings();
10 12
11 13
12 use IMPL::Const qw(:prop); 14 use IMPL::Const qw(:prop);
13 use IMPL::declare { 15 use IMPL::declare {
14 require => { 16 require => {
27 context => PROP_RW, 29 context => PROP_RW,
28 baseLocation => PROP_RW, 30 baseLocation => PROP_RW,
29 base => PROP_RW, 31 base => PROP_RW,
30 registry => PROP_RO, 32 registry => PROP_RO,
31 blocks => PROP_RO, 33 blocks => PROP_RO,
34 path => PROP_RO,
32 _instance => PROP_RW 35 _instance => PROP_RW
33 ] 36 ]
34 }; 37 };
35 38
36 sub CTOR { 39 sub CTOR {
48 51
49 $this->activation($template->activation || 'new'); 52 $this->activation($template->activation || 'new');
50 $this->template($template); 53 $this->template($template);
51 $this->context($context); 54 $this->context($context);
52 $this->baseLocation($baseLocation); 55 $this->baseLocation($baseLocation);
56 $this->path($path);
53 $this->registry($registry); 57 $this->registry($registry);
54 58
55 if (my $baseTplName = $template->extends) { 59 if (my $baseTplName = $template->extends) {
56 $baseTplName =~ s{^\./}{$baseLocation/}; 60 $baseTplName =~ s{^\./}{$baseLocation/};
57 61
96 while (my ($name,$block) = each %$blocks) { 100 while (my ($name,$block) = each %$blocks) {
97 $context->define_block($name,$block); 101 $context->define_block($name,$block);
98 } 102 }
99 } 103 }
100 104
101 $context->stash->update({ require => sub { 105 $context->stash->update({
102 my ($module) = @_; 106 require => sub {
103 107 my ($module) = @_;
104 $module =~ s/^\.\//$baseLocation\//; 108
105 return $registry->Require($module); 109 $module =~ s/^\.\//$baseLocation\//;
106 }}); 110 return $registry->Require($module);
111 }
112 });
107 } 113 }
108 114
109 sub MergeParameters { 115 sub MergeParameters {
110 my $this = shift; 116 my $this = shift;
111 my $refProps = shift || {}; 117 my $refProps = shift || {};
117 $refProps->{name} ||= $name; 123 $refProps->{name} ||= $name;
118 } 124 }
119 125
120 $refProps->{factory} = $this; 126 $refProps->{factory} = $this;
121 my $ctx = $this->CloneContext(); 127 my $ctx = $this->CloneContext();
128
129 my $t = $ctx;
130 weaken($t);
131
132 $ctx->stash->update({
133 strings => sub {
134 my ($labels) = @_;
135 if(ref($labels) eq 'HASH') {
136 #TODO make strings map shared between controls
137 my $map;
138 my $vars;
139 while(my ($label,$text) = each %$labels) {
140 $vars->{$label} = sub {
141 my ($params) = @_;
142
143 my $locale = 'ru_RU';
144
145 unless($map->{$locale}) {
146 my $file = $this->registry->loader->ResolveFileName($this->path);
147 if($file and -f "$file.$locale") {
148 warn "STRINGS: $file.$locale";
149 $map->{$locale} = IMPL::Resources::String::ParseStringsMap("$file.$locale");
150 } else {
151 $map->{$locale} = {};
152 }
153 }
154
155 return FormatMessage(($map->{$locale}{$label} || $text),$params);
156 }
157 }
158 $t->stash->update($vars);
159 }
160 return;
161 }
162 });
122 163
123 return ($this->template, $ctx, $refProps); 164 return ($this->template, $ctx, $refProps);
124 } 165 }
125 166
126 sub CreateObject { 167 sub CreateObject {