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
10 @local_router.navigate(url, true)
\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
18 retitle: (params, str = null) ->
\r
19 @trigger('retitle', params, str = null)
\r
22 @trigger('ready', view)
\r
24 redirect_to: (url) ->
\r
25 @trigger('redirect', url)
\r
27 class Pettanr.Views.Layout
\r
28 class Pettanr.Views.Layout.ControllerManager
\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
36 class Pettanr.Views.Layout.Base extends Backbone.View
\r
38 className: 'layout-base'
\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
58 this.$el.append(@header.render().el)
\r
59 this.$el.append(@body.render().el)
\r
60 this.$el.append(@footer.render().el)
\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
70 # check current user signed in?
\r
71 # callback sign_in_success from users controller if signed in
\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
80 fire_for_header: (params) ->
\r
81 @fire(params, @refresh_header)
\r
83 fire_for_body: (params) ->
\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
98 sign_in_success: (user, response) ->
\r
99 @init_operators(user)
\r
101 sign_in_fail: (user, response) ->
\r
104 reset_operators: () ->
\r
114 sign_out_success: (user, response) ->
\r
117 sign_out_fail: (user, response) ->
\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
125 refresh_header: (view) ->
\r
126 @header.refresh(view)
\r
128 refresh_body: (view) ->
\r
129 @body.refresh(view)
\r
132 @body.refresh(view)
\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
141 header_class: () ->
\r
147 footer_class: () ->
\r
150 class Pettanr.Views.Layout.Sns extends Pettanr.Views.Layout.Base
\r
151 className: 'layout-sns'
\r
153 initialize: (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
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
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
179 # callback from fire to refresh_body
\r
180 @body.fire({controller: 'folders', action: 'root'})
\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
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
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
203 sign_out_fail: (user, response) ->
\r
204 super(user, response)
\r
208 @header_router.navigate('users/guest')
\r
209 @body.fire({controller: 'user_sessions', action: 'new'})
\r
211 header_navigate: (url) ->
\r
212 @global_router.navigate(url, {trigger: true}, @operators)
\r
214 body_navigate: (url) ->
\r
215 @global_router.navigate(url, {trigger: false}, @operators)
\r
217 header_class: () ->
\r
218 Pettanr.Views.Layout.Sns.Header
\r
221 Pettanr.Views.Layout.Sns.Body
\r
223 footer_class: () ->
\r
224 Pettanr.Views.Layout.Sns.Footer
\r
226 class Pettanr.Views.Layout.Blog extends Pettanr.Views.Layout.Base
\r
227 className: 'layout-blog'
\r
231 @router.navigate('users/sign_in')
\r
232 @header.navigate('users/guest')
\r
233 @body.navigate('top/demo')
\r
235 sign_in_fail: (user, response) ->
\r
236 view = new Pettanr.Views.UserSeeeion.New({
\r
237 operators: @operators
\r
240 @body.navigate('top/demo')
\r
242 header_class: () ->
\r
243 Pettanr.Views.Layout.Blog.Header
\r
246 Pettanr.Views.Layout.Blog.Body
\r
248 footer_class: () ->
\r
249 Pettanr.Views.Layout.Blog.Footer
\r