OSDN Git Service

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