OSDN Git Service

merge
[pettanr/pettanr.git] / app / assets / javascripts / views / layout.js.coffee
1 class Pettanr.ViewPicker extends Backbone.View\r
2   initialize: (options) ->\r
3     @operators = options.operators\r
4     _.extend(this, Backbone.Events)\r
5     _.extend(this, Pettanr.Views.Layout.ControllerManager.prototype)\r
6     @local_router = new Pettanr.LocalRouter()\r
7     @listenTo(@local_router, 'fire', @fire)\r
8   \r
9   navigate: (url) ->\r
10     @local_router.navigate(url, true)\r
11   \r
12   fire: (params) ->\r
13     controller = Pettanr.AppController.new2(params, @operators)\r
14     @add_listener(controller, this)\r
15     action_name = params['action']\r
16     controller[action_name]()\r
17   \r
18   retitle: (params, str = null) ->\r
19     @trigger('retitle', params, str = null)\r
20   \r
21   refresh: (view) ->\r
22     @trigger('ready', view)\r
23   \r
24   redirect_to: (url) ->\r
25     @trigger('redirect', url)\r
26   \r
27 class Pettanr.Views.Layout\r
28 class Pettanr.Views.Layout.ControllerManager\r
29   \r
30   add_listener: (controller, self) ->\r
31     self.listenTo(controller, 'ready', self.refresh)\r
32     self.listenTo(controller, 'retitle', self.retitle)\r
33     self.listenTo(controller, 'block', self.block)\r
34     self.listenTo(controller, 'redirect', self.redirect_to)\r
35   \r
36 class Pettanr.Views.Layout.Base extends Backbone.View\r
37   tagName: 'div'\r
38   className: 'layout-base'\r
39   \r
40   initialize: (options) ->\r
41     _.extend(this, Pettanr.Views.Layout.ControllerManager.prototype)\r
42     @operators = new Pettanr.Operator({})\r
43     # router for refresh body\r
44     @global_router = new Pettanr.BodyRouter()\r
45     # router for refresh body. but not replace url\r
46     @local_router = new Pettanr.LocalRouter()\r
47     # router for refresh header\r
48     @header_router = new Pettanr.LocalRouter()\r
49     @listenTo(@global_router, 'fire', @fire_for_body)\r
50     @listenTo(@local_router, 'fire', @fire_for_body)\r
51     @listenTo(@header_router, 'fire', @fire_for_header)\r
52     @header = new (@header_class())({parent: this})\r
53     @body = new (@body_class())({parent: this})\r
54     @footer = new (@footer_class())({parent: this})\r
55   \r
56   render: () ->\r
57     this.$el.html('')\r
58     this.$el.append(@header.render().el)\r
59     this.$el.append(@body.render().el)\r
60     this.$el.append(@footer.render().el)\r
61     this\r
62   \r
63   fire: (params) ->\r
64     controller = Pettanr.AppController.new2(params, @operators)\r
65     @add_listener(controller, this)\r
66     action_name = params['action']\r
67     controller[action_name]()\r
68   \r
69   start: () ->\r
70     # check current user signed in?\r
71     # callback sign_in_success from users controller if signed in\r
72     @test()\r
73   \r
74   test: () ->\r
75     @user = new Pettanr.User.Session()\r
76     @listenTo(@user, 'sign_in:success', @sign_in_success)\r
77     @listenTo(@user, 'sign_in:fail', @sign_in_fail)\r
78     @user.save({})\r
79   \r
80   fire_for_header: (params) ->\r
81     @fire(params, @refresh_header)\r
82   \r
83   fire_for_body: (params) ->\r
84     @fire(params)\r
85   \r
86   init_operators: (user) ->\r
87     author = new Pettanr.Author(user.get('author')) if user.get('author')\r
88     artist = new Pettanr.Artist(user.get('artist')) if user.get('artist')\r
89     @operators.init({\r
90       user: user, \r
91       author: author, \r
92       artist: artist\r
93     })\r
94   \r
95   sign_in: () ->\r
96     false\r
97   \r
98   sign_in_success: (user, response) ->\r
99     @init_operators(user)\r
100   \r
101   sign_in_fail: (user, response) ->\r
102     false\r
103   \r
104   reset_operators: () ->\r
105     @operators.init({\r
106       user: null, \r
107       author: null, \r
108       artist: null\r
109     })\r
110   \r
111   sign_out: () ->\r
112     false\r
113   \r
114   sign_out_success: (user, response) ->\r
115     @reset_operators()\r
116   \r
117   sign_out_fail: (user, response) ->\r
118     false\r
119   \r
120   retitle: (params, str = null) ->\r
121     t = str || I18n.t(params['controller'] + '.' + params['action'] + '.title')\r
122     site_caption = _.escape(Manifest.manifest().magic_numbers.profile.users.caption)\r
123     $(document).attr('title', t + ' - ' + site_caption)\r
124   \r
125   refresh_header: (view) ->\r
126     @header.refresh(view)\r
127   \r
128   refresh_body: (view) ->\r
129     @body.refresh(view)\r
130   \r
131   refresh: (view) ->\r
132     @body.refresh(view)\r
133   \r
134   block: () ->\r
135     true\r
136   \r
137   redirect_to: (url, return_params, refresh_function) ->\r
138     redirect_params = Pettanr.LocalRouter.url_to_params(redirect_url)\r
139     @fire(redirect_params, refresh_function)\r
140   \r
141   header_class: () ->\r
142     null\r
143   \r
144   body_class: () ->\r
145     null\r
146   \r
147   footer_class: () ->\r
148     null\r
149   \r
150 class Pettanr.Views.Layout.Sns extends Pettanr.Views.Layout.Base\r
151   className: 'layout-sns'\r
152   \r
153   initialize: (options) ->\r
154     super(options)\r
155     @listenTo(@header, 'navigate', @header_navigate)\r
156     @listenTo(@header, 'sign_in', @sign_in)\r
157     @listenTo(@header, 'sign_out', @sign_out)\r
158     @listenTo(@body, 'navigate', @body_navigate)\r
159     @listenTo(@body, 'retitle', @retitle)\r
160     @listenTo(@body, 'sign_in', @sign_in)\r
161     @listenTo(@body, 'sign_out', @sign_out)\r
162   \r
163   start: () ->\r
164     # initial page\r
165     super()\r
166   \r
167   sign_in: (attr) ->\r
168     @user = new Pettanr.User.Session(attr)\r
169     @listenTo(@user, 'sign_in:success', @sign_in_success)\r
170     @listenTo(@user, 'sign_in:fail', @sign_in_fail)\r
171     @user.save({})\r
172   \r
173   sign_in_success: (user, response) ->\r
174     super(user, response)\r
175     # navigate users/account\r
176     # callback from fire to refresh_header\r
177     @header.fire({controller: 'users', action: 'account'})\r
178     # navigate home\r
179     # callback from fire to refresh_body\r
180     @body.fire({controller: 'folders', action: 'root'})\r
181   \r
182   sign_in_fail: (user, response) ->\r
183     super(user, response)\r
184     @header.fire({controller: 'users', action: 'guest'})\r
185     @body.fire({controller: 'user_sessions', action: 'new'})\r
186   \r
187   sign_out: () ->\r
188     @user = new Pettanr.User.Session()\r
189     @listenTo(@user, 'sign_out:success', @sign_out_success)\r
190     @listenTo(@user, 'sign_out:fail', @sign_out_fail)\r
191     @user.destroy()\r
192   \r
193   sign_out_success: (user, response) ->\r
194     super(user, response)\r
195     @global_router.navigate('', {trigger: false}, @operators)\r
196     ## navigate users/guest\r
197     ## callback from fire to refresh_header\r
198     @header.fire({controller: 'users', action: 'guest'})\r
199     ## navigate sign in form\r
200     ## callback from fire to refresh_body\r
201     @body.fire({controller: 'user_sessions', action: 'new'})\r
202   \r
203   sign_out_fail: (user, response) ->\r
204     super(user, response)\r
205   \r
206   block: () ->\r
207     super()\r
208     @header_router.navigate('users/guest')\r
209     @body.fire({controller: 'user_sessions', action: 'new'})\r
210   \r
211   header_navigate: (url) ->\r
212     @global_router.navigate(url, {trigger: true}, @operators)\r
213   \r
214   body_navigate: (url) ->\r
215     @global_router.navigate(url, {trigger: false}, @operators)\r
216   \r
217   header_class: () ->\r
218     Pettanr.Views.Layout.Sns.Header\r
219   \r
220   body_class: () ->\r
221     Pettanr.Views.Layout.Sns.Body\r
222   \r
223   footer_class: () ->\r
224     Pettanr.Views.Layout.Sns.Footer\r
225   \r
226 class Pettanr.Views.Layout.Blog extends Pettanr.Views.Layout.Base\r
227   className: 'layout-blog'\r
228   \r
229   start: () ->\r
230     # initial page\r
231     @router.navigate('users/sign_in')\r
232     @header.navigate('users/guest')\r
233     @body.navigate('top/demo')\r
234   \r
235   sign_in_fail: (user, response) ->\r
236     view = new Pettanr.Views.UserSeeeion.New({\r
237       operators: @operators\r
238     })\r
239     view.render()\r
240     @body.navigate('top/demo')\r
241   \r
242   header_class: () ->\r
243     Pettanr.Views.Layout.Blog.Header\r
244   \r
245   body_class: () ->\r
246     Pettanr.Views.Layout.Blog.Body\r
247   \r
248   footer_class: () ->\r
249     Pettanr.Views.Layout.Blog.Footer\r
250   \r