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: 'div'\r
8   \r
9   initialize: (options) ->\r
10     @form_name_with_sub_form = 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_with_sub_form)\r
16       @sub_form_names = form_name_with_sub_form.split('.')\r
17       @form_name = @sub_form_names.last\r
18       @root_form_name = @sub_form_names.shift\r
19     else\r
20       @sub_form_names = []\r
21       @form_name = @form_name_with_sub_form\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   initialize: (options) ->\r
42     super(options)\r
43     @submit = options.submit\r
44     @item.boosts 'post'\r
45     @init_fields()\r
46   \r
47   render: () ->\r
48     this.$el.html('')\r
49     @error_explanation = null\r
50     @div_fields = new Locmare.FormModule.Fields({\r
51       fields: @fields\r
52     })\r
53     #this.$el.append(@error_explanation.render().el) if not @error_explanation\r
54     this.$el.append(@div_fields.render().el)\r
55     if @submit\r
56       c = @submit_class()\r
57       @div_submit = new c({form: this})\r
58       this.$el.append(@div_submit.render().el)\r
59     this\r
60   \r
61   init_fields: () ->\r
62     _this = this\r
63     _.each _this.manifest.field_names, (field_name) ->\r
64       field_manifest = _this.manifest.fields[field_name]\r
65       boost_name = _this.item.my_class().find_boost_name(field_name)\r
66       extend_model = if boost_name \r
67         _this.item.boosters[boost_name].extend_model()\r
68       else\r
69         null\r
70       if boost_name and extend_model # field is extend setting AND template has a extend model\r
71         extend_form_name = @item.boosters[boost_name].model_name\r
72         extend_item = @item.boosters[boost_name].extend_item\r
73         _this.fields[field_name] = new Locmare.ExtendForm({\r
74           parent: _this, \r
75           form_name: extend_form_name, \r
76           item: extend_item, \r
77           mounted: _this.mounted, \r
78           operators: _this.operators, \r
79           field_name: field_name\r
80         })\r
81       else\r
82         _this.fields[field_name] = new Locmare.FormModule.Field({\r
83           form: _this, \r
84           field_name: field_name, \r
85           field_manifest: field_manifest\r
86         })\r
87   \r
88   submit_name: () ->\r
89     if @item.isNew()\r
90       @item.table_name() + '.submit.new'\r
91     else\r
92       @item.table_name() + '.submit.edit'\r
93   \r
94   submits: () ->\r
95     {\r
96       default: Locmare.FormModule.SubmitModule.Default\r
97     }\r
98   \r
99   submit_class: () ->\r
100     @submits()[@submit]\r
101   \r
102 class Locmare.ExtendForm extends Locmare.FormBase\r
103   \r
104   initialize: (options) ->\r
105     @parent = options.parent\r
106     @form_name = options.form_name\r
107     @item = options.item\r
108     @mounted = options.mounted\r
109     @operators = options.operators\r
110     @field_name = options.field_name\r
111     super(@form_name, @item, @mounted, @operators)\r
112     @field = new Locmare.FormModule.Field({\r
113       form: @parent, \r
114       field_name: @field_name, \r
115       field_manifest: @parent.manifest.fields[@field_name]\r
116     })\r
117     @label = @field.label\r
118     @init_fields()\r
119   \r
120   init_fields: () ->\r
121     _this = this\r
122     _.each _this.manifest.field_names, (field_name) ->\r
123       field_manifest = _this.manifest.fields[field_name]\r
124       _this.fields[field_name] = new Locmare.FormModule.ExtendField({\r
125         form: _this, \r
126         field_name: field_name, \r
127         field_manifest: field_manifest\r
128       })\r
129   \r
130   form_field_name: (field_name) ->\r
131     # parent is field\r
132     @parent.form_field_name(field_name)  + '[' + field_name + ']'\r
133   \r
134 class Locmare.FormModule\r
135 class Locmare.FormModule.Fields extends Backbone.View\r
136   tagName: 'div'\r
137   className: 'fields'\r
138   \r
139   initialize: (options) ->\r
140     @fields = options.fields\r
141   \r
142   render: () ->\r
143     this.$el.html('')\r
144     _this = this\r
145     _.each @fields, (field) ->\r
146       _this.$el.append(field.render().el)\r
147     this\r
148   \r
149 class Locmare.FormModule.SubmitModule\r
150 class Locmare.FormModule.SubmitModule.Default extends Backbone.View\r
151   tagName: 'div'\r
152   className: 'actions'\r
153   \r
154   initialize: (options) ->\r
155     @form = options.form\r
156   \r
157   render: () ->\r
158     this.$el.html('<input type="submit" name="commit" class="submit" value="' + @form.submit_name() + '"></input>')\r
159     this\r
160   \r