OSDN Git Service

fix sign in header
[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   fire: (params) ->\r
20     c = Pettanr[Pettanr.camelize(params['controller']) + 'Controller']\r
21     controller = new c\r
22     controller.params = params\r
23     controller[params['action']]()\r
24   \r
25   initialize: () ->\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
30       t = id.split('.')\r
31       if t.length > 1\r
32         params['format'] = t[1]\r
33         id = t[0]\r
34       t = action.split('.')\r
35       if t.length > 1\r
36         params['format'] = t[1]\r
37         action = t[0]\r
38       if Pettanr.is_number(action)\r
39         params['action'] = id\r
40         params['id'] = action\r
41       else\r
42         params['action'] = action\r
43         params['id'] = id\r
44       this.fire(params)\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
49       t = id.split('.')\r
50       if t.length > 1\r
51         params['format'] = t[1]\r
52         id = t[0]\r
53       if Pettanr.is_number(id)\r
54         params['action'] = 'show'\r
55         params['id'] = id\r
56       else\r
57         if id\r
58           params['action'] = id\r
59         else\r
60           params['action'] = 'index'\r
61       this.fire(params)\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
67       this.fire(params)\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
76   \r
77   home: () ->\r
78     params = {}\r
79     params['controller'] = 'folders'\r
80     params['action'] = 'root'\r
81     @fire(params)\r
82   \r
83   user_sign_in: () ->\r
84     r = new Pettanr.UsersController()\r
85     r.index()\r
86   \r
87   hoge: () ->\r
88     names = _.map Manifest.manifest().controllers, (controller_manifest, controller_name) ->\r
89       c = Pettanr[Pettanr.camelize(controller_name) + 'Controller']\r
90       controller = new c\r
91       _.map controller_manifest.actions, (action_manifest, action_name) ->\r
92         {\r
93           event_name: controller_name + '_' + action_name, \r
94           controller: controller,\r
95           controller_name: controller_name,\r
96           action_manifest: action_manifest,\r
97           action_name: action_name\r
98         }\r
99     _this = this\r
100     _.each _.flatten(names), (status) ->\r
101       _status = status\r
102       switch status.action_manifest.type\r
103         when 'list'\r
104           e = status.event_name\r
105           e_f = e + '_format'\r
106           _this[e] = (queryString) ->\r
107             params = _this.parse_query_string(query_string)\r
108             console.log(params)\r
109             _status.controller[_status.action_name](params)\r
110           c = _status.controller_name\r
111           a = _status.action_name\r
112           c_a_url = c + '/' + a\r
113           _this.route(c_a_url, e)\r
114           r = r + '?*queryString'\r
115           _this.route(r, _status.event_name)\r
116           if _status.action_name == 'index'\r
117             r = _status.controller_name + '/'\r
118             _this.route(r, _status.event_name)\r
119         when 'show'\r
120           e = status.event_name\r
121           e_f = e + '_format'\r
122           _this[e] = (id, query_string) ->\r
123             params = _this.parse_query_string(query_string)\r
124             t = id.split('.')\r
125             if t.length > 1\r
126               params['format'] = t[1]\r
127               id = t[0]\r
128             console.log(id)\r
129             console.log(params)\r
130             _status.controller[_status.action_name](id, params)\r
131           _this[e_f] = (id, format, query_string) ->\r
132             params = _this.parse_query_string(query_string)\r
133             params['format'] = format\r
134             console.log(id)\r
135             console.log(params)\r
136             _status.controller[_status.action_name](id, params)\r
137           c = _status.controller_name\r
138           a = _status.action_name\r
139           q = '?*query_string'\r
140           i = '\/([0-9]+)'\r
141           c_id_a_url = c + '/:id/' + a\r
142           c_id_a_f_url = c + '/:id/' + a + '.:format'\r
143           c_id_a_q_url = c_id_a_url + q\r
144           c_id_a_q_url = c_id_a_url + '.:format' + q\r
145           _this.route(c_id_a_q_url, e_f)\r
146           _this.route(c_id_a_q_url, e)\r
147           _this.route(c_id_a_f_url, e_f)\r
148           _this.route(c_id_a_url, e)\r
149           if a == 'show'\r
150             c_id_url = c + '/:id'\r
151             c_id_q_url = c_id_url + q\r
152             _this.route(c_id_q_url, e)\r
153             _this.route(c_id_url, e)\r
154 \r