+ @empty_notice = new Pettanr.Views.Scroll.PlayModule.EmptyNotice({content: I18n.t('scrolls.play.empty')})\r
+ this.$el.append(@empty_notice.clear().el)\r
+ _.each @items, (scroll_panel) =>\r
+ @append_scroll_panel(scroll_panel)\r
+ @refresh_empty_notice()\r
+ this\r
+ \r
+ refresh_empty_notice: () ->\r
+ if @views.length < 1\r
+ @empty_notice.show()\r
+ else\r
+ @empty_notice.hide()\r
+ this\r
+ \r
+ append_scroll_panel: (scroll_panel) ->\r
+ return if not scroll_panel.has_panel()\r
+ panel_view = @create_panel_view(scroll_panel)\r
+ this.$el.append(panel_view.clear().el)\r
+ @refresh_empty_notice()\r
+ \r
+ create_panel_view: (scroll_panel) ->\r
+ panel_view = new Pettanr.Views.Scroll.PlayModule.Panel({\r
+ scroll: @binder, scroll_panel: scroll_panel,\r
+ })\r
+ @listenTo(panel_view, 'ready', @ready)\r
+ @listenTo(panel_view, 'http_get', @http_get)\r
+ @listenTo(panel_view, 'click:insert', @click_insert)\r
+ @listenTo(panel_view, 'click:move', @click_move)\r
+ @listenTo(panel_view, 'click:destroy', @click_destroy)\r
+ @listenTo(panel_view, 'click:move_to', @click_move_to)\r
+ @views.push(panel_view)\r
+ panel_view\r
+ \r
+ ready: (panel) ->\r
+ this.credits.push(panel.licensed_pictures())\r
+ \r
+ http_get: (url) ->\r
+ @trigger('http_get', url)\r
+ \r
+ click_insert: (panel_view = null) ->\r
+ @dialog = new Editor.Player.PanelInsertDialog({\r
+ parent: this, binder: @binder, target_model: Pettanr.ScrollPanel,\r
+ insert_point: panel_view\r
+ })\r
+ @listenTo(@dialog, 'pick', @pick)\r
+ @listenTo(@dialog, 'open', @open_dialog)\r
+ @listenTo(@dialog, 'close', @close_dialog)\r
+ this.$el.append(@dialog.render().el)\r
+ @dialog.start()\r
+ @trigger('click:insert', @dialog)\r
+ \r
+ pick: (new_item, insert_point) ->\r
+ @parent.appender.show()\r
+ panel_view = @create_panel_view(new_item)\r
+ ul = this.$el[0]\r
+ if insert_point\r
+ # insert before insert_point\r
+ li = insert_point.$el[0]\r
+ ul.insertBefore(panel_view.clear().el, li)\r
+ else\r
+ # append\r
+ this.$el.append(panel_view.clear().el)\r
+ @refresh_views()\r
+ @dialog.stop()\r
+ \r
+ open_dialog: () ->\r
+ @trigger('dialog:open', dialog)\r
+ \r
+ close_dialog: () ->\r
+ @trigger('dialog:close', @dialog)\r
+ if @dialog.is_catch()\r
+ # stored panel back to player\r
+ @back()\r
+ \r
+ click_move: (panel_view) ->\r
+ @dialog = new Editor.Player.PanelMoveDialog({\r
+ parent: this, binder: @binder, target_model: Pettanr.ScrollPanel,\r
+ from: panel_view\r
+ })\r
+ @listenTo(@dialog, 'open', @open_dialog)\r
+ @listenTo(@dialog, 'close', @close_dialog)\r
+ this.$el.append(@dialog.render().el)\r
+ @disable_footer_switch()\r
+ @dialog.start(panel_view.panel)\r
+ panel_view.hide()\r
+ @show_insert_point()\r
+ @trigger('click:move', @dialog)\r
+ \r
+ enable_footer_switch: () ->\r
+ _.each @views, (panel_view) =>\r
+ panel_view.enable_footer_switch()\r
+ \r
+ disable_footer_switch: () ->\r
+ _.each @views, (panel_view) =>\r
+ panel_view.disable_footer_switch()\r
+ \r
+ show_insert_point: () ->\r
+ _.each @views, (panel_view) =>\r
+ panel_view.show_insert_point()\r
+ \r
+ hide_insert_point: () ->\r
+ _.each @views, (panel_view) =>\r
+ panel_view.hide_insert_point()\r
+ \r
+ refresh_views: () ->\r
+ _.each @views, (panel_view) =>\r
+ Pettanr.cache.refresh(panel_view.scroll_panel)\r
+ \r
+ click_move_to: (to_panel_view) ->\r
+ @enable_footer_switch()\r
+ @listenTo(@dialog, 'success', @move_success)\r
+ @dialog.save(to_panel_view)\r
+ \r
+ move_success: (model, response) ->\r
+ from_panel_view = @create_panel_view(@dialog.from.scroll_panel)\r
+ @dialog.release()\r
+ @listenTo(from_panel_view, 'ready', @ready_from_panel_view)\r
+ ul = this.$el[0]\r
+ li = @dialog.to.$el[0]\r
+ ul.insertBefore(from_panel_view.clear().el, li)\r
+ \r
+ ready_from_panel_view: (panel) ->\r
+ @remove_panel_view(@dialog.from)\r
+ @dialog.stop()\r
+ @hide_insert_point()\r
+ @refresh_views()\r
+ \r
+ back: () ->\r
+ @hide_insert_point()\r
+ @enable_footer_switch()\r
+ @dialog.from.show()\r
+ \r
+ click_destroy: (panel_view) ->\r
+ success = (model, response) =>\r
+ @remove_panel_view(panel_view)\r
+ panel_view.remove()\r
+ @refresh_empty_notice()\r
+ @refresh_views()\r
+ @trigger('click:destroy')\r
+ Pettanr.Proxy.destroy(panel_view.scroll_panel, {success: success})\r
+ \r
+ remove_panel_view: (panel_view) ->\r
+ @views = _.without(@views, panel_view)\r
+ panel_view.remove()\r
+ \r
+class Pettanr.Views.Scroll.PlayModule.Append extends Tag.Div\r
+ \r
+ initialize: (options) ->\r
+ super(options)\r
+ @enabled = false\r
+ \r
+ render: () ->\r
+ this.$el.html('')\r
+ if @enabled\r
+ @link = new Tag.A({\r
+ attr: {href: '/scroll_panels/new'},\r
+ content: I18n.t('scroll_panels.player.append')\r
+ })\r
+ @listenTo(@link, 'click', @click)\r
+ @content = @link.render().el\r
+ super()\r