From 46c48b27d7ea359151135e0327d820a4891981d9 Mon Sep 17 00:00:00 2001 From: yasushiito Date: Fri, 20 Mar 2015 11:50:20 +0900 Subject: [PATCH] fix gate --- app/assets/javascripts/controllers.js.coffee | 25 ++++++--------- .../javascripts/controllers/panels.js.coffee | 6 ++-- app/assets/javascripts/pettanr/proxy.js.coffee | 30 ++++++++++++++++-- app/assets/javascripts/routes.js.coffee | 36 ++++++++++++++-------- app/assets/javascripts/views/layout.js.coffee | 17 +++++++--- 5 files changed, 76 insertions(+), 38 deletions(-) diff --git a/app/assets/javascripts/controllers.js.coffee b/app/assets/javascripts/controllers.js.coffee index 15b1be87..76c542f8 100644 --- a/app/assets/javascripts/controllers.js.coffee +++ b/app/assets/javascripts/controllers.js.coffee @@ -1,11 +1,11 @@ class Pettanr.AppController - constructor: (@params, @form, @operators) -> + constructor: (@params, @form, @operators, @gate) -> _.extend(this, Backbone.Events) - @new2: (params, form, operators) -> + @new2: (params, form, operators, gate) -> c = Pettanr[Pettanr.camelize(params['controller']) + 'Controller'] - new c(params, form, operators) + new c(params, form, operators, gate) set_model: () -> @my_controller = Manifest.manifest().controllers[@params['controller']] @@ -109,7 +109,6 @@ class Pettanr.AppController render_edit: () -> @item.boosts 'post' @render_form() - Pettanr.History.lock = {url: @item.edit_url(), form: @form} render_form: () -> @form = Locmare.Form.factory({ @@ -122,25 +121,21 @@ class Pettanr.AppController }) @form.render() @trigger('ready', @form) + @trigger('lock', @params, @form) form_new: () -> - if Pettanr.History.lock - @trigger('lock', @params) - else - @set_new() - @render_form() - Pettanr.History.lock = {url: @item.new_url(), form: @form} + # how cansel on picker edit button? + @set_new() + @render_form() form_edit: () -> - if Pettanr.History.lock - @trigger('lock', @params) - else - @set_edit() + # how cansel on picker edit button? + @set_edit() post_success: (model, response) -> + @trigger('unlock', @params, @form) @trigger('redirect', @form.item.show_url()) @trigger('success', model, response) - Pettanr.History.release() post_fail: (model, response) -> @trigger('fail', response) diff --git a/app/assets/javascripts/controllers/panels.js.coffee b/app/assets/javascripts/controllers/panels.js.coffee index 0109f574..2ea987a3 100644 --- a/app/assets/javascripts/controllers/panels.js.coffee +++ b/app/assets/javascripts/controllers/panels.js.coffee @@ -52,7 +52,7 @@ class Pettanr.PanelsController extends Pettanr.AppController count: () -> new: () -> - if Pettanr.History.lock + if @gate and @gate.is_lock() @trigger('lock', @params) else @trigger('title', @params) @@ -61,7 +61,7 @@ class Pettanr.PanelsController extends Pettanr.AppController @trigger('done', @params) edit: () -> - if Pettanr.History.lock + if @gate and @gate.is_lock() @trigger('lock', @params) else @trigger('title', @params) @@ -76,7 +76,7 @@ class Pettanr.PanelsController extends Pettanr.AppController editor: () -> editor = new Editor.PanelEditor({root_item: @item, operators: @operators}) editor.render() - Pettanr.History.lock = {url: @item.new_url(), form: editor} + @trigger('lock', @params, editor) @trigger('ready', editor) create: () -> diff --git a/app/assets/javascripts/pettanr/proxy.js.coffee b/app/assets/javascripts/pettanr/proxy.js.coffee index 0dbcb75d..c78d767b 100644 --- a/app/assets/javascripts/pettanr/proxy.js.coffee +++ b/app/assets/javascripts/pettanr/proxy.js.coffee @@ -2,6 +2,7 @@ class Pettanr.Proxy constructor: (options) -> @operators = options.operators + @gate = options.gate _.extend(this, Backbone.Events) local_router: (parsed_callback) -> @@ -15,14 +16,32 @@ class Pettanr.Proxy @local_router(@get).navigate(url, form) get: (params, form) -> - controller = Pettanr.AppController.new2(params, form, @operators) + return if !@test(params, form) + controller = Pettanr.AppController.new2(params, form, @operators, @gate) @listenTo(controller, 'ready', @ready) @listenTo(controller, 'title', @title) @listenTo(controller, 'done', @done) @listenTo(controller, 'lock', @lock) + @listenTo(controller, 'unlock', @unlock) action_name = params['action'] controller[action_name]() + test: (params, form) -> + return true if !@gate + switch @gate.test() + when 0 + # free + true + when 1 + # agree move + @gate.unlock() + true + else + # blocking + # back button event + Backbone.history.navigate('/' + @gate.url(), {trigger: false}) + false + ready: (view) -> @trigger('ready', view) @@ -32,8 +51,11 @@ class Pettanr.Proxy done: (params) -> @trigger('done', params) - lock: (params) -> - @trigger('lock', params) + lock: (params, form) -> + @trigger('lock', params, form) + + unlock: (params, form) -> + @trigger('unlock', params, form) deny: (params, form, safe_url) -> @trigger('deny', params, form, safe_url) @@ -51,6 +73,8 @@ class Pettanr.Proxy @listenTo(controller, 'redirect', @redirect) @listenTo(controller, 'sign_in', @sign_in) @listenTo(controller, 'sign_out', @sign_out) + @listenTo(controller, 'lock', @lock) + @listenTo(controller, 'unlock', @unlock) action_name = params['action'] controller[action_name]() diff --git a/app/assets/javascripts/routes.js.coffee b/app/assets/javascripts/routes.js.coffee index 9794c6d3..e32d666a 100644 --- a/app/assets/javascripts/routes.js.coffee +++ b/app/assets/javascripts/routes.js.coffee @@ -1,20 +1,32 @@ -class Pettanr.History extends Backbone.History - @lock = null +class Pettanr.BeforeUnload - checkUrl: (e) -> - if Pettanr.History.lock + constructor: (options) -> + + test: () -> + if @is_lock() if confirm('leave? edit data unsaved') - Pettanr.History.release() + return 1 else - @history.pushState({}, document.title, '/' + Pettanr.History.lock.url) - return false - super(e) + return -1 + 0 + + is_lock: () -> + if @params + true + else + false + + lock: (params, form) -> + @form = form + @params = params + + unlock: () -> + @form.quit() + @params = null - @release: () -> - Pettanr.History.lock.form.quit() - Pettanr.History.lock = null + url: () -> + Pettanr.params_to_url(@params) -Backbone.history = new Pettanr.History class Pettanr.Router extends Backbone.Router initialize: (options) -> diff --git a/app/assets/javascripts/views/layout.js.coffee b/app/assets/javascripts/views/layout.js.coffee index 69ac8c06..aff7337c 100644 --- a/app/assets/javascripts/views/layout.js.coffee +++ b/app/assets/javascripts/views/layout.js.coffee @@ -8,6 +8,7 @@ class Pettanr.Views.Layout.Sns extends Pettanr.Views.Layout.Base @operators = new Pettanr.Operator({}) @global_router = new Pettanr.GlobalRouter({operators: @operators}) @listenTo(@global_router, 'go', @body_get) + @gate = new Pettanr.BeforeUnload() @header = new Pettanr.Views.Layout.Sns.Header({parent: this}) @history = new Pettanr.Views.History({parent: this}) @listenTo(@history, 'http_get', @body_http_get) @@ -53,9 +54,10 @@ class Pettanr.Views.Layout.Sns extends Pettanr.Views.Layout.Base proxy.http_post('users/test') test_ok: (user, response) -> - + @history.enable() test_ng: (response) -> + @history.disable() @head_http_get('users/guest') @body_http_get('user_sessions/new') @@ -86,12 +88,13 @@ class Pettanr.Views.Layout.Sns extends Pettanr.Views.Layout.Base @header.refresh(view) getter_proxy: () -> - proxy = new Pettanr.Proxy({operators: @operators}) + proxy = new Pettanr.Proxy({operators: @operators, gate: @gate}) @listenTo(proxy, 'ready', @body_ready) @listenTo(proxy, 'title', @body_title) @listenTo(proxy, 'title', @push_history) @listenTo(proxy, 'done', @body_done) @listenTo(proxy, 'lock', @body_lock) + @listenTo(proxy, 'unlock', @body_unlock) proxy body_http_get: (url, form) -> @@ -109,9 +112,6 @@ class Pettanr.Views.Layout.Sns extends Pettanr.Views.Layout.Base url = Pettanr.params_to_url(params) @global_router.navigate(url, {trigger: false}) - body_lock: (params) -> - console.log('_lock') - push_history: (params, str = null) -> @history.push(params, str) @@ -127,6 +127,7 @@ class Pettanr.Views.Layout.Sns extends Pettanr.Views.Layout.Base @listenTo(proxy, 'redirect', @body_redirect) @listenTo(proxy, 'sign_in', @sign_in) @listenTo(proxy, 'sign_out', @sign_out) + @listenTo(proxy, 'unlock', @body_unlock) proxy body_http_post: (url, form) -> @@ -145,6 +146,12 @@ class Pettanr.Views.Layout.Sns extends Pettanr.Views.Layout.Base @global_router.navigate(url) @getter_proxy().http_get(url) + body_lock: (params, form) -> + @gate.lock(params, form) + + body_unlock: (params, form) -> + @gate.unlock() + class Pettanr.Views.Layout.Blog extends Pettanr.Views.Layout.Base className: 'layout-blog' -- 2.11.0