OSDN Git Service

clean
[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     _.each _.flatten(names), (status) =>\r
100       _status = status\r
101       switch status.action_manifest.type\r
102         when 'list'\r
103           e = status.event_name\r
104           e_f = e + '_format'\r
105           this[e] = (queryString) =>\r
106             params = @parse_query_string(query_string)\r
107             console.log(params)\r
108             _status.controller[_status.action_name](params)\r
109           c = _status.controller_name\r
110           a = _status.action_name\r
111           c_a_url = c + '/' + a\r
112           @route(c_a_url, e)\r
113           r = r + '?*queryString'\r
114           @route(r, _status.event_name)\r
115           if _status.action_name == 'index'\r
116             r = _status.controller_name + '/'\r
117             @route(r, _status.event_name)\r
118         when 'show'\r
119           e = status.event_name\r
120           e_f = e + '_format'\r
121           this[e] = (id, query_string) =>\r
122             params = @parse_query_string(query_string)\r
123             t = id.split('.')\r
124             if t.length > 1\r
125               params['format'] = t[1]\r
126               id = t[0]\r
127             console.log(id)\r
128             console.log(params)\r
129             _status.controller[_status.action_name](id, params)\r
130           this[e_f] = (id, format, query_string) =>\r
131             params = @parse_query_string(query_string)\r
132             params['format'] = format\r
133             console.log(id)\r
134             console.log(params)\r
135             _status.controller[_status.action_name](id, params)\r
136           c = _status.controller_name\r
137           a = _status.action_name\r
138           q = '?*query_string'\r
139           i = '\/([0-9]+)'\r
140           c_id_a_url = c + '/:id/' + a\r
141           c_id_a_f_url = c + '/:id/' + a + '.:format'\r
142           c_id_a_q_url = c_id_a_url + q\r
143           c_id_a_q_url = c_id_a_url + '.:format' + q\r
144           @route(c_id_a_q_url, e_f)\r
145           @route(c_id_a_q_url, e)\r
146           @route(c_id_a_f_url, e_f)\r
147           @route(c_id_a_url, e)\r
148           if a == 'show'\r
149             c_id_url = c + '/:id'\r
150             c_id_q_url = c_id_url + q\r
151             @route(c_id_q_url, e)\r
152             @route(c_id_url, e)\r
153 \r