_.extend(params, o)\r
params\r
\r
- initialize: () ->\r
- _.extend(this, Backbone.Events)\r
- _.each @peta_routes(), (r) =>\r
- @route(r.route, r.callback)\r
- \r
peta_routes: () ->\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: ':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
{route: ':controller/:id', callback: 'c_i'}, \r
{route: ':controller?*query_string', callback: 'c'}, \r
{route: ':controller', callback: 'c'}, \r
- {route: 'users/sign_in', callback: 'user_sign_in'}, \r
]\r
\r
+ find_route: (url) ->\r
+ r = null\r
+ _.any @peta_routes(), (route) =>\r
+ route.regex = @_routeToRegExp(route.route)\r
+ if route.regex.test(url)\r
+ r = route\r
+ r\r
+ \r
+ url_to_params: (url) ->\r
+ if route = @find_route(url)\r
+ n = route.callback # callback function name by string\r
+ this[n + '_params'].apply(this, args) # call to c_i_a_params, c_i_params, c_params\r
+ \r
# render App(render:all)\r
home: () ->\r
params = @home_params()\r
# ex) scrolls/3/edit\r
c_i_a: (controller, id, action, query_string) ->\r
params = @c_i_a_params(controller, id, action, query_string)\r
- @fire(params)\r
+ @trigger('fire', params)\r
\r
c_i_a_params: (controller, id, action, query_string) ->\r
params = @parse_query_string(query_string)\r
# ex) scrolls/3\r
c_i: (controller, id, query_string) ->\r
params = @c_i_params(controller, id, query_string)\r
- @fire(params)\r
+ @trigger('fire', params)\r
\r
c_i_params: (controller, id, query_string) ->\r
params = @parse_query_string(query_string)\r
# controller only case\r
# ex) scrolls\r
c: (controller, query_string) ->\r
- params = @c_i_params(controller, query_string)\r
- @fire(params)\r
+ params = @c_params(controller, query_string)\r
+ @trigger('fire', params)\r
\r
c_params: (controller, query_string) ->\r
params = @parse_query_string(query_string)\r
params['action'] = 'index'\r
params\r
\r
- user_sign_in: () ->\r
- r = new Pettanr.UsersController()\r
- r.index()\r
+ top_a: (action, query_string) ->\r
+ params = @users_a_params(action, query_string)\r
+ @trigger('fire', params)\r
+ \r
+ top_a_params: (action, query_string) ->\r
+ params = @parse_query_string(query_string)\r
+ params['controller'] = 'top'\r
+ params['format'] = 'html'\r
+ params['action'] = action\r
+ params\r
+ \r
+ user_sessions_a: (action, query_string) ->\r
+ params = @user_sessions_a_params(action, query_string)\r
+ @trigger('fire', params)\r
+ \r
+ user_sessions_a_params: (action, query_string) ->\r
+ params = @parse_query_string(query_string)\r
+ params['controller'] = 'user_sessions'\r
+ params['format'] = 'html'\r
+ params['action'] = action\r
+ params\r
+ \r
+ users_a: (action, query_string) ->\r
+ params = @users_a_params(action, query_string)\r
+ @trigger('fire', params)\r
+ \r
+ users_a_params: (action, query_string) ->\r
+ params = @parse_query_string(query_string)\r
+ params['controller'] = 'users'\r
+ params['format'] = 'html'\r
+ params['action'] = action\r
+ params\r
+ \r
+ \r
+class Pettanr.GlobalRouter extends Pettanr.Router\r
+ \r
+ initialize: () ->\r
+ _.extend(this, Backbone.Events)\r
+ _.each @peta_routes(), (r) =>\r
+ @route(r.route, r.callback)\r
\r
navigate: (fragment, options) ->\r
if window.editor\r
else\r
super(fragment, options)\r
\r
- local_navigate: (url, el) ->\r
- _.any @peta_routes(), (r) =>\r
- route = @_routeToRegExp(r.route)\r
- if route.test(url)\r
- args = @_extractParameters(route, url)\r
- args.unshift(el)\r
- n = 'local_' + r.callback\r
- this[n].apply(this, args)\r
- \r
- # from Backbone.History.loadUrl(fragment)\r
- local_home: (el) ->\r
- params = @home_params()\r
- @fire(params, el)\r
+class Pettanr.LocalRouter extends Pettanr.Router\r
\r
- local_c_i_a: (el, controller, id, action, query_string) ->\r
- params = @c_i_a_params(controller, id, action, query_string)\r
- @fire(params, el)\r
+ initialize: () ->\r
+ _.extend(this, Backbone.Events)\r
\r
- local_c_i: (el, controller, id, query_string) ->\r
- params = @c_i_params(controller, id, query_string)\r
- @fire(params, el)\r
+ # selfish navigate\r
+ navigate: (url) ->\r
+ if route = @find_route(url)\r
+ args = @_extractParameters(route.regex, url)\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
+ authenticate: (role, params, operators) ->\r
+ if not operators[('is_' + role)]() # 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)\r
+ \r
+ navigate: (url, operators) ->\r
+ safe_url = @block(url, operators) || url\r
+ super(safe_url)\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
- local_c: (el, controller, query_string) ->\r
- params = @c_params(controller, query_string)\r
- @fire(params, el)\r
- \r
- local_user_sign_in: (el) ->\r
- console.log('user_sign_in');\r
- \r
- hoge: () ->\r
- names = _.map Manifest.manifest().controllers, (controller_manifest, controller_name) ->\r
- c = Pettanr[Pettanr.camelize(controller_name) + 'Controller']\r
- controller = new c\r
- _.map controller_manifest.actions, (action_manifest, action_name) =>\r
- {\r
- event_name: controller_name + '_' + action_name, \r
- controller: controller,\r
- controller_name: controller_name,\r
- action_manifest: action_manifest,\r
- action_name: action_name\r
- }\r
- _.each _.flatten(names), (status) =>\r
- _status = status\r
- switch status.action_manifest.type\r
- when 'list'\r
- e = status.event_name\r
- e_f = e + '_format'\r
- this[e] = (queryString) =>\r
- params = @parse_query_string(query_string)\r
- console.log(params)\r
- _status.controller[_status.action_name](params)\r
- c = _status.controller_name\r
- a = _status.action_name\r
- c_a_url = c + '/' + a\r
- @route(c_a_url, e)\r
- r = r + '?*queryString'\r
- @route(r, _status.event_name)\r
- if _status.action_name == 'index'\r
- r = _status.controller_name + '/'\r
- @route(r, _status.event_name)\r
- when 'show'\r
- e = status.event_name\r
- e_f = e + '_format'\r
- this[e] = (id, query_string) =>\r
- params = @parse_query_string(query_string)\r
- t = id.split('.')\r
- if t.length > 1\r
- params['format'] = t[1]\r
- id = t[0]\r
- console.log(id)\r
- console.log(params)\r
- _status.controller[_status.action_name](id, params)\r
- this[e_f] = (id, format, query_string) =>\r
- params = @parse_query_string(query_string)\r
- params['format'] = format\r
- console.log(id)\r
- console.log(params)\r
- _status.controller[_status.action_name](id, params)\r
- c = _status.controller_name\r
- a = _status.action_name\r
- q = '?*query_string'\r
- i = '\/([0-9]+)'\r
- c_id_a_url = c + '/:id/' + a\r
- c_id_a_f_url = c + '/:id/' + a + '.:format'\r
- c_id_a_q_url = c_id_a_url + q\r
- c_id_a_q_url = c_id_a_url + '.:format' + q\r
- @route(c_id_a_q_url, e_f)\r
- @route(c_id_a_q_url, e)\r
- @route(c_id_a_f_url, e_f)\r
- @route(c_id_a_url, e)\r
- if a == 'show'\r
- c_id_url = c + '/:id'\r
- c_id_q_url = c_id_url + q\r
- @route(c_id_q_url, e)\r
- @route(c_id_url, e)\r
-\r