OSDN Git Service

fix: new element tracer
[pettanr/pettanr.git] / app / assets / javascripts / views / speech_balloons / new_element.js.coffee
1 class Pettanr.Views.SpeechBalloon.NewElement extends Backbone.View\r
2   tagName: 'div'\r
3   className: 'new-element-body'\r
4   \r
5   initialize: (options) ->\r
6     @parent = options.parent\r
7     @target_model = options.target_model\r
8     @pick_model = @target_model.pick_model()\r
9   \r
10   clear: () ->\r
11     this.$el.html('')\r
12     params = {\r
13       controller: @pick_model.path_name(), action: 'index',\r
14       page_size: 6, format: 'html'\r
15     }\r
16     @dialog().start(@target_model, params, null)\r
17     @listenTo(@dialog(), 'pick', @pick)\r
18     this\r
19   \r
20   render: () ->\r
21     this.$el.html('')\r
22     this\r
23   \r
24   pick: (item) ->\r
25     if item.item_name() == @target_model.item_name()\r
26       # Inspire\r
27       @listenTo(this, 'ready', @ready)\r
28       balloon_list = item.has_one('balloon')\r
29       speech_list = item.has_one('speech')\r
30       balloon_list.open(() =>\r
31         balloon = balloon_list.items()[0]\r
32         speech_list.open(() =>\r
33           speech = speech_list.items()[0]\r
34           new_item = new @target_model(item.attributes)\r
35           new_item.unset('id', {silent: true})\r
36           new_item.set({panel_id: @editor().item.get('id')}, {silent: true})\r
37           balloon.unset('id', {silent: true})\r
38           balloon.unset('speech_balloon_id', {silent: true})\r
39           speech.unset('id', {silent: true})\r
40           speech.unset('speech_balloon_id', {silent: true})\r
41           new_item.boosts 'post'\r
42           balloon.boosts 'post'\r
43           speech.boosts 'post'\r
44           new_item.set({balloon: balloon, speech: speech}, {silent: true})\r
45           @trigger('ready', new_item)\r
46         )\r
47       )\r
48     else if @target_model.is_traceable(item.item_name())\r
49       # Trace\r
50       tracer_class = @target_model['TraceFrom' + item.singular()]\r
51       tracer = new tracer_class()\r
52       @listenTo(tracer, 'trace', @trace)\r
53       tracer.trace(item)\r
54     else if item.item_name() == @target_model.pick_item_name()\r
55       # Pick\r
56       @listenTo(this, 'ready', @ready)\r
57       speech_balloon_template = item\r
58       writing_format = new Pettanr.WritingFormat({id: 1})\r
59       writing_format.fetch({cache: true}).done =>\r
60         templates = {\r
61           speech_balloon_template: speech_balloon_template,\r
62           writing_format: writing_format\r
63         }\r
64         new_item = new @target_model()\r
65         new_item.set(new_item.pick(templates), {silent: true})\r
66         new_item.boosts 'post'\r
67         new_item.supply_default(templates)\r
68         # prepare balloon\r
69         balloon = new Pettanr.Balloon()\r
70         balloon.set(balloon.pick(templates), {silent: true})\r
71         balloon.boosts 'post'\r
72         balloon.supply_default(templates)\r
73         # prepare speech\r
74         speech = new Pettanr.Speech()\r
75         speech.set(speech.pick(templates), {silent: true})\r
76         speech.boosts 'post'\r
77         speech.supply_default(templates)\r
78         # join elements\r
79         new_item.set({balloon: balloon, speech: speech}, {silent: true})\r
80         @trigger('ready', new_item)\r
81   \r
82   ready: (new_item) ->\r
83     @dialog().stop()\r
84     @trigger('pick', new_item)\r
85   \r
86   trace: (speech_balloon) ->\r
87     @dialog().http_get(speech_balloon.show_url())\r
88   \r
89   dock: () ->\r
90     @parent.dock()\r
91   \r
92   editor: () ->\r
93     @dock().editor()\r
94   \r
95   dialog: () ->\r
96     @editor().dialog\r
97   \r