OSDN Git Service

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