1 class Pettanr.BeforeUnload
\r
3 constructor: (options) ->
\r
7 if confirm('leave? edit data unsaved')
\r
19 lock: (params, form) ->
\r
28 Pettanr.params_to_url(@params)
\r
30 class Pettanr.Router extends Backbone.Router
\r
32 initialize: (options) ->
\r
34 _.extend(this, Backbone.Events)
\r
35 @operators = options.operators
\r
37 parse_query_string: (query_string) ->
\r
40 ary = _.map decodeURI(query_string).split(/&/g), (el, i) ->
\r
55 {route: '', callback: 'home'},
\r
56 {route: 'top/:action', callback: 'top_a'},
\r
57 {route: 'users/:action', callback: 'users_a'}, # no manifest route
\r
58 {route: 'user_sessions/:action', callback: 'user_sessions_a'}, # no manifest route
\r
59 {route: ':controller/:id/:action?*query_string', callback: 'c_i_a'},
\r
60 {route: ':controller/:id/:action', callback: 'c_i_a'},
\r
61 {route: ':controller/:id?*query_string', callback: 'c_i'},
\r
62 {route: ':controller/:id', callback: 'c_i'},
\r
63 {route: ':controller?*query_string', callback: 'c'},
\r
64 {route: ':controller', callback: 'c'},
\r
67 find_route: (url) ->
\r
69 _.any @peta_routes(), (route) =>
\r
70 route.regex = @_routeToRegExp(route.route)
\r
71 if route.regex.test(url)
\r
75 url_to_params: (url) ->
\r
76 if route = @find_route(url)
\r
77 args = @_extractParameters(route.regex, url)
\r
78 n = route.callback # callback function name by string
\r
79 this[n + '_params'].apply(this, args) # call to c_i_a_params, c_i_params, c_params
\r
83 # render App(render:all)
\r
85 params = @home_params()
\r
86 @trigger('go', params)
\r
90 params['controller'] = 'folders'
\r
91 params['action'] = 'root'
\r
94 # controller/id/action case
\r
95 # ex) scrolls/3/edit
\r
96 c_i_a: (controller, id, action, query_string, form) ->
\r
97 params = @c_i_a_params(controller, id, action, query_string)
\r
98 @trigger('go', params, form)
\r
100 c_i_a_params: (controller, id, action, query_string) ->
\r
101 params = @parse_query_string(query_string)
\r
102 params['controller'] = controller
\r
103 params['format'] = 'html'
\r
106 params['format'] = t[1]
\r
108 t = action.split('.')
\r
110 params['format'] = t[1]
\r
112 if Pettanr.is_number(action)
\r
113 params['action'] = id
\r
114 params['id'] = action
\r
116 params['action'] = action
\r
120 # controller and id case
\r
122 c_i: (controller, id, query_string, form) ->
\r
123 params = @c_i_params(controller, id, query_string)
\r
124 @trigger('go', params, form)
\r
126 c_i_params: (controller, id, query_string) ->
\r
127 params = @parse_query_string(query_string)
\r
128 params['controller'] = controller
\r
129 params['format'] = 'html'
\r
132 params['format'] = t[1]
\r
134 if Pettanr.is_number(id)
\r
135 params['action'] = 'show'
\r
139 params['action'] = id
\r
141 params['action'] = 'index'
\r
144 # controller only case
\r
146 c: (controller, query_string, form) ->
\r
147 params = @c_params(controller, query_string)
\r
148 @trigger('go', params, form)
\r
150 c_params: (controller, query_string) ->
\r
151 params = @parse_query_string(query_string)
\r
152 params['controller'] = controller
\r
153 params['format'] = 'html'
\r
154 params['action'] = 'index'
\r
157 top_a: (action, query_string, form) ->
\r
158 params = @users_a_params(action, query_string)
\r
159 @trigger('go', params, form)
\r
161 top_a_params: (action, query_string) ->
\r
162 params = @parse_query_string(query_string)
\r
163 params['controller'] = 'top'
\r
164 params['format'] = 'html'
\r
165 params['action'] = action
\r
168 user_sessions_a: (action, query_string, form) ->
\r
169 params = @user_sessions_a_params(action, query_string)
\r
170 @trigger('go', params, form)
\r
172 user_sessions_a_params: (action, query_string) ->
\r
173 params = @parse_query_string(query_string)
\r
174 params['controller'] = 'user_sessions'
\r
175 params['format'] = 'html'
\r
176 params['action'] = action
\r
179 users_a: (action, query_string, form) ->
\r
180 params = @users_a_params(action, query_string)
\r
181 @trigger('go', params, form)
\r
183 users_a_params: (action, query_string) ->
\r
184 params = @parse_query_string(query_string)
\r
185 params['controller'] = 'users'
\r
186 params['format'] = 'html'
\r
187 params['action'] = action
\r
190 class Pettanr.GlobalRouter extends Pettanr.Router
\r
192 initialize: (options) ->
\r
194 _.each @peta_routes(), (r) =>
\r
195 @route(r.route, r.callback)
\r
197 class Pettanr.LocalRouter extends Pettanr.Router
\r
199 initialize: (options) ->
\r
203 navigate: (url, form) ->
\r
204 if route = @find_route(url)
\r
205 args = @_extractParameters(route.regex, url)
\r
207 n = route.callback # callback function name by string
\r
208 this[n].apply(this, args) # call to c_i_a, c_i, c
\r