1 # form_name_with_sub_form
\r
3 # mounted: true/false
\r
4 # submit: string / 'submit'
\r
6 class Locmare.FormBase extends Backbone.View
\r
9 initialize: (options) ->
\r
10 @form_name = options.form_name #_with_sub_form
\r
11 @item = options.item
\r
12 @mounted = options.mounted
\r
13 @submit = options.submit
\r
14 @operators = options.operators
\r
15 if /\./.test(@form_name)
\r
16 @sub_form_names = @form_name.split('.')
\r
17 @form_name = @sub_form_names.pop()
\r
18 @root_form_name = @sub_form_names.shift()
\r
20 @sub_form_names = []
\r
21 #@form_name = @form_name
\r
22 @root_form_name = @form_name
\r
23 @manifest = LocalManifest.manifest().forms[@form_name]
\r
25 @on('change:field', @change)
\r
28 console.log(field.field_name)
\r
30 fold_extend_settings: (params) ->
\r
31 @item.my_class().fold_extend_settings params[@item.item_name()]
\r
33 sub_form_name: () ->
\r
34 r = _.map @sub_form_names, (name) ->
\r
35 '[' + name + '_attributes' + ']'
\r
38 form_field_name: (field_name) ->
\r
39 @root_form_name + @sub_form_name() + '[' + field_name + ']'
\r
44 class Locmare.Form extends Locmare.FormBase
\r
46 @factory: (options) ->
\r
47 custom_form = Pettanr.Views[Pettanr.camelize(options.item.model_name())].Form
\r
49 new custom_form(options)
\r
51 new Locmare.Form(options)
\r
53 initialize: (options) ->
\r
55 @submit = options.submit
\r
56 @action = options.action
\r
61 method_type = if @item.isNew()
\r
66 method: method_type,
\r
69 this.$el.attr(@attr)
\r
71 @error_explanation = null
\r
72 @div_fields = new Locmare.FormModule.Fields({
\r
73 parent: this, fields: @fields
\r
75 #this.$el.append(@error_explanation.render().el) if not @error_explanation
\r
76 this.$el.append(@div_fields.render().el)
\r
79 @div_submit = new c({form: this})
\r
80 this.$el.append(@div_submit.render().el)
\r
81 @delegateEvents({'submit': method_type})
\r
84 add_element: (element) ->
\r
85 form = Locmare.Form.factory({
\r
86 form_name: element.item_name(),
\r
90 operators: @operators,
\r
91 action: '/' + element.table_name() + '/' + Pettanr.to_s(element.get('id'))
\r
93 this.$el.append(form.render().el)
\r
97 _.each @manifest.field_names, (field_name) =>
\r
98 field_manifest = @manifest.fields[field_name]
\r
99 boost_name = @item.my_class().find_boost_name(field_name)
\r
100 extend_model = if boost_name
\r
101 @item.boosters[boost_name].extend_model()
\r
104 if boost_name and extend_model # field is extend setting AND template has a extend model
\r
105 extend_form_name = @item.boosters[boost_name].item_name()
\r
106 extend_item = @item.boosters[boost_name].extend_item()
\r
107 @fields[field_name] = new Locmare.ExtendForm({
\r
109 form_name: extend_form_name,
\r
110 item: extend_item,
\r
111 mounted: @mounted,
\r
112 operators: @operators,
\r
113 field_name: field_name
\r
116 @fields[field_name] = new Locmare.FormModule.Field({
\r
118 field_name: field_name,
\r
119 field_manifest: field_manifest
\r
124 default: Locmare.FormModule.SubmitModule.Default
\r
127 submit_class: () ->
\r
128 @submits()[@submit]
\r
131 _.each @fields, (field) =>
\r
132 @item.set(field.field_name, field.val())
\r
134 window.router.navigate('/' + @item.table_name() + '/' + Pettanr.to_s(@item.get('id')), true)
\r
140 _.each @fields, (field) =>
\r
141 @item.set(field.field_name, field.val())
\r
142 @item.overwrite({operators: @operators})
\r
144 window.router.navigate('/' + @item.table_name() + '/' + Pettanr.to_s(@item.get('id')), true)
\r
149 class Locmare.ExtendForm extends Locmare.FormBase
\r
151 className: 'fields'
\r
153 initialize: (options) ->
\r
154 @parent = options.parent
\r
155 @field_name = options.field_name
\r
157 @field = new Locmare.FormModule.Field({
\r
159 field_name: @field_name,
\r
160 field_manifest: @parent.manifest.fields[@field_name]
\r
162 @label = @field.label
\r
167 @div_fields = new Locmare.FormModule.Fields({
\r
170 this.$el.append(@div_fields.render().el)
\r
174 _.each @manifest.field_names, (field_name) =>
\r
175 field_manifest = @manifest.fields[field_name]
\r
176 @fields[field_name] = new Locmare.FormModule.ExtendField({
\r
178 field_name: field_name,
\r
179 field_manifest: field_manifest
\r
182 form_field_name: (extend_field_name) ->
\r
184 @parent.form_field_name(@field_name) + '[' + extend_field_name + ']'
\r
186 class Locmare.FormModule
\r
187 class Locmare.FormModule.Fields extends Backbone.View
\r
189 className: 'fields'
\r
191 initialize: (options) ->
\r
192 @parent = options.parent
\r
193 @fields = options.fields
\r
197 _.each @fields, (field) =>
\r
198 this.$el.append(field.render().el)
\r
199 this.$el.append(field.rb.render().el) if field.rb
\r
202 class Locmare.FormModule.SubmitModule
\r
203 class Locmare.FormModule.SubmitModule.Default extends Backbone.View
\r
205 className: 'actions'
\r
207 initialize: (options) ->
\r
208 @form = options.form
\r
211 caption = I18n.t(@submit_name())
\r
212 this.$el.html('<input type="submit" name="commit" class="submit" value="' + caption + '"></input>')
\r
216 if @form.item.isNew()
\r
217 @form.item.table_name() + '.submit.new'
\r
219 @form.item.table_name() + '.submit.edit'
\r