From 4546c2c97be5d9d8df38598a36c58eb69fe43284 Mon Sep 17 00:00:00 2001 From: yasushiito Date: Mon, 4 May 2015 11:43:06 +0900 Subject: [PATCH 1/1] fix: new elm launcher --- .../javascripts/editor/panel_editor.js.coffee | 21 ++-- .../editor/panel_editor/dialog.js.coffee | 3 + .../javascripts/editor/panel_editor/dock.js.coffee | 8 ++ .../editor/panel_editor/element.js.coffee | 8 ++ .../panel_editor/element/new_board.js.coffee | 128 +++++++++++++++------ .../views/ground_colors/new_element.js.coffee | 69 +++++------ .../views/ground_pictures/new_element.js.coffee | 48 ++++---- .../views/panel_pictures/new_element.js.coffee | 48 ++++---- .../views/speech_balloons/new_element.js.coffee | 48 ++++---- app/models/resource_picture_picture.rb | 1 + 10 files changed, 241 insertions(+), 141 deletions(-) diff --git a/app/assets/javascripts/editor/panel_editor.js.coffee b/app/assets/javascripts/editor/panel_editor.js.coffee index ddf3885f..355f7e9e 100644 --- a/app/assets/javascripts/editor/panel_editor.js.coffee +++ b/app/assets/javascripts/editor/panel_editor.js.coffee @@ -5,9 +5,7 @@ class Editor.PanelEditor extends Backbone.View initialize: (options) -> @panel = options.root_item @item = @panel - @dialog = new Editor.PanelEditor.Dialog({ - parent: this - }) + @dialogs = {} @body = new Pettanr.Views.Panel.Body.Edit({ panel: @root_item(), spot: null @@ -22,6 +20,8 @@ class Editor.PanelEditor extends Backbone.View @listenTo(@dock, 'add:element', @add_element) @listenTo(@dock, 'add:credit', @add_credit) @listenTo(@dock, 'destroy', @destroy) + @listenTo(@dock, 'dialog:open', @open_dialog) + @listenTo(@dock, 'dialog:close', @close_dialog) add_element: (element) -> @body.add_element(element) @@ -29,6 +29,12 @@ class Editor.PanelEditor extends Backbone.View add_credit: (element) -> @credits.add_picture(element.picture()) + open_dialog: (dialog) -> + @dialogs[dialog.cid] = dialog + + close_dialog: (dialog) -> + delete @dialogs[dialog.cid] + destroy: (element, index) -> @remove_element(element) @@ -37,12 +43,6 @@ class Editor.PanelEditor extends Backbone.View render: () -> this.$el.html('') - this.$el.append(@dialog.render().el) - @dialog.$el.dialog({ - autoOpen: false, - width: 750, - height: 560 - }) this.$el.append(@body.render().el) this.$el.append(@dock.render().el) this.$el.append(@credits.render().el) @@ -61,7 +61,8 @@ class Editor.PanelEditor extends Backbone.View quit: () -> @dock.quit() - @dialog.$el.dialog('destroy') + _.each @dialogs, (dialog) => + @close_dialog(dialog) http_post: (url, dock) -> @trigger('http_post', url, this) # send editor diff --git a/app/assets/javascripts/editor/panel_editor/dialog.js.coffee b/app/assets/javascripts/editor/panel_editor/dialog.js.coffee index 2c2dea84..8e62e0a3 100644 --- a/app/assets/javascripts/editor/panel_editor/dialog.js.coffee +++ b/app/assets/javascripts/editor/panel_editor/dialog.js.coffee @@ -15,6 +15,9 @@ class Editor.PanelEditor.Dialog extends Backbone.View stop: () -> this.$el.dialog('close') + close: () -> + @trigger('close') + render: () -> this.$el.html('') this diff --git a/app/assets/javascripts/editor/panel_editor/dock.js.coffee b/app/assets/javascripts/editor/panel_editor/dock.js.coffee index 8549d8b6..c9e7fe22 100644 --- a/app/assets/javascripts/editor/panel_editor/dock.js.coffee +++ b/app/assets/javascripts/editor/panel_editor/dock.js.coffee @@ -45,6 +45,8 @@ class Editor.PanelEditor.Dock extends Editor.EditorModule.DockBase @listenTo(@root_bay.body, 'save:fail', @post_fail) @listenTo(@element_bay, 'add:credit', @add_credit) @listenTo(@element_bay, 'pick', @pick) + @listenTo(@element_bay, 'dialog:open', @open_dialog) + @listenTo(@element_bay, 'dialog:close', @close_dialog) @listenTo(@element_bay, 'destroy', @destroy) render: () -> @@ -104,6 +106,12 @@ class Editor.PanelEditor.Dock extends Editor.EditorModule.DockBase @scenario_bay.add_element(new_item) @trigger('add:element', new_item) + open_dialog: (dialog) -> + @trigger('dialog:open', dialog) + + close_dialog: (dialog) -> + @trigger('dialog:close', dialog) + destroy: (element) -> @trigger('destroy', element) diff --git a/app/assets/javascripts/editor/panel_editor/element.js.coffee b/app/assets/javascripts/editor/panel_editor/element.js.coffee index 8eb4dbf9..ba515962 100644 --- a/app/assets/javascripts/editor/panel_editor/element.js.coffee +++ b/app/assets/javascripts/editor/panel_editor/element.js.coffee @@ -78,6 +78,8 @@ class Editor.EditorModule.DockModule.ElementBay extends Editor.EditorModule.Dock bb ) @listenTo(bb, 'pick', @pick) + @listenTo(bb, 'dialog:open', @open_dialog) + @listenTo(bb, 'dialog:close', @close_dialog) @boards.add_element_tab(@new_tab) render: () -> @@ -137,6 +139,12 @@ class Editor.EditorModule.DockModule.ElementBay extends Editor.EditorModule.Dock @add_element(new_item) @trigger('pick', new_item) + open_dialog: (dialog) -> + @trigger('dialog:open', dialog) + + close_dialog: (dialog) -> + @trigger('dialog:close', dialog) + destroy: (element) -> @remove_element(element) @trigger('destroy', element) diff --git a/app/assets/javascripts/editor/panel_editor/element/new_board.js.coffee b/app/assets/javascripts/editor/panel_editor/element/new_board.js.coffee index 93aea25a..6fcc6d5d 100644 --- a/app/assets/javascripts/editor/panel_editor/element/new_board.js.coffee +++ b/app/assets/javascripts/editor/panel_editor/element/new_board.js.coffee @@ -38,11 +38,13 @@ class Editor.EditorModule.DockModule.TabModule.NewElementBoardBody extends Edito render: () -> this.$el.attr('id', @dom_id()) - @buttons = new Editor.EditorModule.DockModule.NewElementButtons({ + @launchers = new Editor.EditorModule.DockModule.NewElementLaunchers({ parent: this, element_models: @element_models() }) - @listenTo(@buttons, 'click', @click_button) - this.$el.append(@buttons.render().el) + @listenTo(@launchers, 'pick', @pick) + @listenTo(@launchers, 'dialog:open', @open_dialog) + @listenTo(@launchers, 'dialog:close', @close_dialog) + this.$el.append(@launchers.render().el) this panel: () -> @@ -51,19 +53,16 @@ class Editor.EditorModule.DockModule.TabModule.NewElementBoardBody extends Edito element_models: () -> @panel().my_class().child_models() - click_button: (model) -> - @new_element.remove() if @new_element - @new_element = new Pettanr.Views[model.singular()].NewElement({ - parent: this, target_model: model - }) - @listenTo(@new_element, 'pick', @pick) - this.$el.append(@new_element.clear().el) - pick: (new_item) -> @trigger('pick', new_item) - @new_element.render() -class Editor.EditorModule.DockModule.NewElementButtons extends Backbone.View + open_dialog: (dialog) -> + @trigger('dialog:open', dialog) + + close_dialog: (dialog) -> + @trigger('dialog:close', dialog) + +class Editor.EditorModule.DockModule.NewElementLaunchers extends Backbone.View tagName: 'div' className: 'new-element-buttons' @@ -74,17 +73,28 @@ class Editor.EditorModule.DockModule.NewElementButtons extends Backbone.View render: () -> _.each @element_models, (model) => - button = new Editor.EditorModule.DockModule.NewElementButton({ + launcher = new Pettanr.Views[model.singular()].NewElementLauncher({ parent: this, model: model }) - @listenTo(button, 'click', @click) - this.$el.append(button.render().el) + @listenTo(launcher, 'pick', @pick) + @listenTo(launcher, 'dialog:open', @open_dialog) + @listenTo(launcher, 'dialog:close', @close_dialog) + this.$el.append(launcher.render().el) this - click: (model) -> - @trigger('click', model) + pick: (new_item) -> + @trigger('pick', new_item) + + open_dialog: (dialog) -> + @trigger('dialog:open', dialog) + + close_dialog: (dialog) -> + @trigger('dialog:close', dialog) -class Editor.EditorModule.DockModule.NewElementButton extends Backbone.View + dock: () -> + @parent.dock() + +class Editor.EditorModule.DockModule.NewElementLauncher extends Backbone.View tagName: 'div' initialize: (options) -> @@ -94,21 +104,75 @@ class Editor.EditorModule.DockModule.NewElementButton extends Backbone.View render: () -> this.$el.html('') - icon = new Pettanr.Image.Icon({item: @model}) - linked_icon = new Editor.EditorModule.DockModule.NewElementLinkedButton({ - attr: {href: '#' }, - content: icon.render().el - }) - @listenTo(linked_icon, 'click', @click) - this.$el.append(linked_icon.render().el) + header = new Editor.EditorModule.DockModule.NewElementLauncherHeader({model: @model}) + this.$el.append(header.render().el) this - click: () -> - @trigger('click', @model) + get_action: (params) -> + controller = Manifest.manifest().controllers[params['controller']] + controller.actions[params['action']] + + add_links: () -> + _.each @links_conf, (conf, name) => + @add_link(name, conf.caption, @get_action(conf.params).url(conf.params)) + + add_link: (name, caption, url) -> + link = new Tag.A({ + attr: {href: '/' + url}, + content: caption + }) + @listenTo(link, 'click', this['click_' + name]) + this.$el.append(link.render().el) + + create_dialog: () -> + dialog = new Editor.PanelEditor.Dialog({ + parent: this + }) + this.$el.append(dialog.render().el) + _this = this + dialog.$el.dialog({ + autoOpen: false, + width: 750, + height: 560, + close: (ui, event) -> + _this.close_dialog(dialog) + }) + dialog + + click_default: (params) -> + dialog = @create_dialog() + picker = new Pettanr.Views[@model.singular()].NewElement({ + parent: this, target_model: @model + }) + @listenTo(picker, 'pick', @pick) + @listenTo(picker, 'dialog:open', @open_dialog) + @listenTo(picker, 'dialog:close', @close_dialog) + picker.start(dialog, params) + + pick: (new_item) -> + @trigger('pick', new_item) + + open_dialog: (dialog) -> + @trigger('dialog:open', dialog) + + close_dialog: (dialog) -> + @trigger('dialog:close', dialog) -class Editor.EditorModule.DockModule.NewElementLinkedButton extends Tag.A + dock: () -> + @parent.dock() - click: () -> - @trigger('click') - return false +class Editor.EditorModule.DockModule.NewElementLauncherHeader extends Backbone.View + tagName: 'h3' + + initialize: (options) -> + super(options) + @model = options.model + + render: () -> + this.$el.html('') + icon = new Pettanr.Image.Icon({item: @model, half: true}) + caption = Pettanr.AppHelper.t_m(@model.singular()) + this.$el.append(icon.render().el) + this.$el.append(caption) + this diff --git a/app/assets/javascripts/views/ground_colors/new_element.js.coffee b/app/assets/javascripts/views/ground_colors/new_element.js.coffee index 5b24cbcf..6747d824 100644 --- a/app/assets/javascripts/views/ground_colors/new_element.js.coffee +++ b/app/assets/javascripts/views/ground_colors/new_element.js.coffee @@ -1,64 +1,55 @@ -class Pettanr.Views.GroundColor.NewElement extends Backbone.View - tagName: 'div' - className: 'new-element-body' +class Pettanr.Views.GroundColor.NewElementLauncher extends Editor.EditorModule.DockModule.NewElementLauncher initialize: (options) -> - @parent = options.parent - @target_model = options.target_model + super(options) + @links_conf = { + inspire: { + caption: 'Inspire', + params: { + controller: @model.path_name(), action: 'index', + page_size: 6, format: 'html' + } + } + } - clear: () -> - this.$el.html('') + render: () -> + super() @pick_icon = new Pettanr.Views.Common.PickIcon({name: 'pick'}) - @inspire_icon = new Pettanr.Views.Common.PickIcon({name: 'inspire'}) @listenTo(@pick_icon, 'click', @pick_click) - @listenTo(@inspire_icon, 'click', @inspire_click) this.$el.append(@pick_icon.render().el) - this.$el.append(@inspire_icon.render().el) - this - - render: () -> + @add_links() this pick_click: () -> - model = @target_model + model = @model new_item = new model() # new_item.set({}, {silent: true}) - @success(new_item) + @pick(new_item) - inspire_click: () -> - params = { - controller: @target_model.path_name(), action: 'index', - page_size: 6, format: 'html' - } - @dialog().start(@target_model, params, null) - @listenTo(@dialog(), 'pick', @pick) + click_inspire: () -> + @click_default(@links_conf.inspire.params) + +class Pettanr.Views.GroundColor.NewElement extends Backbone.View + + initialize: (options) -> + @parent = options.parent + @target_model = options.target_model + + start: (@dialog, params) -> + @dialog.start(@target_model, params, null) + @listenTo(@dialog, 'pick', @pick) + @trigger('dialog:open', @dialog) pick: (item) -> new_item = new @target_model(item.attributes) new_item.unset('id', {silent: true}) new_item.set({panel_id: @editor().item.get('id')}, {silent: true}) - @dialog().stop() - @success(new_item) - - success: (new_item) -> - @set_form(new_item) + @dialog.stop() @trigger('pick', new_item) - set_form: (item) -> - @form = Locmare.Form.factory({ - form_name: item.item_name(), - use_name: 'default' - item: item, - element_form: true, - submit: null, - }) - dock: () -> @parent.dock() editor: () -> @dock().editor() - dialog: () -> - @editor().dialog - diff --git a/app/assets/javascripts/views/ground_pictures/new_element.js.coffee b/app/assets/javascripts/views/ground_pictures/new_element.js.coffee index 629cc2ad..9d6eb35b 100644 --- a/app/assets/javascripts/views/ground_pictures/new_element.js.coffee +++ b/app/assets/javascripts/views/ground_pictures/new_element.js.coffee @@ -1,25 +1,36 @@ +class Pettanr.Views.GroundPicture.NewElementLauncher extends Editor.EditorModule.DockModule.NewElementLauncher + + initialize: (options) -> + super(options) + @links_conf = { + resource_picture: { + caption: 'Resource Picture', + params: { + controller: @model.pick_model().path_name(), action: 'index', + page_size: 6, format: 'html' + } + } + } + + render: () -> + super() + @add_links() + this + + click_resource_picture: () -> + @click_default(@links_conf.resource_picture.params) + class Pettanr.Views.GroundPicture.NewElement extends Backbone.View - tagName: 'div' - className: 'new-element-body' initialize: (options) -> @parent = options.parent @target_model = options.target_model @pick_model = @target_model.pick_model() - clear: () -> - this.$el.html('') - params = { - controller: @pick_model.path_name(), action: 'index', - page_size: 6, format: 'html' - } - @dialog().start(@target_model, params, null) - @listenTo(@dialog(), 'pick', @pick) - this - - render: () -> - this.$el.html('') - this + start: (@dialog, params) -> + @dialog.start(@target_model, params, null) + @listenTo(@dialog, 'pick', @pick) + @trigger('dialog:open', @dialog) pick: (item) -> if item.item_name() == @target_model.item_name() @@ -43,11 +54,11 @@ class Pettanr.Views.GroundPicture.NewElement extends Backbone.View @trigger('ready', new_item) ready: (new_item) -> - @dialog().stop() + @dialog.stop() @trigger('pick', new_item) trace: (resource_picture) -> - @dialog().http_get(resource_picture.show_url()) + @dialog.http_get(resource_picture.show_url()) dock: () -> @parent.dock() @@ -55,6 +66,3 @@ class Pettanr.Views.GroundPicture.NewElement extends Backbone.View editor: () -> @dock().editor() - dialog: () -> - @editor().dialog - diff --git a/app/assets/javascripts/views/panel_pictures/new_element.js.coffee b/app/assets/javascripts/views/panel_pictures/new_element.js.coffee index 0fbe6dee..6ccd987d 100644 --- a/app/assets/javascripts/views/panel_pictures/new_element.js.coffee +++ b/app/assets/javascripts/views/panel_pictures/new_element.js.coffee @@ -1,25 +1,36 @@ +class Pettanr.Views.PanelPicture.NewElementLauncher extends Editor.EditorModule.DockModule.NewElementLauncher + + initialize: (options) -> + super(options) + @links_conf = { + resource_picture: { + caption: 'Resource Picture', + params: { + controller: @model.pick_model().path_name(), action: 'index', + page_size: 6, format: 'html' + } + } + } + + render: () -> + super() + @add_links() + this + + click_resource_picture: () -> + @click_default(@links_conf.resource_picture.params) + class Pettanr.Views.PanelPicture.NewElement extends Backbone.View - tagName: 'div' - className: 'new-element-body' initialize: (options) -> @parent = options.parent @target_model = options.target_model @pick_model = @target_model.pick_model() - clear: () -> - this.$el.html('') - params = { - controller: @pick_model.path_name(), action: 'index', - page_size: 6, format: 'html' - } - @dialog().start(@target_model, params, null) - @listenTo(@dialog(), 'pick', @pick) - this - - render: () -> - this.$el.html('') - this + start: (@dialog, params) -> + @dialog.start(@target_model, params, null) + @listenTo(@dialog, 'pick', @pick) + @trigger('dialog:open', @dialog) pick: (item) -> if item.item_name() == @target_model.item_name() @@ -44,11 +55,11 @@ class Pettanr.Views.PanelPicture.NewElement extends Backbone.View @trigger('ready', new_item) ready: (new_item) -> - @dialog().stop() + @dialog.stop() @trigger('pick', new_item) trace: (resource_picture) -> - @dialog().http_get(resource_picture.show_url()) + @dialog.http_get(resource_picture.show_url()) dock: () -> @parent.dock() @@ -56,6 +67,3 @@ class Pettanr.Views.PanelPicture.NewElement extends Backbone.View editor: () -> @dock().editor() - dialog: () -> - @editor().dialog - diff --git a/app/assets/javascripts/views/speech_balloons/new_element.js.coffee b/app/assets/javascripts/views/speech_balloons/new_element.js.coffee index d10c67ca..41ccba27 100644 --- a/app/assets/javascripts/views/speech_balloons/new_element.js.coffee +++ b/app/assets/javascripts/views/speech_balloons/new_element.js.coffee @@ -1,25 +1,36 @@ +class Pettanr.Views.SpeechBalloon.NewElementLauncher extends Editor.EditorModule.DockModule.NewElementLauncher + + initialize: (options) -> + super(options) + @links_conf = { + speech_balloon_template: { + caption: 'Speech Balloon Template', + params: { + controller: @model.pick_model().path_name(), action: 'index', + page_size: 6, format: 'html' + } + } + } + + render: () -> + super() + @add_links() + this + + click_speech_balloon_template: () -> + @click_default(@links_conf.speech_balloon_template.params) + class Pettanr.Views.SpeechBalloon.NewElement extends Backbone.View - tagName: 'div' - className: 'new-element-body' initialize: (options) -> @parent = options.parent @target_model = options.target_model @pick_model = @target_model.pick_model() - clear: () -> - this.$el.html('') - params = { - controller: @pick_model.path_name(), action: 'index', - page_size: 6, format: 'html' - } - @dialog().start(@target_model, params, null) - @listenTo(@dialog(), 'pick', @pick) - this - - render: () -> - this.$el.html('') - this + start: (@dialog, params) -> + @dialog.start(@target_model, params, null) + @listenTo(@dialog, 'pick', @pick) + @trigger('dialog:open', @dialog) pick: (item) -> if item.item_name() == @target_model.item_name() @@ -87,11 +98,11 @@ class Pettanr.Views.SpeechBalloon.NewElement extends Backbone.View ) ready: (new_item) -> - @dialog().stop() + @dialog.stop() @trigger('pick', new_item) trace: (speech_balloon) -> - @dialog().http_get(speech_balloon.show_url()) + @dialog.http_get(speech_balloon.show_url()) dock: () -> @parent.dock() @@ -99,6 +110,3 @@ class Pettanr.Views.SpeechBalloon.NewElement extends Backbone.View editor: () -> @dock().editor() - dialog: () -> - @editor().dialog - diff --git a/app/models/resource_picture_picture.rb b/app/models/resource_picture_picture.rb index b9b8816d..3be419a3 100644 --- a/app/models/resource_picture_picture.rb +++ b/app/models/resource_picture_picture.rb @@ -1,4 +1,5 @@ class ResourcePicturePicture < Peta::Item + load_manifest belongs_to :original_picture belongs_to :resource_picture belongs_to :picture -- 2.11.0