class Locmare.FormModule.FieldModule.TagModule.SelectTag extends Locmare.FormModule.FieldModule.TagModule.Base tagName: 'select' events: { 'change': 'change' } initialize: (options) -> super(options) @option_tags = [] render: () -> this.$el.html('') this.$el.attr(@attr()) @option_tags = [] @select_values((members) => values = if @model_attribute_manifest().source.translate() Pettanr.AppHelper.t_select_items(members) else members _.each values, (member) => selected = if @is_selected(member) ' selected' else '' tag = '' @option_tags.push(tag) this.$el.append(tag) @trigger('ready:select') ) this refresh: () -> this.$el.html('') this.$el.attr(@attr()) _.each @option_tags, (tag) => this.$el.append(tag) val: () -> switch @model_attribute_manifest().type when 'number' parseInt(super()) when 'float' parseFloat(super()) else super() model_manifest: () -> Manifest.manifest().models[@field.field_manifest.item_name()] model_attribute_manifest: () -> @model_manifest().attributes[@field.field_manifest.column_name()] select_item_name: () -> @model_attribute_manifest().source.select_item_name source_by_filter: () -> switch @model_attribute_manifest().source.type when 'model', 'filter' true when 'magic_number' false else null is_selected: (member) -> @value() == member[1] select_values: (cb) -> if @source_by_filter() resource_item_name = @model_attribute_manifest().source.resource_item_name resource_action_name = @model_attribute_manifest().source.resource_action_name filter_column_name = @model_attribute_manifest().source.filter_column_name filter_id = @form().item.get(filter_column_name) resource_controller_name = Manifest.manifest().models[resource_item_name].classify().table_name() caption_name = @model_attribute_manifest().source.caption_name params = if filter_column_name {id: filter_id} else {} controller = Manifest.manifest().controllers[resource_controller_name] action = controller.actions[resource_action_name] list = action.find(params) list.open(this, { success: (page_status) -> members = _.map list.models, (member) -> [member.get(caption_name), member.get('id')] cb(members) }) else members = Manifest.manifest().system_resources.select_items[@select_item_name()] cb(members) change: () -> @field.trigger('change')