修訂 | 120 (tree) |
---|---|
時間 | 2008-09-19 00:16:41 |
作者 | junkikuchi |
updated.
@@ -13,6 +13,12 @@ | ||
13 | 13 | :row => {'name' => 'admin'}, |
14 | 14 | :relation => {'default_view' => 'view:admin.login'}, |
15 | 15 | }, |
16 | + { | |
17 | + :name => 'preview', | |
18 | + :class => 'Service', | |
19 | + :row => {'name' => 'preview'}, | |
20 | + :relation => {'default_view' => 'view:admin'}, | |
21 | + }, | |
16 | 22 | ], |
17 | 23 | |
18 | 24 | 'view' => [ |
@@ -33,6 +39,12 @@ | ||
33 | 39 | :row => {'name' => 'content'}, |
34 | 40 | :relation => {'resource' => 'widget:admin.session.user.doc.bd.view.widget'}, |
35 | 41 | }, |
42 | + { | |
43 | + :name => 'admin.preview', | |
44 | + :class => 'View', | |
45 | + :row => {'name' => 'preview'}, | |
46 | + :relation => {'resource' => 'widget:admin'}, | |
47 | + }, | |
36 | 48 | |
37 | 49 | { |
38 | 50 | :name => 'user', |
@@ -56,14 +68,14 @@ | ||
56 | 68 | { |
57 | 69 | :name => 'admin', |
58 | 70 | :class => 'Widget::HTML', |
59 | - :row => {}, | |
60 | 71 | :relation => {'view' => 'view:admin'}, |
61 | - :property => {}, | |
72 | + :css => { | |
73 | + 'li ul_margin_margin-left' => '15px', | |
74 | + } | |
62 | 75 | }, |
63 | 76 | { |
64 | 77 | :name => 'admin.session', |
65 | 78 | :class => 'Widget::Session', |
66 | - :row => {}, | |
67 | 79 | :relation => {'view' => 'view:admin'}, |
68 | 80 | :property => { |
69 | 81 | :table_name => 'adminsession' |
@@ -72,7 +84,6 @@ | ||
72 | 84 | { |
73 | 85 | :name => 'admin.session.user', |
74 | 86 | :class => 'Widget::User', |
75 | - :row => {}, | |
76 | 87 | :relation => {'view' => 'view:admin'}, |
77 | 88 | :property => { |
78 | 89 | :table_name => 'admin', |
@@ -83,7 +94,6 @@ | ||
83 | 94 | { |
84 | 95 | :name => 'admin.session.user.reset', |
85 | 96 | :class => 'Widget::HTML::CSS', |
86 | - :row => {}, | |
87 | 97 | :relation => {'view' => 'view:admin'}, |
88 | 98 | :property => { |
89 | 99 | :src => '/yui/build/reset-fonts-grids/reset-fonts-grids.css' |
@@ -92,7 +102,6 @@ | ||
92 | 102 | { |
93 | 103 | :name => 'admin.session.user.jquery', |
94 | 104 | :class => 'Widget::HTML::JavaScript', |
95 | - :row => {}, | |
96 | 105 | :relation => {'view' => 'view:admin'}, |
97 | 106 | :property => { |
98 | 107 | :src => '/jquery.js' |
@@ -101,7 +110,6 @@ | ||
101 | 110 | { |
102 | 111 | :name => 'admin.session.user.jquery-ui', |
103 | 112 | :class => 'Widget::HTML::JavaScript', |
104 | - :row => {}, | |
105 | 113 | :relation => {'view' => 'view:admin'}, |
106 | 114 | :property => { |
107 | 115 | :src => '/jquery-ui.js' |
@@ -110,7 +118,6 @@ | ||
110 | 118 | { |
111 | 119 | :name => 'admin.session.user.doc', |
112 | 120 | :class => 'Widget::Panel', |
113 | - :row => {}, | |
114 | 121 | :relation => {'view' => 'view:admin'}, |
115 | 122 | :property => { |
116 | 123 | :html_attr_id => 'doc3', |
@@ -120,7 +127,6 @@ | ||
120 | 127 | { |
121 | 128 | :name => 'admin.session.user.doc.hd', |
122 | 129 | :class => 'Widget::Panel', |
123 | - :row => {}, | |
124 | 130 | :relation => {'view' => 'view:admin'}, |
125 | 131 | :property => { |
126 | 132 | :html_attr_id => 'hd' |
@@ -129,7 +135,6 @@ | ||
129 | 135 | { |
130 | 136 | :name => 'admin.session.user.doc.bd', |
131 | 137 | :class => 'Widget::Panel', |
132 | - :row => {}, | |
133 | 138 | :relation => {'view' => 'view:admin'}, |
134 | 139 | :property => { |
135 | 140 | :html_attr_id => 'bd' |
@@ -138,7 +143,6 @@ | ||
138 | 143 | { |
139 | 144 | :name => 'admin.session.user.doc.ft', |
140 | 145 | :class => 'Widget::Panel', |
141 | - :row => {}, | |
142 | 146 | :relation => {'view' => 'view:admin'}, |
143 | 147 | :property => { |
144 | 148 | :html_attr_id => 'ft' |
@@ -148,30 +152,23 @@ | ||
148 | 152 | { |
149 | 153 | :name => 'admin.session.user.doc.bd.login', |
150 | 154 | :class => 'Widget::User::Login', |
151 | - :row => {}, | |
152 | 155 | :relation => {'view' => 'view:admin.login'}, |
153 | - :property => {}, | |
154 | 156 | }, |
155 | 157 | |
156 | 158 | { |
157 | 159 | :name => 'admin.session.user.doc.bd.view', |
158 | 160 | :class => 'Widget::View', |
159 | - :row => {}, | |
160 | 161 | :relation => {'view' => 'view:admin.content'}, |
161 | - :property => {}, | |
162 | 162 | }, |
163 | 163 | { |
164 | 164 | :name => 'admin.session.user.doc.bd.view.widget', |
165 | 165 | :class => 'Widget::Widget', |
166 | - :row => {}, | |
167 | 166 | :relation => {'view' => 'view:admin.content'}, |
168 | - :property => {}, | |
169 | 167 | }, |
170 | 168 | |
171 | 169 | { |
172 | 170 | :name => 'admin.session.user.doc.bd.view.widget.yui-main', |
173 | 171 | :class => 'Widget::Panel', |
174 | - :row => {}, | |
175 | 172 | :relation => {'view' => 'view:admin.content'}, |
176 | 173 | :property => { |
177 | 174 | :html_attr_id => 'yui-main' |
@@ -180,7 +177,6 @@ | ||
180 | 177 | { |
181 | 178 | :name => 'admin.session.user.doc.bd.view.widget.yui-main.yui-b', |
182 | 179 | :class => 'Widget::Panel', |
183 | - :row => {}, | |
184 | 180 | :relation => {'view' => 'view:admin.content'}, |
185 | 181 | :property => { |
186 | 182 | :html_attr_class => 'yui-b' |
@@ -189,7 +185,6 @@ | ||
189 | 185 | { |
190 | 186 | :name => 'admin.session.user.doc.bd.view.widget.yui-b', |
191 | 187 | :class => 'Widget::Panel', |
192 | - :row => {}, | |
193 | 188 | :relation => {'view' => 'view:admin.content'}, |
194 | 189 | :property => { |
195 | 190 | :html_attr_class => 'yui-b' |
@@ -198,58 +193,56 @@ | ||
198 | 193 | { |
199 | 194 | :name => 'admin.session.user.doc.hd.logout', |
200 | 195 | :class => 'Widget::User::Logout', |
201 | - :row => {}, | |
202 | 196 | :relation => {'view' => 'view:admin.content'}, |
203 | - :property => {}, | |
204 | 197 | }, |
205 | 198 | { |
206 | 199 | :name => 'admin.session.user.doc.bd.view.widget.yui-b.view-tree', |
207 | 200 | :class => 'Widget::View::Tree', |
208 | - :row => {}, | |
209 | 201 | :relation => {'view' => 'view:admin.content'}, |
210 | - :property => {}, | |
202 | + :css => { | |
203 | + 'a.selected_background_background-color'=> 'silver', | |
204 | + } | |
211 | 205 | }, |
212 | 206 | { |
213 | 207 | :name => 'admin.session.user.doc.bd.view.widget.yui-b.widget-tree', |
214 | 208 | :class => 'Widget::Widget::Tree', |
215 | - :row => {}, | |
216 | 209 | :relation => {'view' => 'view:admin.content'}, |
217 | - :property => {}, | |
210 | + :css => { | |
211 | + 'a.selected_background_background-color'=> 'silver', | |
212 | + } | |
218 | 213 | }, |
219 | 214 | { |
220 | 215 | :name => 'admin.session.user.doc.bd.view.widget.yui-b.widget-property', |
221 | 216 | :class => 'Widget::Widget::Property', |
222 | - :row => {}, | |
223 | 217 | :relation => {'view' => 'view:admin.content'}, |
224 | - :property => {}, | |
225 | 218 | }, |
226 | 219 | { |
227 | 220 | :name => 'admin.session.user.doc.bd.view.widget.yui-b.widget-css', |
228 | 221 | :class => 'Widget::Widget::CSS', |
229 | - :row => {}, | |
230 | 222 | :relation => {'view' => 'view:admin.content'}, |
231 | - :property => {}, | |
232 | 223 | }, |
233 | 224 | |
234 | 225 | { |
235 | 226 | :name => 'admin.session.user.doc.bd.view.widget.yui-main.yui-b.preview', |
236 | 227 | :class => 'Widget::Widget::Preview', |
237 | - :row => {}, | |
238 | 228 | :relation => {'view' => 'view:admin.content'}, |
239 | - :property => {}, | |
229 | + :property => { | |
230 | + :preview_service => 'preview' | |
231 | + }, | |
232 | + :css => { | |
233 | + '_size_width' => '100%', | |
234 | + '_size_height' => '500px', | |
235 | + } | |
240 | 236 | }, |
241 | 237 | |
242 | 238 | { |
243 | 239 | :name => 'user', |
244 | 240 | :class => 'Widget::HTML', |
245 | - :row => {}, | |
246 | 241 | :relation => {'view' => 'view:user'}, |
247 | - :property => {}, | |
248 | 242 | }, |
249 | 243 | { |
250 | 244 | :name => 'user.session', |
251 | 245 | :class => 'Widget::Session', |
252 | - :row => {}, | |
253 | 246 | :relation => {'view' => 'view:user'}, |
254 | 247 | :property => { |
255 | 248 | :table_name => 'usersession' |
@@ -258,7 +251,6 @@ | ||
258 | 251 | { |
259 | 252 | :name => 'user.session.user', |
260 | 253 | :class => 'Widget::User', |
261 | - :row => {}, | |
262 | 254 | :relation => {'view' => 'view:user'}, |
263 | 255 | :property => { |
264 | 256 | :login_view => :'view:user.content', |
@@ -268,16 +260,12 @@ | ||
268 | 260 | { |
269 | 261 | :name => 'user.session.user.login', |
270 | 262 | :class => 'Widget::User::Login', |
271 | - :row => {}, | |
272 | 263 | :relation => {'view' => 'view:user.login'}, |
273 | - :property => {}, | |
274 | 264 | }, |
275 | 265 | { |
276 | 266 | :name => 'user.session.user.logout', |
277 | 267 | :class => 'Widget::User::Logout', |
278 | - :row => {}, | |
279 | 268 | :relation => {'view' => 'view:user.content'}, |
280 | - :property => {}, | |
281 | 269 | }, |
282 | 270 | ], |
283 | 271 |
@@ -85,6 +85,10 @@ | ||
85 | 85 | end.join('&') |
86 | 86 | end |
87 | 87 | |
88 | + def key?(val) | |
89 | + @query.key?(val) | |
90 | + end | |
91 | + | |
88 | 92 | def empty? |
89 | 93 | @query.empty? |
90 | 94 | end |
@@ -17,6 +17,13 @@ | ||
17 | 17 | end |
18 | 18 | end |
19 | 19 | |
20 | + attr_accessor :klass | |
21 | + | |
22 | + def initialize(klass=Tenarai::Container::Value) | |
23 | + super() | |
24 | + @klass = klass | |
25 | + end | |
26 | + | |
20 | 27 | def <<(val) |
21 | 28 | if key?(val.name) |
22 | 29 | raise DuplexNameError, '`%s` is already registered' % val.name |
@@ -36,6 +43,14 @@ | ||
36 | 43 | val |
37 | 44 | end |
38 | 45 | |
46 | + def []=(key, val) | |
47 | + if key?(key) | |
48 | + self[key].value = val | |
49 | + else | |
50 | + self << @klass.new(key, val) | |
51 | + end | |
52 | + end | |
53 | + | |
39 | 54 | def key?(key) |
40 | 55 | !assoc(key).nil? |
41 | 56 | end |
@@ -79,7 +79,7 @@ | ||
79 | 79 | def create_row(model, map, init_model) |
80 | 80 | init_model.each do |key, val| |
81 | 81 | val.each do |v| |
82 | - obj = Tenarai::ClassLoader[v[:class]].new(model[key], v[:row]) | |
82 | + obj = Tenarai::ClassLoader[v[:class]].new(model[key], v[:row] || {}) | |
83 | 83 | obj.save |
84 | 84 | |
85 | 85 | map[key] ||= {} |
@@ -112,7 +112,7 @@ | ||
112 | 112 | end if v[:relation] |
113 | 113 | |
114 | 114 | v[:property].each do |pk, pv| |
115 | - p [pk, pv] | |
115 | + p [:property, pk, pv] | |
116 | 116 | if pv.is_a? Symbol |
117 | 117 | mk, mv = pv.to_s.split(':') |
118 | 118 | pv = map[mk][mv].primary_key.to_s |
@@ -122,6 +122,11 @@ | ||
122 | 122 | a.property[pk] = pv if a.property.key?(pk) |
123 | 123 | end if v[:property] |
124 | 124 | |
125 | + v[:css].each do |ck, cv| | |
126 | + p [:css, ck, cv] | |
127 | + map[key][v[:name]].css << Tenarai::Container::Value.new(ck, cv) | |
128 | + end if v[:css] | |
129 | + | |
125 | 130 | map[key][v[:name]].save |
126 | 131 | end |
127 | 132 | end |
@@ -25,6 +25,12 @@ | ||
25 | 25 | end |
26 | 26 | end |
27 | 27 | |
28 | + class << self | |
29 | + def create_row(class_name, table, row) | |
30 | + Tenarai::ClassLoader[class_name].new(table, row) | |
31 | + end | |
32 | + end | |
33 | + | |
28 | 34 | column Tenarai::DB::String.new('name', :length => 255) |
29 | 35 | column Tenarai::DB::Reference.new('default_view') |
30 | 36 | index Tenarai::DB::Index.new('name_idx', :cols => ['name'], :unique => true) |
@@ -47,10 +53,8 @@ | ||
47 | 53 | |
48 | 54 | def dispatch(model, param, request, response) |
49 | 55 | @model = model |
50 | - | |
51 | 56 | @request = request |
52 | 57 | @response = response |
53 | - | |
54 | 58 | @view = @model['view'].fetch(param.shift) || default_view |
55 | 59 | @view.render(self, param) |
56 | 60 | rescue Service::Error => err |
@@ -29,7 +29,7 @@ | ||
29 | 29 | |
30 | 30 | def init(builder, service, _id=nil) |
31 | 31 | super |
32 | - auth | |
32 | + auth unless builder.preview? | |
33 | 33 | end |
34 | 34 | |
35 | 35 | def content |
@@ -9,12 +9,23 @@ | ||
9 | 9 | class Preview < ::Widget |
10 | 10 | extend Tenarai::ClassLoader |
11 | 11 | |
12 | + property :preview_service | |
12 | 13 | css |
13 | 14 | |
14 | 15 | def render_html(head, body) |
15 | 16 | body.tag( |
16 | 17 | 'iframe', |
17 | - html_attr.merge('src' => @service.uri(resource.resource.view)) | |
18 | + if @builder.preview? | |
19 | + html_attr | |
20 | + else | |
21 | + html_attr.merge( | |
22 | + 'src' => @service.model['service'].fetch_by_name( | |
23 | + property[:preview_service] | |
24 | + ).uri( | |
25 | + resource.resource.content | |
26 | + ) do |query| query['preview'] = '' end | |
27 | + ) | |
28 | + end | |
18 | 29 | ) do |iframe| |
19 | 30 | iframe.text('') |
20 | 31 | end |
@@ -52,7 +52,7 @@ | ||
52 | 52 | end |
53 | 53 | end |
54 | 54 | |
55 | - def post(query={}) | |
55 | + def post(query=Tenarai::CGI::Query.new) | |
56 | 56 | query.each do |key, val| |
57 | 57 | resource.content.property[key.to_sym] = if val.empty? |
58 | 58 | nil |
@@ -123,14 +123,14 @@ | ||
123 | 123 | xml.tag('h3').text( |
124 | 124 | if val.name.to_s.empty? then 'CSS' else val.name end |
125 | 125 | ) |
126 | - xml.tag( | |
127 | - 'form', | |
128 | - 'method' => 'post', | |
129 | - 'action' => uri(@builder.view, resource.content.id) do |query| | |
130 | - query[form_id('update')] = nil | |
131 | - end | |
132 | - ) do |form| | |
133 | - self.class::CSS.each do |css| | |
126 | + self.class::CSS.each do |css| | |
127 | + xml.tag( | |
128 | + 'form', | |
129 | + 'method' => 'post', | |
130 | + 'action' => uri(@builder.view, resource.content.id) do |query| | |
131 | + query[form_id('update')] = nil | |
132 | + end | |
133 | + ) do |form| | |
134 | 134 | form.tag('h4').text(css.name) |
135 | 135 | form.tag('dl') do |dl| |
136 | 136 | css.value.each do |selector| |
@@ -170,9 +170,8 @@ | ||
170 | 170 | end |
171 | 171 | end |
172 | 172 | |
173 | - def post(query={}) | |
173 | + def post(query=Tenarai::CGI::Query.new) | |
174 | 174 | css = resource.content.css |
175 | - | |
176 | 175 | query.inject({}) do |ret, (key, val)| |
177 | 176 | s, g, a = key.split('_') |
178 | 177 | ret[s] ||= {} |
@@ -186,11 +185,7 @@ | ||
186 | 185 | if val.empty? |
187 | 186 | css.delete(key) |
188 | 187 | else |
189 | - if css.key?(key) | |
190 | - css.fetch(key).value = val | |
191 | - else | |
192 | - css << Tenarai::Container::Value.new(key, val) | |
193 | - end | |
188 | + css[key] = val | |
194 | 189 | end |
195 | 190 | end |
196 | 191 | end |
@@ -17,10 +17,6 @@ | ||
17 | 17 | css 'label' |
18 | 18 | css 'input', 'input[type="text"]', 'input[type="password"]' |
19 | 19 | css 'submit', 'input[type="submit"]' |
20 | - | |
21 | - def post(query={}) | |
22 | - resource.login(query['username'], query['password']) | |
23 | - end | |
24 | 20 | |
25 | 21 | def render_html(head, body) |
26 | 22 | body.tag('div', html_attr) do |div| |
@@ -68,6 +64,10 @@ | ||
68 | 64 | end |
69 | 65 | end |
70 | 66 | end |
67 | + | |
68 | + def post(query=Tenarai::CGI::Query.new) | |
69 | + resource.login(query['username'], query['password']) | |
70 | + end | |
71 | 71 | end |
72 | 72 | end |
73 | 73 | end |
@@ -164,9 +164,9 @@ | ||
164 | 164 | end |
165 | 165 | end |
166 | 166 | |
167 | - def get(param={}) | |
167 | + def get(param=Tenarai::CGI::Query.new) | |
168 | 168 | end |
169 | 169 | |
170 | - def post(param={}) | |
170 | + def post(param=Tenari::CGI::Query.new) | |
171 | 171 | end |
172 | 172 | end |
@@ -9,7 +9,7 @@ | ||
9 | 9 | extend Tenarai::ClassLoader |
10 | 10 | |
11 | 11 | def parse_query(service) |
12 | - ws, rs = {}, {} | |
12 | + ws, rs, qs = {}, {}, Tenarai::CGI::Query.new | |
13 | 13 | |
14 | 14 | if service.request.method == 'post' |
15 | 15 | #service.request.query.merge(service.request.body) |
@@ -27,16 +27,20 @@ | ||
27 | 27 | if w = service.model['widget'].fetch($1) |
28 | 28 | rs[w] = val.split(',').map do |val| Tenarai::CGI.decode(val) end |
29 | 29 | end |
30 | + else | |
31 | + qs[key] = val | |
30 | 32 | end |
31 | 33 | end |
32 | 34 | |
33 | - [ws, rs] | |
35 | + [ws, rs, qs] | |
34 | 36 | end |
35 | 37 | private :parse_query |
36 | 38 | |
37 | 39 | def build_widget(view, service, param) |
38 | - ws, rs = parse_query(service) | |
40 | + ws, rs, qs = parse_query(service) | |
39 | 41 | |
42 | + @preview = true if qs.key?('preview') | |
43 | + | |
40 | 44 | widget = {} |
41 | 45 | view.widget.each do |val| |
42 | 46 | unless val.parent.nil? |
@@ -66,8 +70,13 @@ | ||
66 | 70 | @view = view |
67 | 71 | @service = service |
68 | 72 | @param = param |
73 | + @preview = false | |
69 | 74 | end |
70 | 75 | |
76 | + def preview? | |
77 | + @preview | |
78 | + end | |
79 | + | |
71 | 80 | def each(widget, &block) |
72 | 81 | unless empty?(widget) |
73 | 82 | @widget[widget.id].each(&block) |