OSDN Git Service

fix js
[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.route('', 'home')\r
63     this.route(':controller/:id/:action?*query_string', 'c_i_a')\r
64     this.route(':controller/:id/:action', 'c_i_a')\r
65     this.route(':controller/:id?*query_string', 'c_i')\r
66     this.route(':controller/:id', 'c_i')\r
67   \r
68   home: () ->\r
69     params = {}\r
70     params['controller'] = 'folders'\r
71     params['action'] = 'root'\r
72     @fire(params)\r
73   \r
74   hoge: () ->\r
75     names = _.map Manifest.manifest().controllers, (controller_manifest, controller_name) ->\r
76       c = Pettanr[Pettanr.camelize(controller_name) + 'Controller']\r
77       controller = new c\r
78       _.map controller_manifest.actions, (action_manifest, action_name) ->\r
79         {\r
80           event_name: controller_name + '_' + action_name, \r
81           controller: controller,\r
82           controller_name: controller_name,\r
83           action_manifest: action_manifest,\r
84           action_name: action_name\r
85         }\r
86     _this = this\r
87     _.each _.flatten(names), (status) ->\r
88       _status = status\r
89       switch status.action_manifest.type\r
90         when 'list'\r
91           e = status.event_name\r
92           e_f = e + '_format'\r
93           _this[e] = (queryString) ->\r
94             params = _this.parse_query_string(query_string)\r
95             console.log(params)\r
96             _status.controller[_status.action_name](params)\r
97           c = _status.controller_name\r
98           a = _status.action_name\r
99           c_a_url = c + '/' + a\r
100           _this.route(c_a_url, e)\r
101           r = r + '?*queryString'\r
102           _this.route(r, _status.event_name)\r
103           if _status.action_name == 'index'\r
104             r = _status.controller_name + '/'\r
105             _this.route(r, _status.event_name)\r
106         when 'show'\r
107           e = status.event_name\r
108           e_f = e + '_format'\r
109           _this[e] = (id, query_string) ->\r
110             params = _this.parse_query_string(query_string)\r
111             t = id.split('.')\r
112             if t.length > 1\r
113               params['format'] = t[1]\r
114               id = t[0]\r
115             console.log(id)\r
116             console.log(params)\r
117             _status.controller[_status.action_name](id, params)\r
118           _this[e_f] = (id, format, query_string) ->\r
119             params = _this.parse_query_string(query_string)\r
120             params['format'] = format\r
121             console.log(id)\r
122             console.log(params)\r
123             _status.controller[_status.action_name](id, params)\r
124           c = _status.controller_name\r
125           a = _status.action_name\r
126           q = '?*query_string'\r
127           i = '\/([0-9]+)'\r
128           c_id_a_url = c + '/:id/' + a\r
129           c_id_a_f_url = c + '/:id/' + a + '.:format'\r
130           c_id_a_q_url = c_id_a_url + q\r
131           c_id_a_q_url = c_id_a_url + '.:format' + q\r
132           _this.route(c_id_a_q_url, e_f)\r
133           _this.route(c_id_a_q_url, e)\r
134           _this.route(c_id_a_f_url, e_f)\r
135           _this.route(c_id_a_url, e)\r
136           if a == 'show'\r
137             c_id_url = c + '/:id'\r
138             c_id_q_url = c_id_url + q\r
139             _this.route(c_id_q_url, e)\r
140             _this.route(c_id_url, e)\r
141 \r