OSDN Git Service

fix: new elm launcher
[pettanr/pettanr.git] / app / assets / javascripts / editor / panel_editor / element.js.coffee
1 class Editor.EditorModule.DockModule.ElementBay extends Editor.EditorModule.DockModule.BoardBay\r
2   \r
3   initialize: (options) ->\r
4     super(options)\r
5     @boards = new Editor.EditorModule.DockModule.ElementBay.Boards({\r
6       parent: this\r
7     })\r
8     @listenTo(@boards, 'sorted', @sorted)\r
9     @removed_elements = []\r
10   \r
11   add_element: (element) ->\r
12     index = @tabs.length\r
13     @shift_z()\r
14     tab = new Editor.EditorModule.DockModule.ElementBoard({\r
15       parent: this, index: index, name: element.item_name(), element: element\r
16     })\r
17     bl = new Editor.EditorModule.DockModule.TabModule.ElementBoardLabel({\r
18       parent: tab, \r
19       name: element.item_name()\r
20     })\r
21     bb = new Editor.EditorModule.DockModule.TabModule.ElementBoardBody({parent: tab})\r
22     @listenTo(bl, 'destroy', @destroy)\r
23     @add_tab(tab, bl, bb)\r
24     @boards.add_element_tab(tab)\r
25     @boards.$el.tabs('refresh')\r
26     if element.constructor.has_picture()\r
27       @trigger('add:credit', element)\r
28   \r
29   remove_element: (element) ->\r
30     if !element.isNew()\r
31       element.set({_destroy: true}, {silent: true})\r
32       @removed_elements.push element\r
33     t = null\r
34     _.each @tabs, (tab) =>\r
35       if tab.element\r
36         if tab.element.cid == element.cid\r
37           t = tab\r
38           return\r
39     t.label.remove()\r
40     # t.body.form.remove_elements()\r
41     t.body.remove()\r
42     @remove_tab(t.index)\r
43     @unshift_z()\r
44   \r
45   shift_z: () ->\r
46     new_tab_z = @new_tab.label.z()\r
47     _.each @tabs, (tab) ->\r
48       z = tab.label.z()\r
49       tab.label.$el.attr('data-z', z + 1) if z >= new_tab_z  # new tab too\r
50   \r
51   unshift_z: () ->\r
52     @boards.labels.reorder()\r
53     new_tab_z = @new_tab.label.z()\r
54     index = 0\r
55     _.each @tabs, (tab) ->\r
56       z = tab.label.z()\r
57       tab.label.$el.attr('data-z', z + 1) if z >= new_tab_z  # new tab too\r
58       tab.index = index\r
59       index++\r
60     t = 0\r
61     _.each @tabs, (tab) =>\r
62       if tab.element\r
63         tab.element.set({\r
64           z: t + 1, t: t\r
65         }, {silent: true})\r
66         t++\r
67   \r
68   add_new_tab: () ->\r
69     @new_tab = new Editor.EditorModule.DockModule.NewElementBoard({\r
70       parent: this, index: 0, name: 'new'\r
71     })\r
72     bb = new Editor.EditorModule.DockModule.TabModule.NewElementBoardBody({parent: @new_tab})\r
73     @add_tab(\r
74       @new_tab, \r
75       new Editor.EditorModule.DockModule.TabModule.NewElementBoardLabel({\r
76         parent: @new_tab\r
77       }), \r
78       bb\r
79     )\r
80     @listenTo(bb, 'pick', @pick)\r
81     @listenTo(bb, 'dialog:open', @open_dialog)\r
82     @listenTo(bb, 'dialog:close', @close_dialog)\r
83     @boards.add_element_tab(@new_tab)\r
84   \r
85   render: () ->\r
86     this.$el.html('')\r
87     @delegateEvents({'activate': 'activate'})\r
88     this.$el.attr('id', @body.dom_id())\r
89     this.$el.append(@boards.render().el)\r
90     _this = this\r
91     @boards.$el.tabs({\r
92       activate: (e, ui) ->\r
93         ui.newPanel.trigger('activate')\r
94     })\r
95     this\r
96   \r
97   init_tabs: () ->\r
98     @add_new_tab()\r
99     list = @root_item().zorderd_elements()\r
100     _.each list, (element) =>\r
101       @add_element(element)\r
102   \r
103   activate: () ->\r
104     _.each @tabs, (tab) ->\r
105       return if not tab.element  # without new element tab\r
106       if tab.body.$el.css('display') != 'none'\r
107         tab.body.refresh()\r
108   \r
109   sorted: () ->\r
110     # data-z copy to model\r
111     new_tab_z = @new_tab.label.z()\r
112     _.each @tabs, (tab) ->\r
113       if tab.element   # without new_tab\r
114         z = tab.label.z()\r
115         z-- if z > new_tab_z  # from 0, 1, new tab, 3... to 1, 2, 3...\r
116         tab.element.set({\r
117           z: z + 1\r
118         }, {silent: true})\r
119         tab.element.trigger('sort')\r
120   \r
121   panel_body: () ->\r
122     @dock().editor().body\r
123   \r
124   save_data: () ->\r
125     attrs = {}\r
126     _.each @tabs, (tab) ->\r
127       return if not tab.element  # without new element tab\r
128       form = tab.body.form\r
129       name = form.item.table_name() + '_attributes'\r
130       attrs[name] ||= []\r
131       attrs[name].push(form.save_data())\r
132     _.each @removed_elements, (element) ->\r
133       name = element.table_name() + '_attributes'\r
134       attrs[name] ||= []\r
135       attrs[name].push({id: element.get('id'), _destroy: true})\r
136     attrs\r
137   \r
138   pick: (new_item) ->\r
139     @add_element(new_item)\r
140     @trigger('pick', new_item)\r
141   \r
142   open_dialog: (dialog) ->\r
143     @trigger('dialog:open', dialog)\r
144   \r
145   close_dialog: (dialog) ->\r
146     @trigger('dialog:close', dialog)\r
147   \r
148   destroy: (element) ->\r
149     @remove_element(element)\r
150     @trigger('destroy', element)\r
151   \r
152 class Editor.EditorModule.DockModule.TabModule.ElementBayLabel extends Editor.EditorModule.DockModule.TabModule.BayLabel\r
153   \r
154 class Editor.EditorModule.DockModule.TabModule.ElementBayBody extends Editor.EditorModule.DockModule.TabModule.BayBody\r
155   \r
156   render: () ->\r
157     @body.render()\r
158   \r