OSDN Git Service

add cache
[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   \r
7   @child_models: () ->\r
8     @my_manifest().child_models()\r
9   \r
10   @child_element_names: () ->\r
11     @my_manifest().child_element_names()\r
12   \r
13   # ClassMethods\r
14   \r
15   @my_class: () ->\r
16     this\r
17   \r
18   my_class: () ->\r
19     @constructor\r
20   \r
21   @my_peta: () ->\r
22     return null if not Manifest.manifest().items\r
23     Manifest.manifest().items[@item_name()]\r
24   \r
25   @my_manifest: () ->\r
26     return null if not Manifest.manifest().models\r
27     Manifest.manifest().models[@item_name()]\r
28   \r
29   @singular: () ->\r
30     'Name'\r
31   \r
32   @plural: () ->\r
33     table_name = Manifest.manifest().pluralize @item_name()\r
34     Pettanr.camelize(table_name)\r
35   \r
36   @class_name: () ->\r
37     @singular()\r
38   \r
39   @model_name: () ->\r
40     @class_name()\r
41   \r
42   @item_name: () ->\r
43     Pettanr.underscore(@singular())\r
44   \r
45   @table_name: () ->\r
46     Pettanr.underscore(@plural())\r
47   \r
48   @is_item: () ->\r
49     true\r
50   \r
51   @is_content: () ->\r
52     false\r
53   \r
54   @is_element: () ->\r
55     false\r
56   \r
57   @is_root: () ->\r
58     false\r
59  \r
60   @parent_model: () ->\r
61     null\r
62   \r
63   @has_picture: () ->\r
64     false\r
65   \r
66   @path_name: (with_engine = false) ->\r
67     @table_name()\r
68   \r
69   @pickup_item_name: () ->\r
70     @item_name()\r
71   \r
72   @pickup_column_name: () ->\r
73     'id'\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   singular: () ->\r
90     @my_class().singular()\r
91   \r
92   plural: () ->\r
93     @my_class().plural()\r
94   \r
95   item_name: () ->\r
96     @my_class().item_name()\r
97   \r
98   model_name: () ->\r
99     @item_name()\r
100   \r
101   table_name: () ->\r
102     @my_class().table_name()\r
103   \r
104   path_name: (with_engine = false) ->\r
105     @my_class().path_name(with_engine)\r
106   \r
107   pickup_item_name: () ->\r
108     @my_class().pickup_item_name()\r
109   \r
110   pickup_column_name: () ->\r
111     @my_class().pickup_column_name()\r
112   \r
113   pickup_id: () ->\r
114     @get(pickup_column_name())\r
115   \r
116   form_template: (with_engine = false) ->\r
117     @path_name(with_engine) + '/form'\r
118   \r
119   form_name: () ->\r
120     if @extend_column()\r
121       @get(@extend_column())\r
122     else\r
123       @item_name()\r
124   \r
125   boosts: (level) ->\r
126     c = @my_class().my_peta().boost\r
127     _.each c, (boost_manifest, boost_name) =>\r
128       return if level == 'read' and boost_manifest.level == 'post'\r
129       @boost boost_manifest\r
130   \r
131   boost: (boost_manifest) ->\r
132     @boosters ||= {}\r
133     @boosters[boost_manifest.name] = new Locmare.Booster(boost_manifest, this)\r
134     # fetched item is not cleared .  force write booster\r
135     #@boosters[boost_manifest.name] ||= new Locmare.Booster(boost_manifest, this)\r
136   \r
137   boosters: () ->\r
138     @boosters ||= {}\r
139   \r
140   is_extend_column: (column_name) ->\r
141     @is_extend_column column_name\r
142   \r
143   is_visible: (operators) ->\r
144     if Manifest.manifest().magic_numbers['run_mode'] == 0\r
145       return false if not operators.is_guest()\r
146     else\r
147       return false if not operators.is_resource_reader()\r
148     true\r
149   \r
150   icon_view: (half) ->\r
151     new Pettanr.Views[@my_class().singular()].Icon({item: this, half: half})\r
152   \r
153   @index_url: () ->\r
154     Pettanr.url(@table_name(), 'index', {id: null})\r
155   \r
156   index_url: () ->\r
157     @my_class().index_url()\r
158   \r
159   list_url: (action_name = 'index') ->\r
160     Pettanr.url(@table_name(), action_name, {id: @get('id')})\r
161   \r
162   show_url: () ->\r
163     Pettanr.url(@table_name(), 'show', {id: @get('id')})\r
164   \r
165   prof_url: () ->\r
166     Pettanr.url(@table_name(), 'show', {id: @get('id'), format: 'prof'})\r
167   \r
168   new_url: () ->\r
169     Pettanr.url(@table_name(), 'new', {})\r
170   \r
171   create_url: () ->\r
172     Pettanr.url(@table_name(), 'create', {})\r
173   \r
174   edit_url: () ->\r
175     Pettanr.url(@table_name(), 'edit', {id: @get('id')})\r
176   \r
177   update_url: () ->\r
178     Pettanr.url(@table_name(), 'update', {id: @get('id')})\r
179   \r
180   destroy_url: () ->\r
181     Pettanr.url(@table_name(), 'destroy', {id: @get('id')})\r
182   \r
183   save: (model_attr) ->\r
184     super(model_attr || @attributes, {\r
185       success: (model, response, options) =>\r
186         @trigger('save:success', model, response)\r
187       error: (model, response, options) =>\r
188         @trigger('save:fail', model, response)\r
189     })\r
190   \r
191   destroy: () ->\r
192     super({\r
193       success: (model, response, options) =>\r
194         @trigger('destroy:success', model, response)\r
195       error: (model, response, options) =>\r
196         @trigger('destroy:fail', model, response)\r
197     })\r
198   \r
199   is_editize: () ->\r
200     @editor\r
201   \r
202   dom_id: () ->\r
203     (@get('id') || '').toString()\r
204   \r
205   cache_key: () ->\r
206     @table_name() + '-' + @dom_id()\r
207   \r
208   dom_pool_type: () ->\r
209     @new_record ? 'stored' : 'new'\r
210   \r
211   merge_dom_item_id: (attr, name = null) ->\r
212     if @is_editize()\r
213       _.extend(attr, {'id': @dom_item_id(name)})\r
214     else\r
215       attr\r
216   \r
217   tag_attributes: (name = null, opt = {}) ->\r
218     r = {\r
219       'data-pool_type': @dom_pool_type(), 'data-id': @dom_id(), \r
220       'data-item_name': @item_name()\r
221     }\r
222     r = @merge_dom_item_id(r, name)\r
223     _.extend(r, opt)\r
224     r\r
225   \r
226   field_tag_attributes: (column_name, opt = {}) ->\r
227     r = @tag_attributes(column_name, opt)\r
228     _.extend(r, {'data-column_name': column_name})\r
229     r\r
230   \r
231   post_attribute_key: () ->\r
232     @dom_id\r
233   \r
234   @test: () ->\r
235     console.log(@child_models())\r
236     console.log(@child_element_names())\r
237     console.log(@my_peta())\r
238     console.log(@my_manifest())\r
239     console.log()\r
240     console.log()\r
241   \r
242   test: () ->\r
243     console.log(@my_class())\r
244     console.log(@item_name())\r
245     console.log(@model_name())\r
246     console.log(@table_name())\r
247     console.log(@path_name())\r
248     console.log(@pickup_item_name())\r
249     console.log(@pickup_column_name())\r
250     console.log(@dom_id())\r
251     console.log(@dom_pool_type())\r
252     console.log(@tag_attributes())\r
253     console.log(@field_tag_attributes('id'))\r
254     console.log(@post_attribute_key())\r