OSDN Git Service

fix: show's destroy button
[pettanr/pettanr.git] / app / assets / javascripts / routes.js.coffee
index 60033f0..8058b41 100644 (file)
-class Pettanr.Router extends Backbone.Router\r
-  routes: {\r
-    'folders/:id': 'folders_show'\r
-    'scrolls/': 'scrolls_index'\r
-    'aa': 'folders_show'\r
-  }\r
-  \r
-  index: (r, a) ->\r
-  \r
-  show_html_format: (format) -> \r
-  \r
-  show: (id) ->\r
+class Pettanr.BeforeUnload\r
   \r
-  count: () ->\r
+  constructor: (options) ->\r
   \r
-  new: () ->\r
+  test: () ->\r
+    if @is_lock()\r
+      if confirm('leave? edit data unsaved')\r
+        return 1\r
+      else\r
+        return -1\r
+    0\r
   \r
-  edit: () ->\r
-  \r
-  create: () ->\r
+  is_lock: () ->\r
+    if @params\r
+      true\r
+    else\r
+      false\r
   \r
-  update: () ->\r
+  lock: (params, form) ->\r
+    @form = form\r
+    @params = params\r
   \r
-  destroy: () ->\r
-    \r
-  folders_index: () ->\r
+  unlock: () ->\r
+    @form.quit()\r
+    @params = null\r
   \r
-  folders_root: () ->\r
+  url: () ->\r
+    Pettanr.params_to_url(@params)\r
   \r
-  folders_show_html_format: (format) -> \r
+class Pettanr.Router extends Backbone.Router\r
   \r
-  folders_show: (id) ->\r
-    @item = new Pettanr.FolderWatch({id: id})\r
-    _this = this\r
-    @item.fetch({}).done () ->\r
-      _this.render()\r
-    \r
-  render: () ->\r
-    if @item.is_remote()\r
-      window.router.navigate(@item.remote_name(), true)\r
+  initialize: (options) ->\r
+    super()\r
+    _.extend(this, Backbone.Events)\r
+  \r
+  parse_query_string: (query_string) ->\r
+    params = {}\r
+    if query_string\r
+      ary = _.map decodeURI(query_string).split(/&/g), (el, i) ->\r
+        aux = el.split('=')\r
+        o = {}\r
+        if aux.length >= 1\r
+          val = undefined\r
+          if aux.length == 2\r
+            val = aux[1]\r
+          o[aux[0]] = val\r
+          o\r
+      _.each ary, (o) -> \r
+        _.extend(params, o)\r
+    params\r
+  \r
+  peta_routes: () ->\r
+    [\r
+      {route: '', callback: 'home'}, \r
+      {route: 'top/:action', callback: 'top_a'}, \r
+      {route: 'home/:action', callback: 'home_a'}, \r
+      {route: 'users/:action', callback: 'users_a'},   # no manifest route\r
+      {route: 'user_sessions/:action', callback: 'user_sessions_a'},    # no manifest route\r
+      {route: ':controller/:id/:action?*query_string', callback: 'c_i_a'}, \r
+      {route: ':controller/:id/:action', callback: 'c_i_a'}, \r
+      {route: ':controller/:id?*query_string', callback: 'c_i'}, \r
+      {route: ':controller/:id', callback: 'c_i'}, \r
+      {route: ':controller?*query_string', callback: 'c'}, \r
+      {route: ':controller', callback: 'c'}, \r
+    ]\r
+  \r
+  find_route: (url) ->\r
+    r = null\r
+    _.any @peta_routes(), (route) =>\r
+      route.regex = @_routeToRegExp(route.route)\r
+      if route.regex.test(url)\r
+        r = route\r
+    r\r
+  \r
+  url_to_params: (url) ->\r
+    if route = @find_route(url)\r
+      args = @_extractParameters(route.regex, url)\r
+      n = route.callback  # callback function name by string\r
+      this[n + '_params'].apply(this, args)  # call to c_i_a_params, c_i_params, c_params\r
     else\r
-      list_result = new Pettanr.Folder.Children({id: @item.id})\r
-      new Pettanr.FilerRender('folder', list_result, 'default', window.operators)\r
-  \r
-  folders_count: () ->\r
-  \r
-  folders_new: () ->\r
-  \r
-  folders_edit: () ->\r
-  \r
-  scrolls_index: () ->\r
-    list_result = new Pettanr.Scroll.Collection({})\r
-    new Pettanr.FilerRender('scroll', list_result, 'default', window.operators)\r
+      {}\r
+  \r
+  # render App(render:all)\r
+  home: () ->\r
+    params = @home_params()\r
+    @trigger('go', params)\r
+  \r
+  home_params: () ->\r
+    params = {}\r
+    params['controller'] = 'folders'\r
+    params['action'] = 'root'\r
+    params\r
+  \r
+  # controller/id/action case\r
+  # ex) scrolls/3/edit\r
+  c_i_a: (controller, id, action, query_string, form) ->\r
+    params = @c_i_a_params(controller, id, action, query_string)\r
+    @trigger('go', params, form)\r
+  \r
+  c_i_a_params: (controller, id, action, query_string) ->\r
+    params = @parse_query_string(query_string)\r
+    params['controller'] = controller\r
+    params['format'] = 'html'\r
+    t = id.split('.')\r
+    if t.length > 1\r
+      params['format'] = t[1]\r
+      id = t[0]\r
+    t = action.split('.')\r
+    if t.length > 1\r
+      params['format'] = t[1]\r
+      action = t[0]\r
+    if Pettanr.is_number(action)\r
+      params['action'] = id\r
+      params['id'] = action\r
+    else\r
+      params['action'] = action\r
+      params['id'] = id\r
+    params\r
+  \r
+  # controller and id case\r
+  # ex) scrolls/3\r
+  c_i: (controller, id, query_string, form) ->\r
+    params = @c_i_params(controller, id, query_string)\r
+    @trigger('go', params, form)\r
+  \r
+  c_i_params: (controller, id, query_string) ->\r
+    params = @parse_query_string(query_string)\r
+    params['controller'] = controller\r
+    params['format'] = 'html'\r
+    t = id.split('.')\r
+    if t.length > 1\r
+      params['format'] = t[1]\r
+      id = t[0]\r
+    if Pettanr.is_number(id)\r
+      params['action'] = 'show'\r
+      params['id'] = id\r
+    else\r
+      if id\r
+        params['action'] = id\r
+      else\r
+        params['action'] = 'index'\r
+    params\r
+  \r
+  # controller only case\r
+  # ex) scrolls\r
+  c: (controller, query_string, form) ->\r
+    params = @c_params(controller, query_string)\r
+    @trigger('go', params, form)\r
+  \r
+  c_params: (controller, query_string) ->\r
+    params = @parse_query_string(query_string)\r
+    params['controller'] = controller\r
+    params['format'] = 'html'\r
+    params['action'] = 'index'\r
+    params\r
+  \r
+  top_a: (action, query_string, form) ->\r
+    params = @users_a_params(action, query_string)\r
+    @trigger('go', params, form)\r
+  \r
+  top_a_params: (action, query_string) ->\r
+    params = @parse_query_string(query_string)\r
+    params['controller'] = 'top'\r
+    params['format'] = 'html'\r
+    params['action'] = action\r
+    params\r
+  \r
+  home_a: (action, query_string, form) ->\r
+    params = @home_a_params(action, query_string)\r
+    @trigger('go', params, form)\r
+  \r
+  home_a_params: (action, query_string) ->\r
+    params = @parse_query_string(query_string)\r
+    params['controller'] = 'home'\r
+    params['format'] = 'html'\r
+    params['action'] = action\r
+    params\r
+  \r
+  user_sessions_a: (action, query_string, form) ->\r
+    params = @user_sessions_a_params(action, query_string)\r
+    @trigger('go', params, form)\r
+  \r
+  user_sessions_a_params: (action, query_string) ->\r
+    params = @parse_query_string(query_string)\r
+    params['controller'] = 'user_sessions'\r
+    params['format'] = 'html'\r
+    params['action'] = action\r
+    params\r
+  \r
+  users_a: (action, query_string, form) ->\r
+    params = @users_a_params(action, query_string)\r
+    @trigger('go', params, form)\r
+  \r
+  users_a_params: (action, query_string) ->\r
+    params = @parse_query_string(query_string)\r
+    params['controller'] = 'users'\r
+    params['format'] = 'html'\r
+    params['action'] = action\r
+    params\r
+\r
+class Pettanr.GlobalRouter extends Pettanr.Router\r
+  \r
+  initialize: (options) ->\r
+    super(options)\r
+    _.each @peta_routes(), (r) =>\r
+      @route(r.route, r.callback)\r
+  \r
+class Pettanr.LocalRouter extends Pettanr.Router\r
+  \r
+  initialize: (options) ->\r
+    super(options)\r
+  \r
+  # selfish navigate\r
+  navigate: (url, form) ->\r
+    if route = @find_route(url)\r
+      args = @_extractParameters(route.regex, url)\r
+      args.push(form)\r
+      n = route.callback  # callback function name by string\r
+      this[n].apply(this, args)  # call to c_i_a, c_i, c\r
   \r