OSDN Git Service

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