X-Git-Url: http://git.osdn.net/view?p=pettanr%2Fpettanr.git;a=blobdiff_plain;f=app%2Fassets%2Fjavascripts%2Fviews%2Fscrolls%2Fplay.js.coffee;h=5dfdd6361927683c5aa716c1e3477bc603c01859;hp=afc5773019e64df73e6394a87d3ae7bc603510db;hb=6feb1c7f35b819955c56b14b6cfb7d1c21c0cffa;hpb=c2b954f7004cb2bf4a8ea3b5fbc003f3306f45d8 diff --git a/app/assets/javascripts/views/scrolls/play.js.coffee b/app/assets/javascripts/views/scrolls/play.js.coffee index afc57730..5dfdd636 100644 --- a/app/assets/javascripts/views/scrolls/play.js.coffee +++ b/app/assets/javascripts/views/scrolls/play.js.coffee @@ -1,14 +1,4 @@ class Pettanr.Views.Scroll.PlayModule -class Pettanr.Views.Scroll.PlayModule.Header extends Pettanr.Views.Show.Header - - initialize: (options) -> - super(options) - -class Pettanr.Views.Scroll.PlayModule.Owner extends Pettanr.Views.Show.Owner - - initialize: (options) -> - super(options) - class Pettanr.Views.Scroll.PlayModule.FooterSwitch extends Pettanr.View tagName: 'div' className: 'player-item-switch' @@ -65,42 +55,55 @@ class Pettanr.Views.Scroll.PlayModule.Footer extends Pettanr.View render: () -> this.$el.html('') @hide() - retriever = @panel.author() - @listenTo(retriever, 'retrieve', @retrieve_author) - retriever.retrieve() - this - - retrieve_author: (@author) -> - @panel_icon = new Pettanr.Views.Panel.Icon({item: @panel, half: true}) - @author_icon = new Pettanr.Views.Author.Icon({item: @author, half: true}) - @new_scroll_panel = new Pettanr.ScrollPanel() - @insert_button = new Pettanr.Views.Show.LinkedNewButton({item: @new_scroll_panel, dic_name: 'scroll_panels.player.before_insert'}) - @move_button = new Pettanr.Views.Show.LinkedEditButton({item: @scroll_panel, dic_name: 'scroll_panels.player.move'}) - @destroy_button = new Pettanr.Views.Show.LinkedDestroyButton({item: @scroll_panel, dic_name: 'scroll_panels.player.destroy'}) - @listenTo(@panel_icon, 'click', @click_panel) - @listenTo(@author_icon, 'click', @click_author) - @listenTo(@insert_button, 'click', @click_insert) - @listenTo(@move_button, 'click', @click_move) - @listenTo(@destroy_button, 'click', @click_destroy) - l1 = new Tag.H3({ - content: Pettanr.AppHelper.t_m('Panel') - }) - l2 = new Tag.H3({ - content: Pettanr.AppHelper.t_m('ScrollPanel') + @panel.get_parent('author', this, { + success: (@author) => + @panel_face_button = @panel.mini_face_button({ + context: this, + click: () -> + @trigger('click:panel') + }) + @author_face_button = @author.mini_face_button({ + context: this, + click: () -> + @trigger('click:author', @author) + }) + l1 = new Tag.H3({ + content: Pettanr.AppHelper.t_m('Panel') + }) + l2 = new Tag.H3({ + content: Pettanr.AppHelper.t_m('ScrollPanel') + }) + this.$el.append(l1.render().el) + this.$el.append(@panel_face_button.render().el) + this.$el.append(@author_face_button.render().el) + this.$el.append( + Pettanr.AppHelper.distance_of_time_in_words_to_now(@panel.get('updated_at')) + ) + this.$el.append(l2.render().el) + if @scroll.is_own() + @new_scroll_panel = new Pettanr.ScrollPanel() + @insert_button = new Pettanr.View.Button.ItemAction(@new_scroll_panel, 'new', 'scroll_panels.player.before_insert', { + context: this, + click: () -> + @trigger('click:insert') + }) + @move_button = new Pettanr.View.Button.ItemAction(@scroll_panel, 'edit', 'scroll_panels.player.move', { + context: this, + click: () -> + @trigger('click:move') + }) + @destroy_button = new Pettanr.View.Button.ItemAction(@scroll_panel, 'destroy', 'scroll_panels.player.destroy', { + context: this, + click: () -> + @trigger('click:destroy') + }) + this.$el.append(@insert_button.render().el) + @append_rb() + this.$el.append(@move_button.render().el) + @append_rb() + this.$el.append(@destroy_button.render().el) }) - this.$el.append(l1.render().el) - this.$el.append(@panel_icon.render().el) - this.$el.append(@author_icon.render().el) - this.$el.append( - Pettanr.AppHelper.distance_of_time_in_words_to_now(@panel.get('updated_at')) - ) - this.$el.append(l2.render().el) - if @scroll.is_own() - this.$el.append(@insert_button.render().el) - @rb() - this.$el.append(@move_button.render().el) - @rb() - this.$el.append(@destroy_button.render().el) + this hide: () -> attr = { @@ -114,49 +117,6 @@ class Pettanr.Views.Scroll.PlayModule.Footer extends Pettanr.View } this.$el.attr(attr) - click_panel: () -> - @trigger('click:panel') - - click_author: () -> - @trigger('click:author') - - click_insert: () -> - @trigger('click:insert') - - click_move: () -> - @trigger('click:move') - - click_destroy: () -> - @trigger('click:destroy') - -class Pettanr.Views.Scroll.PlayModule.Credits extends Pettanr.View - tagName: 'div' - className: 'credits' - - initialize: (options) -> - @parent = options.parent - @licensed_pictures = {} - - render: () -> - this.$el.html('') - this - - push: (retrievers) -> - _.each retrievers, (retriever) => - @listenTo(retriever, 'retrieve', @retrieve_picture) - retriever.retrieve() - - retrieve_picture: (picture) -> - pid = picture.get('id') - return if @licensed_pictures[pid] - @licensed_pictures[pid] = picture - credit = picture.credit_view() - @listenTo(credit, 'click:icon', @click_credit_icon) - this.$el.append(credit.render().el) - - click_credit_icon: (item) -> - @trigger('click:credit:icon', item) - class Pettanr.Views.Scroll.PlayModule.PanelBody extends Pettanr.View tagName: 'div' className: 'player-item-panel' @@ -183,52 +143,54 @@ class Pettanr.Views.Scroll.PlayModule.Panel extends Pettanr.View clear: () -> this.$el.html('') - retriever = @scroll_panel.panel() - @listenTo(retriever, 'retrieve', @retrieve_panel) - retriever.retrieve() + @scroll_panel.get_parent('panel', this, { + success: (@panel) => + @render() + }) this - retrieve_panel: (@panel) -> - @render() - render: () -> this.$el.html('') - @panel = @panel.with_elements() # retake panel for 'with_elements' mode - @panel.fetch({cache: true}).done => - @panel.attributes = @panel.replaced_attributes() - body = new Pettanr.Views.Scroll.PlayModule.PanelBody({ - panel: @panel - }) - @footer_switch = new Pettanr.Views.Scroll.PlayModule.FooterSwitch({ - scroll_panel: @scroll_panel, - panel: @panel - }) - @listenTo(@footer_switch, 'click', @click_footer_switch) - move_to = new Tag.A({ - attr: {href: '/' + @scroll_panel.edit_url()}, - content: I18n.t('scroll_panels.player.move_to') - }) - @insert_point = new Pettanr.Views.Scroll.PlayModule.InsertPoint({ - class_name: 'insert-point', content: move_to.render().el - }) - @footer = new Pettanr.Views.Scroll.PlayModule.Footer({ - scroll: @scroll, - scroll_panel: @scroll_panel, - panel: @panel, - }) - @listenTo(move_to, 'click', @click_move_to) - @listenTo(@footer, 'click:panel', @click_show) - @listenTo(@footer, 'click:author', @click_author) - @listenTo(@footer, 'click:insert', @click_insert) - @listenTo(@footer, 'click:move', @click_move) - @listenTo(@footer, 'click:edit', @click_edit) - @listenTo(@footer, 'click:destroy', @click_destroy) - this.$el.append(@insert_point.clear().el) - @rb() - this.$el.append(body.render().el) - this.$el.append(@footer_switch.render().el) - this.$el.append(@footer.render().el) - @trigger('ready', @panel) + @panel = @panel.play() # retake panel for 'with_elements' mode + @panel.fetch({ + success: (model, response, opt) => + @panel.attributes = @panel.decoded_attributes() + body = new Pettanr.Views.Scroll.PlayModule.PanelBody({ + panel: @panel + }) + @footer_switch = new Pettanr.Views.Scroll.PlayModule.FooterSwitch({ + scroll_panel: @scroll_panel, + panel: @panel + }) + @listenTo(@footer_switch, 'click', @click_footer_switch) + move_to = new Tag.A({ + attr: {href: '/' + @scroll_panel.edit_url()}, + content: I18n.t('scroll_panels.player.move_to') + }) + @insert_point = new Pettanr.Views.Scroll.PlayModule.InsertPoint({ + class_name: 'insert-point', content: move_to.render().el + }) + @footer = new Pettanr.Views.Scroll.PlayModule.Footer({ + scroll: @scroll, + scroll_panel: @scroll_panel, + panel: @panel, + }) + @listenTo(move_to, 'click', @click_move_to) + @listenTo(@footer, 'click:panel', @click_show) + @listenTo(@footer, 'click:author', @click_author) + @listenTo(@footer, 'click:insert', @click_insert) + @listenTo(@footer, 'click:move', @click_move) + @listenTo(@footer, 'click:edit', @click_edit) + @listenTo(@footer, 'click:destroy', @click_destroy) + this.$el.append(@insert_point.clear().el) + @append_rb() + this.$el.append(body.render().el) + this.$el.append(@footer_switch.render().el) + this.$el.append(@footer.render().el) + @trigger('ready', @panel) + error: (item, response, opt) => + @open_error_dialog(response, opt) + }) this hide: () -> @@ -263,8 +225,8 @@ class Pettanr.Views.Scroll.PlayModule.Panel extends Pettanr.View click_show: () -> @trigger('http_get', @panel.show_url()) - click_author: () -> - @trigger('http_get', @panel.author().show_url()) + click_author: (author) -> + @trigger('http_get', author.show_url()) click_insert: () -> @trigger('click:insert', this) @@ -296,6 +258,24 @@ class Pettanr.Views.Scroll.PlayModule.InsertPoint extends Tag.Div attr = {style: Pettanr.to_style(style)} this.$el.attr(attr) +class Pettanr.Views.Scroll.PlayModule.EmptyNotice extends Tag.H2 + + clear: () -> + this.$el.html('') + @hide() + @render() + this + + hide: () -> + @set_style({display: 'none'}) + + show: () -> + @set_style({display: 'inline'}) + + set_style: (style) -> + attr = {style: Pettanr.to_style(style)} + this.$el.attr(attr) + class Pettanr.Views.Scroll.PlayModule.Panels extends Pettanr.View tagName: 'ul' className: 'player' @@ -309,20 +289,32 @@ class Pettanr.Views.Scroll.PlayModule.Panels extends Pettanr.View render: () -> this.$el.html('') + @empty_notice = new Pettanr.Views.Scroll.PlayModule.EmptyNotice({content: I18n.t('scrolls.play.empty')}) + this.$el.append(@empty_notice.clear().el) _.each @items, (scroll_panel) => @append_scroll_panel(scroll_panel) + @refresh_empty_notice() + this + + refresh_empty_notice: () -> + if @views.length < 1 + @empty_notice.show() + else + @empty_notice.hide() this append_scroll_panel: (scroll_panel) -> return if not scroll_panel.has_panel() panel_view = @create_panel_view(scroll_panel) this.$el.append(panel_view.clear().el) + @refresh_empty_notice() create_panel_view: (scroll_panel) -> panel_view = new Pettanr.Views.Scroll.PlayModule.Panel({ scroll: @binder, scroll_panel: scroll_panel, }) @listenTo(panel_view, 'ready', @ready) + @listenTo(panel_view, 'http_get', @http_get) @listenTo(panel_view, 'click:insert', @click_insert) @listenTo(panel_view, 'click:move', @click_move) @listenTo(panel_view, 'click:destroy', @click_destroy) @@ -333,6 +325,9 @@ class Pettanr.Views.Scroll.PlayModule.Panels extends Pettanr.View ready: (panel) -> this.credits.push(panel.licensed_pictures()) + http_get: (url) -> + @trigger('http_get', url) + click_insert: (panel_view = null) -> @dialog = new Editor.Player.PanelInsertDialog({ parent: this, binder: @binder, target_model: Pettanr.ScrollPanel, @@ -430,6 +425,7 @@ class Pettanr.Views.Scroll.PlayModule.Panels extends Pettanr.View success = (model, response) => @remove_panel_view(panel_view) panel_view.remove() + @refresh_empty_notice() @refresh_views() @trigger('click:destroy') Pettanr.Proxy.destroy(panel_view.scroll_panel, {success: success}) @@ -491,18 +487,43 @@ class Pettanr.Views.Scroll.PlayModule.Body extends Pettanr.View @pager = options.pager @items = @list.items() - render_empty: () -> + render: () -> this.$el.html('') - this.$el.append((new Tag.H2({content: I18n.t('scrolls.play.empty')})).render().el) + # paginate(@pager) + credits = new Pettanr.View.Credits(this, {icon: true}) + @panels = new Pettanr.Views.Scroll.PlayModule.Panels({ + parent: this, + binder: @binder, + items: @items, + credits: credits, + }) + @listenTo(credits, 'click:credit:icon', @click_credit_icon) + @listenTo(@panels, 'click:insert', @click_insert) + @listenTo(@panels, 'click:move', @click_move) + @listenTo(@panels, 'dialog:close', @close_dialog) + this.$el.append(@panels.render().el) + @append_rb() + @appender = new Pettanr.Views.Scroll.PlayModule.Append({ + }) + @listenTo(@appender, 'click', @click_append) + this.$el.append(@appender.render().el) + if @is_appendable() + @appender.enable() + if @pager + @listenTo(@pager, 'page', @continue) + this.$el.append(@pager.render().el) + this.$el.append(credits.render().el) + @append_rb() this - render: () -> - if @items.length < 1 - @render_empty() + is_appendable: () -> + return true if _.isEmpty(@items) + if @pager and @pager.hasNextPage() + false else this.$el.html('') # paginate(@pager) - credits = new Pettanr.Views.Scroll.PlayModule.Credits({parent: this}) + credits = new Pettanr.View.Credits(this, {icon: true}) @panels = new Pettanr.Views.Scroll.PlayModule.Panels({ parent: this, binder: @binder, @@ -510,12 +531,13 @@ class Pettanr.Views.Scroll.PlayModule.Body extends Pettanr.View credits: credits, }) @listenTo(credits, 'click:credit:icon', @click_credit_icon) + @listenTo(@panels, 'http_get', @http_get) @listenTo(@panels, 'click:insert', @click_insert) @listenTo(@panels, 'click:move', @click_move) @listenTo(@panels, 'dialog:close', @close_dialog) @listenTo(@pager, 'page', @continue) this.$el.append(@panels.render().el) - @rb() + @append_rb() @appender = new Pettanr.Views.Scroll.PlayModule.Append({ }) @listenTo(@appender, 'click', @click_append) @@ -524,8 +546,8 @@ class Pettanr.Views.Scroll.PlayModule.Body extends Pettanr.View @appender.enable() this.$el.append(@pager.render().el) this.$el.append(credits.render().el) - @rb() - this + @append_rb() + true click_credit_icon: (item) -> @trigger('http_get', item.show_url()) @@ -533,6 +555,9 @@ class Pettanr.Views.Scroll.PlayModule.Body extends Pettanr.View click_append: () -> @panels.click_insert() + http_get: (url) -> + @trigger('http_get', url) + click_insert: (dialog) -> @appender.hide() @trigger('click:insert', dialog) @@ -551,38 +576,27 @@ class Pettanr.Views.Scroll.PlayModule.Body extends Pettanr.View continue_list = Locmare.ListGroup.list( @list.list_group_name, @list.list_name, params ) - continue_list.open(() => - _.each continue_list.items(), (scroll_panel) => - @items.push(scroll_panel) - @panels.append_scroll_panel(scroll_panel) - @list = continue_list - continue_pager = Locmare.ListGroupModule.LibModule.PlayPager.factory(@list.page_status, params) - @listenTo(continue_pager, 'page', @continue) - @pager.$el.replaceWith(continue_pager.render().el) - @pager = continue_pager - if !@pager.hasNextPage() - @appender.enable() - ) + continue_list.open(this, { + success: (next_page_items) => + _.each next_page_items, (scroll_panel) => + @items.push(scroll_panel) + @panels.append_scroll_panel(scroll_panel) + @list = continue_list + continue_pager = Locmare.ListGroupModule.LibModule.PlayPager.factory(@list.page_status, params) + @listenTo(continue_pager, 'page', @continue) + @pager.$el.replaceWith(continue_pager.render().el) + @pager = continue_pager + if !@pager.hasNextPage() + @appender.enable() + }) -class Pettanr.Views.Scroll.Play extends Pettanr.View - tagName: 'div' - className: 'show' +class Pettanr.Views.Scroll.Play extends Pettanr.View.Show initialize: (options) -> - @item = options.item @list = options.list @pager = options.pager - icon_url = Pettanr.url(@item.table_name(), 'show', {id: @item.get('id')}) - caption_url = Pettanr.url(@item.table_name(), 'play', {id: @item.get('id')}) - prof_url = Pettanr.url(@item.table_name(), 'show', {id: @item.get('id'), format: 'prof'}) - @header = new Pettanr.Views.Scroll.PlayModule.Header({ - item: @item, - caption: @item.get('title'), - icon_url: icon_url, - caption_url: caption_url, - prof_url: prof_url - }) - @author = new Pettanr.Views.Show.HeaderAuthor({item: @item}) + @header = new Pettanr.View.Show.Header(@item, this, @binder_header_options()) + @authored_by = @item.authored_by() @body = new Pettanr.Views.Scroll.PlayModule.Body({ parent: this, binder: @item, @@ -591,10 +605,7 @@ class Pettanr.Views.Scroll.Play extends Pettanr.View }) # @owner = new Pettanr.Views.Scroll.PlayModule.Owner({item: @item}) @listenTo(@header, 'click:pick', @click_pick) - @listenTo(@header, 'click:icon', @click_show) - @listenTo(@header, 'click:caption', @click_play) - @listenTo(@header, 'click:prof', @click_prof) - @listenTo(@author, 'click:author', @click_author) + @listenTo(@authored_by, 'click', @click_authored_by) @listenTo(@body, 'http_get', @http_get) @listenTo(@body, 'click:insert', @click_insert) @listenTo(@body, 'click:move', @click_move) @@ -603,23 +614,11 @@ class Pettanr.Views.Scroll.Play extends Pettanr.View render: () -> this.$el.html('') this.$el.append(@header.render().el) - this.$el.append(@author.render().el) + this.$el.append(@authored_by.render().el) this.$el.append(@body.render().el) # this.$el.append(@owner.render().el) if @item.is_own() this - click_show: () -> - @trigger('http_get', @item.show_url()) - - click_play: () -> - @trigger('http_get', @item.play_url()) - - click_prof: () -> - @trigger('http_get', @item.prof_url()) - - click_author: () -> - @trigger('http_get', @author.author.show_url()) - click_pick: () -> @trigger('pick', @item)