OSDN Git Service

fix: new speechballoon
[pettanr/pettanr.git] / app / assets / javascripts / views / speech_balloons / new_element.js.coffee
index 03bce08..351ab8c 100644 (file)
@@ -4,17 +4,64 @@ class Pettanr.Views.SpeechBalloon.NewElement extends Backbone.View
   \r
   initialize: (options) ->\r
     @parent = options.parent\r
-    @model = options.model\r
+    @target_model = options.target_model\r
+    @pick_model = @target_model.pick_model()\r
+  \r
+  clear: () ->\r
+    this.$el.html('')\r
     params = {\r
-      controller: @model.path_name(), action: 'index',\r
-      page_size: 6, format: 'pick'\r
+      controller: @pick_model.path_name(), action: 'index',\r
+      page_size: 6, format: 'html'\r
     }\r
-    @dialog().get(params, null)\r
+    @dialog().start(@target_model, params, null)\r
+    @listenTo(@dialog(), 'pick', @pick)\r
+    this\r
   \r
   render: () ->\r
-    this.$el.html(@img.clear().el)\r
+    this.$el.html('')\r
     this\r
   \r
+  pick: (item) ->\r
+    @listenTo(this, 'ready', @ready)\r
+    if item.item_name() == @target_model.item_name()\r
+      # Inspire\r
+      new_item = new @target_model(item.attributes)\r
+      @trigger('ready', new_item)\r
+    else if @target_model.is_traceable(item.item_name())\r
+      # Trace\r
+      n = @target_model['trace_from_' + item.item_name()]\r
+      n()\r
+    else if item.item_name() == @target_model.pick_item_name()\r
+      # Pick\r
+      speech_balloon_template = item\r
+      writing_format = new Pettanr.WritingFormat({id: 1})\r
+      writing_format.fetch({cache: true}).done =>\r
+        templates = {\r
+          speech_balloon_template: speech_balloon_template,\r
+          writing_format: writing_format\r
+        }\r
+        new_item = new @target_model()\r
+        new_item.set(new_item.pick(templates), {silent: true})\r
+        new_item.boosts 'post'\r
+        new_item.supply_default(templates)\r
+        # prepare balloon\r
+        balloon = new Pettanr.Balloon()\r
+        balloon.set(balloon.pick(templates), {silent: true})\r
+        balloon.boosts 'post'\r
+        balloon.supply_default(templates)\r
+        # prepare speech\r
+        speech = new Pettanr.Speech()\r
+        speech.set(speech.pick(templates), {silent: true})\r
+        speech.boosts 'post'\r
+        speech.supply_default(templates)\r
+        # join elements\r
+        new_item.set({balloon: balloon, speech: speech}, {silent: true})\r
+        @trigger('ready', new_item)\r
+  \r
+  ready: (new_item) ->\r
+    @dialog().stop()\r
+    @trigger('pick', new_item)\r
+  \r
   dock: () ->\r
     @parent.dock()\r
   \r