OSDN Git Service

mrg
[pettanr/pettanr.git] / app / assets / javascripts / locmare / bucket.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.Bucket extends Backbone.View\r
41   \r
42   @factory: (options) ->\r
43     @bucket_name = options.bucket_name\r
44     @item = options.item\r
45     @mounted = options.mounted\r
46     @submit = options.submit\r
47     @operators = options.operators\r
48     \r
49     bucket = LocalManifest.manifest().buckets[bucket_or_form_name]\r
50     c = if bucket and bucket.has_member\r
51       Locmare.Bucket\r
52     else\r
53       Locmare.Form\r
54     new c({\r
55       bucket_or_form_name, \r
56       item, \r
57       mounted, \r
58       submit, \r
59       operators\r
60     })\r
61   \r
62   initialize: (options) ->\r
63     @bucket_name = options.bucket_name\r
64     @item = options.item\r
65     @mounted = options.mounted\r
66     @submit = options.submit\r
67     @operators = options.operators\r
68     \r
69     @item.boosts 'post'\r
70     @manifest = LocalManifest.manifest().buckets[@bucket_name]\r
71     @form_fields = []\r
72     @forms = {}\r
73     @forms[@item.item_name()] = new Locmare.Form({\r
74       @item.item_name, @item, @mounted, false, @operators\r
75     })\r
76     @init_forms(@item.item_name, @manifest, @item)\r
77     @init_fields()\r
78   \r
79   fold_extend_settings: (params) ->\r
80     @item.class.fold_extend_settings params[@item.item_name]\r
81     self.members_fold_extend_settings @item, params[@item.item_name], @manifest\r
82   \r
83   members_fold_extend_settings: (fold_item, attr, man) ->\r
84     man.members.each do |member_name, member_manifest|\r
85       member_item = fold_item.__send__ member_name\r
86       member_item.class.fold_extend_settings attr[member_name + '_attributes']\r
87       self.members_fold_extend_settings member_item, attr[member_name + '_attributes'], member_manifest\r
88   \r
89   each_field: () ->\r
90     @form_fields.each do |form_field|\r
91       yield form_field.field_name, form_field\r
92   \r
93   push_form: (key, form_name, item) ->\r
94   \r
95   init_forms: (key, man, item) ->\r
96     man.members.each do |member_name, member_manifest|\r
97       form_name = member_name   # write exchange function if you want\r
98       member_item = item.__send__(form_name)\r
99       new_key = key + '.' + form_name\r
100       @forms[new_key] = Locmare::Form.new new_key, member_item, @mounted, false, @operators\r
101       self.init_forms new_key, member_manifest, member_item\r
102   \r
103   init_fields: () ->\r
104     @manifest.form_field_names.each do |form_field_name|\r
105       r = form_field_name.form_name.blank? ? '' : '.' + form_field_name.form_name\r
106       key = @item.item_name + r\r
107       form = @forms[key]\r
108       field = form.fields[form_field_name.field_name]\r
109       @form_fields << field\r
110   \r
111   image_dir: () ->\r
112     '/images/'\r
113   \r
114   submit_name: () ->\r
115     if @item.isNew()\r
116       @item.table_name() + '.submit.new'\r
117     else\r
118       @item.table_name() + '.submit.edit'\r
119  \r
120   form_name: () ->\r
121     @bucket_name\r
122   \r
123 class Locmare.BucketModule\r