OSDN Git Service

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