X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=app%2Fassets%2Fjavascripts%2Froutes.js.coffee;h=8058b417e0f9dce6d48319fe638741bc0884045f;hb=bc33449931cc6705c3cfa5a79ee1450ae2d046fb;hp=c692e923838f7b54b4c6c6217557bc1fd0c37f72;hpb=5dd43ec71dd1d0a06a91c4b0c6b60ef0db9c5d0e;p=pettanr%2Fpettanr.git diff --git a/app/assets/javascripts/routes.js.coffee b/app/assets/javascripts/routes.js.coffee index c692e923..8058b417 100644 --- a/app/assets/javascripts/routes.js.coffee +++ b/app/assets/javascripts/routes.js.coffee @@ -1,5 +1,38 @@ +class Pettanr.BeforeUnload + + constructor: (options) -> + + test: () -> + if @is_lock() + if confirm('leave? edit data unsaved') + return 1 + else + return -1 + 0 + + is_lock: () -> + if @params + true + else + false + + lock: (params, form) -> + @form = form + @params = params + + unlock: () -> + @form.quit() + @params = null + + url: () -> + Pettanr.params_to_url(@params) + class Pettanr.Router extends Backbone.Router + initialize: (options) -> + super() + _.extend(this, Backbone.Events) + parse_query_string: (query_string) -> params = {} if query_string @@ -20,8 +53,9 @@ class Pettanr.Router extends Backbone.Router [ {route: '', callback: 'home'}, {route: 'top/:action', callback: 'top_a'}, - {route: 'users/:action', callback: 'users_a'}, - {route: 'user_sessions/:action', callback: 'user_sessions_a'}, + {route: 'home/:action', callback: 'home_a'}, + {route: 'users/:action', callback: 'users_a'}, # no manifest route + {route: 'user_sessions/:action', callback: 'user_sessions_a'}, # no manifest route {route: ':controller/:id/:action?*query_string', callback: 'c_i_a'}, {route: ':controller/:id/:action', callback: 'c_i_a'}, {route: ':controller/:id?*query_string', callback: 'c_i'}, @@ -30,10 +64,26 @@ class Pettanr.Router extends Backbone.Router {route: ':controller', callback: 'c'}, ] + find_route: (url) -> + r = null + _.any @peta_routes(), (route) => + route.regex = @_routeToRegExp(route.route) + if route.regex.test(url) + r = route + r + + url_to_params: (url) -> + if route = @find_route(url) + args = @_extractParameters(route.regex, url) + n = route.callback # callback function name by string + this[n + '_params'].apply(this, args) # call to c_i_a_params, c_i_params, c_params + else + {} + # render App(render:all) home: () -> params = @home_params() - @trigger('fire', params) + @trigger('go', params) home_params: () -> params = {} @@ -43,9 +93,9 @@ class Pettanr.Router extends Backbone.Router # controller/id/action case # ex) scrolls/3/edit - c_i_a: (controller, id, action, query_string) -> + c_i_a: (controller, id, action, query_string, form) -> params = @c_i_a_params(controller, id, action, query_string) - @trigger('fire', params) + @trigger('go', params, form) c_i_a_params: (controller, id, action, query_string) -> params = @parse_query_string(query_string) @@ -69,9 +119,9 @@ class Pettanr.Router extends Backbone.Router # controller and id case # ex) scrolls/3 - c_i: (controller, id, query_string) -> + c_i: (controller, id, query_string, form) -> params = @c_i_params(controller, id, query_string) - @trigger('fire', params) + @trigger('go', params, form) c_i_params: (controller, id, query_string) -> params = @parse_query_string(query_string) @@ -93,9 +143,9 @@ class Pettanr.Router extends Backbone.Router # controller only case # ex) scrolls - c: (controller, query_string) -> + c: (controller, query_string, form) -> params = @c_params(controller, query_string) - @trigger('fire', params) + @trigger('go', params, form) c_params: (controller, query_string) -> params = @parse_query_string(query_string) @@ -104,9 +154,9 @@ class Pettanr.Router extends Backbone.Router params['action'] = 'index' params - top_a: (action, query_string) -> + top_a: (action, query_string, form) -> params = @users_a_params(action, query_string) - @trigger('fire', params) + @trigger('go', params, form) top_a_params: (action, query_string) -> params = @parse_query_string(query_string) @@ -115,9 +165,20 @@ class Pettanr.Router extends Backbone.Router params['action'] = action params - user_sessions_a: (action, query_string) -> - params = @users_a_params(action, query_string) - @trigger('fire', params) + home_a: (action, query_string, form) -> + params = @home_a_params(action, query_string) + @trigger('go', params, form) + + home_a_params: (action, query_string) -> + params = @parse_query_string(query_string) + params['controller'] = 'home' + params['format'] = 'html' + params['action'] = action + params + + user_sessions_a: (action, query_string, form) -> + params = @user_sessions_a_params(action, query_string) + @trigger('go', params, form) user_sessions_a_params: (action, query_string) -> params = @parse_query_string(query_string) @@ -126,9 +187,9 @@ class Pettanr.Router extends Backbone.Router params['action'] = action params - users_a: (action, query_string) -> + users_a: (action, query_string, form) -> params = @users_a_params(action, query_string) - @trigger('fire', params) + @trigger('go', params, form) users_a_params: (action, query_string) -> params = @parse_query_string(query_string) @@ -136,35 +197,24 @@ class Pettanr.Router extends Backbone.Router params['format'] = 'html' params['action'] = action params - + class Pettanr.GlobalRouter extends Pettanr.Router - initialize: () -> - _.extend(this, Backbone.Events) + initialize: (options) -> + super(options) _.each @peta_routes(), (r) => @route(r.route, r.callback) - navigate: (fragment, options) -> - if window.editor - if confirm('leave? edit data unsaved') - window.editor.quit() - super(fragment, options) - else - false - else - super(fragment, options) - class Pettanr.LocalRouter extends Pettanr.Router - initialize: () -> - _.extend(this, Backbone.Events) + initialize: (options) -> + super(options) # selfish navigate - navigate: (url) -> - _.any @peta_routes(), (r) => - route = @_routeToRegExp(r.route) - if route.test(url) - args = @_extractParameters(route, url) - n = r.callback - this[n].apply(this, args) # call to c_i_a, c_i, c + navigate: (url, form) -> + if route = @find_route(url) + args = @_extractParameters(route.regex, url) + args.push(form) + n = route.callback # callback function name by string + this[n].apply(this, args) # call to c_i_a, c_i, c