-class Pettanr.History extends Backbone.History\r
- @lock_url = null\r
- checkUrl: (e) ->\r
- if Pettanr.History.lock_url\r
+class Pettanr.BeforeUnload\r
+ \r
+ constructor: (options) ->\r
+ \r
+ test: () ->\r
+ if @is_lock()\r
if confirm('leave? edit data unsaved')\r
- Pettanr.History.lock_url = null\r
+ return 1\r
else\r
- @history.pushState({}, document.title, '/' + Pettanr.History.lock_url)\r
- return false\r
- super(e)\r
- \r
-Backbone.history = new Pettanr.History\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
+ url: () ->\r
+ Pettanr.params_to_url(@params)\r
+ \r
class Pettanr.Router extends Backbone.Router\r
\r
initialize: (options) ->\r
super()\r
+ _.extend(this, Backbone.Events)\r
@operators = options.operators\r
\r
parse_query_string: (query_string) ->\r
[\r
{route: '', callback: 'home'}, \r
{route: 'top/:action', callback: 'top_a'}, \r
- {route: 'users/:action', callback: 'users_a'}, \r
- {route: 'user_sessions/:action', callback: 'user_sessions_a'}, \r
+ {route: 'users/:action', callback: 'users_a'}, # no manifest route\r
+ {route: 'user_sessions/:action', callback: 'user_sessions_a'}, # no manifest route\r
{route: ':controller/:id/:action?*query_string', callback: 'c_i_a'}, \r
{route: ':controller/:id/:action', callback: 'c_i_a'}, \r
{route: ':controller/:id?*query_string', callback: 'c_i'}, \r
# render App(render:all)\r
home: () ->\r
params = @home_params()\r
- @trigger('fire', params)\r
+ @trigger('go', params)\r
\r
home_params: () ->\r
params = {}\r
\r
# controller/id/action case\r
# ex) scrolls/3/edit\r
- c_i_a: (controller, id, action, query_string) ->\r
+ c_i_a: (controller, id, action, query_string, form) ->\r
params = @c_i_a_params(controller, id, action, query_string)\r
- @trigger('fire', params)\r
+ @trigger('go', params, form)\r
\r
c_i_a_params: (controller, id, action, query_string) ->\r
params = @parse_query_string(query_string)\r
\r
# controller and id case\r
# ex) scrolls/3\r
- c_i: (controller, id, query_string) ->\r
+ c_i: (controller, id, query_string, form) ->\r
params = @c_i_params(controller, id, query_string)\r
- @trigger('fire', params)\r
+ @trigger('go', params, form)\r
\r
c_i_params: (controller, id, query_string) ->\r
params = @parse_query_string(query_string)\r
\r
# controller only case\r
# ex) scrolls\r
- c: (controller, query_string) ->\r
+ c: (controller, query_string, form) ->\r
params = @c_params(controller, query_string)\r
- @trigger('fire', params)\r
+ @trigger('go', params, form)\r
\r
c_params: (controller, query_string) ->\r
params = @parse_query_string(query_string)\r
params['action'] = 'index'\r
params\r
\r
- top_a: (action, query_string) ->\r
+ top_a: (action, query_string, form) ->\r
params = @users_a_params(action, query_string)\r
- @trigger('fire', params)\r
+ @trigger('go', params, form)\r
\r
top_a_params: (action, query_string) ->\r
params = @parse_query_string(query_string)\r
params['action'] = action\r
params\r
\r
- user_sessions_a: (action, query_string) ->\r
+ user_sessions_a: (action, query_string, form) ->\r
params = @user_sessions_a_params(action, query_string)\r
- @trigger('fire', params)\r
+ @trigger('go', params, form)\r
\r
user_sessions_a_params: (action, query_string) ->\r
params = @parse_query_string(query_string)\r
params['action'] = action\r
params\r
\r
- users_a: (action, query_string) ->\r
+ users_a: (action, query_string, form) ->\r
params = @users_a_params(action, query_string)\r
- @trigger('fire', params)\r
+ @trigger('go', params, form)\r
\r
users_a_params: (action, query_string) ->\r
params = @parse_query_string(query_string)\r
params['format'] = 'html'\r
params['action'] = action\r
params\r
- \r
- \r
+\r
class Pettanr.GlobalRouter extends Pettanr.Router\r
\r
- initialize: () ->\r
- _.extend(this, Backbone.Events)\r
+ initialize: (options) ->\r
+ super(options)\r
_.each @peta_routes(), (r) =>\r
@route(r.route, r.callback)\r
\r
- navigate: (fragment, options) ->\r
- if Pettanr.History.lock_url\r
- if confirm('leave? edit data unsaved')\r
- Pettanr.History.lock_url = null\r
- else\r
- return false\r
- super(fragment, options)\r
- \r
class Pettanr.LocalRouter extends Pettanr.Router\r
\r
- initialize: () ->\r
- _.extend(this, Backbone.Events)\r
+ initialize: (options) ->\r
+ super(options)\r
\r
# selfish navigate\r
- navigate: (url) ->\r
+ navigate: (url, form) ->\r
if route = @find_route(url)\r
args = @_extractParameters(route.regex, url)\r
+ args.push(form)\r
n = route.callback # callback function name by string\r
this[n].apply(this, args) # call to c_i_a, c_i, c\r
\r
-class Pettanr.RouterFilter\r
- \r
- filters: () ->\r
- if Pettanr.is_sns()\r
- Pettanr.ActionFilter.sns_filters()\r
- else\r
- Pettanr.ActionFilter.blog_filters()\r
- \r
- my_filters: (role, params) ->\r
- f = @filters()\r
- c = f[params['controller']] || {}\r
- r = c[role]\r
- r\r
- \r
- # return false if allow\r
- # return true if deny\r
- authenticate: (role, params, operators) ->\r
- n = 'is_' + role\r
- if not operators[n]() # ex: operators.is_user()\r
- filter = @my_filters(role, params)\r
- if Pettanr.before_filter(params['action'], filter)\r
- return true\r
- false\r
- \r
-class Pettanr.HeaderRouter extends Pettanr.LocalRouter\r
- \r
- initialize: () ->\r
- super()\r
- _.extend(this, Pettanr.RouterFilter)\r
- \r
-class Pettanr.BodyRouter extends Pettanr.GlobalRouter\r
- \r
- initialize: () ->\r
- super()\r
- _.extend(this, Pettanr.RouterFilter.prototype)\r
- \r
- navigate: (url, options, operators) ->\r
- safe_url = @block(url, operators) || url\r
- super(safe_url, options)\r
- \r
- # access block\r
- # return sign in form if invalid url\r
- # return null if url is valid\r
- block: (url, operators) ->\r
- params = @url_to_params(url)\r
- return @guest_url() if @authenticate('reader', params, operators) or @authenticate('resource_reader', params, operators) or @authenticate('user', params, operators)\r
- return @new_author_url() if @authenticate('author', params, operators)\r
- return @new_artist_url() if @authenticate('artist', params, operators)\r
- null\r
- \r
- guest_url: () ->\r
- 'user_seeeions/new'\r
- \r
- new_author_url: () ->\r
- 'authors/new'\r
- \r
- new_artist_url: () ->\r
- 'artists/new'\r
- \r