-class Pettanr.ViewPicker extends Backbone.View\r
- initialize: (options) ->\r
- @operators = options.operators\r
- _.extend(this, Backbone.Events)\r
- _.extend(this, Pettanr.Views.Layout.ControllerManager.prototype)\r
- @local_router = new Pettanr.LocalRouter()\r
- @listenTo(@local_router, 'fire', @fire)\r
- \r
- navigate: (url) ->\r
- @local_router.navigate(url, true)\r
- \r
- fire: (params) ->\r
- controller = Pettanr.AppController.new2(params, @operators)\r
- @add_listener(controller, this)\r
- action_name = params['action']\r
- controller[action_name]()\r
- \r
- retitle: (params, str = null) ->\r
- @trigger('retitle', params, str = null)\r
- \r
- refresh: (view) ->\r
- @trigger('ready', view)\r
- \r
- redirect_to: (url) ->\r
- @trigger('redirect', url)\r
- \r
class Pettanr.Views.Layout\r
-class Pettanr.Views.Layout.ControllerManager\r
- \r
- add_listener: (controller, self) ->\r
- self.listenTo(controller, 'ready', self.refresh)\r
- self.listenTo(controller, 'retitle', self.retitle)\r
- self.listenTo(controller, 'block', self.block)\r
- self.listenTo(controller, 'redirect', self.redirect_to)\r
- \r
class Pettanr.Views.Layout.Base extends Backbone.View\r
- tagName: 'div'\r
- className: 'layout-base'\r
+ \r
+class Pettanr.Views.Layout.Sns extends Pettanr.Views.Layout.Base\r
+ className: 'layout-sns'\r
\r
initialize: (options) ->\r
- _.extend(this, Pettanr.Views.Layout.ControllerManager.prototype)\r
@operators = new Pettanr.Operator({})\r
- # router for refresh body\r
- @global_router = new Pettanr.BodyRouter()\r
- # router for refresh body. but not replace url\r
- @local_router = new Pettanr.LocalRouter()\r
- # router for refresh header\r
- @header_router = new Pettanr.LocalRouter()\r
- @listenTo(@global_router, 'fire', @fire_for_body)\r
- @listenTo(@local_router, 'fire', @fire_for_body)\r
- @listenTo(@header_router, 'fire', @fire_for_header)\r
- @header = new (@header_class())({parent: this})\r
- @body = new (@body_class())({parent: this})\r
- @footer = new (@footer_class())({parent: this})\r
+ @global_router = new Pettanr.GlobalRouter({operators: @operators})\r
+ @listenTo(@global_router, 'go', @body_get)\r
+ @gate = new Pettanr.BeforeUnload()\r
+ @header = new Pettanr.Views.Layout.Sns.Header({parent: this})\r
+ @history = new Pettanr.Views.History({parent: this})\r
+ @listenTo(@history, 'http_get', @body_http_get)\r
+ @listenTo(@history, 'get', @body_get)\r
+ @body = new Pettanr.Views.Layout.Sns.Body({parent: this})\r
+ @footer = new Pettanr.Views.Layout.Sns.Footer({parent: this})\r
\r
render: () ->\r
this.$el.html('')\r
this.$el.append(@header.render().el)\r
+ this.$el.append(@history.render().el)\r
+ rb = new Tag.RowBreak()\r
+ this.$el.append(rb.render().el)\r
this.$el.append(@body.render().el)\r
this.$el.append(@footer.render().el)\r
this\r
\r
- fire: (params) ->\r
- controller = Pettanr.AppController.new2(params, @operators)\r
- @add_listener(controller, this)\r
- action_name = params['action']\r
- controller[action_name]()\r
- \r
- start: () ->\r
- # check current user signed in?\r
- # callback sign_in_success from users controller if signed in\r
- @test()\r
- \r
- test: () ->\r
- @user = new Pettanr.User.Session()\r
- @listenTo(@user, 'sign_in:success', @sign_in_success)\r
- @listenTo(@user, 'sign_in:fail', @sign_in_fail)\r
- @user.save({})\r
- \r
- fire_for_header: (params) ->\r
- @fire(params, @refresh_header)\r
- \r
- fire_for_body: (params) ->\r
- @fire(params)\r
- \r
init_operators: (user) ->\r
author = new Pettanr.Author(user.get('author')) if user.get('author')\r
artist = new Pettanr.Artist(user.get('artist')) if user.get('artist')\r
author: author, \r
artist: artist\r
})\r
- \r
- sign_in: () ->\r
- false\r
- \r
- sign_in_success: (user, response) ->\r
- @init_operators(user)\r
- \r
- sign_in_fail: (user, response) ->\r
- false\r
+ @global_router.operators = @operators\r
\r
reset_operators: () ->\r
@operators.init({\r
author: null, \r
artist: null\r
})\r
+ @global_router.operators = @operators\r
\r
- sign_out: () ->\r
- false\r
+ start: () ->\r
+ # check current user signed in?\r
+ proxy = new Pettanr.Proxy({operators: @operators})\r
+ @listenTo(proxy, 'redirect', @test_redirect)\r
+ # @listenTo(proxy, 'success', @test_ok)\r
+ @listenTo(proxy, 'fail', @test_ng)\r
+ @listenTo(proxy, 'sign_in', @sign_in)\r
+ proxy.http_post('users/test')\r
+ \r
+ test_ok: (user, response) ->\r
+ @history.enable()\r
+ \r
+ test_ng: (response) ->\r
+ @history.disable()\r
+ @head_http_get('users/guest')\r
+ @body_http_get('user_sessions/new')\r
+ \r
+ test_redirect: (url) ->\r
+ proxy = @getter_proxy()\r
+ @stopListening(proxy, 'done') # ignore global routing\r
+ @stopListening(proxy, 'title', @push_history) # ignore push_history\r
+ proxy.http_get(url, null)\r
+ \r
+ sign_in: (user) ->\r
+ @init_operators(user)\r
+ @head_http_get('users/account')\r
+ @history.enable()\r
\r
- sign_out_success: (user, response) ->\r
+ sign_out: () ->\r
@reset_operators()\r
+ @head_http_get('users/guest')\r
+ @history.disable()\r
\r
- sign_out_fail: (user, response) ->\r
- false\r
+ head_http_get: (url) ->\r
+ proxy = new Pettanr.Proxy({operators: @operators})\r
+ @listenTo(proxy, 'ready', @head_ready)\r
+ proxy.http_get(url, null)\r
\r
- retitle: (params, str = null) ->\r
- t = str || I18n.t(params['controller'] + '.' + params['action'] + '.title')\r
- site_caption = _.escape(Manifest.manifest().magic_numbers.profile.users.caption)\r
- $(document).attr('title', t + ' - ' + site_caption)\r
- \r
- refresh_header: (view) ->\r
+ head_ready: (view) ->\r
+ @listenTo(view, 'http_get', @body_http_get)\r
+ @listenTo(view, 'http_post', @body_http_post)\r
@header.refresh(view)\r
\r
- refresh_body: (view) ->\r
+ getter_proxy: () ->\r
+ proxy = new Pettanr.Proxy({operators: @operators, gate: @gate})\r
+ @listenTo(proxy, 'ready', @body_ready)\r
+ @listenTo(proxy, 'title', @body_title)\r
+ @listenTo(proxy, 'title', @push_history)\r
+ @listenTo(proxy, 'done', @body_done)\r
+ @listenTo(proxy, 'lock', @body_lock)\r
+ @listenTo(proxy, 'unlock', @body_unlock)\r
+ proxy\r
+ \r
+ body_http_get: (url, form) ->\r
+ @getter_proxy().http_get(url, form)\r
+ \r
+ body_get: (params, form) ->\r
+ @getter_proxy().get(params, form)\r
+ \r
+ body_ready: (view) ->\r
+ @listenTo(view, 'http_get', @body_http_get)\r
+ @listenTo(view, 'http_post', @body_http_post)\r
@body.refresh(view)\r
\r
- refresh: (view) ->\r
- @body.refresh(view)\r
+ body_done: (params) ->\r
+ url = Pettanr.params_to_url(params)\r
+ @global_router.navigate(url, {trigger: false})\r
\r
- block: () ->\r
- true\r
+ push_history: (params, str = null) ->\r
+ @history.push(params, str)\r
\r
- redirect_to: (url, return_params, refresh_function) ->\r
- redirect_params = Pettanr.LocalRouter.url_to_params(redirect_url)\r
- @fire(redirect_params, refresh_function)\r
- \r
- header_class: () ->\r
- null\r
- \r
- body_class: () ->\r
- null\r
- \r
- footer_class: () ->\r
- null\r
+ body_title: (params, str = null) ->\r
+ t = str || I18n.t(params['controller'] + '.' + params['action'] + '.title')\r
+ site_caption = _.escape(Manifest.manifest().magic_numbers.profile.users.caption)\r
+ $(document).attr('title', t + ' - ' + site_caption)\r
\r
-class Pettanr.Views.Layout.Sns extends Pettanr.Views.Layout.Base\r
- className: 'layout-sns'\r
+ poster_proxy: () ->\r
+ proxy = new Pettanr.Proxy({operators: @operators})\r
+ @listenTo(proxy, 'success', @body_success)\r
+ @listenTo(proxy, 'fail', @body_fail)\r
+ @listenTo(proxy, 'redirect', @body_redirect)\r
+ @listenTo(proxy, 'sign_in', @sign_in)\r
+ @listenTo(proxy, 'sign_out', @sign_out)\r
+ @listenTo(proxy, 'unlock', @body_unlock)\r
+ proxy\r
\r
- initialize: (options) ->\r
- super(options)\r
- @listenTo(@header, 'navigate', @header_navigate)\r
- @listenTo(@header, 'sign_in', @sign_in)\r
- @listenTo(@header, 'sign_out', @sign_out)\r
- @listenTo(@body, 'navigate', @body_navigate)\r
- @listenTo(@body, 'retitle', @retitle)\r
- @listenTo(@body, 'sign_in', @sign_in)\r
- @listenTo(@body, 'sign_out', @sign_out)\r
+ body_http_post: (url, form) ->\r
+ @poster_proxy().http_post(url, form)\r
\r
- start: () ->\r
- # initial page\r
- super()\r
- \r
- sign_in: (attr) ->\r
- @user = new Pettanr.User.Session(attr)\r
- @listenTo(@user, 'sign_in:success', @sign_in_success)\r
- @listenTo(@user, 'sign_in:fail', @sign_in_fail)\r
- @user.save({})\r
- \r
- sign_in_success: (user, response) ->\r
- super(user, response)\r
- # navigate users/account\r
- # callback from fire to refresh_header\r
- @header.fire({controller: 'users', action: 'account'})\r
- # navigate home\r
- # callback from fire to refresh_body\r
- @body.fire({controller: 'folders', action: 'root'})\r
+ body_post: (params, form) ->\r
+ @poster_proxy().post(params, form)\r
\r
- sign_in_fail: (user, response) ->\r
- super(user, response)\r
- @header.fire({controller: 'users', action: 'guest'})\r
- @body.fire({controller: 'user_sessions', action: 'new'})\r
+ body_success: (url) ->\r
+ \r
\r
- sign_out: () ->\r
- @user = new Pettanr.User.Session()\r
- @listenTo(@user, 'sign_out:success', @sign_out_success)\r
- @listenTo(@user, 'sign_out:fail', @sign_out_fail)\r
- @user.destroy()\r
- \r
- sign_out_success: (user, response) ->\r
- super(user, response)\r
- @global_router.navigate('', {trigger: false}, @operators)\r
- ## navigate users/guest\r
- ## callback from fire to refresh_header\r
- @header.fire({controller: 'users', action: 'guest'})\r
- ## navigate sign in form\r
- ## callback from fire to refresh_body\r
- @body.fire({controller: 'user_sessions', action: 'new'})\r
- \r
- sign_out_fail: (user, response) ->\r
- super(user, response)\r
- \r
- block: () ->\r
- super()\r
- @header_router.navigate('users/guest')\r
- @body.fire({controller: 'user_sessions', action: 'new'})\r
- \r
- header_navigate: (url) ->\r
- @global_router.navigate(url, {trigger: true}, @operators)\r
- \r
- body_navigate: (url) ->\r
- @global_router.navigate(url, {trigger: false}, @operators)\r
+ body_fail: (url) ->\r
+ \r
\r
- header_class: () ->\r
- Pettanr.Views.Layout.Sns.Header\r
+ body_redirect: (url) ->\r
+ @global_router.navigate(url)\r
+ @getter_proxy().http_get(url)\r
\r
- body_class: () ->\r
- Pettanr.Views.Layout.Sns.Body\r
+ body_lock: (params, form) ->\r
+ @gate.lock(params, form)\r
\r
- footer_class: () ->\r
- Pettanr.Views.Layout.Sns.Footer\r
+ body_unlock: (params, form) ->\r
+ @gate.unlock()\r
\r
class Pettanr.Views.Layout.Blog extends Pettanr.Views.Layout.Base\r
className: 'layout-blog'\r