class Peta.Item extends Backbone.Model initialize: (attr = {}, options = {}) -> super(attr, options) @expire_time = options.expire_time @boosters = {} @templates = {} @child_models: () -> @my_manifest().child_models() @child_element_names: () -> @my_manifest().child_element_names() # ClassMethods @my_class: () -> this my_class: () -> @constructor @my_peta: () -> return null if not Manifest.manifest().items Manifest.manifest().items[@item_name()] @my_manifest: () -> return null if not Manifest.manifest().models Manifest.manifest().models[@item_name()] @singular: () -> 'Name' @plural: () -> table_name = Manifest.manifest().pluralize @item_name() Pettanr.camelize(table_name) @class_name: () -> @singular() @model_name: () -> @class_name() @item_name: () -> Pettanr.underscore(@singular()) @table_name: () -> Pettanr.underscore(@plural()) @is_item: () -> true @is_content: () -> false @is_element: () -> false @is_root: () -> false @parent_model: () -> null @has_picture: () -> false @path_name: (with_engine = false) -> @table_name() @find_boost_name: (column_name) -> @my_peta().find_boost_name column_name @is_extend_column: (column_name) -> @my_peta().is_extend_column column_name @fold_extend_settings: (attr) -> _.each my_peta().boost, (name, manifest) -> my_settings = attr[manifest.settings_column_name] if my_settings attr[manifest.settings_column_name] = my_settings.to_json #InstanceMethods singular: () -> @my_class().singular() plural: () -> @my_class().plural() item_name: () -> @my_class().item_name() model_name: () -> @item_name() table_name: () -> @my_class().table_name() path_name: (with_engine = false) -> @my_class().path_name(with_engine) form_template: (with_engine = false) -> @path_name(with_engine) + '/form' form_name: () -> if @extend_column() @get(@extend_column()) else @item_name() has_many: (has_many_name) -> has_many_manifest = @my_class().my_manifest().associations.has_many[has_many_name] action_name = has_many_manifest.list_action_name Locmare.ListGroup.list( has_many_name, action_name, {id: @get('id')} ) has_one: (has_one_name) -> has_one_manifest = @my_class().my_manifest().associations.has_one[has_one_name] controller_name = has_one_manifest.model().table_name() action_name = has_one_manifest.list_action_name Locmare.ListGroup.list( controller_name, action_name, {id: @get('id')} ) boosts: (level) -> c = @my_class().my_peta().boost _.each c, (boost_manifest, boost_name) => return if level == 'read' and boost_manifest.level == 'post' @boost boost_manifest boost: (boost_manifest) -> @boosters[boost_manifest.name] = new Locmare.Booster(boost_manifest, this) # fetched item is not cleared . force write booster #@boosters[boost_manifest.name] ||= new Locmare.Booster(boost_manifest, this) is_extend_column: (column_name) -> @is_extend_column column_name is_visible: (operators = Pettanr.cache.operators) -> if Manifest.manifest().magic_numbers['run_mode'] == 0 return false if not operators.is_guest() else return false if not operators.is_resource_reader() true retriever: () -> new Pettanr.Cache.Retriever(@my_class(), @get('id')) @pick_item_name: () -> null @pick_model: () -> Manifest.item_name_to_model(@pick_item_name()) @traceable_item_names: () -> [] @is_traceable: (item_name) -> _.contains(@traceable_item_names(), item_name) @is_picker_inspire: (item_name) -> item_name == @item_name() @is_picker_trace: (item_name) -> @is_traceable(item_name) @is_picker_pick: (item_name) -> item_name == @pick_item_name() @pick_type: (item_name) -> if @is_picker_inspire(item_name) 'inspire' else if @is_picker_trace(item_name) 'trace' else if @is_picker_pick(item_name) 'pick' else 'none' icon_view: (half) -> new Pettanr.Views[@my_class().singular()].Icon({item: this, half: half}) @index_url: () -> Pettanr.url(@table_name(), 'index', {id: null}) index_url: () -> @my_class().index_url() list_url: (action_name = 'index') -> Pettanr.url(@table_name(), action_name, {id: @get('id')}) show_url: () -> Pettanr.url(@table_name(), 'show', {id: @get('id')}) prof_url: () -> Pettanr.url(@table_name(), 'show', {id: @get('id'), format: 'prof'}) new_url: () -> Pettanr.url(@table_name(), 'new', {}) create_url: () -> Pettanr.url(@table_name(), 'create', {}) edit_url: () -> Pettanr.url(@table_name(), 'edit', {id: @get('id')}) update_url: () -> Pettanr.url(@table_name(), 'update', {id: @get('id')}) destroy_url: () -> Pettanr.url(@table_name(), 'destroy', {id: @get('id')}) hold: () -> Pettanr.cache.hold(this) fix: () -> Pettanr.cache.fix(this) release: () -> Pettanr.cache.release(this) save: (model_attr) -> super(model_attr || @attributes, { success: (model, response, options) => @trigger('save:success', model, response) error: (model, response, options) => @trigger('save:fail', model, response) }) destroy: () -> super({ success: (model, response, options) => @trigger('destroy:success', model, response) error: (model, response, options) => @trigger('destroy:fail', model, response) }) is_editize: () -> @editor dom_id: () -> (@get('id') || '').toString() cache_key: () -> @table_name() + '-' + @dom_id() dom_pool_type: () -> @new_record ? 'stored' : 'new' merge_dom_item_id: (attr, name = null) -> if @is_editize() _.extend(attr, {'id': @dom_item_id(name)}) else attr tag_attributes: (name = null, opt = {}) -> r = { 'data-pool_type': @dom_pool_type(), 'data-id': @dom_id(), 'data-item_name': @item_name() } r = @merge_dom_item_id(r, name) _.extend(r, opt) r field_tag_attributes: (column_name, opt = {}) -> r = @tag_attributes(column_name, opt) _.extend(r, {'data-column_name': column_name}) r post_attribute_key: () -> @dom_id @test: () -> console.log(@child_models()) console.log(@child_element_names()) console.log(@my_peta()) console.log(@my_manifest()) console.log() console.log() test: () -> console.log(@my_class()) console.log(@item_name()) console.log(@model_name()) console.log(@table_name()) console.log(@path_name()) console.log(@pickup_item_name()) console.log(@pickup_column_name()) console.log(@dom_id()) console.log(@dom_pool_type()) console.log(@tag_attributes()) console.log(@field_tag_attributes('id')) console.log(@post_attribute_key())