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