From ceaec976f15d43e1adcc58e94b5be5ee9f4acbc1 Mon Sep 17 00:00:00 2001 From: yasushiito Date: Sat, 25 Apr 2015 11:46:02 +0900 Subject: [PATCH] add: success inspire --- .../javascripts/controllers/panels.js.coffee | 2 +- .../panel_editor/element/element_board.js.coffee | 1 - .../javascripts/editor/panel_editor/root.js.coffee | 1 - .../filer/body/file_body/file_item.js.coffee | 18 ------ app/assets/javascripts/locmare/form.js.coffee | 39 +++++++----- .../locmare/list_group/lib/pager.js.coffee | 2 +- app/assets/javascripts/pettanr/inspire.js.coffee | 73 ++++++++++++++++++++++ app/assets/javascripts/views/panels/body.js.coffee | 7 +++ app/assets/javascripts/views/panels/show.js.coffee | 9 +++ app/assets/javascripts/views/show.js.coffee | 17 +++-- app/assets/javascripts/yasapp.js | 1 + 11 files changed, 129 insertions(+), 41 deletions(-) create mode 100644 app/assets/javascripts/pettanr/inspire.js.coffee diff --git a/app/assets/javascripts/controllers/panels.js.coffee b/app/assets/javascripts/controllers/panels.js.coffee index 6fae87a1..86e5049a 100644 --- a/app/assets/javascripts/controllers/panels.js.coffee +++ b/app/assets/javascripts/controllers/panels.js.coffee @@ -37,7 +37,7 @@ class Pettanr.PanelsController extends Pettanr.AppController show_html: () -> @item = @item.with_elements() # retake panel for 'with_elements' mode - @item.fetch({cache: true}).done => + @item.fetch({cache: false}).done => @item.attributes = @item.replaced_attributes() @trigger('title', @params, @item.get('caption')) show = new Pettanr.Views.Panel.Show({ diff --git a/app/assets/javascripts/editor/panel_editor/element/element_board.js.coffee b/app/assets/javascripts/editor/panel_editor/element/element_board.js.coffee index fa0b07ba..bdd87b2b 100644 --- a/app/assets/javascripts/editor/panel_editor/element/element_board.js.coffee +++ b/app/assets/javascripts/editor/panel_editor/element/element_board.js.coffee @@ -35,7 +35,6 @@ class Editor.EditorModule.DockModule.TabModule.ElementBoardBody extends Editor.E item: @element(), element_form: true, submit: null, - operators: Pettanr.cache.operators, }) render: () -> diff --git a/app/assets/javascripts/editor/panel_editor/root.js.coffee b/app/assets/javascripts/editor/panel_editor/root.js.coffee index df0fdf86..7e39a414 100644 --- a/app/assets/javascripts/editor/panel_editor/root.js.coffee +++ b/app/assets/javascripts/editor/panel_editor/root.js.coffee @@ -17,7 +17,6 @@ class Editor.EditorModule.DockModule.TabModule.RootBayBody extends Editor.Editor use_name: 'default' item: @root_item(), submit: 'default' - action: '/' + @root_item().table_name() + '/' + Pettanr.to_s(@root_item().get('id')) }) @listenTo(@form, 'http_post', @http_post) @listenTo(@form, 'success', @post_success) diff --git a/app/assets/javascripts/locmare/filer/body/file_body/file_item.js.coffee b/app/assets/javascripts/locmare/filer/body/file_body/file_item.js.coffee index 7e8a0343..f6e1401f 100644 --- a/app/assets/javascripts/locmare/filer/body/file_body/file_item.js.coffee +++ b/app/assets/javascripts/locmare/filer/body/file_body/file_item.js.coffee @@ -89,21 +89,3 @@ class Locmare.FilerModule.BodyModule.FileBodyModule.FileItem extends Backbone.Vi class Locmare.FilerModule.BodyModule.FileBodyModule.FileItemModule -class Locmare.FilerModule.BodyModule.FileBodyModule.FileItemModule.PickModule -class Locmare.FilerModule.BodyModule.FileBodyModule.FileItemModule.PickModule.Icon extends Backbone.View - tagName: 'div' - - initialize: (options) -> - @name = options.name - @el.className = 'filer-item-pick' - @button = new Pettanr.Views.Common.PickIcon({name: @name}) - - render: () -> - this.$el.html('') - @listenTo(@button, 'click', @click) - this.$el.append(@button.render().el) - this - - click: () -> - @trigger('click', this) - diff --git a/app/assets/javascripts/locmare/form.js.coffee b/app/assets/javascripts/locmare/form.js.coffee index 475d1166..65a30e9f 100644 --- a/app/assets/javascripts/locmare/form.js.coffee +++ b/app/assets/javascripts/locmare/form.js.coffee @@ -71,14 +71,7 @@ class Locmare.Form extends Locmare.FormBase }) #this.$el.append(@error_explanation.render().el) if not @error_explanation this.$el.append(@div_fields.render().el) - if @element_form - _.each @item.my_class().child_models(), (element_model) => - items = @item.element_items(element_model) - if @item.my_class().my_manifest().associations.is_has_one(element_model) - @add_element(items) - else - _.each items, (item) => - @add_element(item) + @add_elements() if @element_form if @submit c = @submit_class() @div_submit = new c({form: this}) @@ -105,6 +98,15 @@ class Locmare.Form extends Locmare.FormBase else @item.edit_url() + add_elements: () -> + _.each @item.my_class().child_models(), (element_model) => + items = @item.element_items(element_model) + if @item.my_class().my_manifest().associations.is_has_one(element_model) + @add_element(items) + else + _.each items, (item) => + @add_element(item) + add_element: (element) -> form = Locmare.Form.factory({ form_name: element.item_name(), @@ -116,11 +118,12 @@ class Locmare.Form extends Locmare.FormBase this.$el.append(form.render().el) mm = @item.my_class().my_manifest() em = element.my_class().my_manifest() + child_element_name = mm.associations.child_element_name(element.my_class()) if mm.associations.is_has_one(em) - @child_forms[element.item_name()] = form + @child_forms[child_element_name] = form else - @child_forms[element.table_name()] ||= [] - @child_forms[element.table_name()].push(form) + @child_forms[child_element_name] ||= [] + @child_forms[child_element_name].push(form) form init_fields: () -> @@ -190,7 +193,7 @@ class Locmare.Form extends Locmare.FormBase quit: () -> @item.release() - save_data: () -> + save_data: (inspire = false) -> @item.my_class().child_models() attrs = {} _.each @fields, (field) => @@ -200,11 +203,19 @@ class Locmare.Form extends Locmare.FormBase mm = @item.my_class().my_manifest() em = child_form.item.my_class().my_manifest() if mm.associations.is_has_one(em) - attrs[name + '_attributes'] = child_form.save_data() + d = child_form.save_data(inspire) + if inspire + delete d['id'] + delete d[@item.item_name() + '_id'] + attrs[name + '_attributes'] = d else attrs[name + '_attributes'] = [] _.each child_form, (form) => - attrs[name + '_attributes'].push(form.save_data()) + d = form.save_data(inspire) + if inspire + delete d['id'] + delete d[@item.item_name() + '_id'] + attrs[name + '_attributes'].push(d) attrs class Locmare.ExtendForm extends Locmare.FormBase diff --git a/app/assets/javascripts/locmare/list_group/lib/pager.js.coffee b/app/assets/javascripts/locmare/list_group/lib/pager.js.coffee index edf41e4c..f1010da3 100644 --- a/app/assets/javascripts/locmare/list_group/lib/pager.js.coffee +++ b/app/assets/javascripts/locmare/list_group/lib/pager.js.coffee @@ -25,7 +25,7 @@ class Locmare.ListGroupModule.LibModule.PagerModule.Default extends Backbone.Vie @action = @action.original if @action.original @current_page = @page_status.page - @per_page = @page_status.limit + @per_page = @page_status.page_size @total_page = @page_status.total_page render: () -> diff --git a/app/assets/javascripts/pettanr/inspire.js.coffee b/app/assets/javascripts/pettanr/inspire.js.coffee new file mode 100644 index 00000000..d967e0a2 --- /dev/null +++ b/app/assets/javascripts/pettanr/inspire.js.coffee @@ -0,0 +1,73 @@ +class Pettanr.Inspire + + constructor: (options) -> + _.extend(this, Backbone.Events) + @item = options.item + + inspire: () -> + @item = @item.with_elements() # retake panel for 'with_elements' mode + @item.fetch({cache: false}).done => + @item.attributes = @item.replaced_attributes() + delete @item.attributes['id'] + @item.overwrite({}) + @set_root() + @set_elements() + @save() + + set_root: () -> + @root_form = Locmare.Form.factory({ + form_name: @item.item_name(), + use_name: 'default' + item: @item, + submit: 'default' + }) + + set_elements: () -> + @element_forms = _.map @item.zorderd_elements(), (element) => + form = Locmare.Form.factory({ + form_name: element.item_name(), + use_name: 'default' + item: element, + element_form: true, + submit: null, + }) + form.add_elements() + form + + save: () -> + # merge panel and elements + attrs = @root_form.save_data() + delete attrs['id'] + _.extend(attrs, @elements_save_data()) + # save json data by panel form + @listenTo(@root_form, 'success', @post_success) + @listenTo(@root_form, 'fail', @post_fail) + @root_form.save(attrs) + + elements_save_data: () -> + attrs = {} + _.each @element_forms, (element_form) => + mm = @item.my_class().my_manifest() + em = element_form.item.my_class().my_manifest() + child_element_name = mm.associations.child_element_name(element_form.item.my_class()) + if mm.associations.is_has_one(em) + name = element_form.item.item_name() + '_attributes' + d = element_form.save_data(true) + delete d['id'] + delete d['panel_id'] + attrs[name] = d + else + name = element_form.item.table_name() + '_attributes' + attrs[name] ||= [] + d = element_form.save_data(true) + delete d['id'] + delete d['panel_id'] + attrs[name].push(d) + attrs + + post_success: (model, response) -> + @trigger('inspire', model) + + post_fail: (model, response) -> + @trigger('fail', response) + diff --git a/app/assets/javascripts/views/panels/body.js.coffee b/app/assets/javascripts/views/panels/body.js.coffee index 17a5dd8d..065490ad 100644 --- a/app/assets/javascripts/views/panels/body.js.coffee +++ b/app/assets/javascripts/views/panels/body.js.coffee @@ -124,15 +124,19 @@ class Pettanr.Views.Panel.Footer extends Backbone.View retrieve_author: (@author) -> @panel_icon = new Pettanr.Views.Panel.Icon({item: @panel, half: true}) @author_icon = new Pettanr.Views.Author.Icon({item: @author, half: true}) + @inspire_icon = new Pettanr.Views.Show.LinkedInspireIcon({item: @panel, half: true}) @edit_button = new Pettanr.Views.Show.LinkedEditButton({item: @panel}) @listenTo(@panel_icon, 'click', @click_panel) @listenTo(@author_icon, 'click', @click_author) @listenTo(@edit_button, 'click', @click_edit) + @listenTo(@inspire_icon, 'click', @click_inspire) this.$el.append(@panel_icon.render().el) this.$el.append(@author_icon.render().el) this.$el.append( Pettanr.AppHelper.distance_of_time_in_words_to_now(@panel.get('updated_at')) ) + if Pettanr.cache.operators.is_author() + this.$el.append(@inspire_icon.render().el) if @panel.is_own() this.$el.append(@edit_button.render().el) @@ -145,3 +149,6 @@ class Pettanr.Views.Panel.Footer extends Backbone.View click_edit: () -> @trigger('click:edit') + click_inspire: () -> + @trigger('click:inspire') + diff --git a/app/assets/javascripts/views/panels/show.js.coffee b/app/assets/javascripts/views/panels/show.js.coffee index 9d2c68e4..e527a96a 100644 --- a/app/assets/javascripts/views/panels/show.js.coffee +++ b/app/assets/javascripts/views/panels/show.js.coffee @@ -31,6 +31,7 @@ class Pettanr.Views.Panel.Show extends Backbone.View @listenTo(@footer, 'click:panel', @click_show) @listenTo(@footer, 'click:author', @click_author) @listenTo(@footer, 'click:edit', @click_edit) + @listenTo(@footer, 'click:inspire', @click_inspire) @listenTo(@credits, 'click:credit:icon', @click_credit_icon) render: () -> @@ -52,6 +53,11 @@ class Pettanr.Views.Panel.Show extends Backbone.View click_edit: () -> @trigger('http_get', @panel.edit_url()) + click_inspire: () -> + inspire = new Pettanr.Inspire({item: @panel}) + @listenTo(inspire, 'inspire', @inspire) + inspire.inspire() + click_prof: () -> @trigger('http_get', @panel.prof_url()) @@ -67,6 +73,9 @@ class Pettanr.Views.Panel.Show extends Backbone.View add_pick: (target_model) -> @header.add_pick(target_model) + inspire: (item) -> + @trigger('http_get', item.show_url()) + class Pettanr.Views.Panel.ShowModule class Pettanr.Views.Panel.ShowModule.Header extends Pettanr.Views.Show.Header diff --git a/app/assets/javascripts/views/show.js.coffee b/app/assets/javascripts/views/show.js.coffee index d1f16aa6..372ea4c5 100644 --- a/app/assets/javascripts/views/show.js.coffee +++ b/app/assets/javascripts/views/show.js.coffee @@ -96,9 +96,6 @@ class Pettanr.Views.Show.LinkedEditButton extends Tag.A content: I18n.t('link.edit') }) - url: () -> - @url - class Pettanr.Views.Show.LinkedDestroyButton extends Tag.A initialize: (options) -> @@ -108,8 +105,18 @@ class Pettanr.Views.Show.LinkedDestroyButton extends Tag.A content: I18n.t('link.destroy') }) - url: () -> - @destroy_url +class Pettanr.Views.Show.LinkedInspireIcon extends Tag.A + + initialize: (options) -> + item = options.item + half = options.half + img = new Pettanr.Image.SymbolImg({ + attr: {src: '/images/inspire.gif'}, half: half + }) + super({ + attr: {href: '/' + item.index_url() + '/inspire'}, + content: img.render().el + }) class Pettanr.Views.Show.OwnerFooter extends Backbone.View tagName: 'div' diff --git a/app/assets/javascripts/yasapp.js b/app/assets/javascripts/yasapp.js index e465ec18..3fcc542d 100644 --- a/app/assets/javascripts/yasapp.js +++ b/app/assets/javascripts/yasapp.js @@ -341,5 +341,6 @@ //= require ./pettanr/action_filter //= require ./pettanr/proxy //= require ./pettanr/cache +//= require ./pettanr/inspire //= require ./backbone.fetch-cache //= require main -- 2.11.0