OSDN Git Service

change router frame work
authoryasushiito <yas@pen-chan.jp>
Mon, 2 Mar 2015 04:56:57 +0000 (13:56 +0900)
committeryasushiito <yas@pen-chan.jp>
Mon, 2 Mar 2015 04:56:57 +0000 (13:56 +0900)
37 files changed:
app/assets/javascripts/ap.js
app/assets/javascripts/controllers.js.coffee
app/assets/javascripts/controllers/folders.js.coffee
app/assets/javascripts/controllers/scrolls.js.coffee
app/assets/javascripts/controllers/users.js.coffee
app/assets/javascripts/locmare/filer.js.coffee
app/assets/javascripts/locmare/filer/body.js.coffee
app/assets/javascripts/locmare/filer/body/file_body.js.coffee
app/assets/javascripts/locmare/filer/body/file_body/file_item.js.coffee
app/assets/javascripts/locmare/filer/body/file_body/file_item/caption/default.js.coffee
app/assets/javascripts/locmare/filer/body/file_body/file_item/edit/account.js.coffee
app/assets/javascripts/locmare/filer/body/file_body/file_item/edit/default.js.coffee
app/assets/javascripts/locmare/filer/body/file_body/file_item/edit/template.js.coffee
app/assets/javascripts/locmare/filer/body/file_body/file_item/summary/template.js.coffee
app/assets/javascripts/locmare/filer/body/file_body/file_item/symbol/default.js.coffee
app/assets/javascripts/locmare/form.js.coffee
app/assets/javascripts/manifest/controller/action/base.js.coffee
app/assets/javascripts/models/user.js.coffee
app/assets/javascripts/peta/item.js.coffee
app/assets/javascripts/pettanr.js.coffee
app/assets/javascripts/pettanr/action_filter.js.coffee
app/assets/javascripts/pettanr/proxy.js.coffee [new file with mode: 0644]
app/assets/javascripts/routes.js.coffee
app/assets/javascripts/views/balloons/summary.js.coffee
app/assets/javascripts/views/common.js.coffee
app/assets/javascripts/views/ground_colors/summary.js.coffee
app/assets/javascripts/views/ground_pictures/summary.js.coffee
app/assets/javascripts/views/layout.js.coffee
app/assets/javascripts/views/layouts/sns.js.coffee
app/assets/javascripts/views/original_pictures/summary.js.coffee
app/assets/javascripts/views/panel_pictures/summary.js.coffee
app/assets/javascripts/views/panels/summary.js.coffee
app/assets/javascripts/views/speech_balloons/summary.js.coffee
app/assets/javascripts/views/speeches/summary.js.coffee
app/assets/javascripts/views/user_sessions/new.js.coffee
app/assets/javascripts/views/users/account.js.coffee
app/assets/javascripts/views/users/guest.js.coffee

index e1e8eec..3050d91 100644 (file)
 //= require ./pettanr/pettan_imager
 //= require ./pettanr/operator
 //= require ./pettanr/action_filter
+//= require ./pettanr/proxy
 //= require ./backbone.fetch-cache
 //= require main
index b59e757..c1be8b7 100644 (file)
@@ -1,17 +1,11 @@
 class Pettanr.AppController\r
   \r
-  constructor: (@params, @operators) ->\r
+  constructor: (@params, @form, @operators) ->\r
     _.extend(this, Backbone.Events)\r
   \r
-  @new2: (params, operators) ->\r
+  @new2: (params, form, operators) ->\r
     c = Pettanr[Pettanr.camelize(params['controller']) + 'Controller']\r
-    new c(params, operators)\r
-  \r
-  @fire: (params, operators, refresh_function) ->\r
-    controller = Pettanr.AppController.new2(params, operators)\r
-    @listener_function(controller, refresh_function)\r
-    action_name = params['action']\r
-    controller[action_name]()\r
+    new c(params, form, operators)\r
   \r
   set_model: () ->\r
     @my_controller = Manifest.manifest().controllers[@params['controller']]\r
@@ -71,7 +65,7 @@ class Pettanr.AppController
       @listenTo(profiler, 'navigate', @navigate)\r
       profiler.render()\r
       @trigger('ready', profiler)\r
-      @trigger('retitle', @params)\r
+      @trigger('title', @params)\r
   \r
   set_new: () ->\r
     @set_model()\r
@@ -80,12 +74,12 @@ class Pettanr.AppController
     # Backbone.Model has defaults property\r
     #@item.supply_default()\r
   \r
-  set_edit: (save_func) ->\r
+  set_edit: () ->\r
     @set_model()\r
     @item = new @my_model_class({id: @params['id']})\r
     @item.fetch({cache: true}).done =>\r
       @item.boosts 'post'\r
-      @render_form(save_func)\r
+      @render_form()\r
   \r
   render_form: () ->\r
     @form = Locmare.Form.factory({\r
@@ -97,8 +91,6 @@ class Pettanr.AppController
       operators: @operators,\r
       action: '/' + @item.table_name() + '/' + Pettanr.to_s(@item.get('id'))\r
     })\r
-    @listenTo(@form, 'post', @create)\r
-    @listenTo(@form, 'put', @update)\r
     @form.render()\r
     @trigger('ready', @form)\r
   \r
@@ -109,6 +101,20 @@ class Pettanr.AppController
   form_edit: () ->\r
     @set_edit()\r
   \r
+  post_success: (model, response) ->\r
+    @trigger('redirect', @form.item.show_url())\r
+    @trigger('success', model, response)\r
+  \r
+  post_fail: (model, response) ->\r
+    @trigger('fail', response)\r
+  \r
+  destroy_success: (model, response) ->\r
+    @trigger('redirect', '/home/' + model.path_name())\r
+    @trigger('success', model, response)\r
+  \r
+  destroy_fail: (model, response) ->\r
+    @trigger('fail', response)\r
+  \r
   navigate: (url) ->\r
     @trigger('navigate', url)\r
   \r
index 266a1c0..de37cba 100644 (file)
@@ -1,11 +1,11 @@
 class Pettanr.FoldersController extends Pettanr.AppController\r
   \r
   index: () ->\r
-    @trigger('retitle', @params)\r
+    @trigger('title', @params)\r
     @filer_list()\r
   \r
   root: () ->\r
-    @trigger('retitle', @params)\r
+    @trigger('title', @params)\r
     @set_model()\r
     @item = new Pettanr.Folder.Root()\r
     @item.fetch({cache: true}).done =>\r
@@ -14,7 +14,7 @@ class Pettanr.FoldersController extends Pettanr.AppController
   show_html_format: (format) -> \r
   \r
   children_html: () -> \r
-    @trigger('retitle', @params, @item.get('name'))\r
+    @trigger('title', @params, @item.get('name'))\r
     collection = new Pettanr.Folder.Children({id: @item.get('id')})\r
     collection.fetch({cache: true}).done =>\r
       filer = new Locmare.Filer({\r
@@ -23,7 +23,6 @@ class Pettanr.FoldersController extends Pettanr.AppController
         pager: null, \r
         operators: @operators\r
       })\r
-      @listenTo(filer, 'navigate', @navigate)\r
       @trigger('ready', filer)\r
   \r
   show: () ->\r
@@ -35,31 +34,31 @@ class Pettanr.FoldersController extends Pettanr.AppController
       @item = new Pettanr.FolderWatch({id: @params['id']})\r
       @item.fetch({cache: true}).done () =>\r
         if @item.is_remote()\r
-          vp = new Pettanr.ViewPicker({operators: @operators})\r
-          @listenTo(vp, 'ready', @refresh)\r
-          @listenTo(vp, 'retitle', @retitle)\r
-          @listenTo(vp, 'redirect', @redirect_to)\r
-          vp.navigate(@item.remote_url())\r
+          proxy = new Pettanr.Proxy({operators: @operators})\r
+          @listenTo(proxy, 'ready', @refresh)\r
+          @listenTo(proxy, 'title', @title)\r
+          @listenTo(proxy, 'done', @done)\r
+          proxy.http_get(@item.remote_url())\r
         else\r
           @children_html()\r
   \r
   count: () ->\r
   \r
   new: () ->\r
-    @trigger('retitle', @params)\r
+    @trigger('title', @params)\r
     @form_new()\r
   \r
   edit: () ->\r
-    @trigger('retitle', @params)\r
+    @trigger('title', @params)\r
     @form_edit()\r
   \r
   # for remote folder\r
   refresh: (view) ->\r
     @trigger('ready', view)\r
   \r
-  retitle: (params, str = null) ->\r
-    @trigger('retitle', @params, str = null)\r
+  title: (params, str = null) ->\r
+    @trigger('title', @params, str = null)\r
   \r
-  redirect_to: (url) ->\r
-    @trigger('redirect', url)\r
+  done: (url) ->\r
+    @trigger('done', url)\r
   \r
index cf85332..cd05924 100644 (file)
@@ -1,20 +1,20 @@
 class Pettanr.ScrollsController extends Pettanr.AppController\r
   \r
   index: () ->\r
-    @trigger('retitle', @params)\r
+    @trigger('title', @params)\r
     @filer_list()\r
   \r
   by_author: () ->\r
-    @trigger('retitle', @params)\r
+    @trigger('title', @params)\r
     @filer_list()\r
   \r
   by_panel: () ->\r
-    @trigger('retitle', @params)\r
+    @trigger('title', @params)\r
     @filer_list()\r
   \r
   show_html: () -> \r
     @item.fetch({cache: true}).done =>\r
-      @trigger('retitle', @params, @item.get('title'))\r
+      @trigger('title', @params, @item.get('title'))\r
       show = new Pettanr.Views.Scroll.Show({\r
         item: @item,\r
         operators: @operators\r
@@ -34,7 +34,7 @@ class Pettanr.ScrollsController extends Pettanr.AppController
     @set_play()\r
     @item.fetch({cache: true}).done =>\r
       @list.open(() => \r
-        @trigger('retitle', @params, @item.get('title'))\r
+        @trigger('title', @params, @item.get('title'))\r
         show = new Pettanr.Views.Scroll.Play({\r
           item: @item,\r
           list: @list,\r
@@ -45,31 +45,31 @@ class Pettanr.ScrollsController extends Pettanr.AppController
       )\r
   \r
   new: () ->\r
-    @trigger('retitle', @params)\r
+    @trigger('title', @params)\r
     @form_new()\r
   \r
   edit: () ->\r
-    @trigger('retitle', @params)\r
+    @trigger('title', @params)\r
     @form_edit()\r
   \r
-  create: (form) ->\r
-    form.item.overwrite(@operators)\r
-    if form.save()\r
-      @trigger('redirect', form.item.show_url())\r
-    else\r
-      @not_created()\r
+  create: () ->\r
+    @form.item.overwrite(@operators)\r
+    @listenTo(@form, 'success', @post_success)\r
+    @listenTo(@form, 'fail', @post_fail)\r
+    @form.save()\r
   \r
-  update: (form) ->\r
-    form.item.overwrite(@operators)\r
-    if form.save()\r
-      @trigger('redirect', form.item.show_url())\r
-    else\r
-      @not_updated()\r
+  update: () ->\r
+    @form.item.overwrite(@operators)\r
+    @listenTo(@form, 'success', @post_success)\r
+    @listenTo(@form, 'fail', @post_fail)\r
+    @form.save()\r
   \r
   destroy: () ->\r
-    @set_model()\r
-    @item = @my_model_class.edit(params['id'], @operators)\r
-    @render_destroy('/home/' + @item.path_name())\r
+    @set_show()\r
+    @item.fetch({cache: true}).done =>\r
+      @listenTo(@item, 'destroy:success', @destroy_success)\r
+      @listenTo(@item, 'destroy:fail', @destroy_fail)\r
+      @item.destroy()\r
   \r
   redirected: (view) ->\r
     @trigger('ready', view)\r
index 6f3369a..5f288d1 100644 (file)
@@ -1,17 +1,20 @@
 class Pettanr.UsersController extends Pettanr.AppController\r
   \r
-  # receive user authoring form data as post\r
-  #sign_in: (attr) ->\r
-  \r
   # try getting current user\r
   test: () ->\r
-    @user = new Pettanr.User.Session()\r
+    @user = new Pettanr.User.Session()  # ignore @form\r
     @listenTo(@user, 'sign_in:success', @sign_in_success)\r
     @listenTo(@user, 'sign_in:fail', @sign_in_fail)\r
     @user.save({})\r
   \r
+  sign_in: () ->\r
+    # form is Pettanr.User.Session\r
+    @listenTo(@form, 'sign_in:success', @sign_in_success)\r
+    @listenTo(@form, 'sign_in:fail', @sign_in_fail)\r
+    @form.save({})\r
+  \r
   sign_out: () ->\r
-    @user = new Pettanr.User.Session()\r
+    @user = new Pettanr.User.Session()  # ignore @form\r
     @listenTo(@user, 'sign_out:success', @sign_out_success)\r
     @listenTo(@user, 'sign_out:fail', @sign_out_fail)\r
     @user.destroy()\r
@@ -28,20 +31,19 @@ class Pettanr.UsersController extends Pettanr.AppController
     view.render()\r
     @trigger('ready', view)\r
   \r
-  guest: () ->\r
-    view = new Pettanr.Views.User.Guest({})\r
-    view.render()\r
-    @trigger('ready', view)\r
-  \r
   sign_in_success: (user, response) ->\r
-    @trigger('sign_in:success', user, response)\r
+    @trigger('success', user, response)\r
+    @trigger('sign_in', user)\r
+    @trigger('redirect', 'folders/root')\r
   \r
   sign_in_fail: (user, response) ->\r
-    @trigger('sign_in:fail', user, response)\r
+    @trigger('fail', response)\r
   \r
   sign_out_success: (user, response) ->\r
-    @trigger('sign_out:success', user, response)\r
+    @trigger('success', user, response)\r
+    @trigger('sign_out')\r
+    @trigger('redirect', 'user_sessions/new')\r
   \r
   sign_out_fail: (user, response) ->\r
-    @trigger('sign_out:fail', user, response)\r
+    @trigger('fail', response)\r
   \r
index 382f8d5..eb65acd 100644 (file)
@@ -14,8 +14,9 @@ class Locmare.Filer extends Backbone.View
     @listenTo(@body, 'click:symbol', @click_symbol)\r
     @listenTo(@body, 'click:caption', @click_caption)\r
     @listenTo(@body, 'click:prof', @click_prof)\r
-    @listenTo(@body, 'navigate', @navigate)\r
-    @listenTo(@pager, 'navigate', @navigate) if @pager\r
+    @listenTo(@body, 'http_get', @http_get)\r
+    @listenTo(@body, 'http_post', @http_post)\r
+    @listenTo(@pager, 'http_get', @http_get) if @pager\r
     @render()\r
   \r
   render: () ->\r
@@ -37,7 +38,7 @@ class Locmare.Filer extends Backbone.View
   \r
   click_header: (url) ->\r
     @trigger('click:header', url)\r
-    @trigger('navigate', url)\r
+    @http_get(url)\r
   \r
   click_symbol: (item_view) ->\r
     @trigger('click:symbol', item_view)\r
@@ -48,8 +49,11 @@ class Locmare.Filer extends Backbone.View
   click_prof: (item_view) ->\r
     @trigger('click:prof', item_view)\r
   \r
-  navigate: (url) ->\r
-    @trigger('navigate', url)\r
+  http_get: (url) ->\r
+    @trigger('http_get', url)\r
+  \r
+  http_post: (url) ->\r
+    @trigger('http_post', url)\r
   \r
 class Locmare.FilerModule\r
 \r
index 41a956c..b293fcb 100644 (file)
@@ -7,7 +7,8 @@ class Locmare.FilerModule.Body extends Backbone.View
     @file_header = new Locmare.FilerModule.BodyModule.FileHeader({'body': this})\r
     @file_body = new Locmare.FilerModule.BodyModule.FileBody({'body': this})\r
     @listenTo(@file_body, 'click:symbol', @click_symbol)\r
-    @listenTo(@file_body, 'navigate', @navigate)\r
+    @listenTo(@file_body, 'http_get', @http_get)\r
+    @listenTo(@file_body, 'http_post', @http_post)\r
   \r
   render: () ->\r
     this.$el.append(@file_header.render().el)\r
@@ -37,8 +38,11 @@ class Locmare.FilerModule.Body extends Backbone.View
   click_symbol: (symbol_view) ->\r
     @trigger('click:symbol', symbol_view)\r
   \r
-  navigate: (url) ->\r
-    @trigger('navigate', url)\r
+  http_get: (url) ->\r
+    @trigger('http_get', url)\r
+  \r
+  http_post: (url) ->\r
+    @trigger('http_post', url)\r
   \r
 class Locmare.FilerModule.BodyModule\r
 \r
index 47d6b45..5f5643c 100644 (file)
@@ -8,7 +8,8 @@ class Locmare.FilerModule.BodyModule.FileBody extends Backbone.View
       fi = @file_item_class()\r
       file_item_view = new fi({'file_body': this, 'item': item})\r
       @listenTo(file_item_view, 'click:symbol', @click_symbol)\r
-      @listenTo(file_item_view, 'navigate', @navigate)\r
+      @listenTo(file_item_view, 'http_get', @http_get)\r
+      @listenTo(file_item_view, 'http_post', @http_post)\r
       file_item_view\r
     @render()\r
   \r
@@ -39,7 +40,10 @@ class Locmare.FilerModule.BodyModule.FileBody extends Backbone.View
   click_symbol: (symbol_view) ->\r
     @trigger('click:symbol', symbol_view)\r
   \r
-  navigate: (url) ->\r
-    @trigger('navigate', url)\r
+  http_get: (url) ->\r
+    @trigger('http_get', url)\r
+  \r
+  http_post: (url) ->\r
+    @trigger('http_post', url)\r
   \r
 class Locmare.FilerModule.BodyModule.FileBodyModule\r
index 5b68b3e..9fd97ea 100644 (file)
@@ -14,11 +14,12 @@ class Locmare.FilerModule.BodyModule.FileBodyModule.FileItem extends Backbone.Vi
     @listenTo(@symbol, 'click:symbol', @click_symbol)\r
     @listenTo(@caption, 'click:caption', @click_caption)\r
     @listenTo(@icon, 'click:prof', @click_prof)\r
-    @listenTo(@symbol, 'navigate', @navigate)\r
-    @listenTo(@caption, 'navigate', @navigate)\r
-    @listenTo(@summary, 'navigate', @navigate)\r
-    @listenTo(@icon, 'navigate', @navigate)\r
-    @listenTo(@edit, 'navigate', @navigate)\r
+    @listenTo(@symbol, 'http_get', @http_get)\r
+    @listenTo(@caption, 'http_get', @http_get)\r
+    @listenTo(@summary, 'http_get', @http_get)\r
+    @listenTo(@icon, 'http_get', @http_get)\r
+    @listenTo(@edit, 'http_get', @http_get)\r
+    @listenTo(@edit, 'http_post', @http_post)\r
   \r
   render: () ->\r
     if @symbol.is_visible()\r
@@ -58,10 +59,13 @@ class Locmare.FilerModule.BodyModule.FileBodyModule.FileItem extends Backbone.Vi
   \r
   click_prof: (url) ->\r
     @trigger('click:prof', this)\r
-    @trigger('navigate', url)\r
+    @trigger('http_get', url)\r
   \r
-  navigate: (url) ->\r
-    @trigger('navigate', url)\r
+  http_get: (url) ->\r
+    @trigger('http_get', url)\r
+  \r
+  http_post: (url) ->\r
+    @trigger('http_post', url)\r
   \r
 class Locmare.FilerModule.BodyModule.FileBodyModule.FileItemModule\r
 \r
index 5b1f920..6b65a8c 100644 (file)
@@ -26,7 +26,7 @@ class Locmare.FilerModule.BodyModule.FileBodyModule.FileItemModule.CaptionItemCo
   \r
   click: () ->\r
     @trigger('click:caption')\r
-    @trigger('navigate', @link.url())\r
+    @trigger('http_get', @link.url())\r
     false\r
   \r
   mdl: () ->\r
index e50865b..492beca 100644 (file)
@@ -31,5 +31,5 @@ class Locmare.FilerModule.BodyModule.FileBodyModule.FileItemModule.EditItemColum
     'home/configure'\r
    \r
   click_edit: () ->\r
-    @trigger('navigate', @edit_url())\r
+    @trigger('http_get', @edit_url())\r
   \r
index e7164d5..b770ffc 100644 (file)
@@ -41,8 +41,9 @@ class Locmare.FilerModule.BodyModule.FileBodyModule.FileItemModule.EditItemColum
     @image_dir() + 'remove.png'\r
   \r
   click_edit: () ->\r
-    @trigger('navigate', @item.edit_url())\r
+    @trigger('http_get', @item.edit_url())\r
   \r
   click_remove: () ->\r
-    @trigger('navigate', @item.destroy_url())\r
+    if confirm('remove?')\r
+      @trigger('http_post', @item.destroy_url())\r
   \r
index 2cff29c..9cbfb34 100644 (file)
@@ -8,13 +8,13 @@ class Locmare.FilerModule.BodyModule.FileBodyModule.FileItemModule.EditItemColum
     @view = new template_class(options)\r
   \r
   render: () ->\r
-    @listenTo(@view, 'navigate', @navigate)\r
+    @listenTo(@view, 'http_get', @http_get)\r
     this.$el.html(@view.render().el)\r
     this\r
   \r
   template_file_name: () ->\r
     @my_manifest.template_name\r
   \r
-  navigate: (url) ->\r
-    @trigger('navigate', url)\r
+  http_get: (url) ->\r
+    @trigger('http_get', url)\r
   \r
index 9148ff0..4f1ed3f 100644 (file)
@@ -6,10 +6,10 @@ class Locmare.FilerModule.BodyModule.FileBodyModule.FileItemModule.SummaryItemCo
   render: () ->\r
     view = Pettanr.Views[@item.singular()]\r
     summary = new view[view.summary()]({item: @item})\r
-    @listenTo(summary, 'navigate', @navigate)\r
+    @listenTo(summary, 'http_get', @http_get)\r
     this.$el.html(summary.el)\r
     this\r
   \r
-  navigate: (url) ->\r
-    @trigger('navigate', url)\r
+  http_get: (url) ->\r
+    @trigger('http_get', url)\r
   \r
index ba2d1fe..0c700e7 100644 (file)
@@ -25,7 +25,7 @@ class Locmare.FilerModule.BodyModule.FileBodyModule.FileItemModule.SymbolItemCol
   \r
   click: () ->\r
     @trigger('click:symbol')\r
-    @trigger('navigate', @link.url())\r
+    @trigger('http_get', @link.url())\r
     false\r
   \r
   mdl: () ->\r
index d1c2ed5..c8de918 100644 (file)
@@ -141,21 +141,29 @@ class Locmare.Form extends Locmare.FormBase
     _.each @fields, (field) =>\r
       @item.set(field.field_name, field.val())\r
     @item.unset('id')  # isNew use flag that id attr set\r
-    @trigger('post', this)\r
+    @trigger('http_post', @item.create_url(), this)\r
     return false\r
   \r
   put: () ->\r
     _.each @fields, (field) =>\r
       @item.set(field.field_name, field.val())\r
-    @trigger('put', this)\r
+    @trigger('http_post', @item.update_url(), this)\r
     return false\r
   \r
   save: (attrs = null, options = null) ->\r
+    @listenTo(@item, 'save:success', @success)\r
+    @listenTo(@item, 'save:fail', @fail)\r
     if attrs\r
       @item.save(attrs, options)\r
     else\r
       @item.save()\r
   \r
+  success: (model, response) ->\r
+    @trigger('success', model, response)\r
+  \r
+  fail: (model, response) ->\r
+    @trigger('fail', response)\r
+  \r
   valid: () ->\r
     window.router.navigate('/' + @item.table_name() + '/' + Pettanr.to_s(@item.get('id')), true)\r
     return false\r
index f5d74b7..5179037 100644 (file)
@@ -44,7 +44,7 @@ class Manifest.ControllerModule.ActionModule.Base extends ManifestBase.TypeNameA
   encode_url: (action_name, params) ->\r
     controller_name = @path_name()\r
     c = controller_name\r
-    a = if action_name == 'index' or action_name == 'show' or action_name == 'destroy'\r
+    a = if action_name == 'index' or action_name == 'show' # or action_name == 'destroy' # router does not detect delete method action\r
       ''\r
     else\r
       '/' + action_name\r
index 7d95518..78b27cc 100644 (file)
@@ -16,6 +16,9 @@ class Pettanr.User extends Backbone.Model
   \r
 class Pettanr.User.Session extends Pettanr.User\r
   \r
+  sign_in: () ->\r
+    @save({})\r
+  \r
   save: (model_attr) ->\r
     @url = '/users/sign_in'\r
     super(model_attr, {\r
index 477ad94..bce93d9 100644 (file)
@@ -160,12 +160,34 @@ class Peta.Item extends Backbone.Model
   prof_url: () ->\r
     Pettanr.url(@table_name(), 'show', {id: @get('id'), format: 'prof'})\r
   \r
+  create_url: () ->\r
+    Pettanr.url(@table_name(), 'create', {})\r
+  \r
   edit_url: () ->\r
     Pettanr.url(@table_name(), 'edit', {id: @get('id')})\r
   \r
+  update_url: () ->\r
+    Pettanr.url(@table_name(), 'update', {id: @get('id')})\r
+  \r
   destroy_url: () ->\r
     Pettanr.url(@table_name(), 'destroy', {id: @get('id')})\r
   \r
+  save: (model_attr) ->\r
+    super(model_attr || @attributes, {\r
+      success: (model, response, options) =>\r
+        @trigger('save:success', model, response)\r
+      error: (model, response, options) =>\r
+        @trigger('save:fail', model, response)\r
+    })\r
+  \r
+  destroy: () ->\r
+    super({\r
+      success: (model, response, options) =>\r
+        @trigger('destroy:success', model, response)\r
+      error: (model, response, options) =>\r
+        @trigger('destroy:fail', model, response)\r
+    })\r
+  \r
   is_editize: () ->\r
     @editor\r
   \r
index df7d50d..93d72de 100644 (file)
@@ -62,11 +62,16 @@ class Pettanr
     a.join('; ')\r
   \r
   @url: (controller_name, action_name, params) ->\r
-    controller = Manifest.manifest().controllers[controller_name]\r
-    action = controller.actions[action_name]\r
-    action.url(params)\r
+    if controller = Manifest.manifest().controllers[controller_name]\r
+      # convert from manifest\r
+      action = controller.actions[action_name]\r
+      action.url(params)\r
+    else\r
+      # has no manifest\r
+      controller_name + '/' + action_name\r
   \r
   @params_to_url: (params) ->\r
+    return '' if params['controller'] == 'folders' and params['action'] == 'root'\r
     @url(params['controller'], params['action'], params)\r
   \r
   @is_sns: () ->\r
index 5326adb..1b2cac4 100644 (file)
@@ -1,7 +1,15 @@
 class Pettanr.ActionFilter\r
   \r
+  @suply_default: (reader, resource_reader, user, author) ->\r
+    {\r
+      reader: _.union(default_reader_filters, reader),\r
+      resource_reader: _.union(default_resource_reader_filters, resource_reader),\r
+      user: _.union(default_user_filters, user),\r
+      author: _.union(default_author_filters, author)\r
+    }\r
+  \r
   @sns_filters: () ->\r
-    default_reader_filters = ['ndex', 'show']\r
+    default_reader_filters = ['index', 'show']\r
     default_resource_reader_filters = []\r
     default_user_filters = ['new', 'create', 'edit', 'update', 'destroy']\r
     default_author_filters = ['new', 'create', 'edit', 'update', 'destroy']\r
@@ -18,6 +26,60 @@ class Pettanr.ActionFilter
         user: _.union(default_user_filters, []),\r
         author: _.union(default_author_filters, [])\r
       },\r
+      scroll_panels: {\r
+        reader: _.union(default_reader_filters, ['by_panel', 'by_scroll', 'by_author']),\r
+        resource_reader: _.union(default_resource_reader_filters, []),\r
+        user: _.union(default_user_filters, []),\r
+        author: _.union(default_author_filters, [])\r
+      },\r
+      comics: {\r
+      },\r
+      comic_stories: {\r
+      },\r
+      stories: {\r
+      },\r
+      story_sheets: {\r
+      },\r
+      sheets: {\r
+      },\r
+      sheet_panels: {\r
+      },\r
+      panels: {\r
+      },\r
+      panel_pictures: {\r
+      },\r
+      speech_balloons: {\r
+      },\r
+      speeches: {\r
+      },\r
+      balloons: {\r
+      },\r
+      ground_pictures: {\r
+      },\r
+      ground_colors: {\r
+      },\r
+      original_pictures: {\r
+      },\r
+      pictures: {\r
+      },\r
+      resource_pictures: {\r
+      },\r
+      speech_balloon_templates: {\r
+      },\r
+      writing_formats: {\r
+      },\r
+      license_groups: {\r
+      },\r
+      licenses: {\r
+      },\r
+      authors: {\r
+      },\r
+      artists: {\r
+      },\r
+      system_pictures: {\r
+      },\r
+      home: {\r
+      },\r
     }\r
   \r
   @blog_filters: () ->\r
diff --git a/app/assets/javascripts/pettanr/proxy.js.coffee b/app/assets/javascripts/pettanr/proxy.js.coffee
new file mode 100644 (file)
index 0000000..f9f6465
--- /dev/null
@@ -0,0 +1,64 @@
+class Pettanr.Proxy\r
+  \r
+  constructor: (options) ->\r
+    @operators = options.operators\r
+    _.extend(this, Backbone.Events)\r
+  \r
+  local_router: (parsed_callback) ->\r
+    local_router = new Pettanr.LocalRouter({operators: @operators})\r
+    @listenTo(local_router, 'go', parsed_callback)\r
+    @listenTo(local_router, 'deny', @deny)\r
+    @listenTo(local_router, 'cancel', @cancel)\r
+    local_router\r
+  \r
+  http_get: (url, form) ->\r
+    @local_router(@get).navigate(url, form)\r
+  \r
+  get: (params, form, options) ->\r
+    controller = Pettanr.AppController.new2(params, form, @operators)\r
+    @listenTo(controller, 'ready', @ready)\r
+    @listenTo(controller, 'title', @title)\r
+    action_name = params['action']\r
+    controller[action_name]()\r
+    @trigger('done', params)\r
+  \r
+  ready: (view) ->\r
+    @trigger('ready', view)\r
+  \r
+  title: (params, str) ->\r
+    @trigger('title', params, str)\r
+  \r
+  deny: (params, form, safe_url) ->\r
+    @trigger('deny', params, form, safe_url)\r
+  \r
+  cancel: () ->\r
+    @trigger('cancel')\r
+  \r
+  http_post: (url, form) ->\r
+    @local_router(@post).navigate(url, form)\r
+  \r
+  post: (params, form) ->\r
+    controller = Pettanr.AppController.new2(params, form, @operators)\r
+    @listenTo(controller, 'success', @success)\r
+    @listenTo(controller, 'fail', @fail)\r
+    @listenTo(controller, 'redirect', @redirect)\r
+    @listenTo(controller, 'sign_in', @sign_in)\r
+    @listenTo(controller, 'sign_out', @sign_out)\r
+    action_name = params['action']\r
+    controller[action_name]()\r
+  \r
+  success: (model, response) ->\r
+    @trigger('success', model, response)\r
+  \r
+  fail: (response) ->\r
+    @trigger('fail', response)\r
+  \r
+  redirect: (new_url) ->\r
+    @trigger('redirect', new_url)\r
+  \r
+  sign_in: (user) ->\r
+    @trigger('sign_in', user)\r
+  \r
+  sign_out: () ->\r
+    @trigger('sign_out')\r
+  \r
index b4e270d..22f251a 100644 (file)
@@ -14,6 +14,7 @@ class Pettanr.Router extends Backbone.Router
   \r
   initialize: (options) ->\r
     super()\r
+    _.extend(this, Backbone.Events)\r
     @operators = options.operators\r
   \r
   parse_query_string: (query_string) ->\r
@@ -36,8 +37,8 @@ class Pettanr.Router extends Backbone.Router
     [\r
       {route: '', callback: 'home'}, \r
       {route: 'top/:action', callback: 'top_a'}, \r
-      {route: 'users/:action', callback: 'users_a'}, \r
-      {route: 'user_sessions/:action', callback: 'user_sessions_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
@@ -62,10 +63,50 @@ class Pettanr.Router extends Backbone.Router
     else\r
       {}\r
   \r
+  filters: () ->\r
+    if Pettanr.is_sns()\r
+      Pettanr.ActionFilter.sns_filters()\r
+    else\r
+      Pettanr.ActionFilter.blog_filters()\r
+  \r
+  my_filters: (role, params) ->\r
+    f = @filters()\r
+    c = f[params['controller']] || {}\r
+    r = c[role]\r
+    r\r
+  \r
+  # return false if allow\r
+  # return true if deny\r
+  authenticate: (role, params) ->\r
+    n = 'is_' + role\r
+    if not @operators[n]()  # ex: operators.is_user()\r
+      filter = @my_filters(role, params)\r
+      if Pettanr.before_filter(params['action'], filter)\r
+        return true\r
+    false\r
+  \r
+  # access block\r
+  # return sign in form if invalid url\r
+  # return null if url is valid\r
+  block: (params) ->\r
+    return @guest_url() if @authenticate('reader', params) or @authenticate('resource_reader', params) or @authenticate('user', params)\r
+    return @new_author_url() if @authenticate('author', params)\r
+    return @new_artist_url() if @authenticate('artist', params)\r
+    null\r
+  \r
+  guest_url: () ->\r
+    'user_seeeions/new'\r
+  \r
+  new_author_url: () ->\r
+    'authors/new'\r
+  \r
+  new_artist_url: () ->\r
+    'artists/new'\r
+  \r
   # render App(render:all)\r
   home: () ->\r
     params = @home_params()\r
-    @trigger('fire', params)\r
+    @trigger('go', params)\r
   \r
   home_params: () ->\r
     params = {}\r
@@ -75,9 +116,12 @@ 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
-    @trigger('fire', params)\r
+    if safe_url = @block(params)\r
+      @trigger('deny', params, form, safe_url)\r
+    else\r
+      @trigger('go', params, form)\r
   \r
   c_i_a_params: (controller, id, action, query_string) ->\r
     params = @parse_query_string(query_string)\r
@@ -101,9 +145,12 @@ 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
-    @trigger('fire', params)\r
+    if safe_url = @block(params)\r
+      @trigger('deny', params, form, safe_url)\r
+    else\r
+      @trigger('go', params, form)\r
   \r
   c_i_params: (controller, id, query_string) ->\r
     params = @parse_query_string(query_string)\r
@@ -125,9 +172,12 @@ 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
-    @trigger('fire', params)\r
+    if safe_url = @block(params)\r
+      @trigger('deny', params, form, safe_url)\r
+    else\r
+      @trigger('go', params, form)\r
   \r
   c_params: (controller, query_string) ->\r
     params = @parse_query_string(query_string)\r
@@ -136,9 +186,12 @@ class Pettanr.Router extends Backbone.Router
     params['action'] = 'index'\r
     params\r
   \r
-  top_a: (action, query_string) ->\r
+  top_a: (action, query_string, form) ->\r
     params = @users_a_params(action, query_string)\r
-    @trigger('fire', params)\r
+    if safe_url = @block(params)\r
+      @trigger('deny', params, safe_url)\r
+    else\r
+      @trigger('go', params, form)\r
   \r
   top_a_params: (action, query_string) ->\r
     params = @parse_query_string(query_string)\r
@@ -147,9 +200,12 @@ class Pettanr.Router extends Backbone.Router
     params['action'] = action\r
     params\r
   \r
-  user_sessions_a: (action, query_string) ->\r
+  user_sessions_a: (action, query_string, form) ->\r
     params = @user_sessions_a_params(action, query_string)\r
-    @trigger('fire', params)\r
+    if safe_url = @block(params)\r
+      @trigger('deny', params, safe_url)\r
+    else\r
+      @trigger('go', params, form)\r
   \r
   user_sessions_a_params: (action, query_string) ->\r
     params = @parse_query_string(query_string)\r
@@ -158,9 +214,12 @@ class Pettanr.Router extends Backbone.Router
     params['action'] = action\r
     params\r
   \r
-  users_a: (action, query_string) ->\r
+  users_a: (action, query_string, form) ->\r
     params = @users_a_params(action, query_string)\r
-    @trigger('fire', params)\r
+    if safe_url = @block(params)\r
+      @trigger('deny', params, safe_url)\r
+    else\r
+      @trigger('go', params, form)\r
   \r
   users_a_params: (action, query_string) ->\r
     params = @parse_query_string(query_string)\r
@@ -168,91 +227,24 @@ class Pettanr.Router extends Backbone.Router
     params['format'] = 'html'\r
     params['action'] = action\r
     params\r
-  \r
-  \r
+\r
 class Pettanr.GlobalRouter extends Pettanr.Router\r
   \r
-  initialize: () ->\r
-    _.extend(this, Backbone.Events)\r
+  initialize: (options) ->\r
+    super(options)\r
     _.each @peta_routes(), (r) =>\r
       @route(r.route, r.callback)\r
   \r
-  navigate: (fragment, options) ->\r
-    if Pettanr.History.lock_url\r
-      if confirm('leave? edit data unsaved')\r
-        Pettanr.History.lock_url = null\r
-      else\r
-        return false\r
-    super(fragment, options)\r
-  \r
 class Pettanr.LocalRouter extends Pettanr.Router\r
   \r
-  initialize: () ->\r
-    _.extend(this, Backbone.Events)\r
+  initialize: (options) ->\r
+    super(options)\r
   \r
   # selfish navigate\r
-  navigate: (url) ->\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
-class Pettanr.RouterFilter\r
-  \r
-  filters: () ->\r
-    if Pettanr.is_sns()\r
-      Pettanr.ActionFilter.sns_filters()\r
-    else\r
-      Pettanr.ActionFilter.blog_filters()\r
-  \r
-  my_filters: (role, params) ->\r
-    f = @filters()\r
-    c = f[params['controller']] || {}\r
-    r = c[role]\r
-    r\r
-  \r
-  # return false if allow\r
-  # return true if deny\r
-  authenticate: (role, params, operators) ->\r
-    n = 'is_' + role\r
-    if not operators[n]()  # ex: operators.is_user()\r
-      filter = @my_filters(role, params)\r
-      if Pettanr.before_filter(params['action'], filter)\r
-        return true\r
-    false\r
-  \r
-class Pettanr.HeaderRouter extends Pettanr.LocalRouter\r
-  \r
-  initialize: () ->\r
-    super()\r
-    _.extend(this, Pettanr.RouterFilter)\r
-  \r
-class Pettanr.BodyRouter extends Pettanr.GlobalRouter\r
-  \r
-  initialize: () ->\r
-    super()\r
-    _.extend(this, Pettanr.RouterFilter.prototype)\r
-  \r
-  navigate: (url, options, operators) ->\r
-    safe_url = @block(url, operators) || url\r
-    super(safe_url, options)\r
-  \r
-  # access block\r
-  # return sign in form if invalid url\r
-  # return null if url is valid\r
-  block: (url, operators) ->\r
-    params = @url_to_params(url)\r
-    return @guest_url() if @authenticate('reader', params, operators) or @authenticate('resource_reader', params, operators) or @authenticate('user', params, operators)\r
-    return @new_author_url() if @authenticate('author', params, operators)\r
-    return @new_artist_url() if @authenticate('artist', params, operators)\r
-    null\r
-  \r
-  guest_url: () ->\r
-    'user_seeeions/new'\r
-  \r
-  new_author_url: () ->\r
-    'authors/new'\r
-  \r
-  new_artist_url: () ->\r
-    'artists/new'\r
-  \r
index 5027f4e..7df707c 100644 (file)
@@ -25,8 +25,8 @@ class Pettanr.Views.Balloon.Summary extends Pettanr.Views.Common.Summary
     this\r
   \r
   panel_click: () ->\r
-    @trigger('navigate', @panel_icon.url())\r
+    @trigger('http_get', @panel_icon.url())\r
   \r
   author_click: () ->\r
-    @trigger('navigate', @author_icon_with_caption.url())\r
+    @trigger('http_get', @author_icon_with_caption.url())\r
   \r
index 41bc2f6..ca22d5e 100644 (file)
@@ -169,7 +169,7 @@ class Pettanr.Views.Common.Binder.Summary extends Pettanr.Views.Common.Summary
     this\r
   \r
   author_click: () ->\r
-    @trigger('navigate', @author_icon_with_caption.url())\r
+    @trigger('http_get', @author_icon_with_caption.url())\r
   \r
 class Pettanr.Views.Common.Leaf\r
 class Pettanr.Views.Common.Leaf.Summary extends Pettanr.Views.Common.Summary\r
@@ -224,14 +224,14 @@ class Pettanr.Views.Common.Leaf.Summary extends Pettanr.Views.Common.Summary
     this\r
   \r
   binder_click: () ->\r
-    @trigger('navigate', @binder_icon.url())\r
+    @trigger('http_get', @binder_icon.url())\r
   \r
   destination_click: () ->\r
-    @trigger('navigate', @destination_icon.url())\r
+    @trigger('http_get', @destination_icon.url())\r
   \r
   binder_author_click: () ->\r
-    @trigger('navigate', @binder_author_icon_with_caption.url())\r
+    @trigger('http_get', @binder_author_icon_with_caption.url())\r
   \r
   destination_author_click: () ->\r
-    @trigger('navigate', @destination_author_icon_with_caption.url())\r
+    @trigger('http_get', @destination_author_icon_with_caption.url())\r
   \r
index 992544c..5fe3ea1 100644 (file)
@@ -23,8 +23,8 @@ class Pettanr.Views.GroundColor.Summary extends Pettanr.Views.Common.Summary
     this\r
   \r
   panel_click: () ->\r
-    @trigger('navigate', @panel_icon.url())\r
+    @trigger('http_get', @panel_icon.url())\r
   \r
   author_click: () ->\r
-    @trigger('navigate', @author_icon_with_caption.url())\r
+    @trigger('http_get', @author_icon_with_caption.url())\r
   \r
index 0844f85..a952a7b 100644 (file)
@@ -22,5 +22,5 @@ class Pettanr.Views.GroundPicture.Summary extends Pettanr.Views.Common.Summary
     this\r
   \r
   panel_click: () ->\r
-    @trigger('navigate', @panel_icon.url())\r
+    @trigger('http_get', @panel_icon.url())\r
   \r
index 288b135..8de257c 100644 (file)
@@ -1,57 +1,16 @@
-class Pettanr.ViewPicker extends Backbone.View\r
-  initialize: (options) ->\r
-    @operators = options.operators\r
-    _.extend(this, Backbone.Events)\r
-    _.extend(this, Pettanr.Views.Layout.ControllerManager.prototype)\r
-    @local_router = new Pettanr.LocalRouter()\r
-    @listenTo(@local_router, 'fire', @fire)\r
-  \r
-  navigate: (url) ->\r
-    @local_router.navigate(url, true)\r
-  \r
-  fire: (params) ->\r
-    controller = Pettanr.AppController.new2(params, @operators)\r
-    @add_listener(controller, this)\r
-    action_name = params['action']\r
-    controller[action_name]()\r
-  \r
-  retitle: (params, str = null) ->\r
-    @trigger('retitle', params, str = null)\r
-  \r
-  refresh: (view) ->\r
-    @trigger('ready', view)\r
-  \r
-  redirect_to: (url) ->\r
-    @trigger('redirect', url)\r
-  \r
 class Pettanr.Views.Layout\r
-class Pettanr.Views.Layout.ControllerManager\r
-  \r
-  add_listener: (controller, self) ->\r
-    self.listenTo(controller, 'ready', self.refresh)\r
-    self.listenTo(controller, 'retitle', self.retitle)\r
-    self.listenTo(controller, 'block', self.block)\r
-    self.listenTo(controller, 'redirect', self.redirect_to)\r
-  \r
 class Pettanr.Views.Layout.Base extends Backbone.View\r
-  tagName: 'div'\r
-  className: 'layout-base'\r
+  \r
+class Pettanr.Views.Layout.Sns extends Pettanr.Views.Layout.Base\r
+  className: 'layout-sns'\r
   \r
   initialize: (options) ->\r
-    _.extend(this, Pettanr.Views.Layout.ControllerManager.prototype)\r
     @operators = new Pettanr.Operator({})\r
-    # router for refresh body\r
-    @global_router = new Pettanr.BodyRouter()\r
-    # router for refresh body. but not replace url\r
-    @local_router = new Pettanr.LocalRouter()\r
-    # router for refresh header\r
-    @header_router = new Pettanr.LocalRouter()\r
-    @listenTo(@global_router, 'fire', @fire_for_body)\r
-    @listenTo(@local_router, 'fire', @fire_for_body)\r
-    @listenTo(@header_router, 'fire', @fire_for_header)\r
-    @header = new (@header_class())({parent: this})\r
-    @body = new (@body_class())({parent: this})\r
-    @footer = new (@footer_class())({parent: this})\r
+    @global_router = new Pettanr.GlobalRouter({operators: @operators})\r
+    @listenTo(@global_router, 'go', @body_get)\r
+    @header = new Pettanr.Views.Layout.Sns.Header({parent: this})\r
+    @body = new Pettanr.Views.Layout.Sns.Body({parent: this})\r
+    @footer = new Pettanr.Views.Layout.Sns.Footer({parent: this})\r
   \r
   render: () ->\r
     this.$el.html('')\r
@@ -60,29 +19,6 @@ class Pettanr.Views.Layout.Base extends Backbone.View
     this.$el.append(@footer.render().el)\r
     this\r
   \r
-  fire: (params) ->\r
-    controller = Pettanr.AppController.new2(params, @operators)\r
-    @add_listener(controller, this)\r
-    action_name = params['action']\r
-    controller[action_name]()\r
-  \r
-  start: () ->\r
-    # check current user signed in?\r
-    # callback sign_in_success from users controller if signed in\r
-    @test()\r
-  \r
-  test: () ->\r
-    @user = new Pettanr.User.Session()\r
-    @listenTo(@user, 'sign_in:success', @sign_in_success)\r
-    @listenTo(@user, 'sign_in:fail', @sign_in_fail)\r
-    @user.save({})\r
-  \r
-  fire_for_header: (params) ->\r
-    @fire(params, @refresh_header)\r
-  \r
-  fire_for_body: (params) ->\r
-    @fire(params)\r
-  \r
   init_operators: (user) ->\r
     author = new Pettanr.Author(user.get('author')) if user.get('author')\r
     artist = new Pettanr.Artist(user.get('artist')) if user.get('artist')\r
@@ -91,15 +27,7 @@ class Pettanr.Views.Layout.Base extends Backbone.View
       author: author, \r
       artist: artist\r
     })\r
-  \r
-  sign_in: () ->\r
-    false\r
-  \r
-  sign_in_success: (user, response) ->\r
-    @init_operators(user)\r
-  \r
-  sign_in_fail: (user, response) ->\r
-    false\r
+    @global_router.operators = @operators\r
   \r
   reset_operators: () ->\r
     @operators.init({\r
@@ -107,121 +35,98 @@ class Pettanr.Views.Layout.Base extends Backbone.View
       author: null, \r
       artist: null\r
     })\r
+    @global_router.operators = @operators\r
   \r
-  sign_out: () ->\r
-    false\r
+  start: () ->\r
+    # check current user signed in?\r
+    proxy = new Pettanr.Proxy({operators: @operators})\r
+    @listenTo(proxy, 'redirect', @test_redirect)\r
+    # @listenTo(proxy, 'success', @test_ok)\r
+    @listenTo(proxy, 'fail', @test_ng)\r
+    @listenTo(proxy, 'sign_in', @sign_in)\r
+    proxy.http_post('users/test')\r
+  \r
+  test_ok: (user, response) ->\r
+    \r
+  \r
+  test_ng: (response) ->\r
+    @head_http_get('users/guest')\r
+    @body_http_get('user_sessions/new')\r
+  \r
+  test_redirect: (url) ->\r
+    proxy = @getter_proxy()\r
+    @stopListening(proxy, 'done')  # ignore global routing\r
+    proxy.http_get(url, null)\r
+  \r
+  sign_in: (user) ->\r
+    @init_operators(user)\r
+    @head_http_get('users/account')\r
   \r
-  sign_out_success: (user, response) ->\r
+  sign_out: () ->\r
     @reset_operators()\r
+    @head_http_get('users/guest')\r
   \r
-  sign_out_fail: (user, response) ->\r
-    false\r
+  head_http_get: (url) ->\r
+    proxy = new Pettanr.Proxy({operators: @operators})\r
+    @listenTo(proxy, 'ready', @head_ready)\r
+    proxy.http_get(url, null)\r
   \r
-  retitle: (params, str = null) ->\r
-    t = str || I18n.t(params['controller'] + '.' + params['action'] + '.title')\r
-    site_caption = _.escape(Manifest.manifest().magic_numbers.profile.users.caption)\r
-    $(document).attr('title', t + ' - ' + site_caption)\r
-  \r
-  refresh_header: (view) ->\r
+  head_ready: (view) ->\r
+    @listenTo(view, 'http_get', @body_http_get)\r
+    @listenTo(view, 'http_post', @body_http_post)\r
     @header.refresh(view)\r
   \r
-  refresh_body: (view) ->\r
-    @body.refresh(view)\r
-  \r
-  refresh: (view) ->\r
-    @body.refresh(view)\r
-  \r
-  block: () ->\r
-    true\r
+  getter_proxy: () ->\r
+    proxy = new Pettanr.Proxy({operators: @operators})\r
+    @listenTo(proxy, 'ready', @body_ready)\r
+    @listenTo(proxy, 'title', @body_title)\r
+    @listenTo(proxy, 'done', @body_done)\r
+    proxy\r
   \r
-  redirect_to: (url, return_params, refresh_function) ->\r
-    redirect_params = Pettanr.LocalRouter.url_to_params(redirect_url)\r
-    @fire(redirect_params, refresh_function)\r
+  body_http_get: (url, form) ->\r
+    @getter_proxy().http_get(url, form)\r
   \r
-  header_class: () ->\r
-    null\r
+  body_get: (params, form) ->\r
+    @getter_proxy().get(params, form)\r
   \r
-  body_class: () ->\r
-    null\r
+  body_ready: (view) ->\r
+    @listenTo(view, 'http_get', @body_http_get)\r
+    @listenTo(view, 'http_post', @body_http_post)\r
+    @body.refresh(view)\r
   \r
-  footer_class: () ->\r
-    null\r
+  body_done: (params) ->\r
+    url = Pettanr.params_to_url(params)\r
+    @global_router.navigate(url, {trigger: false})\r
   \r
-class Pettanr.Views.Layout.Sns extends Pettanr.Views.Layout.Base\r
-  className: 'layout-sns'\r
+  body_title: (params, str = null) ->\r
+    t = str || I18n.t(params['controller'] + '.' + params['action'] + '.title')\r
+    site_caption = _.escape(Manifest.manifest().magic_numbers.profile.users.caption)\r
+    $(document).attr('title', t + ' - ' + site_caption)\r
   \r
-  initialize: (options) ->\r
-    super(options)\r
-    @listenTo(@header, 'navigate', @header_navigate)\r
-    @listenTo(@header, 'sign_in', @sign_in)\r
-    @listenTo(@header, 'sign_out', @sign_out)\r
-    @listenTo(@body, 'navigate', @body_navigate)\r
-    @listenTo(@body, 'retitle', @retitle)\r
-    @listenTo(@body, 'sign_in', @sign_in)\r
-    @listenTo(@body, 'sign_out', @sign_out)\r
+  poster_proxy: () ->\r
+    proxy = new Pettanr.Proxy({operators: @operators})\r
+    @listenTo(proxy, 'success', @body_success)\r
+    @listenTo(proxy, 'fail', @body_fail)\r
+    @listenTo(proxy, 'redirect', @body_redirect)\r
+    @listenTo(proxy, 'sign_in', @sign_in)\r
+    @listenTo(proxy, 'sign_out', @sign_out)\r
+    proxy\r
   \r
-  start: () ->\r
-    # initial page\r
-    super()\r
-  \r
-  sign_in: (attr) ->\r
-    @user = new Pettanr.User.Session(attr)\r
-    @listenTo(@user, 'sign_in:success', @sign_in_success)\r
-    @listenTo(@user, 'sign_in:fail', @sign_in_fail)\r
-    @user.save({})\r
-  \r
-  sign_in_success: (user, response) ->\r
-    super(user, response)\r
-    # navigate users/account\r
-    # callback from fire to refresh_header\r
-    @header.fire({controller: 'users', action: 'account'})\r
-    # navigate home\r
-    # callback from fire to refresh_body\r
-    @body.fire({controller: 'folders', action: 'root'})\r
+  body_http_post: (url, form) ->\r
+    @poster_proxy().http_post(url, form)\r
   \r
-  sign_in_fail: (user, response) ->\r
-    super(user, response)\r
-    @header.fire({controller: 'users', action: 'guest'})\r
-    @body.fire({controller: 'user_sessions', action: 'new'})\r
-  \r
-  sign_out: () ->\r
-    @user = new Pettanr.User.Session()\r
-    @listenTo(@user, 'sign_out:success', @sign_out_success)\r
-    @listenTo(@user, 'sign_out:fail', @sign_out_fail)\r
-    @user.destroy()\r
-  \r
-  sign_out_success: (user, response) ->\r
-    super(user, response)\r
-    @global_router.navigate('', {trigger: false}, @operators)\r
-    ## navigate users/guest\r
-    ## callback from fire to refresh_header\r
-    @header.fire({controller: 'users', action: 'guest'})\r
-    ## navigate sign in form\r
-    ## callback from fire to refresh_body\r
-    @body.fire({controller: 'user_sessions', action: 'new'})\r
-  \r
-  sign_out_fail: (user, response) ->\r
-    super(user, response)\r
-  \r
-  block: () ->\r
-    super()\r
-    @header_router.navigate('users/guest')\r
-    @body.fire({controller: 'user_sessions', action: 'new'})\r
-  \r
-  header_navigate: (url) ->\r
-    @global_router.navigate(url, {trigger: true}, @operators)\r
-  \r
-  body_navigate: (url) ->\r
-    @global_router.navigate(url, {trigger: false}, @operators)\r
+  body_post: (params, form) ->\r
+    @poster_proxy().post(params, form)\r
   \r
-  header_class: () ->\r
-    Pettanr.Views.Layout.Sns.Header\r
+  body_success: (url) ->\r
+    \r
   \r
-  body_class: () ->\r
-    Pettanr.Views.Layout.Sns.Body\r
+  body_fail: (url) ->\r
+    \r
   \r
-  footer_class: () ->\r
-    Pettanr.Views.Layout.Sns.Footer\r
+  body_redirect: (url) ->\r
+    @global_router.navigate(url)\r
+    @getter_proxy().http_get(url)\r
   \r
 class Pettanr.Views.Layout.Blog extends Pettanr.Views.Layout.Base\r
   className: 'layout-blog'\r
index 2c85923..7ef2b09 100644 (file)
@@ -3,89 +3,28 @@ class Pettanr.Views.Layout.Sns.Header extends Backbone.View
   id: 'header'\r
   \r
   initialize: (options) ->\r
-    _.extend(this, Pettanr.Views.Layout.ControllerManager.prototype)\r
     @parent = options.parent\r
-    @local_router = new Pettanr.LocalRouter()\r
-    @listenTo(@local_router, 'fire', @fire)\r
   \r
   render: () ->\r
     this.$el.html('')\r
     this\r
   \r
-  fire: (params) ->\r
-    controller = Pettanr.AppController.new2(params, @operators())\r
-    @add_listener(controller, this)\r
-    action_name = params['action']\r
-    controller[action_name]()\r
-  \r
-  sign_in: (attr) ->\r
-    @trigger('sign_in', attr)\r
-  \r
-  sign_out: () ->\r
-    @trigger('sign_out')\r
-  \r
-  retitle: (params, str = null) ->\r
-    @trigger('retitle', params, str = null)\r
-  \r
   refresh: (view) ->\r
-    @listenTo(view, 'navigate', @navigate)\r
-    @listenTo(view, 'sign_in', @sign_in)\r
-    @listenTo(view, 'sign_out', @sign_out)\r
-    this.$el.html(view.render().el)\r
-  \r
-  navigate: (url) ->\r
-    # header's message replace body\r
-    # @local_router.navigate(url, true)\r
-    @trigger('navigate', url)\r
-  \r
-  operators: () ->\r
-    @parent.operators\r
+    this.$el.html(view.el)\r
   \r
 class Pettanr.Views.Layout.Sns.Body extends Backbone.View\r
   tagName: 'div'\r
   id: 'body'\r
   \r
   initialize: (options) ->\r
-    _.extend(this, Pettanr.Views.Layout.ControllerManager.prototype)\r
     @parent = options.parent\r
-    @local_router = new Pettanr.LocalRouter()\r
-    @listenTo(@local_router, 'fire', @fire)\r
   \r
   render: () ->\r
     this.$el.html('')\r
     this\r
   \r
-  fire: (params) ->\r
-    controller = Pettanr.AppController.new2(params, @operators())\r
-    @add_listener(controller, this)\r
-    action_name = params['action']\r
-    controller[action_name]()\r
-  \r
-  sign_in: (attr) ->\r
-    @trigger('sign_in', attr)\r
-  \r
-  sign_out: () ->\r
-    @trigger('sign_out')\r
-  \r
-  retitle: (params, str = null) ->\r
-    @trigger('retitle', params, str = null)\r
-  \r
   refresh: (view) ->\r
-    @listenTo(view, 'navigate', @navigate)\r
-    @listenTo(view, 'post', @post)\r
-    @listenTo(view, 'put', @put)\r
-    @listenTo(view, 'sign_in', @sign_in)\r
-    this.$el.html(view.render().el)\r
-  \r
-  navigate: (url) ->\r
-    @local_router.navigate(url, true)\r
-    @trigger('navigate', url)\r
-  \r
-  redirect_to: (url) ->\r
-    @navigate(url)\r
-  \r
-  operators: () ->\r
-    @parent.operators\r
+    this.$el.html(view.el)\r
   \r
 class Pettanr.Views.Layout.Sns.Footer extends Backbone.View\r
   tagName: 'div'\r
index 0f35509..ec165c0 100644 (file)
@@ -30,5 +30,5 @@ class Pettanr.Views.OriginalPicture.Summary extends Pettanr.Views.Common.Summary
   \r
   # in credit\r
   resource_picture_click: (resource_picture) ->\r
-    @trigger('navigate', resource_picture.show_url())\r
+    @trigger('http_get', resource_picture.show_url())\r
   \r
index 6298c36..6a3ebab 100644 (file)
@@ -22,5 +22,5 @@ class Pettanr.Views.PanelPicture.Summary extends Pettanr.Views.Common.Summary
     this\r
   \r
   panel_click: () ->\r
-    @trigger('navigate', @panel_icon.url())\r
+    @trigger('http_get', @panel_icon.url())\r
   \r
index 33931f4..bcce3bf 100644 (file)
@@ -26,5 +26,5 @@ class Pettanr.Views.Panel.Summary extends Pettanr.Views.Common.Summary
     this\r
   \r
   author_click: () ->\r
-    @trigger('navigate', @author_icon_with_caption.url())\r
+    @trigger('http_get', @author_icon_with_caption.url())\r
   \r
index 06332e6..f39000a 100644 (file)
@@ -23,8 +23,8 @@ class Pettanr.Views.SpeechBalloon.Summary extends Pettanr.Views.Common.Summary
     this\r
   \r
   panel_click: () ->\r
-    @trigger('navigate', @panel_icon.url())\r
+    @trigger('http_get', @panel_icon.url())\r
   \r
   author_click: () ->\r
-    @trigger('navigate', @author_icon_with_caption.url())\r
+    @trigger('http_get', @author_icon_with_caption.url())\r
   \r
index cf106ee..82f8f5e 100644 (file)
@@ -25,8 +25,8 @@ class Pettanr.Views.Speech.Summary extends Pettanr.Views.Common.Summary
     this\r
   \r
   panel_click: () ->\r
-    @trigger('navigate', @panel_icon.url())\r
+    @trigger('http_get', @panel_icon.url())\r
   \r
   author_click: () ->\r
-    @trigger('navigate', @author_icon_with_caption.url())\r
+    @trigger('http_get', @author_icon_with_caption.url())\r
   \r
index 4a500f0..a765f96 100644 (file)
@@ -15,6 +15,7 @@ class Pettanr.Views.UserSeeeion.New extends Backbone.View
   sign_in: () ->\r
     m = $('#user_email').val()\r
     p = $('#user_password').val()\r
-    @trigger('sign_in', {user: {email: m, password: p}})\r
+    @user = new Pettanr.User.Session({user: {email: m, password: p}})\r
+    @trigger('http_post', 'users/sign_in', @user)\r
     return false\r
   \r
index 7502bd5..419293a 100644 (file)
@@ -30,15 +30,15 @@ class Pettanr.Views.User.Account extends Backbone.View
     this\r
   \r
   logo_click: () ->\r
-    @trigger('navigate', '')\r
+    @trigger('http_get', '')\r
   \r
   author_click: () ->\r
-    @trigger('navigate', @author_view.url())\r
+    @trigger('http_get', @author_view.url())\r
   \r
   artist_click: () ->\r
-    @trigger('navigate', @artist_view.url())\r
+    @trigger('http_get', @artist_view.url())\r
   \r
   sign_out_click: () ->\r
-    @trigger('sign_out')\r
+    @trigger('http_post', 'users/sign_out')\r
     return false\r
   \r
index ca24f79..9c58277 100644 (file)
@@ -20,10 +20,10 @@ class Pettanr.Views.User.Guest extends Backbone.View
     this\r
   \r
   logo_click: () ->\r
-    @trigger('navigate', '')\r
+    @trigger('http_get', '')\r
     return false\r
   \r
   sign_in_click: () ->\r
-    @trigger('navigate', 'user_sessions/new')\r
+    @trigger('http_get', 'user_sessions/new')\r
     return false\r
   \r