1 class Pettanr.Router extends Backbone.Router
\r
3 parse_query_string: (query_string) ->
\r
6 ary = _.map decodeURI(query_string).split(/&/g), (el, i) ->
\r
20 _.extend(this, Backbone.Events)
\r
21 _.each @peta_routes(), (r) =>
\r
22 @route(r.route, r.callback)
\r
26 {route: '', callback: 'home'},
\r
27 {route: 'top/:action', callback: 'top_a'},
\r
28 {route: 'users/:action', callback: 'users_a'},
\r
29 {route: 'user_sessions/:action', callback: 'user_sessions_a'},
\r
30 {route: ':controller/:id/:action?*query_string', callback: 'c_i_a'},
\r
31 {route: ':controller/:id/:action', callback: 'c_i_a'},
\r
32 {route: ':controller/:id?*query_string', callback: 'c_i'},
\r
33 {route: ':controller/:id', callback: 'c_i'},
\r
34 {route: ':controller?*query_string', callback: 'c'},
\r
35 {route: ':controller', callback: 'c'},
\r
38 # render App(render:all)
\r
40 params = @home_params()
\r
41 @trigger('fire', params)
\r
45 params['controller'] = 'folders'
\r
46 params['action'] = 'root'
\r
49 # controller/id/action case
\r
50 # ex) scrolls/3/edit
\r
51 c_i_a: (controller, id, action, query_string) ->
\r
52 params = @c_i_a_params(controller, id, action, query_string)
\r
53 @trigger('fire', params)
\r
55 c_i_a_params: (controller, id, action, query_string) ->
\r
56 params = @parse_query_string(query_string)
\r
57 params['controller'] = controller
\r
58 params['format'] = 'html'
\r
61 params['format'] = t[1]
\r
63 t = action.split('.')
\r
65 params['format'] = t[1]
\r
67 if Pettanr.is_number(action)
\r
68 params['action'] = id
\r
69 params['id'] = action
\r
71 params['action'] = action
\r
75 # controller and id case
\r
77 c_i: (controller, id, query_string) ->
\r
78 params = @c_i_params(controller, id, query_string)
\r
79 @trigger('fire', params)
\r
81 c_i_params: (controller, id, query_string) ->
\r
82 params = @parse_query_string(query_string)
\r
83 params['controller'] = controller
\r
84 params['format'] = 'html'
\r
87 params['format'] = t[1]
\r
89 if Pettanr.is_number(id)
\r
90 params['action'] = 'show'
\r
94 params['action'] = id
\r
96 params['action'] = 'index'
\r
99 # controller only case
\r
101 c: (controller, query_string) ->
\r
102 params = @c_params(controller, query_string)
\r
103 @trigger('fire', params)
\r
105 c_params: (controller, query_string) ->
\r
106 params = @parse_query_string(query_string)
\r
107 params['controller'] = controller
\r
108 params['format'] = 'html'
\r
109 params['action'] = 'index'
\r
113 params = @users_a_params(action)
\r
114 @trigger('fire', params)
\r
116 top_a_params: (action) ->
\r
117 params = @parse_query_string(query_string)
\r
118 params['controller'] = 'top'
\r
119 params['format'] = 'html'
\r
120 params['action'] = action
\r
123 user_sessions_a: (action) ->
\r
124 params = @users_a_params(action)
\r
125 @trigger('fire', params)
\r
127 user_sessions_a_params: (action) ->
\r
128 params = @parse_query_string(query_string)
\r
129 params['controller'] = 'user_sessions'
\r
130 params['format'] = 'html'
\r
131 params['action'] = action
\r
134 users_a: (action) ->
\r
135 params = @users_a_params(action)
\r
136 @trigger('fire', params)
\r
138 users_a_params: (action) ->
\r
139 params = @parse_query_string(query_string)
\r
140 params['controller'] = 'users'
\r
141 params['format'] = 'html'
\r
142 params['action'] = action
\r
145 navigate: (fragment, options) ->
\r
147 if confirm('leave? edit data unsaved')
\r
148 window.editor.quit()
\r
149 super(fragment, options)
\r
153 super(fragment, options)
\r
155 local_navigate: (url, el) ->
\r
156 _.any @peta_routes(), (r) =>
\r
157 route = @_routeToRegExp(r.route)
\r
159 args = @_extractParameters(route, url)
\r
161 n = 'local_' + r.callback
\r
162 this[n].apply(this, args)
\r
164 # from Backbone.History.loadUrl(fragment)
\r
165 local_home: (el) ->
\r
166 params = @home_params()
\r
169 local_c_i_a: (el, controller, id, action, query_string) ->
\r
170 params = @c_i_a_params(controller, id, action, query_string)
\r
173 local_c_i: (el, controller, id, query_string) ->
\r
174 params = @c_i_params(controller, id, query_string)
\r
177 local_c: (el, controller, query_string) ->
\r
178 params = @c_params(controller, query_string)
\r
181 local_user_sign_in: (el) ->
\r
182 console.log('user_sign_in');
\r
185 names = _.map Manifest.manifest().controllers, (controller_manifest, controller_name) ->
\r
186 c = Pettanr[Pettanr.camelize(controller_name) + 'Controller']
\r
188 _.map controller_manifest.actions, (action_manifest, action_name) =>
\r
190 event_name: controller_name + '_' + action_name,
\r
191 controller: controller,
\r
192 controller_name: controller_name,
\r
193 action_manifest: action_manifest,
\r
194 action_name: action_name
\r
196 _.each _.flatten(names), (status) =>
\r
198 switch status.action_manifest.type
\r
200 e = status.event_name
\r
201 e_f = e + '_format'
\r
202 this[e] = (queryString) =>
\r
203 params = @parse_query_string(query_string)
\r
204 console.log(params)
\r
205 _status.controller[_status.action_name](params)
\r
206 c = _status.controller_name
\r
207 a = _status.action_name
\r
208 c_a_url = c + '/' + a
\r
210 r = r + '?*queryString'
\r
211 @route(r, _status.event_name)
\r
212 if _status.action_name == 'index'
\r
213 r = _status.controller_name + '/'
\r
214 @route(r, _status.event_name)
\r
216 e = status.event_name
\r
217 e_f = e + '_format'
\r
218 this[e] = (id, query_string) =>
\r
219 params = @parse_query_string(query_string)
\r
222 params['format'] = t[1]
\r
225 console.log(params)
\r
226 _status.controller[_status.action_name](id, params)
\r
227 this[e_f] = (id, format, query_string) =>
\r
228 params = @parse_query_string(query_string)
\r
229 params['format'] = format
\r
231 console.log(params)
\r
232 _status.controller[_status.action_name](id, params)
\r
233 c = _status.controller_name
\r
234 a = _status.action_name
\r
235 q = '?*query_string'
\r
237 c_id_a_url = c + '/:id/' + a
\r
238 c_id_a_f_url = c + '/:id/' + a + '.:format'
\r
239 c_id_a_q_url = c_id_a_url + q
\r
240 c_id_a_q_url = c_id_a_url + '.:format' + q
\r
241 @route(c_id_a_q_url, e_f)
\r
242 @route(c_id_a_q_url, e)
\r
243 @route(c_id_a_f_url, e_f)
\r
244 @route(c_id_a_url, e)
\r
246 c_id_url = c + '/:id'
\r
247 c_id_q_url = c_id_url + q
\r
248 @route(c_id_q_url, e)
\r
249 @route(c_id_url, e)
\r