OSDN Git Service

fix: new elm launcher
authoryasushiito <yas@pen-chan.jp>
Mon, 4 May 2015 02:43:06 +0000 (11:43 +0900)
committeryasushiito <yas@pen-chan.jp>
Mon, 4 May 2015 02:43:06 +0000 (11:43 +0900)
app/assets/javascripts/editor/panel_editor.js.coffee
app/assets/javascripts/editor/panel_editor/dialog.js.coffee
app/assets/javascripts/editor/panel_editor/dock.js.coffee
app/assets/javascripts/editor/panel_editor/element.js.coffee
app/assets/javascripts/editor/panel_editor/element/new_board.js.coffee
app/assets/javascripts/views/ground_colors/new_element.js.coffee
app/assets/javascripts/views/ground_pictures/new_element.js.coffee
app/assets/javascripts/views/panel_pictures/new_element.js.coffee
app/assets/javascripts/views/speech_balloons/new_element.js.coffee
app/models/resource_picture_picture.rb

index ddf3885..355f7e9 100644 (file)
@@ -5,9 +5,7 @@ class Editor.PanelEditor extends Backbone.View
   initialize: (options) ->\r
     @panel = options.root_item\r
     @item = @panel\r
-    @dialog = new Editor.PanelEditor.Dialog({\r
-      parent: this\r
-    })\r
+    @dialogs = {}\r
     @body = new Pettanr.Views.Panel.Body.Edit({\r
       panel: @root_item(),\r
       spot: null\r
@@ -22,6 +20,8 @@ class Editor.PanelEditor extends Backbone.View
     @listenTo(@dock, 'add:element', @add_element)\r
     @listenTo(@dock, 'add:credit', @add_credit)\r
     @listenTo(@dock, 'destroy', @destroy)\r
+    @listenTo(@dock, 'dialog:open', @open_dialog)\r
+    @listenTo(@dock, 'dialog:close', @close_dialog)\r
   \r
   add_element: (element) ->\r
     @body.add_element(element)\r
@@ -29,6 +29,12 @@ class Editor.PanelEditor extends Backbone.View
   add_credit: (element) ->\r
     @credits.add_picture(element.picture())\r
   \r
+  open_dialog: (dialog) ->\r
+    @dialogs[dialog.cid] = dialog\r
+  \r
+  close_dialog: (dialog) ->\r
+    delete @dialogs[dialog.cid]\r
+  \r
   destroy: (element, index) ->\r
     @remove_element(element)\r
   \r
@@ -37,12 +43,6 @@ class Editor.PanelEditor extends Backbone.View
   \r
   render: () ->\r
     this.$el.html('')\r
-    this.$el.append(@dialog.render().el)\r
-    @dialog.$el.dialog({\r
-      autoOpen: false,\r
-      width: 750, \r
-      height: 560\r
-    })\r
     this.$el.append(@body.render().el)\r
     this.$el.append(@dock.render().el)\r
     this.$el.append(@credits.render().el)\r
@@ -61,7 +61,8 @@ class Editor.PanelEditor extends Backbone.View
   \r
   quit: () ->\r
     @dock.quit()\r
-    @dialog.$el.dialog('destroy')\r
+    _.each @dialogs, (dialog) =>\r
+      @close_dialog(dialog)\r
   \r
   http_post: (url, dock) ->\r
     @trigger('http_post', url, this)  # send editor\r
index 2c2dea8..8e62e0a 100644 (file)
@@ -15,6 +15,9 @@ class Editor.PanelEditor.Dialog extends Backbone.View
   stop: () ->\r
     this.$el.dialog('close')\r
   \r
+  close: () ->\r
+    @trigger('close')\r
+  \r
   render: () ->\r
     this.$el.html('')\r
     this\r
index 8549d8b..c9e7fe2 100644 (file)
@@ -45,6 +45,8 @@ class Editor.PanelEditor.Dock extends Editor.EditorModule.DockBase
     @listenTo(@root_bay.body, 'save:fail', @post_fail)\r
     @listenTo(@element_bay, 'add:credit', @add_credit)\r
     @listenTo(@element_bay, 'pick', @pick)\r
+    @listenTo(@element_bay, 'dialog:open', @open_dialog)\r
+    @listenTo(@element_bay, 'dialog:close', @close_dialog)\r
     @listenTo(@element_bay, 'destroy', @destroy)\r
   \r
   render: () ->\r
@@ -104,6 +106,12 @@ class Editor.PanelEditor.Dock extends Editor.EditorModule.DockBase
     @scenario_bay.add_element(new_item)\r
     @trigger('add:element', new_item)\r
   \r
+  open_dialog: (dialog) ->\r
+    @trigger('dialog:open', dialog)\r
+  \r
+  close_dialog: (dialog) ->\r
+    @trigger('dialog:close', dialog)\r
+  \r
   destroy: (element) ->\r
     @trigger('destroy', element)\r
   \r
index 8eb4dbf..ba51596 100644 (file)
@@ -78,6 +78,8 @@ class Editor.EditorModule.DockModule.ElementBay extends Editor.EditorModule.Dock
       bb\r
     )\r
     @listenTo(bb, 'pick', @pick)\r
+    @listenTo(bb, 'dialog:open', @open_dialog)\r
+    @listenTo(bb, 'dialog:close', @close_dialog)\r
     @boards.add_element_tab(@new_tab)\r
   \r
   render: () ->\r
@@ -137,6 +139,12 @@ class Editor.EditorModule.DockModule.ElementBay extends Editor.EditorModule.Dock
     @add_element(new_item)\r
     @trigger('pick', new_item)\r
   \r
+  open_dialog: (dialog) ->\r
+    @trigger('dialog:open', dialog)\r
+  \r
+  close_dialog: (dialog) ->\r
+    @trigger('dialog:close', dialog)\r
+  \r
   destroy: (element) ->\r
     @remove_element(element)\r
     @trigger('destroy', element)\r
index 93aea25..6fcc6d5 100644 (file)
@@ -38,11 +38,13 @@ class Editor.EditorModule.DockModule.TabModule.NewElementBoardBody extends Edito
   \r
   render: () ->\r
     this.$el.attr('id', @dom_id())\r
-    @buttons = new Editor.EditorModule.DockModule.NewElementButtons({\r
+    @launchers = new Editor.EditorModule.DockModule.NewElementLaunchers({\r
       parent: this, element_models: @element_models()\r
     })\r
-    @listenTo(@buttons, 'click', @click_button)\r
-    this.$el.append(@buttons.render().el)\r
+    @listenTo(@launchers, 'pick', @pick)\r
+    @listenTo(@launchers, 'dialog:open', @open_dialog)\r
+    @listenTo(@launchers, 'dialog:close', @close_dialog)\r
+    this.$el.append(@launchers.render().el)\r
     this\r
   \r
   panel: () ->\r
@@ -51,19 +53,16 @@ class Editor.EditorModule.DockModule.TabModule.NewElementBoardBody extends Edito
   element_models: () ->\r
     @panel().my_class().child_models()\r
   \r
-  click_button: (model) ->\r
-    @new_element.remove() if @new_element\r
-    @new_element = new Pettanr.Views[model.singular()].NewElement({\r
-      parent: this, target_model: model\r
-    })\r
-    @listenTo(@new_element, 'pick', @pick)\r
-    this.$el.append(@new_element.clear().el)\r
-  \r
   pick: (new_item) ->\r
     @trigger('pick', new_item)\r
-    @new_element.render()\r
   \r
-class Editor.EditorModule.DockModule.NewElementButtons extends Backbone.View\r
+  open_dialog: (dialog) ->\r
+    @trigger('dialog:open', dialog)\r
+  \r
+  close_dialog: (dialog) ->\r
+    @trigger('dialog:close', dialog)\r
+  \r
+class Editor.EditorModule.DockModule.NewElementLaunchers extends Backbone.View\r
   tagName: 'div'\r
   className: 'new-element-buttons'\r
   \r
@@ -74,17 +73,28 @@ class Editor.EditorModule.DockModule.NewElementButtons extends Backbone.View
   \r
   render: () ->\r
     _.each @element_models, (model) =>\r
-      button = new Editor.EditorModule.DockModule.NewElementButton({\r
+      launcher = new Pettanr.Views[model.singular()].NewElementLauncher({\r
         parent: this, model: model\r
       })\r
-      @listenTo(button, 'click', @click)\r
-      this.$el.append(button.render().el)\r
+      @listenTo(launcher, 'pick', @pick)\r
+      @listenTo(launcher, 'dialog:open', @open_dialog)\r
+      @listenTo(launcher, 'dialog:close', @close_dialog)\r
+      this.$el.append(launcher.render().el)\r
     this\r
   \r
-  click: (model) ->\r
-    @trigger('click', model)\r
+  pick: (new_item) ->\r
+    @trigger('pick', new_item)\r
+  \r
+  open_dialog: (dialog) ->\r
+    @trigger('dialog:open', dialog)\r
+  \r
+  close_dialog: (dialog) ->\r
+    @trigger('dialog:close', dialog)\r
   \r
-class Editor.EditorModule.DockModule.NewElementButton extends Backbone.View\r
+  dock: () ->\r
+    @parent.dock()\r
+  \r
+class Editor.EditorModule.DockModule.NewElementLauncher extends Backbone.View\r
   tagName: 'div'\r
   \r
   initialize: (options) ->\r
@@ -94,21 +104,75 @@ class Editor.EditorModule.DockModule.NewElementButton extends Backbone.View
   \r
   render: () ->\r
     this.$el.html('')\r
-    icon = new Pettanr.Image.Icon({item: @model})\r
-    linked_icon = new Editor.EditorModule.DockModule.NewElementLinkedButton({\r
-      attr: {href: '#' },\r
-      content: icon.render().el\r
-    })\r
-    @listenTo(linked_icon, 'click', @click)\r
-    this.$el.append(linked_icon.render().el)\r
+    header = new Editor.EditorModule.DockModule.NewElementLauncherHeader({model: @model})\r
+    this.$el.append(header.render().el)\r
     this\r
   \r
-  click: () ->\r
-    @trigger('click', @model)\r
+  get_action: (params) ->\r
+    controller = Manifest.manifest().controllers[params['controller']]\r
+    controller.actions[params['action']]\r
+  \r
+  add_links: () ->\r
+    _.each @links_conf, (conf, name) =>\r
+      @add_link(name, conf.caption, @get_action(conf.params).url(conf.params))\r
+  \r
+  add_link: (name, caption, url) ->\r
+    link = new Tag.A({\r
+      attr: {href: '/' + url},\r
+      content: caption\r
+    })\r
+    @listenTo(link, 'click', this['click_' + name])\r
+    this.$el.append(link.render().el)\r
+  \r
+  create_dialog: () ->\r
+    dialog = new Editor.PanelEditor.Dialog({\r
+      parent: this\r
+    })\r
+    this.$el.append(dialog.render().el)\r
+    _this = this\r
+    dialog.$el.dialog({\r
+      autoOpen: false,\r
+      width: 750, \r
+      height: 560,\r
+      close: (ui, event) ->\r
+        _this.close_dialog(dialog)\r
+    })\r
+    dialog\r
+  \r
+  click_default: (params) ->\r
+    dialog = @create_dialog()\r
+    picker = new Pettanr.Views[@model.singular()].NewElement({\r
+      parent: this, target_model: @model\r
+    })\r
+    @listenTo(picker, 'pick', @pick)\r
+    @listenTo(picker, 'dialog:open', @open_dialog)\r
+    @listenTo(picker, 'dialog:close', @close_dialog)\r
+    picker.start(dialog, params)\r
+  \r
+  pick: (new_item) ->\r
+    @trigger('pick', new_item)\r
+  \r
+  open_dialog: (dialog) ->\r
+    @trigger('dialog:open', dialog)\r
+  \r
+  close_dialog: (dialog) ->\r
+    @trigger('dialog:close', dialog)\r
   \r
-class Editor.EditorModule.DockModule.NewElementLinkedButton extends Tag.A\r
+  dock: () ->\r
+    @parent.dock()\r
   \r
-  click: () ->\r
-    @trigger('click')\r
-    return false\r
+class Editor.EditorModule.DockModule.NewElementLauncherHeader extends Backbone.View\r
+  tagName: 'h3'\r
+  \r
+  initialize: (options) ->\r
+    super(options)\r
+    @model = options.model\r
+  \r
+  render: () ->\r
+    this.$el.html('')\r
+    icon = new Pettanr.Image.Icon({item: @model, half: true})\r
+    caption = Pettanr.AppHelper.t_m(@model.singular())\r
+    this.$el.append(icon.render().el)\r
+    this.$el.append(caption)\r
+    this\r
   \r
index 5b24cbc..6747d82 100644 (file)
@@ -1,64 +1,55 @@
-class Pettanr.Views.GroundColor.NewElement extends Backbone.View\r
-  tagName: 'div'\r
-  className: 'new-element-body'\r
+class Pettanr.Views.GroundColor.NewElementLauncher extends Editor.EditorModule.DockModule.NewElementLauncher\r
   \r
   initialize: (options) ->\r
-    @parent = options.parent\r
-    @target_model = options.target_model\r
+    super(options)\r
+    @links_conf = {\r
+      inspire: {\r
+        caption: 'Inspire',\r
+        params: {\r
+          controller: @model.path_name(), action: 'index',\r
+          page_size: 6, format: 'html'\r
+        }\r
+      }\r
+    }\r
   \r
-  clear: () ->\r
-    this.$el.html('')\r
+  render: () ->\r
+    super()\r
     @pick_icon = new Pettanr.Views.Common.PickIcon({name: 'pick'})\r
-    @inspire_icon = new Pettanr.Views.Common.PickIcon({name: 'inspire'})\r
     @listenTo(@pick_icon, 'click', @pick_click)\r
-    @listenTo(@inspire_icon, 'click', @inspire_click)\r
     this.$el.append(@pick_icon.render().el)\r
-    this.$el.append(@inspire_icon.render().el)\r
-    this\r
-  \r
-  render: () ->\r
+    @add_links()\r
     this\r
   \r
   pick_click: () ->\r
-    model = @target_model\r
+    model = @model\r
     new_item = new model()\r
     # new_item.set({}, {silent: true})\r
-    @success(new_item)\r
+    @pick(new_item)\r
   \r
-  inspire_click: () ->\r
-    params = {\r
-      controller: @target_model.path_name(), action: 'index',\r
-      page_size: 6, format: 'html'\r
-    }\r
-    @dialog().start(@target_model, params, null)\r
-    @listenTo(@dialog(), 'pick', @pick)\r
+  click_inspire: () ->\r
+    @click_default(@links_conf.inspire.params)\r
+  \r
+class Pettanr.Views.GroundColor.NewElement extends Backbone.View\r
+  \r
+  initialize: (options) ->\r
+    @parent = options.parent\r
+    @target_model = options.target_model\r
+  \r
+  start: (@dialog, params) ->\r
+    @dialog.start(@target_model, params, null)\r
+    @listenTo(@dialog, 'pick', @pick)\r
+    @trigger('dialog:open', @dialog)\r
   \r
   pick: (item) ->\r
     new_item = new @target_model(item.attributes)\r
     new_item.unset('id', {silent: true})\r
     new_item.set({panel_id: @editor().item.get('id')}, {silent: true})\r
-    @dialog().stop()\r
-    @success(new_item)\r
-  \r
-  success: (new_item) ->\r
-    @set_form(new_item)\r
+    @dialog.stop()\r
     @trigger('pick', new_item)\r
   \r
-  set_form: (item) ->\r
-    @form = Locmare.Form.factory({\r
-      form_name: item.item_name(), \r
-      use_name: 'default' \r
-      item: item, \r
-      element_form: true, \r
-      submit: null, \r
-    })\r
-  \r
   dock: () ->\r
     @parent.dock()\r
   \r
   editor: () ->\r
     @dock().editor()\r
   \r
-  dialog: () ->\r
-    @editor().dialog\r
-  \r
index 629cc2a..9d6eb35 100644 (file)
@@ -1,25 +1,36 @@
+class Pettanr.Views.GroundPicture.NewElementLauncher extends Editor.EditorModule.DockModule.NewElementLauncher\r
+  \r
+  initialize: (options) ->\r
+    super(options)\r
+    @links_conf = {\r
+      resource_picture: {\r
+        caption: 'Resource Picture',\r
+        params: {\r
+          controller: @model.pick_model().path_name(), action: 'index',\r
+          page_size: 6, format: 'html'\r
+        }\r
+      }\r
+    }\r
+  \r
+  render: () ->\r
+    super()\r
+    @add_links()\r
+    this\r
+  \r
+  click_resource_picture: () ->\r
+    @click_default(@links_conf.resource_picture.params)\r
+  \r
 class Pettanr.Views.GroundPicture.NewElement extends Backbone.View\r
-  tagName: 'div'\r
-  className: 'new-element-body'\r
   \r
   initialize: (options) ->\r
     @parent = options.parent\r
     @target_model = options.target_model\r
     @pick_model = @target_model.pick_model()\r
   \r
-  clear: () ->\r
-    this.$el.html('')\r
-    params = {\r
-      controller: @pick_model.path_name(), action: 'index',\r
-      page_size: 6, format: 'html'\r
-    }\r
-    @dialog().start(@target_model, params, null)\r
-    @listenTo(@dialog(), 'pick', @pick)\r
-    this\r
-  \r
-  render: () ->\r
-    this.$el.html('')\r
-    this\r
+  start: (@dialog, params) ->\r
+    @dialog.start(@target_model, params, null)\r
+    @listenTo(@dialog, 'pick', @pick)\r
+    @trigger('dialog:open', @dialog)\r
   \r
   pick: (item) ->\r
     if item.item_name() == @target_model.item_name()\r
@@ -43,11 +54,11 @@ class Pettanr.Views.GroundPicture.NewElement extends Backbone.View
       @trigger('ready', new_item)\r
   \r
   ready: (new_item) ->\r
-    @dialog().stop()\r
+    @dialog.stop()\r
     @trigger('pick', new_item)\r
   \r
   trace: (resource_picture) ->\r
-    @dialog().http_get(resource_picture.show_url())\r
+    @dialog.http_get(resource_picture.show_url())\r
   \r
   dock: () ->\r
     @parent.dock()\r
@@ -55,6 +66,3 @@ class Pettanr.Views.GroundPicture.NewElement extends Backbone.View
   editor: () ->\r
     @dock().editor()\r
   \r
-  dialog: () ->\r
-    @editor().dialog\r
-  \r
index 0fbe6de..6ccd987 100644 (file)
@@ -1,25 +1,36 @@
+class Pettanr.Views.PanelPicture.NewElementLauncher extends Editor.EditorModule.DockModule.NewElementLauncher\r
+  \r
+  initialize: (options) ->\r
+    super(options)\r
+    @links_conf = {\r
+      resource_picture: {\r
+        caption: 'Resource Picture',\r
+        params: {\r
+          controller: @model.pick_model().path_name(), action: 'index',\r
+          page_size: 6, format: 'html'\r
+        }\r
+      }\r
+    }\r
+  \r
+  render: () ->\r
+    super()\r
+    @add_links()\r
+    this\r
+  \r
+  click_resource_picture: () ->\r
+    @click_default(@links_conf.resource_picture.params)\r
+  \r
 class Pettanr.Views.PanelPicture.NewElement extends Backbone.View\r
-  tagName: 'div'\r
-  className: 'new-element-body'\r
   \r
   initialize: (options) ->\r
     @parent = options.parent\r
     @target_model = options.target_model\r
     @pick_model = @target_model.pick_model()\r
   \r
-  clear: () ->\r
-    this.$el.html('')\r
-    params = {\r
-      controller: @pick_model.path_name(), action: 'index',\r
-      page_size: 6, format: 'html'\r
-    }\r
-    @dialog().start(@target_model, params, null)\r
-    @listenTo(@dialog(), 'pick', @pick)\r
-    this\r
-  \r
-  render: () ->\r
-    this.$el.html('')\r
-    this\r
+  start: (@dialog, params) ->\r
+    @dialog.start(@target_model, params, null)\r
+    @listenTo(@dialog, 'pick', @pick)\r
+    @trigger('dialog:open', @dialog)\r
   \r
   pick: (item) ->\r
     if item.item_name() == @target_model.item_name()\r
@@ -44,11 +55,11 @@ class Pettanr.Views.PanelPicture.NewElement extends Backbone.View
       @trigger('ready', new_item)\r
   \r
   ready: (new_item) ->\r
-    @dialog().stop()\r
+    @dialog.stop()\r
     @trigger('pick', new_item)\r
   \r
   trace: (resource_picture) ->\r
-    @dialog().http_get(resource_picture.show_url())\r
+    @dialog.http_get(resource_picture.show_url())\r
   \r
   dock: () ->\r
     @parent.dock()\r
@@ -56,6 +67,3 @@ class Pettanr.Views.PanelPicture.NewElement extends Backbone.View
   editor: () ->\r
     @dock().editor()\r
   \r
-  dialog: () ->\r
-    @editor().dialog\r
-  \r
index d10c67c..41ccba2 100644 (file)
@@ -1,25 +1,36 @@
+class Pettanr.Views.SpeechBalloon.NewElementLauncher extends Editor.EditorModule.DockModule.NewElementLauncher\r
+  \r
+  initialize: (options) ->\r
+    super(options)\r
+    @links_conf = {\r
+      speech_balloon_template: {\r
+        caption: 'Speech Balloon Template',\r
+        params: {\r
+          controller: @model.pick_model().path_name(), action: 'index',\r
+          page_size: 6, format: 'html'\r
+        }\r
+      }\r
+    }\r
+  \r
+  render: () ->\r
+    super()\r
+    @add_links()\r
+    this\r
+  \r
+  click_speech_balloon_template: () ->\r
+    @click_default(@links_conf.speech_balloon_template.params)\r
+  \r
 class Pettanr.Views.SpeechBalloon.NewElement extends Backbone.View\r
-  tagName: 'div'\r
-  className: 'new-element-body'\r
   \r
   initialize: (options) ->\r
     @parent = options.parent\r
     @target_model = options.target_model\r
     @pick_model = @target_model.pick_model()\r
   \r
-  clear: () ->\r
-    this.$el.html('')\r
-    params = {\r
-      controller: @pick_model.path_name(), action: 'index',\r
-      page_size: 6, format: 'html'\r
-    }\r
-    @dialog().start(@target_model, params, null)\r
-    @listenTo(@dialog(), 'pick', @pick)\r
-    this\r
-  \r
-  render: () ->\r
-    this.$el.html('')\r
-    this\r
+  start: (@dialog, params) ->\r
+    @dialog.start(@target_model, params, null)\r
+    @listenTo(@dialog, 'pick', @pick)\r
+    @trigger('dialog:open', @dialog)\r
   \r
   pick: (item) ->\r
     if item.item_name() == @target_model.item_name()\r
@@ -87,11 +98,11 @@ class Pettanr.Views.SpeechBalloon.NewElement extends Backbone.View
       )\r
   \r
   ready: (new_item) ->\r
-    @dialog().stop()\r
+    @dialog.stop()\r
     @trigger('pick', new_item)\r
   \r
   trace: (speech_balloon) ->\r
-    @dialog().http_get(speech_balloon.show_url())\r
+    @dialog.http_get(speech_balloon.show_url())\r
   \r
   dock: () ->\r
     @parent.dock()\r
@@ -99,6 +110,3 @@ class Pettanr.Views.SpeechBalloon.NewElement extends Backbone.View
   editor: () ->\r
     @dock().editor()\r
   \r
-  dialog: () ->\r
-    @editor().dialog\r
-  \r
index b9b8816..3be419a 100644 (file)
@@ -1,4 +1,5 @@
 class ResourcePicturePicture < Peta::Item
+  load_manifest
   belongs_to :original_picture
   belongs_to :resource_picture
   belongs_to :picture