1 class Pettanr.Views.Scroll.PlayModule
\r
2 class Pettanr.Views.Scroll.PlayModule.FooterSwitch extends Pettanr.View
\r
4 className: 'player-item-switch'
\r
9 initialize: (options) ->
\r
10 @scroll_panel = options.scroll_panel
\r
11 @panel = options.panel
\r
14 @listenTo(@scroll_panel, 'sync', @render)
\r
19 style: Pettanr.to_style({height: Pettanr.to_s(@height()) + 'px'})
\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
33 @panel.get('height')
\r
38 return false if !@enabled
\r
39 @visible = !@visible
\r
41 @trigger('click', @visible)
\r
52 class Pettanr.Views.Scroll.PlayModule.Footer extends Pettanr.View
\r
54 className: 'player-item-footer'
\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
66 @panel.get_parent('author', this, {
\r
67 success: (@author) =>
\r
68 @panel_face_button = @panel.mini_face_button({
\r
71 @trigger('click:panel')
\r
73 @author_face_button = @author.mini_face_button({
\r
76 @trigger('click:author', @author)
\r
79 content: Pettanr.AppHelper.t_m('Panel')
\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
85 Pettanr.AppHelper.distance_of_time_in_words_to_now(@panel.get('updated_at'))
\r
87 @append_scroll_panel()
\r
90 @append_scroll_panel()
\r
93 append_scroll_panel: () ->
\r
95 content: Pettanr.AppHelper.t_m('ScrollPanel')
\r
97 this.$el.append(l2.render().el)
\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
103 @trigger('click:insert')
\r
105 @move_button = new Pettanr.View.Button.ItemAction(@scroll_panel, 'edit', 'scroll_panels.player.move', {
\r
108 @trigger('click:move')
\r
110 @destroy_button = new Pettanr.View.Button.ItemAction(@scroll_panel, 'destroy', 'scroll_panels.player.destroy', {
\r
113 @trigger('click:destroy')
\r
115 this.$el.append(@insert_button.render().el)
\r
118 this.$el.append(@move_button.render().el)
\r
120 this.$el.append(@destroy_button.render().el)
\r
124 style: Pettanr.to_style({display: 'none'})
\r
126 this.$el.attr(attr)
\r
130 style: Pettanr.to_style({display: 'inline'})
\r
132 this.$el.attr(attr)
\r
135 @parent.parent.views.length > 1
\r
137 class Pettanr.Views.Scroll.PlayModule.PanelBody extends Pettanr.View
\r
139 className: 'player-item-panel'
\r
141 initialize: (options) ->
\r
142 @panel = options.panel
\r
146 body = new Pettanr.Views.Panel.Body({
\r
150 @listenTo(body, 'http_get', @http_get)
\r
151 this.$el.append(body.render().el)
\r
155 @trigger('http_get', url)
\r
157 class Pettanr.Views.Scroll.PlayModule.Panel extends Pettanr.View
\r
159 className: 'player-item'
\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
169 @scroll_panel.get_parent('panel', this, {
\r
170 success: (@panel) =>
\r
171 @trigger('exist', this)
\r
173 fail: (response, opt) =>
\r
175 @append_insert_point()
\r
176 this.$el.append('Not found')
\r
177 @append_footer_switch()
\r
179 @trigger('lost', response, opt)
\r
185 @panel = @panel.play() # retake panel for 'with_elements' mode
\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
193 @listenTo(body, 'http_get', @http_get)
\r
194 this.$el.append(body.render().el)
\r
195 @append_footer_switch()
\r
197 @trigger('ready', @panel)
\r
198 error: (item, response, opt) =>
\r
199 @open_error_dialog(response, opt)
\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
208 @insert_point = new Pettanr.Views.Scroll.PlayModule.InsertPoint({
\r
209 class_name: 'insert-point', content: move_to.render().el
\r
211 @listenTo(move_to, 'click', @click_move_to)
\r
212 this.$el.append(@insert_point.clear().el)
\r
215 append_footer_switch: () ->
\r
216 @footer_switch = new Pettanr.Views.Scroll.PlayModule.FooterSwitch({
\r
218 scroll_panel: @scroll_panel,
\r
221 @listenTo(@footer_switch, 'click', @click_footer_switch)
\r
222 this.$el.append(@footer_switch.render().el)
\r
224 append_footer: () ->
\r
225 @footer = new Pettanr.Views.Scroll.PlayModule.Footer({
\r
228 scroll_panel: @scroll_panel,
\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
240 @set_style({display: 'none'})
\r
243 @set_style({display: 'inline'})
\r
245 set_style: (style) ->
\r
246 attr = {style: Pettanr.to_style(style)}
\r
247 this.$el.attr(attr)
\r
249 enable_footer_switch: () ->
\r
250 @footer_switch.enable()
\r
252 disable_footer_switch: () ->
\r
253 @footer_switch.disable()
\r
256 show_insert_point: () ->
\r
257 @insert_point.show()
\r
259 hide_insert_point: () ->
\r
260 @insert_point.hide()
\r
262 click_footer_switch: (visible) ->
\r
269 @trigger('http_get', @panel.show_url())
\r
271 click_author: (author) ->
\r
272 @trigger('http_get', author.show_url())
\r
274 click_insert: () ->
\r
275 @trigger('click:insert', this)
\r
278 @trigger('click:move', this)
\r
280 click_destroy: () ->
\r
281 @trigger('click:destroy', this)
\r
283 click_move_to: () ->
\r
284 @trigger('click:move_to', this)
\r
287 @trigger('http_get', url)
\r
289 class Pettanr.Views.Scroll.PlayModule.InsertPoint extends Tag.Div
\r
298 @set_style({display: 'none'})
\r
301 @set_style({display: 'inline'})
\r
303 set_style: (style) ->
\r
304 attr = {style: Pettanr.to_style(style)}
\r
305 this.$el.attr(attr)
\r
307 class Pettanr.Views.Scroll.PlayModule.EmptyNotice extends Tag.H2
\r
316 @set_style({display: 'none'})
\r
319 @set_style({display: 'inline'})
\r
321 set_style: (style) ->
\r
322 attr = {style: Pettanr.to_style(style)}
\r
323 this.$el.attr(attr)
\r
325 class Pettanr.Views.Scroll.PlayModule.Panels extends Pettanr.View
\r
327 className: 'player'
\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
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
345 refresh_empty_notice: () ->
\r
346 if @views.length < 1
\r
347 @empty_notice.show()
\r
349 @empty_notice.hide()
\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
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
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
373 exist: (panel_view) ->
\r
375 lost: (response, opt) ->
\r
378 this.credits.push(panel.licensed_pictures())
\r
381 @trigger('http_get', url)
\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
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
393 @trigger('click:insert', @dialog)
\r
395 pick: (new_item, insert_point) ->
\r
396 @parent.appender.show()
\r
397 panel_view = @create_panel_view(new_item)
\r
400 # insert before insert_point
\r
401 li = insert_point.$el[0]
\r
402 ul.insertBefore(panel_view.clear().el, li)
\r
405 this.$el.append(panel_view.clear().el)
\r
410 @trigger('dialog:open', dialog)
\r
412 close_dialog: () ->
\r
413 @trigger('dialog:close', @dialog)
\r
414 if @dialog.is_catch()
\r
415 # stored panel back to player
\r
418 click_move: (panel_view) ->
\r
419 @dialog = new Editor.Player.PanelMoveDialog({
\r
420 parent: this, binder: @binder, target_model: Pettanr.ScrollPanel,
\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
429 @show_insert_point()
\r
430 @trigger('click:move', @dialog)
\r
432 enable_footer_switch: () ->
\r
433 _.each @views, (panel_view) =>
\r
434 panel_view.enable_footer_switch()
\r
436 disable_footer_switch: () ->
\r
437 _.each @views, (panel_view) =>
\r
438 panel_view.disable_footer_switch()
\r
440 show_insert_point: () ->
\r
441 _.each @views, (panel_view) =>
\r
442 panel_view.show_insert_point()
\r
444 hide_insert_point: () ->
\r
445 _.each @views, (panel_view) =>
\r
446 panel_view.hide_insert_point()
\r
448 refresh_views: () ->
\r
449 _.each @views, (panel_view) =>
\r
450 Pettanr.cache.refresh(panel_view.scroll_panel)
\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
457 move_success: (model, response) ->
\r
458 from_panel_view = @create_panel_view(@dialog.from.scroll_panel)
\r
460 @listenTo(from_panel_view, 'ready', @ready_from_panel_view)
\r
462 li = @dialog.to.$el[0]
\r
463 ul.insertBefore(from_panel_view.clear().el, li)
\r
465 ready_from_panel_view: (panel) ->
\r
466 @remove_panel_view(@dialog.from)
\r
468 @hide_insert_point()
\r
472 @hide_insert_point()
\r
473 @enable_footer_switch()
\r
474 @dialog.from.show()
\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
482 @trigger('click:destroy')
\r
483 Pettanr.Proxy.destroy(panel_view.scroll_panel, {success: success})
\r
485 remove_panel_view: (panel_view) ->
\r
486 @views = _.without(@views, panel_view)
\r
487 panel_view.remove()
\r
489 class Pettanr.Views.Scroll.PlayModule.Append extends Tag.Div
\r
491 initialize: (options) ->
\r
498 @link = new Tag.A({
\r
499 attr: {href: '/scroll_panels/new'},
\r
500 content: I18n.t('scroll_panels.player.append')
\r
502 @listenTo(@link, 'click', @click)
\r
503 @content = @link.render().el
\r
516 @set_style({display: 'none'})
\r
520 @set_style({display: 'inline'})
\r
524 set_style: (style) ->
\r
525 attr = {style: Pettanr.to_style(style)}
\r
526 this.$el.attr(attr)
\r
532 class Pettanr.Views.Scroll.PlayModule.Body extends Pettanr.View
\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
545 credits = new Pettanr.View.Credits(this, {icon: true})
\r
546 @panels = new Pettanr.Views.Scroll.PlayModule.Panels({
\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
558 @appender = new Pettanr.Views.Scroll.PlayModule.Append({
\r
560 @listenTo(@appender, 'click', @click_append)
\r
561 this.$el.append(@appender.render().el)
\r
562 if @is_appendable()
\r
565 @listenTo(@pager, 'page', @continue)
\r
566 this.$el.append(@pager.render().el)
\r
567 this.$el.append(credits.render().el)
\r
571 is_appendable: () ->
\r
572 return true if _.isEmpty(@items)
\r
573 if @pager and @pager.hasNextPage()
\r
578 credits = new Pettanr.View.Credits(this, {icon: true})
\r
579 @panels = new Pettanr.Views.Scroll.PlayModule.Panels({
\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
593 @appender = new Pettanr.Views.Scroll.PlayModule.Append({
\r
595 @listenTo(@appender, 'click', @click_append)
\r
596 this.$el.append(@appender.render().el)
\r
597 if !@pager.hasNextPage()
\r
599 this.$el.append(@pager.render().el)
\r
602 click_credit_icon: (item) ->
\r
603 @trigger('http_get', item.show_url())
\r
605 click_append: () ->
\r
606 @panels.click_insert()
\r
609 @trigger('http_get', url)
\r
611 click_insert: (dialog) ->
\r
613 @trigger('click:insert', dialog)
\r
615 click_move: (dialog) ->
\r
617 @trigger('click:move', dialog)
\r
619 close_dialog: (dialog) ->
\r
621 @trigger('dialog:close', dialog)
\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
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
643 class Pettanr.Views.Scroll.Play extends Pettanr.View.Show
\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
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
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
673 @trigger('pick', @item)
\r
676 @trigger('http_get', url)
\r
678 click_insert: (dialog) ->
\r
679 @trigger('insert', dialog)
\r
681 click_move: (dialog) ->
\r
682 @trigger('move', dialog)
\r
684 close_dialog: (dialog) ->
\r
685 @trigger('dialog:close', dialog)
\r