OSDN Git Service

fix new element dialog
[pettanr/pettanr.git] / app / assets / javascripts / editor / panel_editor / dock.js.coffee
1 class Editor.PanelEditor.Dock extends Editor.EditorModule.DockBase\r
2   tagName: 'div'\r
3   className: 'dock'\r
4   \r
5   initialize: (options) ->\r
6     super(options)\r
7     @root_bay = new Editor.EditorModule.DockModule.RootBay({\r
8       parent: this, index: 0, name: 'panel'\r
9     })\r
10     @add_tab(\r
11       @root_bay, \r
12       new Editor.EditorModule.DockModule.TabModule.RootBayLabel({\r
13         parent: @root_bay, caption: 'panel'\r
14       }), \r
15       new Editor.EditorModule.DockModule.TabModule.RootBayBody({\r
16         parent: @root_bay\r
17       })\r
18     )\r
19     @element_bay = new Editor.EditorModule.DockModule.ElementBay({\r
20       parent: this, index: 1, name: 'elements'\r
21     })\r
22     @add_tab(\r
23       @element_bay, \r
24       new Editor.EditorModule.DockModule.TabModule.ElementBayLabel({\r
25         parent: @element_bay, caption: 'elements'\r
26       }), \r
27       new Editor.EditorModule.DockModule.TabModule.ElementBayBody({\r
28         parent: @element_bay\r
29       })\r
30     )\r
31     @scenario_bay = new Editor.EditorModule.DockModule.ScenarioBay({\r
32       parent: this, index: 2, name: 'scenario'\r
33     })\r
34     @add_tab(\r
35       @scenario_bay, \r
36       new Editor.EditorModule.DockModule.TabModule.ScenarioBayLabel({\r
37         parent: @scenario_bay, caption: 'scenario'\r
38       }), \r
39       new Editor.EditorModule.DockModule.TabModule.ScenarioBayBody({\r
40         parent: @scenario_bay\r
41       })\r
42     )\r
43   \r
44   render: () ->\r
45     this.$el.html('')\r
46     l = _.map @tabs, (tab) ->\r
47       tab.label\r
48     labels = new Tag.Ul({contents: l, class_name: @dom_labels_class()})\r
49     this.$el.append(labels.render().el)\r
50     _.each @tabs, (tab) =>\r
51       this.$el.append(tab.render().el)\r
52     this\r
53   \r
54   add_element: (element) ->\r
55     @element_bay.add_element(element)\r
56   \r
57   editor: () ->\r
58     @parent\r
59   \r
60   dom_id: () ->\r
61     @editor().dom_id() + '-dock'\r
62   \r
63   dom_class: () ->\r
64     @editor().dom_class() + '-dock'\r
65   \r
66   dom_labels_class: () ->\r
67     @dom_class() + '-labels'\r
68   \r
69 class Editor.EditorModule.DockModule.RootBay extends Editor.EditorModule.DockModule.SimpleBay\r
70   \r
71   render: () ->\r
72     @body.render()\r
73   \r
74 class Editor.EditorModule.DockModule.TabModule.RootBayLabel extends Editor.EditorModule.DockModule.TabModule.BayLabel\r
75   \r
76 class Editor.EditorModule.DockModule.TabModule.RootBayBody extends Editor.EditorModule.DockModule.TabModule.BayBody\r
77   \r
78   initialize: (options) ->\r
79     super(options)\r
80     @form = new Locmare.Bucket.factory(\r
81       @root_item().item_name(), \r
82       @root_item(), \r
83       @mounted(), \r
84       'default', \r
85       @dock().editor().operators\r
86     )\r
87     @bucket = new Editor.EditorModule.DockModule.FormBucket({\r
88       parent: this, form: @form\r
89     })\r
90   \r
91   render: () ->\r
92     super()\r
93     @el.className = @bay().body.dom_class()\r
94     this.$el.html(@bucket.render().el)\r
95     this\r
96   \r
97   mounted: () ->\r
98     true\r
99   \r
100   dock: () ->\r
101     @parent.dock()\r
102   \r
103   root_item: () ->\r
104     @dock().root_item()\r
105   \r
106 class Editor.EditorModule.DockModule.ElementBay extends Editor.EditorModule.DockModule.BoardBay\r
107   \r
108   initialize: (options) ->\r
109     super(options)\r
110     @elements_tabs = new Editor.EditorModule.DockModule.ElementBay.ElementsTabs({\r
111     })\r
112     @listenTo(@elements_tabs, 'sorted', @sorted)\r
113   \r
114   add_element: (element) ->\r
115     index = element.get('z') - 1\r
116     tab = new Editor.EditorModule.DockModule.ElementBoard({\r
117       parent: this, index: index, name: element.item_name(), element: element\r
118     })\r
119     bb = new Editor.EditorModule.DockModule.TabModule.ElementBoardBody({parent: tab})\r
120     @add_tab(\r
121       tab, \r
122       new Editor.EditorModule.DockModule.TabModule.ElementBoardLabel({parent: tab, name: element.item_name()}), \r
123       bb\r
124     )\r
125     @elements_tabs.add_element_tab(tab)\r
126     @elements_tabs.$el.tabs('refresh')\r
127     bb.form\r
128   \r
129   add_new_tab: () ->\r
130     tab = new Editor.EditorModule.DockModule.NewElementBoard({\r
131       parent: this, index: 0, name: 'new'\r
132     })\r
133     bb = new Editor.EditorModule.DockModule.TabModule.NewElementBoardBody({parent: tab})\r
134     @add_tab(\r
135       tab, \r
136       new Editor.EditorModule.DockModule.TabModule.NewElementBoardLabel({parent: tab}), \r
137       bb\r
138     )\r
139     @elements_tabs.add_element_tab(tab)\r
140   \r
141   render: () ->\r
142     this.$el.html('')\r
143     this.$el.attr('id', @body.dom_id())\r
144     this.$el.append(@elements_tabs.render().el)\r
145     @elements_tabs.$el.tabs()\r
146     # @add_new_tab()\r
147     this\r
148   \r
149   sorted: () ->\r
150     # data-z copy to model\r
151     _.each @tabs, (tab) ->\r
152       if tab.element   # without new_tab\r
153         z = parseInt(tab.label.$el.attr('data-z'))\r
154         tab.element.set({\r
155           z: z\r
156         }, {silent: true})\r
157         tab.element.trigger('sort')\r
158   \r
159   panel_body: () ->\r
160     @dock().editor().body\r
161   \r
162 class Editor.EditorModule.DockModule.ElementBay.ElementsTabs extends Backbone.View\r
163   tagName: 'div'\r
164   className: 'elements_tabs ui-tabs-vertical ui-helper-clearfix'\r
165   \r
166   initialize: (options) ->\r
167     super(options)\r
168     @inner_elements_tabs = new Editor.EditorModule.DockModule.ElementBay.InnerElementsTabs({\r
169     })\r
170     @listenTo(@inner_elements_tabs, 'sorted', @sorted)\r
171   \r
172   render: () ->\r
173     this.$el.html('')\r
174     this.$el.append(@inner_elements_tabs.render().$el)\r
175     this\r
176   \r
177   add_element_tab: (tab) ->\r
178     @inner_elements_tabs.add_label(tab.label)\r
179     this.$el.append(tab.body.render().$el)\r
180   \r
181   sorted: () ->\r
182     # data-z copy to model\r
183     @trigger('sorted')\r
184   \r
185 class Editor.EditorModule.DockModule.ElementBay.InnerElementsTabs extends Backbone.View\r
186   tagName: 'ul'\r
187   \r
188   initialize: (options) ->\r
189     super(options)\r
190     @labels = []\r
191   \r
192   render: () ->\r
193     this.$el.html('')\r
194     this.$el.addClass('inner-elements-tabs')\r
195     _.each @zorderd_labels(), (label) =>\r
196       this.$el.append(label.render().$el)\r
197     _this = this\r
198     this.$el.sortable {\r
199       update: (event, ui) ->\r
200         z = 1\r
201         $('li', $(@)).map ->\r
202           $(@).attr('data-z', z)\r
203           z++\r
204         _this.trigger('sorted')\r
205     }\r
206     this\r
207   \r
208   zorderd_labels: () ->\r
209     res = []\r
210     _.each @labels, (label) =>\r
211       res[label.z()] = label\r
212     res\r
213   \r
214   add_label: (label) ->\r
215     #z = label.z()\r
216     @labels.push(label) # insert array\r
217     @render()\r
218     label.add_label()\r
219   \r
220 class Editor.EditorModule.DockModule.TabModule.ElementBayLabel extends Editor.EditorModule.DockModule.TabModule.BayLabel\r
221   \r
222 class Editor.EditorModule.DockModule.TabModule.ElementBayBody extends Editor.EditorModule.DockModule.TabModule.BayBody\r
223   \r
224   render: () ->\r
225     @body.render()\r
226   \r
227 class Editor.EditorModule.DockModule.ElementBoard extends Editor.EditorModule.DockModule.Board\r
228   \r
229   initialize: (options) ->\r
230     super(options)\r
231     @element = options.element\r
232   \r
233   dom_id: () ->\r
234     super() + '-' + @element.get('id')  # use tab index\r
235   \r
236 class Editor.EditorModule.DockModule.TabModule.ElementBoardLabel extends Editor.EditorModule.DockModule.TabModule.BoardLabel\r
237   \r
238   render: () ->\r
239     super()\r
240     this.$el.attr('data-z', @z())\r
241     this.$el.removeClass('ui-corner-top')\r
242     this.$el.addClass('ui-corner-left')\r
243     _this = this\r
244     this.$el.mouseover -> \r
245       _this.element().trigger('active')\r
246     this.$el.mouseout -> \r
247       _this.element().trigger('inactive')\r
248     this\r
249   \r
250   z: () ->\r
251     @element().get('z')\r
252   \r
253   add_label: () ->\r
254     this.$el.attr('id', @dom_id())\r
255   \r
256 class Editor.EditorModule.DockModule.TabModule.ElementBoardBody extends Editor.EditorModule.DockModule.TabModule.BoardBody\r
257   \r
258   initialize: (options) ->\r
259     super(options)\r
260     @form = Locmare.Form.factory({\r
261       form_name: @element().item_name(), \r
262       item: @element(), \r
263       mounted: @mounted(), \r
264       submit: null, \r
265       operators: @dock().editor().operators,\r
266       action: '/' + @element().table_name() + '/' + Pettanr.to_s(@element().get('id'))\r
267     })\r
268   \r
269   render: () ->\r
270     this.$el.attr('id', @dom_id())\r
271     this.$el.html(@form.render().el)\r
272     this\r
273   \r
274   add_element: (element) ->\r
275     @form.add_element(element)\r
276   \r
277   mounted: () ->\r
278     true\r
279   \r
280   element: () ->\r
281     @parent.element\r
282   \r
283 class Editor.EditorModule.DockModule.NewElementBoard extends Editor.EditorModule.DockModule.Board\r
284   \r
285   initialize: (options) ->\r
286     super(options)\r
287     @panel = @parent.dock().editor().panel\r
288   \r
289 class Editor.EditorModule.DockModule.TabModule.NewElementBoardLabel extends Editor.EditorModule.DockModule.TabModule.BoardLabel\r
290   \r
291   render: () ->\r
292     super()\r
293     this.$el.attr('data-z', @z())\r
294     this.$el.removeClass('ui-corner-top')\r
295     this.$el.addClass('ui-corner-left')\r
296     this\r
297   \r
298   face: () ->\r
299     this.$el.append()\r
300     icon = new Pettanr.Image.SymbolImg({attr: {src: '/images/new.gif'}})\r
301     linked_elements_tab = new Tag.A({\r
302       attr: {href: '#' + @board().body.dom_id() },\r
303       content: icon.render().el\r
304     })\r
305     this.$el.append(linked_elements_tab.render().el)\r
306   \r
307   z: () ->\r
308     0\r
309   \r
310   add_label: () ->\r
311     this.$el.attr('id', @dom_id())\r
312   \r
313 class Editor.EditorModule.DockModule.TabModule.NewElementBoardBody extends Editor.EditorModule.DockModule.TabModule.BoardBody\r
314   \r
315   initialize: (options) ->\r
316     super(options)\r
317   \r
318   render: () ->\r
319     this.$el.attr('id', @dom_id())\r
320     @new_element_pocket = new Editor.EditorModule.DockModule.NewElementPocket({\r
321       parent: this\r
322     })\r
323     this.$el.append(@new_element_pocket.render().el)\r
324     this\r
325   \r
326 class Editor.EditorModule.DockModule.NewElementPocket extends Editor.EditorModule.DockModule.Pocket\r
327   \r
328   initialize: (options) ->\r
329     super(options)\r
330     @button_wrapper = new Editor.EditorModule.DockModule.NewElementPocket.ButtonWrapper({\r
331       parent: this\r
332     })\r
333   \r
334   render: () ->\r
335     this.$el.html('')\r
336     this.$el.append(@button_wrapper.clear().el)\r
337     @add_tabs()\r
338     _.each @tabs, (tab) =>\r
339       this.$el.append(tab.body.render().el)\r
340     @button_wrapper.render()\r
341     this.$el.tabs()\r
342     this\r
343   \r
344   add_tabs: () ->\r
345     index = 0\r
346     _.each @element_models(), (model) =>\r
347       tab = new Editor.EditorModule.DockModule.NewElementPocketTab({\r
348         parent: this, index: index, name: model.item_name(), model: model\r
349       })\r
350       bb = new Editor.EditorModule.DockModule.TabModule.NewElementPocketBody({\r
351         parent: tab\r
352       })\r
353       bl = new Editor.EditorModule.DockModule.TabModule.NewElementPocketLabel({\r
354         parent: tab\r
355       })\r
356       @add_tab(tab, bl, bb)\r
357       @button_wrapper.add_label(bl)\r
358       index++\r
359   \r
360   panel: () ->\r
361     @parent.parent.panel\r
362   \r
363   element_models: () ->\r
364     @panel().my_class().child_models()\r
365   \r
366 class Editor.EditorModule.DockModule.NewElementPocket.ButtonWrapper extends Backbone.View\r
367   tagName: 'div'\r
368   className: 'new_elements_tabs ui-tabs-vertical ui-helper-clearfix'\r
369   \r
370   initialize: (options) ->\r
371     super(options)\r
372     @parent = options.parent\r
373     @buttons = new Editor.EditorModule.DockModule.NewElementPocket.Buttons({\r
374       parent: this\r
375     })\r
376   \r
377   clear: () ->\r
378     this.$el.html('')\r
379     this\r
380   \r
381   render: () ->\r
382     this.$el.append(@buttons.render().$el)\r
383     this\r
384   \r
385   add_label: (label) ->\r
386     @buttons.add_label(label)\r
387   \r
388 class Editor.EditorModule.DockModule.NewElementPocket.Buttons extends Backbone.View\r
389   tagName: 'ul'\r
390   \r
391   initialize: (options) ->\r
392     super(options)\r
393     @parent = options.parent\r
394     @labels = []\r
395   \r
396   render: () ->\r
397     this.$el.html('')\r
398     this.$el.addClass('inner-new-elements-tabs')\r
399     _.each @labels, (label) =>\r
400       this.$el.append(label.render().$el)\r
401     this\r
402   \r
403   add_label: (label) ->\r
404     @labels.push(label)\r
405   \r
406 class Editor.EditorModule.DockModule.TabModule.NewElementPocketLabel extends Editor.EditorModule.DockModule.TabModule.PocketLabel\r
407   \r
408   render: () ->\r
409     super()\r
410     this.$el.removeClass('ui-corner-top')\r
411     this.$el.addClass('ui-corner-left')\r
412     this\r
413   \r
414   add_label: () ->\r
415     this.$el.attr('id', @dom_id())\r
416   \r
417 class Editor.EditorModule.DockModule.TabModule.NewElementPocketBody extends Editor.EditorModule.DockModule.TabModule.PocketBody\r
418   \r
419   initialize: (options) ->\r
420     super(options)\r
421   \r
422   render: () ->\r
423     this.$el.attr('id', @dom_id())\r
424     @params = {controller: @model().path_name(), action: 'index'}\r
425     @list = Locmare.ListGroup.list(\r
426       @model().path_name(), 'index', @operators(), @params\r
427     )\r
428     @list.open(() =>\r
429       pager = Locmare.ListGroupModule.LibModule.Pager.factory(@list.page_status, @params)\r
430       f = new Locmare.Filer({\r
431         el: '#' + @dom_id(),\r
432         item_name: @model().item_name(), \r
433         items: @list.items(), \r
434         pager: pager, \r
435         operators: @operators()\r
436       })\r
437     )\r
438     this\r
439   \r
440   operators: () ->\r
441     @editor().operators\r
442   \r
443   model: () ->\r
444     @pocket_tab().model\r
445   \r
446   editor: () ->\r
447     @dock().parent\r
448   \r
449 class Editor.EditorModule.DockModule.ScenarioBay extends Editor.EditorModule.DockModule.BoardBay\r
450   \r
451   initialize: (options) ->\r
452     super(options)\r
453     i = 0\r
454     _.each @elements(), (element) =>\r
455       tab = new Editor.EditorModule.DockModule.ScenarioBoard({\r
456         parent: this, index: i, name: element.item_name(), element: element\r
457       })\r
458       @add_tab(\r
459         tab, \r
460         new Editor.EditorModule.DockModule.TabModule.ScenarioBoardLabel({parent: tab, caption: element.item_name()}), \r
461         new Editor.EditorModule.DockModule.TabModule.ScenarioBoardBody({parent: tab})\r
462       )\r
463       i++\r
464   \r
465   render: () ->\r
466     this.$el.html('')\r
467     this.$el.attr('id', @body.dom_id())\r
468     elements_tabs = new Editor.EditorModule.DockModule.ScenarioBay.ScenarioTabs({\r
469       tabs: @tabs\r
470     })\r
471     this.$el.append(elements_tabs.render().el)\r
472     _.each @tabs, (tab) =>\r
473       this.$el.append(tab.body.render().el)\r
474     elements_tabs.$el.tabs()\r
475     this\r
476   \r
477   elements: () ->\r
478     @root_item().scenario_elements()\r
479   \r
480   class_name: () ->\r
481     "tsort-box"\r
482   \r
483 class Editor.EditorModule.DockModule.ScenarioBay.ScenarioTabs extends Backbone.View\r
484   tagName: 'ul'\r
485   className: 'tsort'\r
486   \r
487   initialize: (options) ->\r
488     super(options)\r
489     @tabs = options.tabs\r
490   \r
491   render: () ->\r
492     this.$el.html('')\r
493     _.each @tabs, (tab) =>\r
494       this.$el.append(tab.label.render().el)\r
495     this\r
496   \r
497 class Editor.EditorModule.DockModule.TabModule.ScenarioBayLabel extends Editor.EditorModule.DockModule.TabModule.BayLabel\r
498   \r
499 class Editor.EditorModule.DockModule.TabModule.ScenarioBayBody extends Editor.EditorModule.DockModule.TabModule.BayBody\r
500   \r
501   initialize: (options) ->\r
502     super(options)\r
503   \r
504 class Editor.EditorModule.DockModule.ScenarioBoard extends Editor.EditorModule.DockModule.Board\r
505   \r
506   initialize: (options) ->\r
507     super(options)\r
508     @element = options.element\r
509   \r
510 class Editor.EditorModule.DockModule.TabModule.ScenarioBoardLabel extends Editor.EditorModule.DockModule.TabModule.BoardLabel\r
511   \r
512   with_destroy_button: () ->\r
513     false\r
514   \r
515 class Editor.EditorModule.DockModule.TabModule.ScenarioBoardBody extends Editor.EditorModule.DockModule.TabModule.BoardBody\r
516   \r
517   initialize: (options) ->\r
518     super(options)\r
519     @bucket = new Editor.EditorModule.DockModule.ScenarioBucket({\r
520       parent: this\r
521     })\r
522   \r
523 class Editor.EditorModule.DockModule.PriorityBay extends Editor.EditorModule.DockModule.BoardBay\r
524   \r
525   initialize: (options) ->\r
526     super(options)\r
527     i = 0\r
528     _.each @elements(), (element) =>\r
529       tab = new Editor.EditorModule.DockModule.PriorityBoard({\r
530         parent: this, index: i, name: element.item_name(), element: element\r
531       })\r
532       @add_tab(\r
533         tab, \r
534         new Editor.EditorModule.DockModule.TabModule.PriorityBoardLabel({parent: tab, name: element.item_name()}), \r
535         new Editor.EditorModule.DockModule.TabModule.PriorityBoardBody({parent: tab})\r
536       )\r
537       i++\r
538   \r
539   render: () ->\r
540     this.$el.html('')\r
541     this.$el.attr('id', @body.dom_id())\r
542     elements_tabs = new Editor.EditorModule.DockModule.PriorityBay.PriorityTabs({\r
543       tabs: @tabs\r
544     })\r
545     this.$el.append(elements_tabs.render().el)\r
546     _.each @tabs, (tab) =>\r
547       this.$el.append(tab.body.render().el)\r
548     elements_tabs.$el.tabs()\r
549     this\r
550   \r
551   elements: () ->\r
552     @root_item().scenario_elements()\r
553   \r
554   class_name: () ->\r
555     "zsort-box"\r
556   \r
557 class Editor.EditorModule.DockModule.PriorityBay.PriorityTabs extends Backbone.View\r
558   tagName: 'ul'\r
559   className: 'zsort'\r
560   \r
561   initialize: (options) ->\r
562     super(options)\r
563     @tabs = options.tabs\r
564   \r
565   render: () ->\r
566     this.$el.html('')\r
567     _.each @tabs, (tab) =>\r
568       this.$el.append(tab.label.render().el)\r
569     this\r
570   \r
571 class Editor.EditorModule.DockModule.TabModule.PriorityBayLabel extends Editor.EditorModule.DockModule.TabModule.BayLabel\r
572   \r
573 class Editor.EditorModule.DockModule.TabModule.PriorityBayBody extends Editor.EditorModule.DockModule.TabModule.BayBody\r
574   \r
575   initialize: (options) ->\r
576     super(options)\r
577   \r
578 class Editor.EditorModule.DockModule.PriorityBoard extends Editor.EditorModule.DockModule.Board\r
579   \r
580   initialize: (options) ->\r
581     super(options)\r
582     @element = options.element\r
583   \r
584   mounted: () ->\r
585     false\r
586   \r
587 class Editor.EditorModule.DockModule.TabModule.PriorityBoardLabel extends Editor.EditorModule.DockModule.TabModule.BoardLabel\r
588   \r
589   with_destroy_button: () ->\r
590     false\r
591   \r
592 class Editor.EditorModule.DockModule.TabModule.PriorityBoardBody extends Editor.EditorModule.DockModule.TabModule.BoardBody\r
593   \r
594   initialize: (options) ->\r
595     super(options)\r
596     @bucket = new Editor.EditorModule.DockModule.PriorityBucket({\r
597       parent: this\r
598     })\r
599     \r
600 #    form_manager = Pettanr::Application::manifest.form_managers[self.root_item.form_name]\r
601 #    form = form_manager.open self.root_item, @dock_body.dock.editor.operators, mounted\r
602 #    bucket = Bucket.new self,form\r
603   \r
604 class Editor.EditorModule.DockModule.NewBay extends Editor.EditorModule.DockModule.BoardBay\r
605   \r
606 \r
607 class Editor.EditorModule.DockModule.TabModule.NewBayLabel extends Editor.EditorModule.DockModule.TabModule.BayLabel\r
608   \r
609 \r
610 class Editor.EditorModule.DockModule.TabModule.NewBayBody extends Editor.EditorModule.DockModule.TabModule.BayBody\r
611   \r
612   initialize: (options) ->\r
613     super(options)\r
614   \r
615 class Editor.EditorModule.DockModule.NewBoard extends Editor.EditorModule.DockModule.Board\r
616   \r
617 class Editor.EditorModule.DockModule.TabModule.NewBoardLabel extends Editor.EditorModule.DockModule.TabModule.BoardLabel\r
618   \r
619 class Editor.EditorModule.DockModule.TabModule.NewBoardBody extends Editor.EditorModule.DockModule.TabModule.BoardBody\r
620   \r
621   initialize: (options) ->\r
622     super(options)\r
623 #    form_manager = Pettanr::Application::manifest.form_managers[self.root_item.form_name]\r
624 #    form = form_manager.open self.root_item, @dock_body.dock.editor.operators, mounted\r
625 #    bucket = Bucket.new self,form\r
626   \r