OSDN Git Service

c692e923838f7b54b4c6c6217557bc1fd0c37f72
[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   peta_routes: () ->\r
20     [\r
21       {route: '', callback: 'home'}, \r
22       {route: 'top/:action', callback: 'top_a'}, \r
23       {route: 'users/:action', callback: 'users_a'}, \r
24       {route: 'user_sessions/:action', callback: 'user_sessions_a'}, \r
25       {route: ':controller/:id/:action?*query_string', callback: 'c_i_a'}, \r
26       {route: ':controller/:id/:action', callback: 'c_i_a'}, \r
27       {route: ':controller/:id?*query_string', callback: 'c_i'}, \r
28       {route: ':controller/:id', callback: 'c_i'}, \r
29       {route: ':controller?*query_string', callback: 'c'}, \r
30       {route: ':controller', callback: 'c'}, \r
31     ]\r
32   \r
33   # render App(render:all)\r
34   home: () ->\r
35     params = @home_params()\r
36     @trigger('fire', params)\r
37   \r
38   home_params: () ->\r
39     params = {}\r
40     params['controller'] = 'folders'\r
41     params['action'] = 'root'\r
42     params\r
43   \r
44   # controller/id/action case\r
45   # ex) scrolls/3/edit\r
46   c_i_a: (controller, id, action, query_string) ->\r
47     params = @c_i_a_params(controller, id, action, query_string)\r
48     @trigger('fire', params)\r
49   \r
50   c_i_a_params: (controller, id, action, query_string) ->\r
51     params = @parse_query_string(query_string)\r
52     params['controller'] = controller\r
53     params['format'] = 'html'\r
54     t = id.split('.')\r
55     if t.length > 1\r
56       params['format'] = t[1]\r
57       id = t[0]\r
58     t = action.split('.')\r
59     if t.length > 1\r
60       params['format'] = t[1]\r
61       action = t[0]\r
62     if Pettanr.is_number(action)\r
63       params['action'] = id\r
64       params['id'] = action\r
65     else\r
66       params['action'] = action\r
67       params['id'] = id\r
68     params\r
69   \r
70   # controller and id case\r
71   # ex) scrolls/3\r
72   c_i: (controller, id, query_string) ->\r
73     params = @c_i_params(controller, id, query_string)\r
74     @trigger('fire', params)\r
75   \r
76   c_i_params: (controller, id, query_string) ->\r
77     params = @parse_query_string(query_string)\r
78     params['controller'] = controller\r
79     params['format'] = 'html'\r
80     t = id.split('.')\r
81     if t.length > 1\r
82       params['format'] = t[1]\r
83       id = t[0]\r
84     if Pettanr.is_number(id)\r
85       params['action'] = 'show'\r
86       params['id'] = id\r
87     else\r
88       if id\r
89         params['action'] = id\r
90       else\r
91         params['action'] = 'index'\r
92     params\r
93   \r
94   # controller only case\r
95   # ex) scrolls\r
96   c: (controller, query_string) ->\r
97     params = @c_params(controller, query_string)\r
98     @trigger('fire', params)\r
99   \r
100   c_params: (controller, query_string) ->\r
101     params = @parse_query_string(query_string)\r
102     params['controller'] = controller\r
103     params['format'] = 'html'\r
104     params['action'] = 'index'\r
105     params\r
106   \r
107   top_a: (action, query_string) ->\r
108     params = @users_a_params(action, query_string)\r
109     @trigger('fire', params)\r
110   \r
111   top_a_params: (action, query_string) ->\r
112     params = @parse_query_string(query_string)\r
113     params['controller'] = 'top'\r
114     params['format'] = 'html'\r
115     params['action'] = action\r
116     params\r
117   \r
118   user_sessions_a: (action, query_string) ->\r
119     params = @users_a_params(action, query_string)\r
120     @trigger('fire', params)\r
121   \r
122   user_sessions_a_params: (action, query_string) ->\r
123     params = @parse_query_string(query_string)\r
124     params['controller'] = 'user_sessions'\r
125     params['format'] = 'html'\r
126     params['action'] = action\r
127     params\r
128   \r
129   users_a: (action, query_string) ->\r
130     params = @users_a_params(action, query_string)\r
131     @trigger('fire', params)\r
132   \r
133   users_a_params: (action, query_string) ->\r
134     params = @parse_query_string(query_string)\r
135     params['controller'] = 'users'\r
136     params['format'] = 'html'\r
137     params['action'] = action\r
138     params\r
139   \r
140 class Pettanr.GlobalRouter extends Pettanr.Router\r
141   \r
142   initialize: () ->\r
143     _.extend(this, Backbone.Events)\r
144     _.each @peta_routes(), (r) =>\r
145       @route(r.route, r.callback)\r
146   \r
147   navigate: (fragment, options) ->\r
148     if window.editor\r
149       if confirm('leave? edit data unsaved')\r
150         window.editor.quit()\r
151         super(fragment, options)\r
152       else\r
153         false\r
154     else\r
155       super(fragment, options)\r
156   \r
157 class Pettanr.LocalRouter extends Pettanr.Router\r
158   \r
159   initialize: () ->\r
160     _.extend(this, Backbone.Events)\r
161   \r
162   # selfish navigate\r
163   navigate: (url) ->\r
164     _.any @peta_routes(), (r) =>\r
165       route = @_routeToRegExp(r.route)\r
166       if route.test(url)\r
167         args = @_extractParameters(route, url)\r
168         n = r.callback\r
169         this[n].apply(this, args)  # call to c_i_a, c_i, c\r
170   \r