OSDN Git Service

Merge branch 'v06' of git.sourceforge.jp:/gitroot/pettanr/pettanr into v06
[pettanr/pettanr.git] / app / assets / javascripts / locmare / form.js.coffee
1 # form_name_with_sub_form\r
2 # item: editing item\r
3 # mounted: true/false\r
4 # submit: string / 'submit'\r
5 # operators: \r
6 class Locmare.FormBase extends Backbone.View\r
7   tagName: 'form'\r
8   \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
19     else\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
24     @fields = {}\r
25   \r
26   fold_extend_settings: (params) ->\r
27     @item.my_class().fold_extend_settings params[@item.item_name()]\r
28   \r
29   sub_form_name: () ->\r
30     r = _.map @sub_form_names, (name) ->\r
31       '[' + name + '_attributes' + ']'\r
32     r.join()\r
33   \r
34   form_field_name: (field_name) ->\r
35     @root_form_name + @sub_form_name() + '[' + field_name + ']'\r
36   \r
37   image_dir: () ->\r
38     '/images/'\r
39   \r
40 class Locmare.Form extends Locmare.FormBase\r
41   \r
42   initialize: (options) ->\r
43     super(options)\r
44     @submit = options.submit\r
45     @action = options.action\r
46     @item.boosts 'post'\r
47     @init_fields()\r
48   \r
49   render: () ->\r
50     method_type = if @item.isNew()\r
51       'post'\r
52     else\r
53       'put'\r
54     @attr = {\r
55       method: method_type,\r
56       action: @action\r
57     }\r
58     this.$el.attr(@attr)\r
59     this.$el.html('')\r
60     @error_explanation = null\r
61     @div_fields = new Locmare.FormModule.Fields({\r
62       fields: @fields\r
63     })\r
64     #this.$el.append(@error_explanation.render().el) if not @error_explanation\r
65     this.$el.append(@div_fields.render().el)\r
66     if @submit\r
67       c = @submit_class()\r
68       @div_submit = new c({form: this})\r
69       this.$el.append(@div_submit.render().el)\r
70       @delegateEvents({'submit': method_type})\r
71     this\r
72   \r
73   init_fields: () ->\r
74     _this = this\r
75     _.each _this.manifest.field_names, (field_name) ->\r
76       field_manifest = _this.manifest.fields[field_name]\r
77       boost_name = _this.item.my_class().find_boost_name(field_name)\r
78       extend_model = if boost_name \r
79         _this.item.boosters[boost_name].extend_model()\r
80       else\r
81         null\r
82       if boost_name and extend_model # field is extend setting AND template has a extend model\r
83         extend_form_name = _this.item.boosters[boost_name].item_name()\r
84         extend_item = _this.item.boosters[boost_name].extend_item()\r
85         _this.fields[field_name] = new Locmare.ExtendForm({\r
86           parent: _this, \r
87           form_name: extend_form_name, \r
88           item: extend_item, \r
89           mounted: _this.mounted, \r
90           operators: _this.operators, \r
91           field_name: field_name\r
92         })\r
93       else\r
94         _this.fields[field_name] = new Locmare.FormModule.Field({\r
95           form: _this, \r
96           field_name: field_name, \r
97           field_manifest: field_manifest\r
98         })\r
99   \r
100   submits: () ->\r
101     {\r
102       default: Locmare.FormModule.SubmitModule.Default\r
103     }\r
104   \r
105   submit_class: () ->\r
106     @submits()[@submit]\r
107   \r
108   post: () ->\r
109     _this = this\r
110     _.each @fields, (field) ->\r
111       _this.item.set(field.field_name, field.val())\r
112     if @item.save()\r
113       window.router.navigate('/' + @item.table_name() + '/' + Pettanr.to_s(@item.get('id')), true)\r
114       return false\r
115     else\r
116       alert('invalid')\r
117   \r
118   put: () ->\r
119     _this = this\r
120     _.each @fields, (field) ->\r
121       _this.item.set(field.field_name, field.val())\r
122     @item.overwrite({operators: @operators})\r
123     if @item.save()\r
124       window.router.navigate('/' + @item.table_name() + '/' + Pettanr.to_s(@item.get('id')), true)\r
125       return false\r
126     else\r
127       alert('invalid')\r
128   \r
129 class Locmare.ExtendForm extends Locmare.FormBase\r
130   tagName: 'div'\r
131   className: 'fields'\r
132   \r
133   initialize: (options) ->\r
134     @parent = options.parent\r
135     @field_name = options.field_name\r
136     super(options)\r
137     @field = new Locmare.FormModule.Field({\r
138       form: @parent, \r
139       field_name: @field_name, \r
140       field_manifest: @parent.manifest.fields[@field_name]\r
141     })\r
142     @label = @field.label\r
143     @init_fields()\r
144   \r
145   render: () ->\r
146     this.$el.html('')\r
147     @div_fields = new Locmare.FormModule.Fields({\r
148       fields: @fields\r
149     })\r
150     this.$el.append(@div_fields.render().el)\r
151     this\r
152   \r
153   init_fields: () ->\r
154     _this = this\r
155     _.each _this.manifest.field_names, (field_name) ->\r
156       field_manifest = _this.manifest.fields[field_name]\r
157       _this.fields[field_name] = new Locmare.FormModule.ExtendField({\r
158         form: _this, \r
159         field_name: field_name, \r
160         field_manifest: field_manifest\r
161       })\r
162   \r
163   form_field_name: (extend_field_name) ->\r
164     # parent is field\r
165     @parent.form_field_name(@field_name)  + '[' + extend_field_name + ']'\r
166   \r
167 class Locmare.FormModule\r
168 class Locmare.FormModule.Fields extends Backbone.View\r
169   tagName: 'div'\r
170   className: 'fields'\r
171   \r
172   initialize: (options) ->\r
173     @fields = options.fields\r
174   \r
175   render: () ->\r
176     this.$el.html('')\r
177     _this = this\r
178     _.each @fields, (field) ->\r
179       _this.$el.append(field.render().el)\r
180       _this.$el.append(field.rb.render().el) if field.rb\r
181     this\r
182   \r
183 class Locmare.FormModule.SubmitModule\r
184 class Locmare.FormModule.SubmitModule.Default extends Backbone.View\r
185   tagName: 'div'\r
186   className: 'actions'\r
187   \r
188   initialize: (options) ->\r
189     @form = options.form\r
190   \r
191   render: () ->\r
192     caption = I18n.t(@submit_name())\r
193     this.$el.html('<input type="submit" name="commit" class="submit" value="' + caption + '"></input>')\r
194     this\r
195   \r
196   submit_name: () ->\r
197     if @form.item.isNew()\r
198       @form.item.table_name() + '.submit.new'\r
199     else\r
200       @form.item.table_name() + '.submit.edit'\r
201   \r