OSDN Git Service

fix layout default
[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: '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
36     ]\r
37   \r
38   # render App(render:all)\r
39   home: () ->\r
40     params = @home_params()\r
41     @trigger('fire', params)\r
42   \r
43   home_params: () ->\r
44     params = {}\r
45     params['controller'] = 'folders'\r
46     params['action'] = 'root'\r
47     params\r
48   \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
54   \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
59     t = id.split('.')\r
60     if t.length > 1\r
61       params['format'] = t[1]\r
62       id = t[0]\r
63     t = action.split('.')\r
64     if t.length > 1\r
65       params['format'] = t[1]\r
66       action = t[0]\r
67     if Pettanr.is_number(action)\r
68       params['action'] = id\r
69       params['id'] = action\r
70     else\r
71       params['action'] = action\r
72       params['id'] = id\r
73     params\r
74   \r
75   # controller and id case\r
76   # ex) scrolls/3\r
77   c_i: (controller, id, query_string) ->\r
78     params = @c_i_params(controller, id, query_string)\r
79     @trigger('fire', params)\r
80   \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
85     t = id.split('.')\r
86     if t.length > 1\r
87       params['format'] = t[1]\r
88       id = t[0]\r
89     if Pettanr.is_number(id)\r
90       params['action'] = 'show'\r
91       params['id'] = id\r
92     else\r
93       if id\r
94         params['action'] = id\r
95       else\r
96         params['action'] = 'index'\r
97     params\r
98   \r
99   # controller only case\r
100   # ex) scrolls\r
101   c: (controller, query_string) ->\r
102     params = @c_params(controller, query_string)\r
103     @trigger('fire', params)\r
104   \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
110     params\r
111   \r
112   top_a: (action) ->\r
113     params = @users_a_params(action)\r
114     @trigger('fire', params)\r
115   \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
121     params\r
122   \r
123   user_sessions_a: (action) ->\r
124     params = @users_a_params(action)\r
125     @trigger('fire', params)\r
126   \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
132     params\r
133   \r
134   users_a: (action) ->\r
135     params = @users_a_params(action)\r
136     @trigger('fire', params)\r
137   \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
143     params\r
144   \r
145   navigate: (fragment, options) ->\r
146     if window.editor\r
147       if confirm('leave? edit data unsaved')\r
148         window.editor.quit()\r
149         super(fragment, options)\r
150       else\r
151         false\r
152     else\r
153       super(fragment, options)\r
154   \r
155   local_navigate: (url, el) ->\r
156     _.any @peta_routes(), (r) =>\r
157       route = @_routeToRegExp(r.route)\r
158       if route.test(url)\r
159         args = @_extractParameters(route, url)\r
160         args.unshift(el)\r
161         n = 'local_' + r.callback\r
162         this[n].apply(this, args)\r
163   \r
164   # from Backbone.History.loadUrl(fragment)\r
165   local_home: (el) ->\r
166     params = @home_params()\r
167     @fire(params, el)\r
168   \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
171     @fire(params, el)\r
172   \r
173   local_c_i: (el, controller, id, query_string) ->\r
174     params = @c_i_params(controller, id, query_string)\r
175     @fire(params, el)\r
176   \r
177   local_c: (el, controller, query_string) ->\r
178     params = @c_params(controller, query_string)\r
179     @fire(params, el)\r
180   \r
181   local_user_sign_in: (el) ->\r
182     console.log('user_sign_in');\r
183   \r
184   hoge: () ->\r
185     names = _.map Manifest.manifest().controllers, (controller_manifest, controller_name) ->\r
186       c = Pettanr[Pettanr.camelize(controller_name) + 'Controller']\r
187       controller = new c\r
188       _.map controller_manifest.actions, (action_manifest, action_name) =>\r
189         {\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
195         }\r
196     _.each _.flatten(names), (status) =>\r
197       _status = status\r
198       switch status.action_manifest.type\r
199         when 'list'\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
209           @route(c_a_url, e)\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
215         when 'show'\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
220             t = id.split('.')\r
221             if t.length > 1\r
222               params['format'] = t[1]\r
223               id = t[0]\r
224             console.log(id)\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
230             console.log(id)\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
236           i = '\/([0-9]+)'\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
245           if a == 'show'\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
250 \r