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 c = Pettanr[Pettanr.camelize(params['controller']) + 'Controller']
\r
22 controller.params = params
\r
23 controller[params['action']]()
\r
26 this['c_i_a'] = (controller, id, action, query_string) ->
\r
27 params = this.parse_query_string(query_string)
\r
28 params['controller'] = controller
\r
29 params['format'] = 'html'
\r
32 params['format'] = t[1]
\r
34 t = action.split('.')
\r
36 params['format'] = t[1]
\r
38 if Pettanr.is_number(action)
\r
39 params['action'] = id
\r
40 params['id'] = action
\r
42 params['action'] = action
\r
45 this['c_i'] = (controller, id, query_string) ->
\r
46 params = this.parse_query_string(query_string)
\r
47 params['controller'] = controller
\r
48 params['format'] = 'html'
\r
51 params['format'] = t[1]
\r
53 if Pettanr.is_number(id)
\r
54 params['action'] = 'show'
\r
58 params['action'] = id
\r
60 params['action'] = 'index'
\r
62 this['c'] = (controller, query_string) ->
\r
63 params = this.parse_query_string(query_string)
\r
64 params['controller'] = controller
\r
65 params['format'] = 'html'
\r
66 params['action'] = 'index'
\r
68 this.route('', 'home')
\r
69 this.route(':controller/:id/:action?*query_string', 'c_i_a')
\r
70 this.route(':controller/:id/:action', 'c_i_a')
\r
71 this.route(':controller/:id?*query_string', 'c_i')
\r
72 this.route(':controller/:id', 'c_i')
\r
73 this.route(':controller?*query_string', 'c')
\r
74 this.route(':controller', 'c')
\r
75 this.route('users/sign_in', 'user_sign_in')
\r
79 params['controller'] = 'folders'
\r
80 params['action'] = 'root'
\r
84 r = new Pettanr.UsersController()
\r
87 navigate: (fragment, options) ->
\r
89 if confirm('leave? edit data unsaved')
\r
90 window.editor.quit()
\r
91 super(fragment, options)
\r
95 super(fragment, options)
\r
98 names = _.map Manifest.manifest().controllers, (controller_manifest, controller_name) ->
\r
99 c = Pettanr[Pettanr.camelize(controller_name) + 'Controller']
\r
101 _.map controller_manifest.actions, (action_manifest, action_name) =>
\r
103 event_name: controller_name + '_' + action_name,
\r
104 controller: controller,
\r
105 controller_name: controller_name,
\r
106 action_manifest: action_manifest,
\r
107 action_name: action_name
\r
109 _.each _.flatten(names), (status) =>
\r
111 switch status.action_manifest.type
\r
113 e = status.event_name
\r
114 e_f = e + '_format'
\r
115 this[e] = (queryString) =>
\r
116 params = @parse_query_string(query_string)
\r
117 console.log(params)
\r
118 _status.controller[_status.action_name](params)
\r
119 c = _status.controller_name
\r
120 a = _status.action_name
\r
121 c_a_url = c + '/' + a
\r
123 r = r + '?*queryString'
\r
124 @route(r, _status.event_name)
\r
125 if _status.action_name == 'index'
\r
126 r = _status.controller_name + '/'
\r
127 @route(r, _status.event_name)
\r
129 e = status.event_name
\r
130 e_f = e + '_format'
\r
131 this[e] = (id, query_string) =>
\r
132 params = @parse_query_string(query_string)
\r
135 params['format'] = t[1]
\r
138 console.log(params)
\r
139 _status.controller[_status.action_name](id, params)
\r
140 this[e_f] = (id, format, query_string) =>
\r
141 params = @parse_query_string(query_string)
\r
142 params['format'] = format
\r
144 console.log(params)
\r
145 _status.controller[_status.action_name](id, params)
\r
146 c = _status.controller_name
\r
147 a = _status.action_name
\r
148 q = '?*query_string'
\r
150 c_id_a_url = c + '/:id/' + a
\r
151 c_id_a_f_url = c + '/:id/' + a + '.:format'
\r
152 c_id_a_q_url = c_id_a_url + q
\r
153 c_id_a_q_url = c_id_a_url + '.:format' + q
\r
154 @route(c_id_a_q_url, e_f)
\r
155 @route(c_id_a_q_url, e)
\r
156 @route(c_id_a_f_url, e_f)
\r
157 @route(c_id_a_url, e)
\r
159 c_id_url = c + '/:id'
\r
160 c_id_q_url = c_id_url + q
\r
161 @route(c_id_q_url, e)
\r
162 @route(c_id_url, e)
\r