OSDN Git Service

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