OSDN Git Service

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