OSDN Git Service

operator move to cache
[pettanr/pettanr.git] / app / assets / javascripts / views / scrolls / play.js.coffee
1 class Pettanr.Views.Scroll.PlayModule\r
2 class Pettanr.Views.Scroll.PlayModule.Header extends Pettanr.Views.Show.Header\r
3   \r
4   initialize: (options) ->\r
5     super(options)\r
6   \r
7 class Pettanr.Views.Scroll.PlayModule.Owner extends Pettanr.Views.Show.Owner\r
8   \r
9   initialize: (options) ->\r
10     super(options)\r
11   \r
12 class Pettanr.Views.Scroll.PlayModule.Footer extends Backbone.View\r
13   tagName: 'table'\r
14   className: 'no-border'\r
15   \r
16   initialize: (options) ->\r
17     @panel = options.panel\r
18     @scroll_panel = options.scroll_panel\r
19   \r
20   render: () ->\r
21     this.$el.html('')\r
22     this.$el.append(\r
23       (new Pettanr.Views.Panel.Icon({item: @panel, half: true})).render().el\r
24     )\r
25     this.$el.append(\r
26       (new Pettanr.Views.Author.Icon({item: @panel.author(), half: true})).render().el\r
27     )\r
28     this.$el.append(Pettanr.AppHelper.distance_of_time_in_words_to_now(@panel.get('updated_at')))\r
29     #\r
30     this.$el.append(\r
31       (new Pettanr.Views.Panel.Icon({item: @scroll_panel, half: true})).render().el\r
32     )\r
33     this.$el.append(\r
34       (new Pettanr.Views.Author.Icon({item: @panel.author(), half: true})).render().el\r
35     )\r
36     this.$el.append(Pettanr.AppHelper.distance_of_time_in_words_to_now(@scroll_panel.get('updated_at')))\r
37     #\r
38     if @panel.is_own()\r
39       this.$el.append('')\r
40     this\r
41   \r
42 class Pettanr.Views.Scroll.PlayModule.Credits extends Backbone.View\r
43   tagName: 'div'\r
44   className: 'credits'\r
45   \r
46   initialize: (options) ->\r
47     @parent = options.parent\r
48     @licensed_pictures = {}\r
49   \r
50   render: () ->\r
51     this.$el.html('')\r
52     this\r
53   \r
54   push: (retrievers) ->\r
55     _.each retrievers, (retriever) =>\r
56       @listenTo(retriever, 'retrieve', @retrieve_picture)\r
57       retriever.retrieve()\r
58   \r
59   retrieve_picture: (picture) ->\r
60     pid = picture.get('id')\r
61     return if @licensed_pictures[pid]\r
62     @licensed_pictures[pid] = picture\r
63     credit = picture.credit_view()\r
64     this.$el.append(credit.render().el)\r
65   \r
66 class Pettanr.Views.Scroll.PlayModule.Panel extends Backbone.View\r
67   tagName: 'div'\r
68   \r
69   initialize: (options) ->\r
70     @scroll_panel = options.scroll_panel\r
71   \r
72   clear: () ->\r
73     this.$el.html('')\r
74     retriever = @scroll_panel.panel()\r
75     @listenTo(retriever, 'retrieve', @retrieve_panel)\r
76     retriever.retrieve()\r
77     this\r
78   \r
79   retrieve_panel: (@panel) ->\r
80     @render()\r
81   \r
82   render: () ->\r
83     this.$el.html('')\r
84     @panel = @panel.with_elements() # retake panel for 'with_elements' mode\r
85     @panel.fetch({cache: true}).done =>\r
86       @panel.attributes = @panel.replaced_attributes()\r
87       body = new Pettanr.Views.Panel.Body({\r
88         panel: @panel,\r
89         spot: null\r
90       })\r
91       footer = new Pettanr.Views.Panel.Footer({\r
92         scroll_panel: @scroll_panel,\r
93         panel: @panel,\r
94       })\r
95       @listenTo(footer, 'click:panel', @click_show)\r
96       @listenTo(footer, 'click:author', @click_author)\r
97       @listenTo(footer, 'click:edit', @click_edit)\r
98       this.$el.append(body.render().el)\r
99       this.$el.append(footer.render().el)\r
100       @trigger('ready', @panel)\r
101     this\r
102   \r
103   click_show: () ->\r
104     @trigger('http_get', @panel.show_url())\r
105   \r
106   click_author: () ->\r
107     @trigger('http_get', @panel.author().show_url())\r
108   \r
109   click_edit: () ->\r
110     @trigger('http_get', @panel.edit_url())\r
111   \r
112 class Pettanr.Views.Scroll.PlayModule.Panels extends Backbone.View\r
113   tagName: 'div'\r
114   \r
115   initialize: (options) ->\r
116     @parent = options.parent\r
117     @items = options.items\r
118     @credits = options.credits\r
119   \r
120   render: () ->\r
121     this.$el.html('')\r
122     _.each @items, (scroll_panel) =>\r
123       return if not scroll_panel.has_panel()\r
124       panel_view = new Pettanr.Views.Scroll.PlayModule.Panel({\r
125         scroll_panel: scroll_panel,\r
126       })\r
127       @listenTo(panel_view, 'ready', @ready)\r
128       this.$el.append(panel_view.clear().el)\r
129     this\r
130   \r
131   ready: (panel) ->\r
132     this.credits.push(panel.licensed_pictures())\r
133   \r
134 class Pettanr.Views.Scroll.PlayModule.Body extends Backbone.View\r
135   tagName: 'div'\r
136   \r
137   initialize: (options) ->\r
138     @parent = options.parent\r
139     @list = options.list\r
140     @items = @list.items()\r
141     if @items.length < 1\r
142       @render_empty()\r
143     else\r
144       @render()\r
145   \r
146   render_empty: () ->\r
147     this.$el.html('')\r
148     this.$el.append((new Tag.H2({content: I18n.t('scrolls.play.empty')})).render().el)\r
149     this\r
150   \r
151   render: () ->\r
152     this.$el.html('')\r
153     # paginate(@pager)\r
154     credits = new Pettanr.Views.Scroll.PlayModule.Credits({parent: this})\r
155     panels = new Pettanr.Views.Scroll.PlayModule.Panels({\r
156       parent: this,\r
157       items: @items,\r
158       credits: credits,\r
159     })\r
160     @listenTo(credits, 'click:credit:icon', @click_credit_icon)\r
161     this.$el.append(panels.render().el)\r
162     this.$el.append(credits.render().el)\r
163     rb = new Tag.RowBreak()\r
164     this.$el.append(rb.render().el)\r
165     # paginate(@pager)\r
166     this\r
167   \r
168   click_credit_icon: (item) ->\r
169     @trigger('http_get', item.show_url())\r
170   \r
171 class Pettanr.Views.Scroll.Play extends Backbone.View\r
172   tagName: 'div'\r
173   className: 'show'\r
174   \r
175   initialize: (options) ->\r
176     @item = options.item\r
177     @list = options.list\r
178     icon_url = Pettanr.url(@item.table_name(), 'show', {id: @item.get('id')})\r
179     caption_url = Pettanr.url(@item.table_name(), 'play', {id: @item.get('id')})\r
180     prof_url = Pettanr.url(@item.table_name(), 'show', {id: @item.get('id'), format: 'prof'})\r
181     @header = new Pettanr.Views.Scroll.PlayModule.Header({\r
182       item: @item, \r
183       caption: @item.get('title'), \r
184       icon_url: icon_url,\r
185       caption_url: caption_url,\r
186       prof_url: prof_url\r
187     })\r
188     @author = new Pettanr.Views.Show.HeaderAuthor({item: @item})\r
189     @body = new Pettanr.Views.Scroll.PlayModule.Body({\r
190       parent: this,\r
191       list: @list, \r
192     })\r
193     @owner = new Pettanr.Views.Scroll.PlayModule.Owner({item: @item})\r
194     @listenTo(@header, 'click:pick', @click_pick)\r
195     @listenTo(@header, 'click:icon', @click_show)\r
196     @listenTo(@header, 'click:caption', @click_show)\r
197     @listenTo(@header, 'click:prof', @click_prof)\r
198   \r
199   render: () ->\r
200     this.$el.html('')\r
201     this.$el.append(@header.render().el)\r
202     this.$el.append(@author.render().el)\r
203     this.$el.append(@body.render().el)\r
204     this.$el.append(@owner.render().el) if @item.is_own()\r
205     this\r
206   \r