OSDN Git Service

fix: any
[pettanr/pettanr.git] / app / assets / javascripts / views / scrolls / play.js.coffee
1 class Pettanr.Views.Scroll.PlayModule\r
2 class Pettanr.Views.Scroll.PlayModule.FooterSwitch extends Pettanr.View\r
3   tagName: 'div'\r
4   className: 'player-item-switch'\r
5   events: {\r
6     'click': 'click'\r
7   }\r
8   \r
9   initialize: (options) ->\r
10     @scroll_panel = options.scroll_panel\r
11     @panel = options.panel\r
12     @visible = false\r
13     @enabled = true\r
14     @listenTo(@scroll_panel, 'sync', @render)\r
15   \r
16   render: () ->\r
17     this.$el.html('')\r
18     attr = {\r
19       style: Pettanr.to_style({height: Pettanr.to_s(@height()) + 'px'})\r
20     }\r
21     this.$el.attr(attr)\r
22     face =  if @visible\r
23       '<'\r
24     else\r
25       '>'\r
26     caption = new Tag.Span({content: face})\r
27     this.$el.append(@scroll_panel.get('t') + 1)\r
28     this.$el.append(caption.render().el) if @enabled\r
29     this\r
30   \r
31   height: () ->\r
32     if @panel\r
33       @panel.get('height')\r
34     else\r
35       20\r
36   \r
37   click: () ->\r
38     return false if !@enabled\r
39     @visible = !@visible\r
40     @render()\r
41     @trigger('click', @visible)\r
42   \r
43   enable: () ->\r
44     @enabled = true\r
45     @render()\r
46   \r
47   disable: () ->\r
48     @enabled = false\r
49     @visible = false\r
50     @render()\r
51   \r
52 class Pettanr.Views.Scroll.PlayModule.Footer extends Pettanr.View\r
53   tagName: 'div'\r
54   className: 'player-item-footer'\r
55   \r
56   initialize: (options) ->\r
57     @parent = options.parent\r
58     @scroll = options.scroll\r
59     @scroll_panel = options.scroll_panel\r
60     @panel = options.panel\r
61   \r
62   render: () ->\r
63     this.$el.html('')\r
64     @hide()\r
65     if @panel\r
66       @panel.get_parent('author', this, {\r
67         success: (@author) =>\r
68           @panel_face_button = @panel.mini_face_button({\r
69             context: this,\r
70             click: () ->\r
71               @trigger('click:panel')\r
72           })\r
73           @author_face_button = @author.mini_face_button({\r
74             context: this,\r
75             click: () ->\r
76               @trigger('click:author', @author)\r
77           })\r
78           l1 = new Tag.H3({\r
79             content: Pettanr.AppHelper.t_m('Panel')\r
80           })\r
81           this.$el.append(l1.render().el)\r
82           this.$el.append(@panel_face_button.render().el)\r
83           this.$el.append(@author_face_button.render().el)\r
84           this.$el.append(\r
85             Pettanr.AppHelper.distance_of_time_in_words_to_now(@panel.get('updated_at'))\r
86           )\r
87           @append_scroll_panel()\r
88       })\r
89     else\r
90       @append_scroll_panel()\r
91     this\r
92   \r
93   append_scroll_panel: () ->\r
94     l2 = new Tag.H3({\r
95       content: Pettanr.AppHelper.t_m('ScrollPanel')\r
96     })\r
97     this.$el.append(l2.render().el)\r
98     if @scroll.is_own()\r
99       @new_scroll_panel = new Pettanr.ScrollPanel()\r
100       @insert_button = new Pettanr.View.Button.ItemAction(@new_scroll_panel, 'new', 'scroll_panels.player.before_insert', {\r
101         context: this,\r
102         click: () ->\r
103           @trigger('click:insert')\r
104       })\r
105       @move_button = new Pettanr.View.Button.ItemAction(@scroll_panel, 'edit', 'scroll_panels.player.move', {\r
106         context: this,\r
107         click: () ->\r
108           @trigger('click:move')\r
109       })\r
110       @destroy_button = new Pettanr.View.Button.ItemAction(@scroll_panel, 'destroy', 'scroll_panels.player.destroy', {\r
111         context: this,\r
112         click: () ->\r
113           @trigger('click:destroy')\r
114       })\r
115       this.$el.append(@insert_button.render().el)\r
116       @append_rb()\r
117       if @is_movable()\r
118         this.$el.append(@move_button.render().el)\r
119         @append_rb()\r
120       this.$el.append(@destroy_button.render().el)\r
121   \r
122   hide: () ->\r
123     attr = {\r
124       style: Pettanr.to_style({display: 'none'})\r
125     }\r
126     this.$el.attr(attr)\r
127   \r
128   show: () ->\r
129     attr = {\r
130       style: Pettanr.to_style({display: 'inline'})\r
131     }\r
132     this.$el.attr(attr)\r
133   \r
134   is_movable: () ->\r
135     @parent.parent.views.length > 1\r
136   \r
137 class Pettanr.Views.Scroll.PlayModule.PanelBody extends Pettanr.View\r
138   tagName: 'div'\r
139   className: 'player-item-panel'\r
140   \r
141   initialize: (options) ->\r
142     @panel = options.panel\r
143   \r
144   render: () ->\r
145     this.$el.html('')\r
146     body = new Pettanr.Views.Panel.Body({\r
147       panel: @panel,\r
148       spot: null\r
149     })\r
150     @listenTo(body, 'http_get', @http_get)\r
151     this.$el.append(body.render().el)\r
152     this\r
153   \r
154   http_get: (url) ->\r
155     @trigger('http_get', url)\r
156   \r
157 class Pettanr.Views.Scroll.PlayModule.Panel extends Pettanr.View\r
158   tagName: 'li'\r
159   className: 'player-item'\r
160   \r
161   initialize: (options) ->\r
162     @parent = options.parent\r
163     @scroll = options.scroll\r
164     @scroll_panel = options.scroll_panel\r
165     @panel = options.panel\r
166   \r
167   clear: () ->\r
168     this.$el.html('')\r
169     @scroll_panel.get_parent('panel', this, {\r
170       success: (@panel) =>\r
171         @trigger('exist', this)\r
172         @render()\r
173       fail: (response, opt) =>\r
174         @panel = null\r
175         @append_insert_point()\r
176         this.$el.append('Not found')\r
177         @append_footer_switch()\r
178         @append_footer()\r
179         @trigger('lost', response, opt)\r
180     })\r
181     this\r
182   \r
183   render: () ->\r
184     this.$el.html('')\r
185     @panel = @panel.play() # retake panel for 'with_elements' mode\r
186     @panel.fetch({\r
187       success: (model, response, opt) => \r
188         @panel.attributes = @panel.decoded_attributes()\r
189         @append_insert_point()\r
190         body = new Pettanr.Views.Scroll.PlayModule.PanelBody({\r
191           panel: @panel\r
192         })\r
193         @listenTo(body, 'http_get', @http_get)\r
194         this.$el.append(body.render().el)\r
195         @append_footer_switch()\r
196         @append_footer()\r
197         @trigger('ready', @panel)\r
198       error: (item, response, opt) =>\r
199         @open_error_dialog(response, opt)\r
200     })\r
201     this\r
202   \r
203   append_insert_point: () ->\r
204     move_to = new Tag.A({\r
205       attr: {href: '/' + @scroll_panel.edit_url()},\r
206       content: I18n.t('scroll_panels.player.move_to')\r
207     })\r
208     @insert_point = new Pettanr.Views.Scroll.PlayModule.InsertPoint({\r
209       class_name: 'insert-point', content: move_to.render().el\r
210     })\r
211     @listenTo(move_to, 'click', @click_move_to)\r
212     this.$el.append(@insert_point.clear().el)\r
213     @append_rb()\r
214   \r
215   append_footer_switch: () ->\r
216     @footer_switch = new Pettanr.Views.Scroll.PlayModule.FooterSwitch({\r
217       parent: this,\r
218       scroll_panel: @scroll_panel,\r
219       panel: @panel\r
220     })\r
221     @listenTo(@footer_switch, 'click', @click_footer_switch)\r
222     this.$el.append(@footer_switch.render().el)\r
223   \r
224   append_footer: () ->\r
225     @footer = new Pettanr.Views.Scroll.PlayModule.Footer({\r
226       parent: this,\r
227       scroll: @scroll,\r
228       scroll_panel: @scroll_panel,\r
229       panel: @panel,\r
230     })\r
231     @listenTo(@footer, 'click:panel', @click_show)\r
232     @listenTo(@footer, 'click:author', @click_author)\r
233     @listenTo(@footer, 'click:insert', @click_insert)\r
234     @listenTo(@footer, 'click:move', @click_move)\r
235     @listenTo(@footer, 'click:edit', @click_edit)\r
236     @listenTo(@footer, 'click:destroy', @click_destroy)\r
237     this.$el.append(@footer.render().el)\r
238   \r
239   hide: () ->\r
240     @set_style({display: 'none'})\r
241   \r
242   show: () ->\r
243     @set_style({display: 'inline'})\r
244   \r
245   set_style: (style) ->\r
246     attr = {style: Pettanr.to_style(style)}\r
247     this.$el.attr(attr)\r
248   \r
249   enable_footer_switch: () ->\r
250     @footer_switch.enable()\r
251   \r
252   disable_footer_switch: () ->\r
253     @footer_switch.disable()\r
254     @footer.hide()\r
255   \r
256   show_insert_point: () ->\r
257     @insert_point.show()\r
258   \r
259   hide_insert_point: () ->\r
260     @insert_point.hide()\r
261   \r
262   click_footer_switch: (visible) ->\r
263     if visible\r
264       @footer.show()\r
265     else\r
266       @footer.hide()\r
267   \r
268   click_show: () ->\r
269     @trigger('http_get', @panel.show_url())\r
270   \r
271   click_author: (author) ->\r
272     @trigger('http_get', author.show_url())\r
273   \r
274   click_insert: () ->\r
275     @trigger('click:insert', this)\r
276   \r
277   click_move: () ->\r
278     @trigger('click:move', this)\r
279   \r
280   click_destroy: () ->\r
281     @trigger('click:destroy', this)\r
282   \r
283   click_move_to: () ->\r
284     @trigger('click:move_to', this)\r
285   \r
286   http_get: (url) ->\r
287     @trigger('http_get', url)\r
288   \r
289 class Pettanr.Views.Scroll.PlayModule.InsertPoint extends Tag.Div\r
290   \r
291   clear: () ->\r
292     this.$el.html('')\r
293     @hide()\r
294     @render()\r
295     this\r
296   \r
297   hide: () ->\r
298     @set_style({display: 'none'})\r
299   \r
300   show: () ->\r
301     @set_style({display: 'inline'})\r
302   \r
303   set_style: (style) ->\r
304     attr = {style: Pettanr.to_style(style)}\r
305     this.$el.attr(attr)\r
306   \r
307 class Pettanr.Views.Scroll.PlayModule.EmptyNotice extends Tag.H2\r
308   \r
309   clear: () ->\r
310     this.$el.html('')\r
311     @hide()\r
312     @render()\r
313     this\r
314   \r
315   hide: () ->\r
316     @set_style({display: 'none'})\r
317   \r
318   show: () ->\r
319     @set_style({display: 'inline'})\r
320   \r
321   set_style: (style) ->\r
322     attr = {style: Pettanr.to_style(style)}\r
323     this.$el.attr(attr)\r
324   \r
325 class Pettanr.Views.Scroll.PlayModule.Panels extends Pettanr.View\r
326   tagName: 'ul'\r
327   className: 'player'\r
328   \r
329   initialize: (options) ->\r
330     @parent = options.parent\r
331     @binder = options.binder\r
332     @items = options.items\r
333     @credits = options.credits\r
334     @views = []\r
335   \r
336   render: () ->\r
337     this.$el.html('')\r
338     @empty_notice = new Pettanr.Views.Scroll.PlayModule.EmptyNotice({content: I18n.t('scrolls.play.empty')})\r
339     this.$el.append(@empty_notice.clear().el)\r
340     _.each @items, (scroll_panel) =>\r
341       @append_scroll_panel(scroll_panel)\r
342     @refresh_empty_notice()\r
343     this\r
344   \r
345   refresh_empty_notice: () ->\r
346     if @views.length < 1\r
347       @empty_notice.show()\r
348     else\r
349       @empty_notice.hide()\r
350     this\r
351   \r
352   append_scroll_panel: (scroll_panel) ->\r
353     return if not scroll_panel.has_panel()\r
354     panel_view = @create_panel_view(scroll_panel)\r
355     @views.push(panel_view)\r
356     this.$el.append(panel_view.clear().el)\r
357     @refresh_empty_notice()\r
358   \r
359   create_panel_view: (scroll_panel) ->\r
360     panel_view = new Pettanr.Views.Scroll.PlayModule.Panel({\r
361       parent: this, scroll: @binder, scroll_panel: scroll_panel,\r
362     })\r
363     @listenTo(panel_view, 'exist', @exist)\r
364     @listenTo(panel_view, 'lost', @lost)\r
365     @listenTo(panel_view, 'ready', @ready)\r
366     @listenTo(panel_view, 'http_get', @http_get)\r
367     @listenTo(panel_view, 'click:insert', @click_insert)\r
368     @listenTo(panel_view, 'click:move', @click_move)\r
369     @listenTo(panel_view, 'click:destroy', @click_destroy)\r
370     @listenTo(panel_view, 'click:move_to', @click_move_to)\r
371     panel_view\r
372   \r
373   exist: (panel_view) ->\r
374   \r
375   lost: (response, opt) ->\r
376   \r
377   ready: (panel) ->\r
378     this.credits.push(panel.licensed_pictures())\r
379   \r
380   http_get: (url) ->\r
381     @trigger('http_get', url)\r
382   \r
383   click_insert: (panel_view = null) ->\r
384     @dialog = new Editor.Player.PanelInsertDialog({\r
385       parent: this, binder: @binder, target_model: Pettanr.ScrollPanel,\r
386       insert_point: panel_view\r
387     })\r
388     @listenTo(@dialog, 'pick', @pick)\r
389     @listenTo(@dialog, 'open', @open_dialog)\r
390     @listenTo(@dialog, 'close', @close_dialog)\r
391     this.$el.append(@dialog.render().el)\r
392     @dialog.start()\r
393     @trigger('click:insert', @dialog)\r
394   \r
395   pick: (new_item, insert_point) ->\r
396     @parent.appender.show()\r
397     panel_view = @create_panel_view(new_item)\r
398     ul = this.$el[0]\r
399     if insert_point\r
400       # insert before insert_point\r
401       li = insert_point.$el[0]\r
402       ul.insertBefore(panel_view.clear().el, li)\r
403     else\r
404       # append\r
405       this.$el.append(panel_view.clear().el)\r
406     @refresh_views()\r
407     @dialog.stop()\r
408   \r
409   open_dialog: () ->\r
410     @trigger('dialog:open', dialog)\r
411   \r
412   close_dialog: () ->\r
413     @trigger('dialog:close', @dialog)\r
414     if @dialog.is_catch()\r
415       # stored panel back to player\r
416       @back()\r
417   \r
418   click_move: (panel_view) ->\r
419     @dialog = new Editor.Player.PanelMoveDialog({\r
420       parent: this, binder: @binder, target_model: Pettanr.ScrollPanel,\r
421       from: panel_view\r
422     })\r
423     @listenTo(@dialog, 'open', @open_dialog)\r
424     @listenTo(@dialog, 'close', @close_dialog)\r
425     this.$el.append(@dialog.render().el)\r
426     @disable_footer_switch()\r
427     @dialog.start(panel_view.panel)\r
428     panel_view.hide()\r
429     @show_insert_point()\r
430     @trigger('click:move', @dialog)\r
431   \r
432   enable_footer_switch: () ->\r
433     _.each @views, (panel_view) =>\r
434       panel_view.enable_footer_switch()\r
435   \r
436   disable_footer_switch: () ->\r
437     _.each @views, (panel_view) =>\r
438       panel_view.disable_footer_switch()\r
439   \r
440   show_insert_point: () ->\r
441     _.each @views, (panel_view) =>\r
442       panel_view.show_insert_point()\r
443   \r
444   hide_insert_point: () ->\r
445     _.each @views, (panel_view) =>\r
446       panel_view.hide_insert_point()\r
447   \r
448   refresh_views: () ->\r
449     _.each @views, (panel_view) =>\r
450       Pettanr.cache.refresh(panel_view.scroll_panel)\r
451   \r
452   click_move_to: (to_panel_view) ->\r
453     @enable_footer_switch()\r
454     @listenTo(@dialog, 'success', @move_success)\r
455     @dialog.save(to_panel_view)\r
456   \r
457   move_success: (model, response) ->\r
458     from_panel_view = @create_panel_view(@dialog.from.scroll_panel)\r
459     @dialog.release()\r
460     @listenTo(from_panel_view, 'ready', @ready_from_panel_view)\r
461     ul = this.$el[0]\r
462     li = @dialog.to.$el[0]\r
463     ul.insertBefore(from_panel_view.clear().el, li)\r
464   \r
465   ready_from_panel_view: (panel) ->\r
466     @remove_panel_view(@dialog.from)\r
467     @dialog.stop()\r
468     @hide_insert_point()\r
469     @refresh_views()\r
470   \r
471   back: () ->\r
472     @hide_insert_point()\r
473     @enable_footer_switch()\r
474     @dialog.from.show()\r
475   \r
476   click_destroy: (panel_view) ->\r
477     success = (model, response) =>\r
478       @remove_panel_view(panel_view)\r
479       panel_view.remove()\r
480       @refresh_empty_notice()\r
481       @refresh_views()\r
482       @trigger('click:destroy')\r
483     Pettanr.Proxy.destroy(panel_view.scroll_panel, {success: success})\r
484   \r
485   remove_panel_view: (panel_view) ->\r
486     @views = _.without(@views, panel_view)\r
487     panel_view.remove()\r
488   \r
489 class Pettanr.Views.Scroll.PlayModule.Append extends Tag.Div\r
490   \r
491   initialize: (options) ->\r
492     super(options)\r
493     @enabled = false\r
494   \r
495   render: () ->\r
496     this.$el.html('')\r
497     if @enabled\r
498       @link = new Tag.A({\r
499         attr: {href: '/scroll_panels/new'},\r
500         content: I18n.t('scroll_panels.player.append')\r
501       })\r
502       @listenTo(@link, 'click', @click)\r
503       @content = @link.render().el\r
504       super()\r
505     this\r
506   \r
507   enable: () ->\r
508     @enabled = true\r
509     @show()\r
510   \r
511   disable: () ->\r
512     @enabled = false\r
513     @hide()\r
514   \r
515   hide: () ->\r
516     @set_style({display: 'none'})\r
517   \r
518   show: () ->\r
519     if @enabled\r
520       @set_style({display: 'inline'})\r
521     else\r
522       @hide()\r
523   \r
524   set_style: (style) ->\r
525     attr = {style: Pettanr.to_style(style)}\r
526     this.$el.attr(attr)\r
527     @render()\r
528   \r
529   click: () ->\r
530     @trigger('click')\r
531   \r
532 class Pettanr.Views.Scroll.PlayModule.Body extends Pettanr.View\r
533   tagName: 'div'\r
534   \r
535   initialize: (options) ->\r
536     @parent = options.parent\r
537     @binder = options.binder\r
538     @list = options.list\r
539     @pager = options.pager\r
540     @items = @list.items()\r
541   \r
542   render: () ->\r
543     this.$el.html('')\r
544     # paginate(@pager)\r
545     credits = new Pettanr.View.Credits(this, {icon: true})\r
546     @panels = new Pettanr.Views.Scroll.PlayModule.Panels({\r
547       parent: this,\r
548       binder: @binder,\r
549       items: @items,\r
550       credits: credits,\r
551     })\r
552     @listenTo(credits, 'click:credit:icon', @click_credit_icon)\r
553     @listenTo(@panels, 'click:insert', @click_insert)\r
554     @listenTo(@panels, 'click:move', @click_move)\r
555     @listenTo(@panels, 'dialog:close', @close_dialog)\r
556     this.$el.append(@panels.render().el)\r
557     @append_rb()\r
558     @appender = new Pettanr.Views.Scroll.PlayModule.Append({\r
559     })\r
560     @listenTo(@appender, 'click', @click_append)\r
561     this.$el.append(@appender.render().el)\r
562     if @is_appendable()\r
563       @appender.enable()\r
564     if @pager\r
565       @listenTo(@pager, 'page', @continue)\r
566       this.$el.append(@pager.render().el)\r
567     this.$el.append(credits.render().el)\r
568     @append_rb()\r
569     this\r
570   \r
571   is_appendable: () ->\r
572     return true if _.isEmpty(@items)\r
573     if @pager and @pager.hasNextPage()\r
574       false\r
575     else\r
576       this.$el.html('')\r
577       # paginate(@pager)\r
578       credits = new Pettanr.View.Credits(this, {icon: true})\r
579       @panels = new Pettanr.Views.Scroll.PlayModule.Panels({\r
580         parent: this,\r
581         binder: @binder,\r
582         items: @items,\r
583         credits: credits,\r
584       })\r
585       @listenTo(credits, 'click:credit:icon', @click_credit_icon)\r
586       @listenTo(@panels, 'http_get', @http_get)\r
587       @listenTo(@panels, 'click:insert', @click_insert)\r
588       @listenTo(@panels, 'click:move', @click_move)\r
589       @listenTo(@panels, 'dialog:close', @close_dialog)\r
590       @listenTo(@pager, 'page', @continue)\r
591       this.$el.append(@panels.render().el)\r
592       @append_rb()\r
593       @appender = new Pettanr.Views.Scroll.PlayModule.Append({\r
594       })\r
595       @listenTo(@appender, 'click', @click_append)\r
596       this.$el.append(@appender.render().el)\r
597       if !@pager.hasNextPage()\r
598         @appender.enable()\r
599       this.$el.append(@pager.render().el)\r
600       true\r
601   \r
602   click_credit_icon: (item) ->\r
603     @trigger('http_get', item.show_url())\r
604   \r
605   click_append: () ->\r
606     @panels.click_insert()\r
607   \r
608   http_get: (url) ->\r
609     @trigger('http_get', url)\r
610   \r
611   click_insert: (dialog) ->\r
612     @appender.hide()\r
613     @trigger('click:insert', dialog)\r
614   \r
615   click_move: (dialog) ->\r
616     @appender.hide()\r
617     @trigger('click:move', dialog)\r
618   \r
619   close_dialog: (dialog) ->\r
620     @appender.show()\r
621     @trigger('dialog:close', dialog)\r
622   \r
623   continue: (page) ->\r
624     params = _.clone(@pager.params)\r
625     params['page'] = page\r
626     continue_list = Locmare.ListGroup.list(\r
627       @list.list_group_name, @list.list_name, params\r
628     )\r
629     continue_list.open(this, {\r
630       success: (next_page_items) =>\r
631         _.each next_page_items, (scroll_panel) =>\r
632           @items.push(scroll_panel)\r
633           @panels.append_scroll_panel(scroll_panel)\r
634         @list = continue_list\r
635         continue_pager = Locmare.ListGroupModule.LibModule.PlayPager.factory(@list.page_status, params)\r
636         @listenTo(continue_pager, 'page', @continue)\r
637         @pager.$el.replaceWith(continue_pager.render().el)\r
638         @pager = continue_pager\r
639         if !@pager.hasNextPage()\r
640           @appender.enable()\r
641     })\r
642   \r
643 class Pettanr.Views.Scroll.Play extends Pettanr.View.Show\r
644   \r
645   initialize: (options) ->\r
646     @list = options.list\r
647     @pager = options.pager\r
648     @header = new Pettanr.View.Show.Header(@item, this, @binder_header_options())\r
649     @authored_by = @item.authored_by()\r
650     @body = new Pettanr.Views.Scroll.PlayModule.Body({\r
651       parent: this,\r
652       binder: @item,\r
653       list: @list, \r
654       pager: @pager\r
655     })\r
656     # @owner = new Pettanr.Views.Scroll.PlayModule.Owner({item: @item})\r
657     @listenTo(@header, 'click:pick', @click_pick)\r
658     @listenTo(@authored_by, 'click', @click_authored_by)\r
659     @listenTo(@body, 'http_get', @http_get)\r
660     @listenTo(@body, 'click:insert', @click_insert)\r
661     @listenTo(@body, 'click:move', @click_move)\r
662     @listenTo(@body, 'dialog:close', @close_dialog)\r
663   \r
664   render: () ->\r
665     this.$el.html('')\r
666     this.$el.append(@header.render().el)\r
667     this.$el.append(@authored_by.render().el)\r
668     this.$el.append(@body.render().el)\r
669     # this.$el.append(@owner.render().el) if @item.is_own()\r
670     this\r
671   \r
672   click_pick: () ->\r
673     @trigger('pick', @item)\r
674   \r
675   http_get: (url) ->\r
676     @trigger('http_get', url)\r
677   \r
678   click_insert: (dialog) ->\r
679     @trigger('insert', dialog)\r
680   \r
681   click_move: (dialog) ->\r
682     @trigger('move', dialog)\r
683   \r
684   close_dialog: (dialog) ->\r
685     @trigger('dialog:close', dialog)\r
686   \r