# form_name_with_sub_form # item: editing item # mounted: true/false # submit: string / 'submit' # operators: class Locmare.FormBase extends Backbone.View tagName: 'div' initialize: (options) -> @form_name_with_sub_form = options.form_name_with_sub_form @item = options.item @mounted = options.mounted @submit = options.submit @operators = options.operators if /\./.test(form_name_with_sub_form) @sub_form_names = form_name_with_sub_form.split('.') @form_name = @sub_form_names.last @root_form_name = @sub_form_names.shift else @sub_form_names = [] @form_name = @form_name_with_sub_form @root_form_name = @form_name @manifest = LocalManifest.manifest().forms[@form_name] @fields = {} fold_extend_settings: (params) -> @item.my_class().fold_extend_settings params[@item.item_name()] sub_form_name: () -> r = _.map @sub_form_names, (name) -> '[' + name + '_attributes' + ']' r.join() form_field_name: (field_name) -> @root_form_name + @sub_form_name() + '[' + field_name + ']' image_dir: () -> '/images/' class Locmare.Form extends Locmare.FormBase initialize: (options) -> super(options) @submit = options.submit @item.boosts 'post' @init_fields() render: () -> this.$el.html('') @error_explanation = null @div_fields = new Locmare.FormModule.Fields({ fields: @fields }) #this.$el.append(@error_explanation.render().el) if not @error_explanation this.$el.append(@div_fields.render().el) if @submit c = @submit_class() @div_submit = new c({form: this}) this.$el.append(@div_submit.render().el) this init_fields: () -> _this = this _.each _this.manifest.field_names, (field_name) -> field_manifest = _this.manifest.fields[field_name] boost_name = _this.item.my_class().find_boost_name(field_name) extend_model = if boost_name _this.item.boosters[boost_name].extend_model() else null if boost_name and extend_model # field is extend setting AND template has a extend model extend_form_name = @item.boosters[boost_name].model_name extend_item = @item.boosters[boost_name].extend_item _this.fields[field_name] = new Locmare.ExtendForm({ parent: _this, form_name: extend_form_name, item: extend_item, mounted: _this.mounted, operators: _this.operators, field_name: field_name }) else _this.fields[field_name] = new Locmare.FormModule.Field({ form: _this, field_name: field_name, field_manifest: field_manifest }) submit_name: () -> if @item.isNew() @item.table_name() + '.submit.new' else @item.table_name() + '.submit.edit' submits: () -> { default: Locmare.FormModule.SubmitModule.Default } submit_class: () -> @submits()[@submit] class Locmare.ExtendForm extends Locmare.FormBase initialize: (options) -> @parent = options.parent @form_name = options.form_name @item = options.item @mounted = options.mounted @operators = options.operators @field_name = options.field_name super(@form_name, @item, @mounted, @operators) @field = new Locmare.FormModule.Field({ form: @parent, field_name: @field_name, field_manifest: @parent.manifest.fields[@field_name] }) @label = @field.label @init_fields() init_fields: () -> _this = this _.each _this.manifest.field_names, (field_name) -> field_manifest = _this.manifest.fields[field_name] _this.fields[field_name] = new Locmare.FormModule.ExtendField({ form: _this, field_name: field_name, field_manifest: field_manifest }) form_field_name: (field_name) -> # parent is field @parent.form_field_name(field_name) + '[' + field_name + ']' class Locmare.FormModule class Locmare.FormModule.Fields extends Backbone.View tagName: 'div' className: 'fields' initialize: (options) -> @fields = options.fields render: () -> this.$el.html('') _this = this _.each @fields, (field) -> _this.$el.append(field.render().el) this class Locmare.FormModule.SubmitModule class Locmare.FormModule.SubmitModule.Default extends Backbone.View tagName: 'div' className: 'actions' initialize: (options) -> @form = options.form render: () -> this.$el.html('') this