OSDN Git Service

fix gate
authoryasushiito <yas@pen-chan.jp>
Fri, 20 Mar 2015 02:50:20 +0000 (11:50 +0900)
committeryasushiito <yas@pen-chan.jp>
Fri, 20 Mar 2015 02:50:20 +0000 (11:50 +0900)
app/assets/javascripts/controllers.js.coffee
app/assets/javascripts/controllers/panels.js.coffee
app/assets/javascripts/pettanr/proxy.js.coffee
app/assets/javascripts/routes.js.coffee
app/assets/javascripts/views/layout.js.coffee

index 15b1be8..76c542f 100644 (file)
@@ -1,11 +1,11 @@
 class Pettanr.AppController\r
   \r
-  constructor: (@params, @form, @operators) ->\r
+  constructor: (@params, @form, @operators, @gate) ->\r
     _.extend(this, Backbone.Events)\r
   \r
-  @new2: (params, form, operators) ->\r
+  @new2: (params, form, operators, gate) ->\r
     c = Pettanr[Pettanr.camelize(params['controller']) + 'Controller']\r
-    new c(params, form, operators)\r
+    new c(params, form, operators, gate)\r
   \r
   set_model: () ->\r
     @my_controller = Manifest.manifest().controllers[@params['controller']]\r
@@ -109,7 +109,6 @@ class Pettanr.AppController
   render_edit: () ->\r
     @item.boosts 'post'\r
     @render_form()\r
-    Pettanr.History.lock = {url: @item.edit_url(), form: @form}\r
   \r
   render_form: () ->\r
     @form = Locmare.Form.factory({\r
@@ -122,25 +121,21 @@ class Pettanr.AppController
     })\r
     @form.render()\r
     @trigger('ready', @form)\r
+    @trigger('lock', @params, @form)\r
   \r
   form_new: () ->\r
-    if Pettanr.History.lock\r
-      @trigger('lock', @params)\r
-    else\r
-      @set_new()\r
-      @render_form()\r
-      Pettanr.History.lock = {url: @item.new_url(), form: @form}\r
+    # how cansel on picker edit button?\r
+    @set_new()\r
+    @render_form()\r
   \r
   form_edit: () ->\r
-    if Pettanr.History.lock\r
-      @trigger('lock', @params)\r
-    else\r
-      @set_edit()\r
+    # how cansel on picker edit button?\r
+    @set_edit()\r
   \r
   post_success: (model, response) ->\r
+    @trigger('unlock', @params, @form)\r
     @trigger('redirect', @form.item.show_url())\r
     @trigger('success', model, response)\r
-    Pettanr.History.release()\r
   \r
   post_fail: (model, response) ->\r
     @trigger('fail', response)\r
index 0109f57..2ea987a 100644 (file)
@@ -52,7 +52,7 @@ class Pettanr.PanelsController extends Pettanr.AppController
   count: () ->\r
   \r
   new: () ->\r
-    if Pettanr.History.lock\r
+    if @gate and @gate.is_lock()\r
       @trigger('lock', @params)\r
     else\r
       @trigger('title', @params)\r
@@ -61,7 +61,7 @@ class Pettanr.PanelsController extends Pettanr.AppController
       @trigger('done', @params)\r
   \r
   edit: () ->\r
-    if Pettanr.History.lock\r
+    if @gate and @gate.is_lock()\r
       @trigger('lock', @params)\r
     else\r
       @trigger('title', @params)\r
@@ -76,7 +76,7 @@ class Pettanr.PanelsController extends Pettanr.AppController
   editor: () ->\r
     editor = new Editor.PanelEditor({root_item: @item, operators: @operators})\r
     editor.render()\r
-    Pettanr.History.lock = {url: @item.new_url(), form: editor}\r
+    @trigger('lock', @params, editor)\r
     @trigger('ready', editor)\r
   \r
   create: () ->\r
index 0dbcb75..c78d767 100644 (file)
@@ -2,6 +2,7 @@ class Pettanr.Proxy
   \r
   constructor: (options) ->\r
     @operators = options.operators\r
+    @gate = options.gate\r
     _.extend(this, Backbone.Events)\r
   \r
   local_router: (parsed_callback) ->\r
@@ -15,14 +16,32 @@ class Pettanr.Proxy
     @local_router(@get).navigate(url, form)\r
   \r
   get: (params, form) ->\r
-    controller = Pettanr.AppController.new2(params, form, @operators)\r
+    return if !@test(params, form)\r
+    controller = Pettanr.AppController.new2(params, form, @operators, @gate)\r
     @listenTo(controller, 'ready', @ready)\r
     @listenTo(controller, 'title', @title)\r
     @listenTo(controller, 'done', @done)\r
     @listenTo(controller, 'lock', @lock)\r
+    @listenTo(controller, 'unlock', @unlock)\r
     action_name = params['action']\r
     controller[action_name]()\r
   \r
+  test: (params, form) ->\r
+    return true if !@gate\r
+    switch @gate.test()\r
+      when 0\r
+        # free\r
+        true\r
+      when 1\r
+        # agree move\r
+        @gate.unlock()\r
+        true\r
+      else\r
+        # blocking\r
+        # back button event\r
+        Backbone.history.navigate('/' + @gate.url(), {trigger: false})\r
+        false\r
+  \r
   ready: (view) ->\r
     @trigger('ready', view)\r
   \r
@@ -32,8 +51,11 @@ class Pettanr.Proxy
   done: (params) ->\r
     @trigger('done', params)\r
   \r
-  lock: (params) ->\r
-    @trigger('lock', params)\r
+  lock: (params, form) ->\r
+    @trigger('lock', params, form)\r
+  \r
+  unlock: (params, form) ->\r
+    @trigger('unlock', params, form)\r
   \r
   deny: (params, form, safe_url) ->\r
     @trigger('deny', params, form, safe_url)\r
@@ -51,6 +73,8 @@ class Pettanr.Proxy
     @listenTo(controller, 'redirect', @redirect)\r
     @listenTo(controller, 'sign_in', @sign_in)\r
     @listenTo(controller, 'sign_out', @sign_out)\r
+    @listenTo(controller, 'lock', @lock)\r
+    @listenTo(controller, 'unlock', @unlock)\r
     action_name = params['action']\r
     controller[action_name]()\r
   \r
index 9794c6d..e32d666 100644 (file)
@@ -1,20 +1,32 @@
-class Pettanr.History extends Backbone.History\r
-  @lock = null\r
+class Pettanr.BeforeUnload\r
   \r
-  checkUrl: (e) ->\r
-    if Pettanr.History.lock\r
+  constructor: (options) ->\r
+  \r
+  test: () ->\r
+    if @is_lock()\r
       if confirm('leave? edit data unsaved')\r
-        Pettanr.History.release()\r
+        return 1\r
       else\r
-        @history.pushState({}, document.title, '/' + Pettanr.History.lock.url)\r
-        return false\r
-    super(e)\r
+        return -1\r
+    0\r
+  \r
+  is_lock: () ->\r
+    if @params\r
+      true\r
+    else\r
+      false\r
+  \r
+  lock: (params, form) ->\r
+    @form = form\r
+    @params = params\r
+  \r
+  unlock: () ->\r
+    @form.quit()\r
+    @params = null\r
   \r
-  @release: () ->\r
-    Pettanr.History.lock.form.quit()\r
-    Pettanr.History.lock = null\r
+  url: () ->\r
+    Pettanr.params_to_url(@params)\r
   \r
-Backbone.history = new Pettanr.History\r
 class Pettanr.Router extends Backbone.Router\r
   \r
   initialize: (options) ->\r
index 69ac8c0..aff7337 100644 (file)
@@ -8,6 +8,7 @@ class Pettanr.Views.Layout.Sns extends Pettanr.Views.Layout.Base
     @operators = new Pettanr.Operator({})\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
@@ -53,9 +54,10 @@ class Pettanr.Views.Layout.Sns extends Pettanr.Views.Layout.Base
     proxy.http_post('users/test')\r
   \r
   test_ok: (user, response) ->\r
-    \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
@@ -86,12 +88,13 @@ class Pettanr.Views.Layout.Sns extends Pettanr.Views.Layout.Base
     @header.refresh(view)\r
   \r
   getter_proxy: () ->\r
-    proxy = new Pettanr.Proxy({operators: @operators})\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
@@ -109,9 +112,6 @@ class Pettanr.Views.Layout.Sns extends Pettanr.Views.Layout.Base
     url = Pettanr.params_to_url(params)\r
     @global_router.navigate(url, {trigger: false})\r
   \r
-  body_lock: (params) ->\r
-    console.log('_lock')\r
-  \r
   push_history: (params, str = null) ->\r
     @history.push(params, str)\r
   \r
@@ -127,6 +127,7 @@ class Pettanr.Views.Layout.Sns extends Pettanr.Views.Layout.Base
     @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
   body_http_post: (url, form) ->\r
@@ -145,6 +146,12 @@ class Pettanr.Views.Layout.Sns extends Pettanr.Views.Layout.Base
     @global_router.navigate(url)\r
     @getter_proxy().http_get(url)\r
   \r
+  body_lock: (params, form) ->\r
+    @gate.lock(params, form)\r
+  \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
   \r