1 class Peta.Item extends Backbone.Model
\r
3 initialize: (attr = {}, options = {}) ->
\r
5 @expire_time = options.expire_time
\r
10 @my_manifest().child_models()
\r
12 @child_element_names: () ->
\r
13 @my_manifest().child_element_names()
\r
24 return null if not Manifest.manifest().items
\r
25 Manifest.manifest().items[@item_name()]
\r
28 return null if not Manifest.manifest().models
\r
29 Manifest.manifest().models[@item_name()]
\r
35 table_name = Manifest.manifest().pluralize @item_name()
\r
36 Pettanr.camelize(table_name)
\r
45 Pettanr.underscore(@singular())
\r
48 Pettanr.underscore(@plural())
\r
62 @parent_model: () ->
\r
68 @path_name: (with_engine = false) ->
\r
71 @find_boost_name: (column_name) ->
\r
72 @my_peta().find_boost_name column_name
\r
74 @is_extend_column: (column_name) ->
\r
75 @my_peta().is_extend_column column_name
\r
77 @fold_extend_settings: (attr) ->
\r
78 _.each my_peta().boost, (name, manifest) ->
\r
79 my_settings = attr[manifest.settings_column_name]
\r
81 attr[manifest.settings_column_name] = my_settings.to_json
\r
86 @my_class().singular()
\r
89 @my_class().plural()
\r
92 @my_class().item_name()
\r
98 @my_class().table_name()
\r
100 path_name: (with_engine = false) ->
\r
101 @my_class().path_name(with_engine)
\r
103 form_template: (with_engine = false) ->
\r
104 @path_name(with_engine) + '/form'
\r
107 if @extend_column()
\r
108 @get(@extend_column())
\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
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
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
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
138 is_extend_column: (column_name) ->
\r
139 @is_extend_column column_name
\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
145 return false if not operators.is_resource_reader()
\r
149 new Pettanr.Cache.Retriever(@my_class(), @get('id'))
\r
151 @pick_item_name: () ->
\r
155 Manifest.item_name_to_model(@pick_item_name())
\r
157 @traceable_item_names: () ->
\r
160 @is_traceable: (item_name) ->
\r
161 _.contains(@traceable_item_names(), item_name)
\r
163 @is_picker_inspire: (item_name) ->
\r
164 item_name == @item_name()
\r
166 @is_picker_trace: (item_name) ->
\r
167 @is_traceable(item_name)
\r
169 @is_picker_pick: (item_name) ->
\r
170 item_name == @pick_item_name()
\r
172 @pick_type: (item_name) ->
\r
173 if @is_picker_inspire(item_name)
\r
175 else if @is_picker_trace(item_name)
\r
177 else if @is_picker_pick(item_name)
\r
182 icon_view: (half) ->
\r
183 new Pettanr.Views[@my_class().singular()].Icon({item: this, half: half})
\r
186 Pettanr.url(@table_name(), 'index', {id: null})
\r
189 @my_class().index_url()
\r
191 list_url: (action_name = 'index') ->
\r
192 Pettanr.url(@table_name(), action_name, {id: @get('id')})
\r
195 Pettanr.url(@table_name(), 'show', {id: @get('id')})
\r
198 Pettanr.url(@table_name(), 'show', {id: @get('id'), format: 'prof'})
\r
201 Pettanr.url(@table_name(), 'new', {})
\r
204 Pettanr.url(@table_name(), 'create', {})
\r
207 Pettanr.url(@table_name(), 'edit', {id: @get('id')})
\r
210 Pettanr.url(@table_name(), 'update', {id: @get('id')})
\r
213 Pettanr.url(@table_name(), 'destroy', {id: @get('id')})
\r
216 Pettanr.cache.hold(this)
\r
219 Pettanr.cache.fix(this)
\r
222 Pettanr.cache.release(this)
\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
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
244 (@get('id') || '').toString()
\r
247 @table_name() + '-' + @dom_id()
\r
249 dom_pool_type: () ->
\r
250 @new_record ? 'stored' : 'new'
\r
252 merge_dom_item_id: (attr, name = null) ->
\r
254 _.extend(attr, {'id': @dom_item_id(name)})
\r
258 tag_attributes: (name = null, opt = {}) ->
\r
260 'data-pool_type': @dom_pool_type(), 'data-id': @dom_id(),
\r
261 'data-item_name': @item_name()
\r
263 r = @merge_dom_item_id(r, name)
\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
272 post_attribute_key: () ->
\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
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