1 class Pettanr.History extends Backbone.History
\r
5 if Pettanr.History.lock
\r
6 if confirm('leave? edit data unsaved')
\r
7 Pettanr.History.release()
\r
9 @history.pushState({}, document.title, '/' + Pettanr.History.lock.url)
\r
14 Pettanr.History.lock.form.quit()
\r
15 Pettanr.History.lock = null
\r
17 Backbone.history = new Pettanr.History
\r
18 class Pettanr.Router extends Backbone.Router
\r
20 initialize: (options) ->
\r
22 _.extend(this, Backbone.Events)
\r
23 @operators = options.operators
\r
25 parse_query_string: (query_string) ->
\r
28 ary = _.map decodeURI(query_string).split(/&/g), (el, i) ->
\r
43 {route: '', callback: 'home'},
\r
44 {route: 'top/:action', callback: 'top_a'},
\r
45 {route: 'users/:action', callback: 'users_a'}, # no manifest route
\r
46 {route: 'user_sessions/:action', callback: 'user_sessions_a'}, # no manifest route
\r
47 {route: ':controller/:id/:action?*query_string', callback: 'c_i_a'},
\r
48 {route: ':controller/:id/:action', callback: 'c_i_a'},
\r
49 {route: ':controller/:id?*query_string', callback: 'c_i'},
\r
50 {route: ':controller/:id', callback: 'c_i'},
\r
51 {route: ':controller?*query_string', callback: 'c'},
\r
52 {route: ':controller', callback: 'c'},
\r
55 find_route: (url) ->
\r
57 _.any @peta_routes(), (route) =>
\r
58 route.regex = @_routeToRegExp(route.route)
\r
59 if route.regex.test(url)
\r
63 url_to_params: (url) ->
\r
64 if route = @find_route(url)
\r
65 args = @_extractParameters(route.regex, url)
\r
66 n = route.callback # callback function name by string
\r
67 this[n + '_params'].apply(this, args) # call to c_i_a_params, c_i_params, c_params
\r
73 Pettanr.ActionFilter.sns_filters()
\r
75 Pettanr.ActionFilter.blog_filters()
\r
77 my_filters: (role, params) ->
\r
79 c = f[params['controller']] || {}
\r
83 # return false if allow
\r
84 # return true if deny
\r
85 authenticate: (role, params) ->
\r
87 if not @operators[n]() # ex: operators.is_user()
\r
88 filter = @my_filters(role, params)
\r
89 if Pettanr.before_filter(params['action'], filter)
\r
94 # return sign in form if invalid url
\r
95 # return null if url is valid
\r
97 return @guest_url() if @authenticate('reader', params) or @authenticate('resource_reader', params) or @authenticate('user', params)
\r
98 return @new_author_url() if @authenticate('author', params)
\r
99 return @new_artist_url() if @authenticate('artist', params)
\r
103 'user_seeeions/new'
\r
105 new_author_url: () ->
\r
108 new_artist_url: () ->
\r
111 # render App(render:all)
\r
113 params = @home_params()
\r
114 @trigger('go', params)
\r
118 params['controller'] = 'folders'
\r
119 params['action'] = 'root'
\r
122 # controller/id/action case
\r
123 # ex) scrolls/3/edit
\r
124 c_i_a: (controller, id, action, query_string, form) ->
\r
125 params = @c_i_a_params(controller, id, action, query_string)
\r
126 if safe_url = @block(params)
\r
127 @trigger('deny', params, form, safe_url)
\r
129 @trigger('go', params, form)
\r
131 c_i_a_params: (controller, id, action, query_string) ->
\r
132 params = @parse_query_string(query_string)
\r
133 params['controller'] = controller
\r
134 params['format'] = 'html'
\r
137 params['format'] = t[1]
\r
139 t = action.split('.')
\r
141 params['format'] = t[1]
\r
143 if Pettanr.is_number(action)
\r
144 params['action'] = id
\r
145 params['id'] = action
\r
147 params['action'] = action
\r
151 # controller and id case
\r
153 c_i: (controller, id, query_string, form) ->
\r
154 params = @c_i_params(controller, id, query_string)
\r
155 if safe_url = @block(params)
\r
156 @trigger('deny', params, form, safe_url)
\r
158 @trigger('go', params, form)
\r
160 c_i_params: (controller, id, query_string) ->
\r
161 params = @parse_query_string(query_string)
\r
162 params['controller'] = controller
\r
163 params['format'] = 'html'
\r
166 params['format'] = t[1]
\r
168 if Pettanr.is_number(id)
\r
169 params['action'] = 'show'
\r
173 params['action'] = id
\r
175 params['action'] = 'index'
\r
178 # controller only case
\r
180 c: (controller, query_string, form) ->
\r
181 params = @c_params(controller, query_string)
\r
182 if safe_url = @block(params)
\r
183 @trigger('deny', params, form, safe_url)
\r
185 @trigger('go', params, form)
\r
187 c_params: (controller, query_string) ->
\r
188 params = @parse_query_string(query_string)
\r
189 params['controller'] = controller
\r
190 params['format'] = 'html'
\r
191 params['action'] = 'index'
\r
194 top_a: (action, query_string, form) ->
\r
195 params = @users_a_params(action, query_string)
\r
196 if safe_url = @block(params)
\r
197 @trigger('deny', params, safe_url)
\r
199 @trigger('go', params, form)
\r
201 top_a_params: (action, query_string) ->
\r
202 params = @parse_query_string(query_string)
\r
203 params['controller'] = 'top'
\r
204 params['format'] = 'html'
\r
205 params['action'] = action
\r
208 user_sessions_a: (action, query_string, form) ->
\r
209 params = @user_sessions_a_params(action, query_string)
\r
210 if safe_url = @block(params)
\r
211 @trigger('deny', params, safe_url)
\r
213 @trigger('go', params, form)
\r
215 user_sessions_a_params: (action, query_string) ->
\r
216 params = @parse_query_string(query_string)
\r
217 params['controller'] = 'user_sessions'
\r
218 params['format'] = 'html'
\r
219 params['action'] = action
\r
222 users_a: (action, query_string, form) ->
\r
223 params = @users_a_params(action, query_string)
\r
224 if safe_url = @block(params)
\r
225 @trigger('deny', params, safe_url)
\r
227 @trigger('go', params, form)
\r
229 users_a_params: (action, query_string) ->
\r
230 params = @parse_query_string(query_string)
\r
231 params['controller'] = 'users'
\r
232 params['format'] = 'html'
\r
233 params['action'] = action
\r
236 class Pettanr.GlobalRouter extends Pettanr.Router
\r
238 initialize: (options) ->
\r
240 _.each @peta_routes(), (r) =>
\r
241 @route(r.route, r.callback)
\r
243 class Pettanr.LocalRouter extends Pettanr.Router
\r
245 initialize: (options) ->
\r
249 navigate: (url, form) ->
\r
250 if route = @find_route(url)
\r
251 args = @_extractParameters(route.regex, url)
\r
253 n = route.callback # callback function name by string
\r
254 this[n].apply(this, args) # call to c_i_a, c_i, c
\r