class Pettanr.BeforeUnload constructor: (options) -> test: () -> if @is_lock() if confirm('leave? edit data unsaved') return 1 else return -1 0 is_lock: () -> if @params true else false lock: (params, form) -> @form = form @params = params unlock: () -> @form.quit() @params = null url: () -> Pettanr.params_to_url(@params) class Pettanr.Router extends Backbone.Router initialize: (options) -> super() _.extend(this, Backbone.Events) parse_query_string: (query_string) -> params = {} if query_string ary = _.map decodeURI(query_string).split(/&/g), (el, i) -> aux = el.split('=') o = {} if aux.length >= 1 val = undefined if aux.length == 2 val = aux[1] o[aux[0]] = val o _.each ary, (o) -> _.extend(params, o) params peta_routes: () -> [ {route: '', callback: 'home'}, {route: 'top/:action', callback: 'top_a'}, {route: 'home/:action', callback: 'home_a'}, {route: 'users/:action', callback: 'users_a'}, # no manifest route {route: 'user_sessions/:action', callback: 'user_sessions_a'}, # no manifest route {route: ':controller/:id/:action?*query_string', callback: 'c_i_a'}, {route: ':controller/:id/:action', callback: 'c_i_a'}, {route: ':controller/:id?*query_string', callback: 'c_i'}, {route: ':controller/:id', callback: 'c_i'}, {route: ':controller?*query_string', callback: 'c'}, {route: ':controller', callback: 'c'}, ] find_route: (url) -> r = null _.any @peta_routes(), (route) => route.regex = @_routeToRegExp(route.route) if route.regex.test(url) r = route r url_to_params: (url) -> if route = @find_route(url) args = @_extractParameters(route.regex, url) n = route.callback # callback function name by string this[n + '_params'].apply(this, args) # call to c_i_a_params, c_i_params, c_params else {} # render App(render:all) home: () -> params = @home_params() @trigger('go', params) home_params: () -> params = {} params['controller'] = 'folders' params['action'] = 'root' params # controller/id/action case # ex) scrolls/3/edit c_i_a: (controller, id, action, query_string, form) -> params = @c_i_a_params(controller, id, action, query_string) @trigger('go', params, form) c_i_a_params: (controller, id, action, query_string) -> params = @parse_query_string(query_string) params['controller'] = controller params['format'] = 'html' t = id.split('.') if t.length > 1 params['format'] = t[1] id = t[0] t = action.split('.') if t.length > 1 params['format'] = t[1] action = t[0] if Pettanr.is_number(action) params['action'] = id params['id'] = action else params['action'] = action params['id'] = id params # controller and id case # ex) scrolls/3 c_i: (controller, id, query_string, form) -> params = @c_i_params(controller, id, query_string) @trigger('go', params, form) c_i_params: (controller, id, query_string) -> params = @parse_query_string(query_string) params['controller'] = controller params['format'] = 'html' t = id.split('.') if t.length > 1 params['format'] = t[1] id = t[0] if Pettanr.is_number(id) params['action'] = 'show' params['id'] = id else if id params['action'] = id else params['action'] = 'index' params # controller only case # ex) scrolls c: (controller, query_string, form) -> params = @c_params(controller, query_string) @trigger('go', params, form) c_params: (controller, query_string) -> params = @parse_query_string(query_string) params['controller'] = controller params['format'] = 'html' params['action'] = 'index' params top_a: (action, query_string, form) -> params = @users_a_params(action, query_string) @trigger('go', params, form) top_a_params: (action, query_string) -> params = @parse_query_string(query_string) params['controller'] = 'top' params['format'] = 'html' params['action'] = action params home_a: (action, query_string, form) -> params = @home_a_params(action, query_string) @trigger('go', params, form) home_a_params: (action, query_string) -> params = @parse_query_string(query_string) params['controller'] = 'home' params['format'] = 'html' params['action'] = action params user_sessions_a: (action, query_string, form) -> params = @user_sessions_a_params(action, query_string) @trigger('go', params, form) user_sessions_a_params: (action, query_string) -> params = @parse_query_string(query_string) params['controller'] = 'user_sessions' params['format'] = 'html' params['action'] = action params users_a: (action, query_string, form) -> params = @users_a_params(action, query_string) @trigger('go', params, form) users_a_params: (action, query_string) -> params = @parse_query_string(query_string) params['controller'] = 'users' params['format'] = 'html' params['action'] = action params class Pettanr.GlobalRouter extends Pettanr.Router initialize: (options) -> super(options) _.each @peta_routes(), (r) => @route(r.route, r.callback) class Pettanr.LocalRouter extends Pettanr.Router initialize: (options) -> super(options) # selfish navigate navigate: (url, form) -> if route = @find_route(url) args = @_extractParameters(route.regex, url) args.push(form) n = route.callback # callback function name by string this[n].apply(this, args) # call to c_i_a, c_i, c