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
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
})\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
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
@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
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
\r
constructor: (options) ->\r
@operators = options.operators\r
+ @gate = options.gate\r
_.extend(this, Backbone.Events)\r
\r
local_router: (parsed_callback) ->\r
@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
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
@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
-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
@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
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
@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
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
@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
@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