OSDN Git Service

fix: show's destroy button
[pettanr/pettanr.git] / app / assets / javascripts / routes.js.coffee
index 4b77dbc..8058b41 100644 (file)
@@ -1,5 +1,38 @@
+class Pettanr.BeforeUnload\r
+  \r
+  constructor: (options) ->\r
+  \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
+  is_lock: () ->\r
+    if @params\r
+      true\r
+    else\r
+      false\r
+  \r
+  lock: (params, form) ->\r
+    @form = form\r
+    @params = params\r
+  \r
+  unlock: () ->\r
+    @form.quit()\r
+    @params = null\r
+  \r
+  url: () ->\r
+    Pettanr.params_to_url(@params)\r
+  \r
 class Pettanr.Router extends Backbone.Router\r
   \r
+  initialize: (options) ->\r
+    super()\r
+    _.extend(this, Backbone.Events)\r
+  \r
   parse_query_string: (query_string) ->\r
     params = {}\r
     if query_string\r
@@ -16,30 +49,41 @@ class Pettanr.Router extends Backbone.Router
         _.extend(params, o)\r
     params\r
   \r
-  initialize: () ->\r
-    _.each @peta_routes(), (r) =>\r
-      @route(r.route, r.callback)\r
-    @body = new Pettanr.AppBody()\r
-  \r
-  fire: (params, dialog) ->\r
-    b = dialog || @body\r
-    b.fire(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
-      {route: 'users/sign_in', callback: 'user_sign_in'}, \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
+      {}\r
+  \r
+  # render App(render:all)\r
   home: () ->\r
     params = @home_params()\r
-    @fire(params)\r
+    @trigger('go', params)\r
   \r
   home_params: () ->\r
     params = {}\r
@@ -49,9 +93,9 @@ class Pettanr.Router extends Backbone.Router
   \r
   # controller/id/action case\r
   # ex) scrolls/3/edit\r
-  c_i_a: (controller, id, action, query_string) ->\r
+  c_i_a: (controller, id, action, query_string, form) ->\r
     params = @c_i_a_params(controller, id, action, query_string)\r
-    @fire(params)\r
+    @trigger('go', params, form)\r
   \r
   c_i_a_params: (controller, id, action, query_string) ->\r
     params = @parse_query_string(query_string)\r
@@ -75,9 +119,9 @@ class Pettanr.Router extends Backbone.Router
   \r
   # controller and id case\r
   # ex) scrolls/3\r
-  c_i: (controller, id, query_string) ->\r
+  c_i: (controller, id, query_string, form) ->\r
     params = @c_i_params(controller, id, query_string)\r
-    @fire(params)\r
+    @trigger('go', params, form)\r
   \r
   c_i_params: (controller, id, query_string) ->\r
     params = @parse_query_string(query_string)\r
@@ -99,9 +143,9 @@ class Pettanr.Router extends Backbone.Router
   \r
   # controller only case\r
   # ex) scrolls\r
-  c: (controller, query_string) ->\r
+  c: (controller, query_string, form) ->\r
     params = @c_params(controller, query_string)\r
-    @fire(params)\r
+    @trigger('go', params, form)\r
   \r
   c_params: (controller, query_string) ->\r
     params = @parse_query_string(query_string)\r
@@ -110,113 +154,67 @@ class Pettanr.Router extends Backbone.Router
     params['action'] = 'index'\r
     params\r
   \r
-  user_sign_in: () ->\r
-    r = new Pettanr.UsersController()\r
-    r.index()\r
+  top_a: (action, query_string, form) ->\r
+    params = @users_a_params(action, query_string)\r
+    @trigger('go', params, form)\r
   \r
-  navigate: (fragment, options) ->\r
-    if window.editor\r
-      if confirm('leave? edit data unsaved')\r
-        window.editor.quit()\r
-        super(fragment, options)\r
-      else\r
-        false\r
-    else\r
-      super(fragment, options)\r
-  \r
-  local_navigate: (url, el) ->\r
-    _.any @peta_routes(), (r) =>\r
-      route = @_routeToRegExp(r.route)\r
-      if route.test(url)\r
-        args = @_extractParameters(route, url)\r
-        args.unshift(el)\r
-        n = 'local_' + r.callback\r
-        this[n].apply(this, args)\r
-  \r
-  # from Backbone.History.loadUrl(fragment)\r
-  local_home: (el) ->\r
-    params = @home_params()\r
-    @fire(params, el)\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
-  local_c_i_a: (el, controller, id, action, query_string) ->\r
-    params = @c_i_a_params(controller, id, action, query_string)\r
-    @fire(params, el)\r
+  home_a: (action, query_string, form) ->\r
+    params = @home_a_params(action, query_string)\r
+    @trigger('go', params, form)\r
   \r
-  local_c_i: (el, controller, id, query_string) ->\r
-    params = @c_i_params(controller, id, query_string)\r
-    @fire(params, el)\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
-  local_c: (el, controller, query_string) ->\r
-    params = @c_params(controller, query_string)\r
-    @fire(params, el)\r
-  \r
-  local_user_sign_in: (el) ->\r
-    console.log('user_sign_in');\r
-  \r
-  hoge: () ->\r
-    names = _.map Manifest.manifest().controllers, (controller_manifest, controller_name) ->\r
-      c = Pettanr[Pettanr.camelize(controller_name) + 'Controller']\r
-      controller = new c\r
-      _.map controller_manifest.actions, (action_manifest, action_name) =>\r
-        {\r
-          event_name: controller_name + '_' + action_name, \r
-          controller: controller,\r
-          controller_name: controller_name,\r
-          action_manifest: action_manifest,\r
-          action_name: action_name\r
-        }\r
-    _.each _.flatten(names), (status) =>\r
-      _status = status\r
-      switch status.action_manifest.type\r
-        when 'list'\r
-          e = status.event_name\r
-          e_f = e + '_format'\r
-          this[e] = (queryString) =>\r
-            params = @parse_query_string(query_string)\r
-            console.log(params)\r
-            _status.controller[_status.action_name](params)\r
-          c = _status.controller_name\r
-          a = _status.action_name\r
-          c_a_url = c + '/' + a\r
-          @route(c_a_url, e)\r
-          r = r + '?*queryString'\r
-          @route(r, _status.event_name)\r
-          if _status.action_name == 'index'\r
-            r = _status.controller_name + '/'\r
-            @route(r, _status.event_name)\r
-        when 'show'\r
-          e = status.event_name\r
-          e_f = e + '_format'\r
-          this[e] = (id, query_string) =>\r
-            params = @parse_query_string(query_string)\r
-            t = id.split('.')\r
-            if t.length > 1\r
-              params['format'] = t[1]\r
-              id = t[0]\r
-            console.log(id)\r
-            console.log(params)\r
-            _status.controller[_status.action_name](id, params)\r
-          this[e_f] = (id, format, query_string) =>\r
-            params = @parse_query_string(query_string)\r
-            params['format'] = format\r
-            console.log(id)\r
-            console.log(params)\r
-            _status.controller[_status.action_name](id, params)\r
-          c = _status.controller_name\r
-          a = _status.action_name\r
-          q = '?*query_string'\r
-          i = '\/([0-9]+)'\r
-          c_id_a_url = c + '/:id/' + a\r
-          c_id_a_f_url = c + '/:id/' + a + '.:format'\r
-          c_id_a_q_url = c_id_a_url + q\r
-          c_id_a_q_url = c_id_a_url + '.:format' + q\r
-          @route(c_id_a_q_url, e_f)\r
-          @route(c_id_a_q_url, e)\r
-          @route(c_id_a_f_url, e_f)\r
-          @route(c_id_a_url, e)\r
-          if a == 'show'\r
-            c_id_url = c + '/:id'\r
-            c_id_q_url = c_id_url + q\r
-            @route(c_id_q_url, e)\r
-            @route(c_id_url, e)\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