OSDN Git Service

fix gate
[pettanr/pettanr.git] / app / assets / javascripts / views / layout.js.coffee
index 8b57faf..aff7337 100644 (file)
@@ -1,83 +1,31 @@
-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
 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, 'sign_in:success', self.sign_in_success)\r
-    self.listenTo(controller, 'sign_in:fail', self.sign_in_fail)\r
-    self.listenTo(controller, 'sign_out:success', self.sign_out_success)\r
-    self.listenTo(controller, 'sign_out:fail', self.sign_out_fail)\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.GlobalRouter()\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
-    @local_router.navigate('users/test')\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
@@ -86,15 +34,7 @@ class Pettanr.Views.Layout.Base extends Backbone.View
       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
@@ -102,121 +42,115 @@ class Pettanr.Views.Layout.Base extends Backbone.View
       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
-  \r
-  block: () ->\r
-    true\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
+  body_done: (params) ->\r
+    url = Pettanr.params_to_url(params)\r
+    @global_router.navigate(url, {trigger: false})\r
   \r
-  body_class: () ->\r
-    null\r
+  push_history: (params, str = null) ->\r
+    @history.push(params, str)\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(@header, 'sign_in:success', @sign_in_success)\r
-    @listenTo(@header, 'sign_in:fail', @sign_in_fail)\r
-    @listenTo(@header, 'sign_out:success', @sign_out_success)\r
-    @listenTo(@header, 'sign_out:fail', @sign_out_fail)\r
-    @listenTo(@body, 'navigate', @body_navigate)\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
-    @header.fire({controller: 'users', action: 'sign_out'})\r
-  \r
-  sign_out_success: (user, response) ->\r
-    super(user, response)\r
-    @global_router.navigate('')\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
-    @local_router.navigate('user_seeeions/new')\r
-  \r
-  header_navigate: (url) ->\r
-    @global_router.navigate(url, true)\r
-  \r
-  body_navigate: (url) ->\r
-    @global_router.navigate(url, {trigger: false})\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