OSDN Git Service

fix:balloon edit
[pettanr/pettanr.git] / app / assets / javascripts / routes.js.coffee
1 class Pettanr.BeforeUnload\r
2   \r
3   constructor: (options) ->\r
4   \r
5   test: () ->\r
6     if @is_lock()\r
7       if confirm('leave? edit data unsaved')\r
8         return 1\r
9       else\r
10         return -1\r
11     0\r
12   \r
13   is_lock: () ->\r
14     if @params\r
15       true\r
16     else\r
17       false\r
18   \r
19   lock: (params, form) ->\r
20     @form = form\r
21     @params = params\r
22   \r
23   unlock: () ->\r
24     @form.quit()\r
25     @params = null\r
26   \r
27   url: () ->\r
28     Pettanr.params_to_url(@params)\r
29   \r
30 class Pettanr.Router extends Backbone.Router\r
31   \r
32   initialize: (options) ->\r
33     super()\r
34     _.extend(this, Backbone.Events)\r
35   \r
36   parse_query_string: (query_string) ->\r
37     params = {}\r
38     if query_string\r
39       ary = _.map decodeURI(query_string).split(/&/g), (el, i) ->\r
40         aux = el.split('=')\r
41         o = {}\r
42         if aux.length >= 1\r
43           val = undefined\r
44           if aux.length == 2\r
45             val = aux[1]\r
46           o[aux[0]] = val\r
47           o\r
48       _.each ary, (o) -> \r
49         _.extend(params, o)\r
50     params\r
51   \r
52   peta_routes: () ->\r
53     [\r
54       {route: '', callback: 'home'}, \r
55       {route: 'top/:action', callback: 'top_a'}, \r
56       {route: 'users/:action', callback: 'users_a'},   # no manifest route\r
57       {route: 'user_sessions/:action', callback: 'user_sessions_a'},    # no manifest route\r
58       {route: ':controller/:id/:action?*query_string', callback: 'c_i_a'}, \r
59       {route: ':controller/:id/:action', callback: 'c_i_a'}, \r
60       {route: ':controller/:id?*query_string', callback: 'c_i'}, \r
61       {route: ':controller/:id', callback: 'c_i'}, \r
62       {route: ':controller?*query_string', callback: 'c'}, \r
63       {route: ':controller', callback: 'c'}, \r
64     ]\r
65   \r
66   find_route: (url) ->\r
67     r = null\r
68     _.any @peta_routes(), (route) =>\r
69       route.regex = @_routeToRegExp(route.route)\r
70       if route.regex.test(url)\r
71         r = route\r
72     r\r
73   \r
74   url_to_params: (url) ->\r
75     if route = @find_route(url)\r
76       args = @_extractParameters(route.regex, url)\r
77       n = route.callback  # callback function name by string\r
78       this[n + '_params'].apply(this, args)  # call to c_i_a_params, c_i_params, c_params\r
79     else\r
80       {}\r
81   \r
82   # render App(render:all)\r
83   home: () ->\r
84     params = @home_params()\r
85     @trigger('go', params)\r
86   \r
87   home_params: () ->\r
88     params = {}\r
89     params['controller'] = 'folders'\r
90     params['action'] = 'root'\r
91     params\r
92   \r
93   # controller/id/action case\r
94   # ex) scrolls/3/edit\r
95   c_i_a: (controller, id, action, query_string, form) ->\r
96     params = @c_i_a_params(controller, id, action, query_string)\r
97     @trigger('go', params, form)\r
98   \r
99   c_i_a_params: (controller, id, action, query_string) ->\r
100     params = @parse_query_string(query_string)\r
101     params['controller'] = controller\r
102     params['format'] = 'html'\r
103     t = id.split('.')\r
104     if t.length > 1\r
105       params['format'] = t[1]\r
106       id = t[0]\r
107     t = action.split('.')\r
108     if t.length > 1\r
109       params['format'] = t[1]\r
110       action = t[0]\r
111     if Pettanr.is_number(action)\r
112       params['action'] = id\r
113       params['id'] = action\r
114     else\r
115       params['action'] = action\r
116       params['id'] = id\r
117     params\r
118   \r
119   # controller and id case\r
120   # ex) scrolls/3\r
121   c_i: (controller, id, query_string, form) ->\r
122     params = @c_i_params(controller, id, query_string)\r
123     @trigger('go', params, form)\r
124   \r
125   c_i_params: (controller, id, query_string) ->\r
126     params = @parse_query_string(query_string)\r
127     params['controller'] = controller\r
128     params['format'] = 'html'\r
129     t = id.split('.')\r
130     if t.length > 1\r
131       params['format'] = t[1]\r
132       id = t[0]\r
133     if Pettanr.is_number(id)\r
134       params['action'] = 'show'\r
135       params['id'] = id\r
136     else\r
137       if id\r
138         params['action'] = id\r
139       else\r
140         params['action'] = 'index'\r
141     params\r
142   \r
143   # controller only case\r
144   # ex) scrolls\r
145   c: (controller, query_string, form) ->\r
146     params = @c_params(controller, query_string)\r
147     @trigger('go', params, form)\r
148   \r
149   c_params: (controller, query_string) ->\r
150     params = @parse_query_string(query_string)\r
151     params['controller'] = controller\r
152     params['format'] = 'html'\r
153     params['action'] = 'index'\r
154     params\r
155   \r
156   top_a: (action, query_string, form) ->\r
157     params = @users_a_params(action, query_string)\r
158     @trigger('go', params, form)\r
159   \r
160   top_a_params: (action, query_string) ->\r
161     params = @parse_query_string(query_string)\r
162     params['controller'] = 'top'\r
163     params['format'] = 'html'\r
164     params['action'] = action\r
165     params\r
166   \r
167   user_sessions_a: (action, query_string, form) ->\r
168     params = @user_sessions_a_params(action, query_string)\r
169     @trigger('go', params, form)\r
170   \r
171   user_sessions_a_params: (action, query_string) ->\r
172     params = @parse_query_string(query_string)\r
173     params['controller'] = 'user_sessions'\r
174     params['format'] = 'html'\r
175     params['action'] = action\r
176     params\r
177   \r
178   users_a: (action, query_string, form) ->\r
179     params = @users_a_params(action, query_string)\r
180     @trigger('go', params, form)\r
181   \r
182   users_a_params: (action, query_string) ->\r
183     params = @parse_query_string(query_string)\r
184     params['controller'] = 'users'\r
185     params['format'] = 'html'\r
186     params['action'] = action\r
187     params\r
188 \r
189 class Pettanr.GlobalRouter extends Pettanr.Router\r
190   \r
191   initialize: (options) ->\r
192     super(options)\r
193     _.each @peta_routes(), (r) =>\r
194       @route(r.route, r.callback)\r
195   \r
196 class Pettanr.LocalRouter extends Pettanr.Router\r
197   \r
198   initialize: (options) ->\r
199     super(options)\r
200   \r
201   # selfish navigate\r
202   navigate: (url, form) ->\r
203     if route = @find_route(url)\r
204       args = @_extractParameters(route.regex, url)\r
205       args.push(form)\r
206       n = route.callback  # callback function name by string\r
207       this[n].apply(this, args)  # call to c_i_a, c_i, c\r
208   \r