+class Pettanr.Inspire\r
+ \r
+ constructor: (options) ->\r
+ _.extend(this, Backbone.Events)\r
+ @item = options.item\r
+ \r
+ inspire: () -> \r
+ @item = @item.with_elements() # retake panel for 'with_elements' mode\r
+ @item.fetch({cache: false}).done =>\r
+ @item.attributes = @item.replaced_attributes()\r
+ delete @item.attributes['id']\r
+ @item.overwrite({})\r
+ @set_root()\r
+ @set_elements()\r
+ @save()\r
+ \r
+ set_root: () ->\r
+ @root_form = Locmare.Form.factory({\r
+ form_name: @item.item_name(), \r
+ use_name: 'default' \r
+ item: @item, \r
+ submit: 'default' \r
+ })\r
+ \r
+ set_elements: () ->\r
+ @element_forms = _.map @item.zorderd_elements(), (element) =>\r
+ form = Locmare.Form.factory({\r
+ form_name: element.item_name(), \r
+ use_name: 'default' \r
+ item: element, \r
+ element_form: true, \r
+ submit: null, \r
+ })\r
+ form.add_elements()\r
+ form\r
+ \r
+ save: () ->\r
+ # merge panel and elements\r
+ attrs = @root_form.save_data()\r
+ delete attrs['id']\r
+ _.extend(attrs, @elements_save_data())\r
+ # save json data by panel form\r
+ @listenTo(@root_form, 'success', @post_success)\r
+ @listenTo(@root_form, 'fail', @post_fail)\r
+ @root_form.save(attrs)\r
+ \r
+ elements_save_data: () ->\r
+ attrs = {}\r
+ _.each @element_forms, (element_form) =>\r
+ mm = @item.my_class().my_manifest()\r
+ em = element_form.item.my_class().my_manifest()\r
+ child_element_name = mm.associations.child_element_name(element_form.item.my_class())\r
+ if mm.associations.is_has_one(em)\r
+ name = element_form.item.item_name() + '_attributes'\r
+ d = element_form.save_data(true)\r
+ delete d['id']\r
+ delete d['panel_id']\r
+ attrs[name] = d\r
+ else\r
+ name = element_form.item.table_name() + '_attributes'\r
+ attrs[name] ||= []\r
+ d = element_form.save_data(true)\r
+ delete d['id']\r
+ delete d['panel_id']\r
+ attrs[name].push(d)\r
+ attrs\r
+ \r
+ post_success: (model, response) ->\r
+ @trigger('inspire', model)\r
+ \r
+ post_fail: (model, response) ->\r
+ @trigger('fail', response)\r
+ \r