OSDN Git Service

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