1 class Pettanr.Views.Scroll.PlayModule
\r
2 class Pettanr.Views.Scroll.PlayModule.Header extends Pettanr.Views.Show.Header
\r
4 initialize: (options) ->
\r
7 class Pettanr.Views.Scroll.PlayModule.Owner extends Pettanr.Views.Show.Owner
\r
9 initialize: (options) ->
\r
12 class Pettanr.Views.Scroll.PlayModule.FooterSwitch extends Pettanr.View
\r
14 className: 'player-item-switch'
\r
19 initialize: (options) ->
\r
20 @scroll_panel = options.scroll_panel
\r
21 @panel = options.panel
\r
24 @listenTo(@scroll_panel, 'sync', @render)
\r
29 style: Pettanr.to_style({height: Pettanr.to_s(@panel.get('height')) + 'px'})
\r
36 caption = new Tag.Span({content: face})
\r
37 this.$el.append(@scroll_panel.get('t') + 1)
\r
38 this.$el.append(caption.render().el) if @enabled
\r
42 return false if !@enabled
\r
43 @visible = !@visible
\r
45 @trigger('click', @visible)
\r
56 class Pettanr.Views.Scroll.PlayModule.Footer extends Pettanr.View
\r
58 className: 'player-item-footer'
\r
60 initialize: (options) ->
\r
61 @scroll = options.scroll
\r
62 @scroll_panel = options.scroll_panel
\r
63 @panel = options.panel
\r
68 retriever = @panel.author()
\r
69 @listenTo(retriever, 'retrieve', @retrieve_author)
\r
70 retriever.retrieve()
\r
73 retrieve_author: (@author) ->
\r
74 @panel_icon = new Pettanr.Views.Panel.Icon({item: @panel, half: true})
\r
75 @author_icon = new Pettanr.Views.Author.Icon({item: @author, half: true})
\r
76 @new_scroll_panel = new Pettanr.ScrollPanel()
\r
77 @insert_button = new Pettanr.Views.Show.LinkedNewButton({item: @new_scroll_panel, dic_name: 'scroll_panels.player.before_insert'})
\r
78 @move_button = new Pettanr.Views.Show.LinkedEditButton({item: @scroll_panel, dic_name: 'scroll_panels.player.move'})
\r
79 @destroy_button = new Pettanr.Views.Show.LinkedDestroyButton({item: @scroll_panel, dic_name: 'scroll_panels.player.destroy'})
\r
80 @listenTo(@panel_icon, 'click', @click_panel)
\r
81 @listenTo(@author_icon, 'click', @click_author)
\r
82 @listenTo(@insert_button, 'click', @click_insert)
\r
83 @listenTo(@move_button, 'click', @click_move)
\r
84 @listenTo(@destroy_button, 'click', @click_destroy)
\r
86 content: Pettanr.AppHelper.t_m('Panel')
\r
89 content: Pettanr.AppHelper.t_m('ScrollPanel')
\r
91 this.$el.append(l1.render().el)
\r
92 this.$el.append(@panel_icon.render().el)
\r
93 this.$el.append(@author_icon.render().el)
\r
95 Pettanr.AppHelper.distance_of_time_in_words_to_now(@panel.get('updated_at'))
\r
97 this.$el.append(l2.render().el)
\r
99 this.$el.append(@insert_button.render().el)
\r
101 this.$el.append(@move_button.render().el)
\r
103 this.$el.append(@destroy_button.render().el)
\r
107 style: Pettanr.to_style({display: 'none'})
\r
109 this.$el.attr(attr)
\r
113 style: Pettanr.to_style({display: 'inline'})
\r
115 this.$el.attr(attr)
\r
118 @trigger('click:panel')
\r
120 click_author: () ->
\r
121 @trigger('click:author')
\r
123 click_insert: () ->
\r
124 @trigger('click:insert')
\r
127 @trigger('click:move')
\r
129 click_destroy: () ->
\r
130 @trigger('click:destroy')
\r
132 class Pettanr.Views.Scroll.PlayModule.Credits extends Pettanr.View
\r
134 className: 'credits'
\r
136 initialize: (options) ->
\r
137 @parent = options.parent
\r
138 @licensed_pictures = {}
\r
144 push: (retrievers) ->
\r
145 _.each retrievers, (retriever) =>
\r
146 @listenTo(retriever, 'retrieve', @retrieve_picture)
\r
147 retriever.retrieve()
\r
149 retrieve_picture: (picture) ->
\r
150 pid = picture.get('id')
\r
151 return if @licensed_pictures[pid]
\r
152 @licensed_pictures[pid] = picture
\r
153 credit = picture.credit_view()
\r
154 @listenTo(credit, 'click:icon', @click_credit_icon)
\r
155 this.$el.append(credit.render().el)
\r
157 click_credit_icon: (item) ->
\r
158 @trigger('click:credit:icon', item)
\r
160 class Pettanr.Views.Scroll.PlayModule.PanelBody extends Pettanr.View
\r
162 className: 'player-item-panel'
\r
164 initialize: (options) ->
\r
165 @panel = options.panel
\r
169 body = new Pettanr.Views.Panel.Body({
\r
173 this.$el.append(body.render().el)
\r
176 class Pettanr.Views.Scroll.PlayModule.Panel extends Pettanr.View
\r
178 className: 'player-item'
\r
180 initialize: (options) ->
\r
181 @scroll = options.scroll
\r
182 @scroll_panel = options.scroll_panel
\r
186 retriever = @scroll_panel.panel()
\r
187 @listenTo(retriever, 'retrieve', @retrieve_panel)
\r
188 retriever.retrieve()
\r
191 retrieve_panel: (@panel) ->
\r
196 @panel = @panel.with_elements() # retake panel for 'with_elements' mode
\r
197 @panel.fetch({cache: true}).done =>
\r
198 @panel.attributes = @panel.replaced_attributes()
\r
199 body = new Pettanr.Views.Scroll.PlayModule.PanelBody({
\r
202 @footer_switch = new Pettanr.Views.Scroll.PlayModule.FooterSwitch({
\r
203 scroll_panel: @scroll_panel,
\r
206 @listenTo(@footer_switch, 'click', @click_footer_switch)
\r
207 move_to = new Tag.A({
\r
208 attr: {href: '/' + @scroll_panel.edit_url()},
\r
209 content: I18n.t('scroll_panels.player.move_to')
\r
211 @insert_point = new Pettanr.Views.Scroll.PlayModule.InsertPoint({
\r
212 class_name: 'insert-point', content: move_to.render().el
\r
214 @footer = new Pettanr.Views.Scroll.PlayModule.Footer({
\r
216 scroll_panel: @scroll_panel,
\r
219 @listenTo(move_to, 'click', @click_move_to)
\r
220 @listenTo(@footer, 'click:panel', @click_show)
\r
221 @listenTo(@footer, 'click:author', @click_author)
\r
222 @listenTo(@footer, 'click:insert', @click_insert)
\r
223 @listenTo(@footer, 'click:move', @click_move)
\r
224 @listenTo(@footer, 'click:edit', @click_edit)
\r
225 @listenTo(@footer, 'click:destroy', @click_destroy)
\r
226 this.$el.append(@insert_point.clear().el)
\r
228 this.$el.append(body.render().el)
\r
229 this.$el.append(@footer_switch.render().el)
\r
230 this.$el.append(@footer.render().el)
\r
231 @trigger('ready', @panel)
\r
235 @set_style({display: 'none'})
\r
238 @set_style({display: 'inline'})
\r
240 set_style: (style) ->
\r
241 attr = {style: Pettanr.to_style(style)}
\r
242 this.$el.attr(attr)
\r
244 enable_footer_switch: () ->
\r
245 @footer_switch.enable()
\r
247 disable_footer_switch: () ->
\r
248 @footer_switch.disable()
\r
251 show_insert_point: () ->
\r
252 @insert_point.show()
\r
254 hide_insert_point: () ->
\r
255 @insert_point.hide()
\r
257 click_footer_switch: (visible) ->
\r
264 @trigger('http_get', @panel.show_url())
\r
266 click_author: () ->
\r
267 @trigger('http_get', @panel.author().show_url())
\r
269 click_insert: () ->
\r
270 @trigger('click:insert', this)
\r
273 @trigger('click:move', this)
\r
275 click_destroy: () ->
\r
276 @trigger('click:destroy', this)
\r
278 click_move_to: () ->
\r
279 @trigger('click:move_to', this)
\r
281 class Pettanr.Views.Scroll.PlayModule.InsertPoint extends Tag.Div
\r
290 @set_style({display: 'none'})
\r
293 @set_style({display: 'inline'})
\r
295 set_style: (style) ->
\r
296 attr = {style: Pettanr.to_style(style)}
\r
297 this.$el.attr(attr)
\r
299 class Pettanr.Views.Scroll.PlayModule.Panels extends Pettanr.View
\r
301 className: 'player'
\r
303 initialize: (options) ->
\r
304 @parent = options.parent
\r
305 @binder = options.binder
\r
306 @items = options.items
\r
307 @credits = options.credits
\r
312 _.each @items, (scroll_panel) =>
\r
313 @append_scroll_panel(scroll_panel)
\r
316 append_scroll_panel: (scroll_panel) ->
\r
317 return if not scroll_panel.has_panel()
\r
318 panel_view = @create_panel_view(scroll_panel)
\r
319 this.$el.append(panel_view.clear().el)
\r
321 create_panel_view: (scroll_panel) ->
\r
322 panel_view = new Pettanr.Views.Scroll.PlayModule.Panel({
\r
323 scroll: @binder, scroll_panel: scroll_panel,
\r
325 @listenTo(panel_view, 'ready', @ready)
\r
326 @listenTo(panel_view, 'click:insert', @click_insert)
\r
327 @listenTo(panel_view, 'click:move', @click_move)
\r
328 @listenTo(panel_view, 'click:destroy', @click_destroy)
\r
329 @listenTo(panel_view, 'click:move_to', @click_move_to)
\r
330 @views.push(panel_view)
\r
334 this.credits.push(panel.licensed_pictures())
\r
336 click_insert: (panel_view = null) ->
\r
337 @dialog = new Editor.Player.PanelInsertDialog({
\r
338 parent: this, binder: @binder, target_model: Pettanr.ScrollPanel,
\r
339 insert_point: panel_view
\r
341 @listenTo(@dialog, 'pick', @pick)
\r
342 @listenTo(@dialog, 'open', @open_dialog)
\r
343 @listenTo(@dialog, 'close', @close_dialog)
\r
344 this.$el.append(@dialog.render().el)
\r
346 @trigger('click:insert', @dialog)
\r
348 pick: (new_item, insert_point) ->
\r
349 @parent.appender.show()
\r
350 panel_view = @create_panel_view(new_item)
\r
353 # insert before insert_point
\r
354 li = insert_point.$el[0]
\r
355 ul.insertBefore(panel_view.clear().el, li)
\r
358 this.$el.append(panel_view.clear().el)
\r
363 @trigger('dialog:open', dialog)
\r
365 close_dialog: () ->
\r
366 @trigger('dialog:close', @dialog)
\r
367 if @dialog.is_catch()
\r
368 # stored panel back to player
\r
371 click_move: (panel_view) ->
\r
372 @dialog = new Editor.Player.PanelMoveDialog({
\r
373 parent: this, binder: @binder, target_model: Pettanr.ScrollPanel,
\r
376 @listenTo(@dialog, 'open', @open_dialog)
\r
377 @listenTo(@dialog, 'close', @close_dialog)
\r
378 this.$el.append(@dialog.render().el)
\r
379 @disable_footer_switch()
\r
380 @dialog.start(panel_view.panel)
\r
382 @show_insert_point()
\r
383 @trigger('click:move', @dialog)
\r
385 enable_footer_switch: () ->
\r
386 _.each @views, (panel_view) =>
\r
387 panel_view.enable_footer_switch()
\r
389 disable_footer_switch: () ->
\r
390 _.each @views, (panel_view) =>
\r
391 panel_view.disable_footer_switch()
\r
393 show_insert_point: () ->
\r
394 _.each @views, (panel_view) =>
\r
395 panel_view.show_insert_point()
\r
397 hide_insert_point: () ->
\r
398 _.each @views, (panel_view) =>
\r
399 panel_view.hide_insert_point()
\r
401 refresh_views: () ->
\r
402 _.each @views, (panel_view) =>
\r
403 Pettanr.cache.refresh(panel_view.scroll_panel)
\r
405 click_move_to: (to_panel_view) ->
\r
406 @enable_footer_switch()
\r
407 @listenTo(@dialog, 'success', @move_success)
\r
408 @dialog.save(to_panel_view)
\r
410 move_success: (model, response) ->
\r
411 from_panel_view = @create_panel_view(@dialog.from.scroll_panel)
\r
413 @listenTo(from_panel_view, 'ready', @ready_from_panel_view)
\r
415 li = @dialog.to.$el[0]
\r
416 ul.insertBefore(from_panel_view.clear().el, li)
\r
418 ready_from_panel_view: (panel) ->
\r
419 @remove_panel_view(@dialog.from)
\r
421 @hide_insert_point()
\r
425 @hide_insert_point()
\r
426 @enable_footer_switch()
\r
427 @dialog.from.show()
\r
429 click_destroy: (panel_view) ->
\r
430 success = (model, response) =>
\r
431 @remove_panel_view(panel_view)
\r
432 panel_view.remove()
\r
434 @trigger('click:destroy')
\r
435 Pettanr.Proxy.destroy(panel_view.scroll_panel, {success: success})
\r
437 remove_panel_view: (panel_view) ->
\r
438 @views = _.without(@views, panel_view)
\r
439 panel_view.remove()
\r
441 class Pettanr.Views.Scroll.PlayModule.Append extends Tag.Div
\r
443 initialize: (options) ->
\r
450 @link = new Tag.A({
\r
451 attr: {href: '/scroll_panels/new'},
\r
452 content: I18n.t('scroll_panels.player.append')
\r
454 @listenTo(@link, 'click', @click)
\r
455 @content = @link.render().el
\r
468 @set_style({display: 'none'})
\r
472 @set_style({display: 'inline'})
\r
476 set_style: (style) ->
\r
477 attr = {style: Pettanr.to_style(style)}
\r
478 this.$el.attr(attr)
\r
484 class Pettanr.Views.Scroll.PlayModule.Body extends Pettanr.View
\r
487 initialize: (options) ->
\r
488 @parent = options.parent
\r
489 @binder = options.binder
\r
490 @list = options.list
\r
491 @pager = options.pager
\r
492 @items = @list.items()
\r
494 render_empty: () ->
\r
496 this.$el.append((new Tag.H2({content: I18n.t('scrolls.play.empty')})).render().el)
\r
500 if @items.length < 1
\r
505 credits = new Pettanr.Views.Scroll.PlayModule.Credits({parent: this})
\r
506 @panels = new Pettanr.Views.Scroll.PlayModule.Panels({
\r
512 @listenTo(credits, 'click:credit:icon', @click_credit_icon)
\r
513 @listenTo(@panels, 'click:insert', @click_insert)
\r
514 @listenTo(@panels, 'click:move', @click_move)
\r
515 @listenTo(@panels, 'dialog:close', @close_dialog)
\r
516 @listenTo(@pager, 'page', @continue)
\r
517 this.$el.append(@panels.render().el)
\r
519 @appender = new Pettanr.Views.Scroll.PlayModule.Append({
\r
521 @listenTo(@appender, 'click', @click_append)
\r
522 this.$el.append(@appender.render().el)
\r
523 if !@pager.hasNextPage()
\r
525 this.$el.append(@pager.render().el)
\r
526 this.$el.append(credits.render().el)
\r
530 click_credit_icon: (item) ->
\r
531 @trigger('http_get', item.show_url())
\r
533 click_append: () ->
\r
534 @panels.click_insert()
\r
536 click_insert: (dialog) ->
\r
538 @trigger('click:insert', dialog)
\r
540 click_move: (dialog) ->
\r
542 @trigger('click:move', dialog)
\r
544 close_dialog: (dialog) ->
\r
546 @trigger('dialog:close', dialog)
\r
548 continue: (page) ->
\r
549 params = _.clone(@pager.params)
\r
550 params['page'] = page
\r
551 continue_list = Locmare.ListGroup.list(
\r
552 @list.list_group_name, @list.list_name, params
\r
554 continue_list.open(() =>
\r
555 _.each continue_list.items(), (scroll_panel) =>
\r
556 @items.push(scroll_panel)
\r
557 @panels.append_scroll_panel(scroll_panel)
\r
558 @list = continue_list
\r
559 continue_pager = Locmare.ListGroupModule.LibModule.PlayPager.factory(@list.page_status, params)
\r
560 @listenTo(continue_pager, 'page', @continue)
\r
561 @pager.$el.replaceWith(continue_pager.render().el)
\r
562 @pager = continue_pager
\r
563 if !@pager.hasNextPage()
\r
567 class Pettanr.Views.Scroll.Play extends Pettanr.View
\r
571 initialize: (options) ->
\r
572 @item = options.item
\r
573 @list = options.list
\r
574 @pager = options.pager
\r
575 icon_url = Pettanr.url(@item.table_name(), 'show', {id: @item.get('id')})
\r
576 caption_url = Pettanr.url(@item.table_name(), 'play', {id: @item.get('id')})
\r
577 prof_url = Pettanr.url(@item.table_name(), 'show', {id: @item.get('id'), format: 'prof'})
\r
578 @header = new Pettanr.Views.Scroll.PlayModule.Header({
\r
580 caption: @item.get('title'),
\r
581 icon_url: icon_url,
\r
582 caption_url: caption_url,
\r
585 @author = new Pettanr.Views.Show.HeaderAuthor({item: @item})
\r
586 @body = new Pettanr.Views.Scroll.PlayModule.Body({
\r
592 # @owner = new Pettanr.Views.Scroll.PlayModule.Owner({item: @item})
\r
593 @listenTo(@header, 'click:pick', @click_pick)
\r
594 @listenTo(@header, 'click:icon', @click_show)
\r
595 @listenTo(@header, 'click:caption', @click_play)
\r
596 @listenTo(@header, 'click:prof', @click_prof)
\r
597 @listenTo(@author, 'click:author', @click_author)
\r
598 @listenTo(@body, 'http_get', @http_get)
\r
599 @listenTo(@body, 'click:insert', @click_insert)
\r
600 @listenTo(@body, 'click:move', @click_move)
\r
601 @listenTo(@body, 'dialog:close', @close_dialog)
\r
605 this.$el.append(@header.render().el)
\r
606 this.$el.append(@author.render().el)
\r
607 this.$el.append(@body.render().el)
\r
608 # this.$el.append(@owner.render().el) if @item.is_own()
\r
612 @trigger('http_get', @item.show_url())
\r
615 @trigger('http_get', @item.play_url())
\r
618 @trigger('http_get', @item.prof_url())
\r
620 click_author: () ->
\r
621 @trigger('http_get', @author.author.show_url())
\r
624 @trigger('pick', @item)
\r
627 @trigger('http_get', url)
\r
629 click_insert: (dialog) ->
\r
630 @trigger('insert', dialog)
\r
632 click_move: (dialog) ->
\r
633 @trigger('move', dialog)
\r
635 close_dialog: (dialog) ->
\r
636 @trigger('dialog:close', dialog)
\r