OSDN Git Service

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