OSDN Git Service

crush router and render
[pettanr/pettanr.git] / app / assets / javascripts / routes.js.coffee
1 class Pettanr.Router extends Backbone.Router\r
2   \r
3   parse_query_string: (query_string) ->\r
4     params = {}\r
5     if query_string\r
6       ary = _.map decodeURI(query_string).split(/&/g), (el, i) ->\r
7         aux = el.split('=')\r
8         o = {}\r
9         if aux.length >= 1\r
10           val = undefined\r
11           if aux.length == 2\r
12             val = aux[1]\r
13           o[aux[0]] = val\r
14           o\r
15       _.each ary, (o) -> \r
16         _.extend(params, o)\r
17     params\r
18   \r
19   initialize: () ->\r
20     _.extend(this, Backbone.Events)\r
21     _.each @peta_routes(), (r) =>\r
22       @route(r.route, r.callback)\r
23   \r
24   peta_routes: () ->\r
25     [\r
26       {route: '', callback: 'home'}, \r
27       {route: ':controller/:id/:action?*query_string', callback: 'c_i_a'}, \r
28       {route: ':controller/:id/:action', callback: 'c_i_a'}, \r
29       {route: ':controller/:id?*query_string', callback: 'c_i'}, \r
30       {route: ':controller/:id', callback: 'c_i'}, \r
31       {route: ':controller?*query_string', callback: 'c'}, \r
32       {route: ':controller', callback: 'c'}, \r
33       {route: 'users/sign_in', callback: 'user_sign_in'}, \r
34     ]\r
35   \r
36   # render App(render:all)\r
37   home: () ->\r
38     params = @home_params()\r
39     @trigger('fire', params)\r
40   \r
41   home_params: () ->\r
42     params = {}\r
43     params['controller'] = 'folders'\r
44     params['action'] = 'root'\r
45     params\r
46   \r
47   # controller/id/action case\r
48   # ex) scrolls/3/edit\r
49   c_i_a: (controller, id, action, query_string) ->\r
50     params = @c_i_a_params(controller, id, action, query_string)\r
51     @fire(params)\r
52   \r
53   c_i_a_params: (controller, id, action, query_string) ->\r
54     params = @parse_query_string(query_string)\r
55     params['controller'] = controller\r
56     params['format'] = 'html'\r
57     t = id.split('.')\r
58     if t.length > 1\r
59       params['format'] = t[1]\r
60       id = t[0]\r
61     t = action.split('.')\r
62     if t.length > 1\r
63       params['format'] = t[1]\r
64       action = t[0]\r
65     if Pettanr.is_number(action)\r
66       params['action'] = id\r
67       params['id'] = action\r
68     else\r
69       params['action'] = action\r
70       params['id'] = id\r
71     params\r
72   \r
73   # controller and id case\r
74   # ex) scrolls/3\r
75   c_i: (controller, id, query_string) ->\r
76     params = @c_i_params(controller, id, query_string)\r
77     @fire(params)\r
78   \r
79   c_i_params: (controller, id, query_string) ->\r
80     params = @parse_query_string(query_string)\r
81     params['controller'] = controller\r
82     params['format'] = 'html'\r
83     t = id.split('.')\r
84     if t.length > 1\r
85       params['format'] = t[1]\r
86       id = t[0]\r
87     if Pettanr.is_number(id)\r
88       params['action'] = 'show'\r
89       params['id'] = id\r
90     else\r
91       if id\r
92         params['action'] = id\r
93       else\r
94         params['action'] = 'index'\r
95     params\r
96   \r
97   # controller only case\r
98   # ex) scrolls\r
99   c: (controller, query_string) ->\r
100     params = @c_i_params(controller, query_string)\r
101     @fire(params)\r
102   \r
103   c_params: (controller, query_string) ->\r
104     params = @parse_query_string(query_string)\r
105     params['controller'] = controller\r
106     params['format'] = 'html'\r
107     params['action'] = 'index'\r
108     params\r
109   \r
110   user_sign_in: () ->\r
111     r = new Pettanr.UsersController()\r
112     r.index()\r
113   \r
114   navigate: (fragment, options) ->\r
115     if window.editor\r
116       if confirm('leave? edit data unsaved')\r
117         window.editor.quit()\r
118         super(fragment, options)\r
119       else\r
120         false\r
121     else\r
122       super(fragment, options)\r
123   \r
124   local_navigate: (url, el) ->\r
125     _.any @peta_routes(), (r) =>\r
126       route = @_routeToRegExp(r.route)\r
127       if route.test(url)\r
128         args = @_extractParameters(route, url)\r
129         args.unshift(el)\r
130         n = 'local_' + r.callback\r
131         this[n].apply(this, args)\r
132   \r
133   # from Backbone.History.loadUrl(fragment)\r
134   local_home: (el) ->\r
135     params = @home_params()\r
136     @fire(params, el)\r
137   \r
138   local_c_i_a: (el, controller, id, action, query_string) ->\r
139     params = @c_i_a_params(controller, id, action, query_string)\r
140     @fire(params, el)\r
141   \r
142   local_c_i: (el, controller, id, query_string) ->\r
143     params = @c_i_params(controller, id, query_string)\r
144     @fire(params, el)\r
145   \r
146   local_c: (el, controller, query_string) ->\r
147     params = @c_params(controller, query_string)\r
148     @fire(params, el)\r
149   \r
150   local_user_sign_in: (el) ->\r
151     console.log('user_sign_in');\r
152   \r
153   hoge: () ->\r
154     names = _.map Manifest.manifest().controllers, (controller_manifest, controller_name) ->\r
155       c = Pettanr[Pettanr.camelize(controller_name) + 'Controller']\r
156       controller = new c\r
157       _.map controller_manifest.actions, (action_manifest, action_name) =>\r
158         {\r
159           event_name: controller_name + '_' + action_name, \r
160           controller: controller,\r
161           controller_name: controller_name,\r
162           action_manifest: action_manifest,\r
163           action_name: action_name\r
164         }\r
165     _.each _.flatten(names), (status) =>\r
166       _status = status\r
167       switch status.action_manifest.type\r
168         when 'list'\r
169           e = status.event_name\r
170           e_f = e + '_format'\r
171           this[e] = (queryString) =>\r
172             params = @parse_query_string(query_string)\r
173             console.log(params)\r
174             _status.controller[_status.action_name](params)\r
175           c = _status.controller_name\r
176           a = _status.action_name\r
177           c_a_url = c + '/' + a\r
178           @route(c_a_url, e)\r
179           r = r + '?*queryString'\r
180           @route(r, _status.event_name)\r
181           if _status.action_name == 'index'\r
182             r = _status.controller_name + '/'\r
183             @route(r, _status.event_name)\r
184         when 'show'\r
185           e = status.event_name\r
186           e_f = e + '_format'\r
187           this[e] = (id, query_string) =>\r
188             params = @parse_query_string(query_string)\r
189             t = id.split('.')\r
190             if t.length > 1\r
191               params['format'] = t[1]\r
192               id = t[0]\r
193             console.log(id)\r
194             console.log(params)\r
195             _status.controller[_status.action_name](id, params)\r
196           this[e_f] = (id, format, query_string) =>\r
197             params = @parse_query_string(query_string)\r
198             params['format'] = format\r
199             console.log(id)\r
200             console.log(params)\r
201             _status.controller[_status.action_name](id, params)\r
202           c = _status.controller_name\r
203           a = _status.action_name\r
204           q = '?*query_string'\r
205           i = '\/([0-9]+)'\r
206           c_id_a_url = c + '/:id/' + a\r
207           c_id_a_f_url = c + '/:id/' + a + '.:format'\r
208           c_id_a_q_url = c_id_a_url + q\r
209           c_id_a_q_url = c_id_a_url + '.:format' + q\r
210           @route(c_id_a_q_url, e_f)\r
211           @route(c_id_a_q_url, e)\r
212           @route(c_id_a_f_url, e_f)\r
213           @route(c_id_a_url, e)\r
214           if a == 'show'\r
215             c_id_url = c + '/:id'\r
216             c_id_q_url = c_id_url + q\r
217             @route(c_id_q_url, e)\r
218             @route(c_id_url, e)\r
219 \r