OSDN Git Service

fix: show's destroy button
[pettanr/pettanr.git] / app / assets / javascripts / peta / item.js.coffee
1 class Peta.Item extends Backbone.Model\r
2   \r
3   initialize: (attr = {}, options = {}) ->\r
4     @url = @default_url()\r
5     super(attr, options)\r
6     @expire_time = options.expire_time\r
7     @boosters = {}\r
8     @templates = {}\r
9   \r
10   @child_models: () ->\r
11     @my_manifest().child_models()\r
12   \r
13   @child_element_names: () ->\r
14     @my_manifest().child_element_names()\r
15   \r
16   # ClassMethods\r
17   \r
18   @default_url: () ->\r
19     '/' + @table_name() + '/'\r
20   \r
21   @my_class: () ->\r
22     this\r
23   \r
24   my_class: () ->\r
25     @constructor\r
26   \r
27   @my_peta: () ->\r
28     return null if not Manifest.manifest().items\r
29     Manifest.manifest().items[@item_name()]\r
30   \r
31   @my_manifest: () ->\r
32     return null if not Manifest.manifest().models\r
33     Manifest.manifest().models[@item_name()]\r
34   \r
35   @singular: () ->\r
36     'Name'\r
37   \r
38   @plural: () ->\r
39     table_name = Manifest.manifest().pluralize @item_name()\r
40     Pettanr.camelize(table_name)\r
41   \r
42   @class_name: () ->\r
43     @singular()\r
44   \r
45   @model_name: () ->\r
46     @class_name()\r
47   \r
48   @item_name: () ->\r
49     Pettanr.underscore(@singular())\r
50   \r
51   @table_name: () ->\r
52     Pettanr.underscore(@plural())\r
53   \r
54   @is_item: () ->\r
55     true\r
56   \r
57   @is_content: () ->\r
58     false\r
59   \r
60   @is_element: () ->\r
61     false\r
62   \r
63   @is_root: () ->\r
64     false\r
65  \r
66   @parent_model: () ->\r
67     null\r
68   \r
69   @has_picture: () ->\r
70     false\r
71   \r
72   @path_name: (with_engine = false) ->\r
73     @table_name()\r
74   \r
75   @find_boost_name: (column_name) ->\r
76     @my_peta().find_boost_name column_name\r
77   \r
78   @is_extend_column: (column_name) -> \r
79     @my_peta().is_extend_column column_name\r
80   \r
81   @fold_extend_settings: (attr) ->\r
82     _.each my_peta().boost, (name, manifest) ->\r
83       my_settings = attr[manifest.settings_column_name]\r
84       if my_settings\r
85         attr[manifest.settings_column_name] = my_settings.to_json\r
86   \r
87   #InstanceMethods\r
88   \r
89   default_url: () ->\r
90     r = @my_class().default_url()\r
91     r = r.concat( @id ) if @id\r
92     r\r
93   \r
94   singular: () ->\r
95     @my_class().singular()\r
96   \r
97   plural: () ->\r
98     @my_class().plural()\r
99   \r
100   item_name: () ->\r
101     @my_class().item_name()\r
102   \r
103   model_name: () ->\r
104     @item_name()\r
105   \r
106   table_name: () ->\r
107     @my_class().table_name()\r
108   \r
109   path_name: (with_engine = false) ->\r
110     @my_class().path_name(with_engine)\r
111   \r
112   form_template: (with_engine = false) ->\r
113     @path_name(with_engine) + '/form'\r
114   \r
115   form_name: () ->\r
116     if @extend_column()\r
117       @get(@extend_column())\r
118     else\r
119       @item_name()\r
120   \r
121   has_many: (has_many_name) ->\r
122     has_many_manifest = @my_class().my_manifest().associations.has_many[has_many_name]\r
123     action_name = has_many_manifest.list_action_name\r
124     Locmare.ListGroup.list(\r
125       has_many_name, action_name, {id: @get('id')}\r
126     )\r
127   \r
128   has_one: (has_one_name) ->\r
129     has_one_manifest = @my_class().my_manifest().associations.has_one[has_one_name]\r
130     controller_name = has_one_manifest.model().table_name()\r
131     action_name = has_one_manifest.list_action_name\r
132     Locmare.ListGroup.list(\r
133       controller_name, action_name, {id: @get('id')}\r
134     )\r
135   \r
136   boosts: (level) ->\r
137     c = @my_class().my_peta().boost\r
138     _.each c, (boost_manifest, boost_name) =>\r
139       return if level == 'read' and boost_manifest.level == 'post'\r
140       @boost boost_manifest\r
141   \r
142   boost: (boost_manifest) ->\r
143     @boosters[boost_manifest.name] = new Locmare.Booster(boost_manifest, this)\r
144     # fetched item is not cleared .  force write booster\r
145     #@boosters[boost_manifest.name] ||= new Locmare.Booster(boost_manifest, this)\r
146   \r
147   is_extend_column: (column_name) ->\r
148     @is_extend_column column_name\r
149   \r
150   is_visible: (operators = Pettanr.cache.operators) ->\r
151     if Manifest.manifest().magic_numbers['run_mode'] == 0\r
152       return false if not operators.is_guest()\r
153     else\r
154       return false if not operators.is_resource_reader()\r
155     true\r
156   \r
157   retriever: () ->\r
158     new Pettanr.Cache.Retriever(@my_class(), @get('id'))\r
159   \r
160   @pick_item_name: () ->\r
161     null\r
162   \r
163   @pick_model: () ->\r
164     Manifest.item_name_to_model(@pick_item_name())\r
165   \r
166   @traceable_item_names: () ->\r
167     []\r
168   \r
169   @is_traceable: (item_name) ->\r
170     _.contains(@traceable_item_names(), item_name)\r
171   \r
172   @is_picker_inspire: (item_name) ->\r
173     item_name == @item_name()\r
174   \r
175   @is_picker_trace: (item_name) ->\r
176     @is_traceable(item_name)\r
177   \r
178   @is_picker_pick: (item_name) ->\r
179     item_name == @pick_item_name()\r
180   \r
181   @pick_type: (item_name) ->\r
182     if @is_picker_inspire(item_name)\r
183       'inspire'\r
184     else if @is_picker_trace(item_name)\r
185       'trace'\r
186     else if @is_picker_pick(item_name)\r
187       'pick'\r
188     else\r
189       'none'\r
190   \r
191   icon_view: (half) ->\r
192     new Pettanr.Views[@my_class().singular()].Icon({item: this, half: half})\r
193   \r
194   @index_url: () ->\r
195     Pettanr.url(@table_name(), 'index', {id: null})\r
196   \r
197   index_url: () ->\r
198     @my_class().index_url()\r
199   \r
200   list_url: (action_name = 'index') ->\r
201     Pettanr.url(@table_name(), action_name, {id: @get('id')})\r
202   \r
203   show_url: () ->\r
204     Pettanr.url(@table_name(), 'show', {id: @get('id')})\r
205   \r
206   prof_url: () ->\r
207     Pettanr.url(@table_name(), 'show', {id: @get('id'), format: 'prof'})\r
208   \r
209   new_url: () ->\r
210     Pettanr.url(@table_name(), 'new', {})\r
211   \r
212   create_url: () ->\r
213     Pettanr.url(@table_name(), 'create', {})\r
214   \r
215   edit_url: () ->\r
216     Pettanr.url(@table_name(), 'edit', {id: @get('id')})\r
217   \r
218   update_url: () ->\r
219     Pettanr.url(@table_name(), 'update', {id: @get('id')})\r
220   \r
221   destroy_url: () ->\r
222     Pettanr.url(@table_name(), 'destroy', {id: @get('id')})\r
223   \r
224   hold: () ->\r
225     Pettanr.cache.hold(this)\r
226   \r
227   fix: () ->\r
228     Pettanr.cache.fix(this)\r
229   \r
230   release: () ->\r
231     Pettanr.cache.release(this)\r
232   \r
233   save: (model_attr) ->\r
234     super(model_attr || @attributes, {\r
235       success: (model, response, options) =>\r
236         @trigger('save:success', model, response)\r
237       error: (model, response, options) =>\r
238         @trigger('save:fail', model, response)\r
239     })\r
240   \r
241   destroy: () ->\r
242     super({\r
243       success: (model, response, options) =>\r
244         @trigger('destroy:success', model, response)\r
245       error: (model, response, options) =>\r
246         @trigger('destroy:fail', model, response)\r
247     })\r
248   \r
249   is_editize: () ->\r
250     @editor\r
251   \r
252   dom_id: () ->\r
253     (@get('id') || '').toString()\r
254   \r
255   cache_key: () ->\r
256     @table_name() + '-' + @dom_id()\r
257   \r
258   dom_pool_type: () ->\r
259     @new_record ? 'stored' : 'new'\r
260   \r
261   merge_dom_item_id: (attr, name = null) ->\r
262     if @is_editize()\r
263       _.extend(attr, {'id': @dom_item_id(name)})\r
264     else\r
265       attr\r
266   \r
267   tag_attributes: (name = null, opt = {}) ->\r
268     r = {\r
269       'data-pool_type': @dom_pool_type(), 'data-id': @dom_id(), \r
270       'data-item_name': @item_name()\r
271     }\r
272     r = @merge_dom_item_id(r, name)\r
273     _.extend(r, opt)\r
274     r\r
275   \r
276   field_tag_attributes: (column_name, opt = {}) ->\r
277     r = @tag_attributes(column_name, opt)\r
278     _.extend(r, {'data-column_name': column_name})\r
279     r\r
280   \r
281   post_attribute_key: () ->\r
282     @dom_id\r
283   \r
284   @test: () ->\r
285     console.log(@child_models())\r
286     console.log(@child_element_names())\r
287     console.log(@my_peta())\r
288     console.log(@my_manifest())\r
289     console.log()\r
290     console.log()\r
291   \r
292   test: () ->\r
293     console.log(@my_class())\r
294     console.log(@item_name())\r
295     console.log(@model_name())\r
296     console.log(@table_name())\r
297     console.log(@path_name())\r
298     console.log(@pickup_item_name())\r
299     console.log(@pickup_column_name())\r
300     console.log(@dom_id())\r
301     console.log(@dom_pool_type())\r
302     console.log(@tag_attributes())\r
303     console.log(@field_tag_attributes('id'))\r
304     console.log(@post_attribute_key())\r