X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=app%2Fassets%2Fjavascripts%2Fviews%2Fpanels%2Fshow.js.coffee;h=afe7bd3916418a7998f5e001f3900e957694de1e;hb=810b67011df66ced6300f0891d38c8db0ed12803;hp=938a2843a390d94657e30d4312406a4f68626d0e;hpb=bb97922e3c1f43e4af22fc8a7c8ebd202e64be82;p=pettanr%2Fpettanr.git diff --git a/app/assets/javascripts/views/panels/show.js.coffee b/app/assets/javascripts/views/panels/show.js.coffee index 938a2843..afe7bd39 100644 --- a/app/assets/javascripts/views/panels/show.js.coffee +++ b/app/assets/javascripts/views/panels/show.js.coffee @@ -8,35 +8,110 @@ class Pettanr.Views.Panel.Show extends Backbone.View @panel = options.panel @operators = options.operators @spot = options.spot + + @header = new Pettanr.Views.Panel.ShowModule.Header({ + item: @panel, + operators: @operators, + caption: @panel.get('caption'), + icon_url: @panel.show_url(), + caption_url: @panel.show_url(), + prof_url: @panel.prof_url() + }) @body = new Pettanr.Views.Panel.Body({ panel: @panel, operators: @operators, spot: @spot }) - @credits = new Pettanr.Views.Panel.Show.Credits({panel: @panel}) + @footer = new Pettanr.Views.Panel.Footer({ + panel: @panel, + operators: @operators + }) + @credits = new Pettanr.Views.Panel.ShowModule.Credits({ + pictures: @panel.licensed_pictures() + }) + @listenTo(@header, 'click:pick', @click_pick) + @listenTo(@header, 'click:icon', @click_show) + @listenTo(@header, 'click:caption', @click_show) + @listenTo(@header, 'click:prof', @click_prof) + @listenTo(@footer, 'click:panel', @click_show) + @listenTo(@footer, 'click:author', @click_author) + @listenTo(@footer, 'click:edit', @click_edit) + @listenTo(@credits, 'click:credit:icon', @click_credit_icon) render: () -> this.$el.html('') + this.$el.append(@header.render().el) this.$el.append(@body.render().el) + this.$el.append(@footer.render().el) this.$el.append(@credits.render().el) rb = new Tag.RowBreak() this.$el.append(rb.render().el) this -class Pettanr.Views.Panel.Show.Credits extends Backbone.View + click_show: () -> + @trigger('http_get', @panel.show_url()) + + click_author: () -> + @trigger('http_get', @panel.author().show_url()) + + click_edit: () -> + @trigger('http_get', @panel.edit_url()) + + click_prof: () -> + @trigger('http_get', @panel.prof_url()) + + click_credit_icon: (item) -> + @trigger('http_get', item.show_url()) + + click_pick: () -> + @trigger('pick', @item) + + is_pickable: () -> + true + + add_pick: (target_model) -> + @header.add_pick(target_model) + +class Pettanr.Views.Panel.ShowModule +class Pettanr.Views.Panel.ShowModule.Header extends Pettanr.Views.Show.Header + + initialize: (options) -> + super(options) + +class Pettanr.Views.Panel.ShowModule.Credits extends Backbone.View tagName: 'div' className: 'credits' initialize: (options) -> - @panel = options.panel - @pictures = @panel.licensed_pictures() + @pictures = options.pictures + @credited = {} render: () -> - _this = this this.$el.html('') - _.each @pictures, (picture) -> - picture.fetch().done -> - credit = picture.credit_view() - _this.$el.append(credit.render().el) + _.each @pictures, (picture, pid) => + @add_picture(picture) this + add_picture: (picture) -> + + add_picture: (picture) -> + pid = picture.get('id') + if not @credited[pid] + picture.fetch({cache: true}).done => + @credited[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) + + click_pick: () -> + @trigger('pick', @item) + + is_pickable: () -> + true + + add_pick: (target_model) -> + @header.add_pick(target_model) +