OSDN Git Service

fix: finder
authoryasushiito <yas@pen-chan.jp>
Sat, 4 Jul 2015 02:22:48 +0000 (11:22 +0900)
committeryasushiito <yas@pen-chan.jp>
Sat, 4 Jul 2015 02:22:48 +0000 (11:22 +0900)
40 files changed:
1  2 
app/assets/javascripts/controllers.js.coffee
app/assets/javascripts/controllers/comics.js.coffee
app/assets/javascripts/controllers/sheets.js.coffee
app/assets/javascripts/controllers/stories.js.coffee
app/assets/javascripts/locmare/filer/body/file_body/file_item/symbol/default/face/picture.js.coffee
app/assets/javascripts/locmare/form/field/tag/select.js.coffee
app/assets/javascripts/locmare/profiler/association/has_many.js.coffee
app/assets/javascripts/locmare/profiler/association/has_one.js.coffee
app/assets/javascripts/manifest/controller/action/list.js.coffee
app/assets/javascripts/models/license.js.coffee
app/assets/javascripts/pettanr/finder.js.coffee
app/assets/javascripts/pettanr/remover.js.coffee
app/assets/javascripts/views/artists/show.js.coffee
app/assets/javascripts/views/authors/show.js.coffee
app/assets/javascripts/views/resource_picture_pictures/summary.js.coffee
app/assets/javascripts/views/sheets/play.js.coffee
app/assets/javascripts/views/stories/play.js.coffee
app/assets/javascripts/yasapp.js
app/controllers/balloons_controller.rb
app/controllers/comic_stories_controller.rb
app/controllers/comics_controller.rb
app/controllers/ground_colors_controller.rb
app/controllers/ground_pictures_controller.rb
app/controllers/license_groups_controller.rb
app/controllers/licenses_controller.rb
app/controllers/panel_pictures_controller.rb
app/controllers/panels_controller.rb
app/controllers/pictures_controller.rb
app/controllers/resource_picture_pictures_controller.rb
app/controllers/resource_pictures_controller.rb
app/controllers/scroll_panels_controller.rb
app/controllers/scrolls_controller.rb
app/controllers/sheet_panels_controller.rb
app/controllers/sheets_controller.rb
app/controllers/speech_balloons_controller.rb
app/controllers/speeches_controller.rb
app/controllers/stories_controller.rb
app/controllers/story_sheets_controller.rb
app/controllers/writing_formats_controller.rb
public/manifest.json

@@@ -18,38 -18,33 +18,25 @@@ class Pettanr.AppControlle
      \r
    set_list: () ->\r
      @set_model()\r
--    @my_list_model = Manifest.manifest().models[@my_action.item_name]\r
--    @my_list_model_class = @my_list_model.classify()\r
--    @list = Locmare.ListGroup.list(\r
--      @my_action.path_name(), @my_action.name, @params\r
--    )\r
++    @list = @my_action.find(@params)\r
    \r
    set_show: (render_func) ->\r
      @set_model()\r
-     retriever = new Pettanr.Cache.Retriever(@my_model_class, @params['id'])\r
-     @listenTo(retriever, 'retrieve', render_func)\r
-     retriever.retrieve()\r
+     @my_model_class.retrieve(@params['id'], this, {success: render_func})\r
    \r
    filer_list: () ->\r
      @set_list()\r
-     @list.open(() =>\r
-       pager = Locmare.ListGroupModule.LibModule.Pager.factory(@list.page_status, @params)\r
-       filer = new Locmare.Filer({\r
-         item_name: @list.item_name, \r
-         items: @list.items(), \r
-         pager: pager\r
-       })\r
-       @listenTo(filer, 'navigate', @navigate)\r
-       filer.render()\r
-       @trigger('ready', filer)\r
-     )\r
+     @list.to_filer(this, {\r
+       success: (filer) =>\r
+         @listenTo(filer, 'navigate', @navigate)\r
+         filer.render()\r
+         @trigger('ready', filer)\r
+     })\r
      false\r
    \r
    set_play: (render_func) ->\r
      @set_list()\r
-     retriever = new Pettanr.Cache.Retriever(@my_model_class, @params['id'])\r
-     @listenTo(retriever, 'retrieve', render_func)\r
-     retriever.retrieve()\r
 -    @binder_action = @my_action.original\r
 -    @binder_controller = @binder_action.controller()\r
 -    @binder_model = Manifest.manifest().models[@binder_action.item_name]\r
 -    @binder_model_class = @binder_model.classify()\r
 -    @binder_model_class.retrieve(@params['id'], this, {success: render_func})\r
++    @my_model_class.retrieve(@params['id'], this, {success: render_func})\r
    \r
    show_prof: () ->\r
      @item.boosts 'post'\r
@@@ -40,15 -40,16 +40,16 @@@ class Pettanr.ComicsController extends 
      @set_play(@render_play)\r
    \r
    render_play: (@item) ->\r
-     @list.open(() => \r
-       @trigger('title', @params, @item.get('title'))\r
-       show = new Pettanr.Views.Comic.Play({\r
-         item: @item,\r
-         list: @list,\r
-       })\r
-       show.render()\r
-       @trigger('ready', show)\r
-     )\r
+     @list.open(this, {\r
+       success: (items) => \r
+         @trigger('title', @params, @item.get('title'))\r
+         show = new Pettanr.Views.Comic.Play({\r
+           item: @item,\r
 -          list: items,\r
++          list: @list,\r
+         })\r
+         show.render()\r
+         @trigger('ready', show)\r
+     })\r
      @trigger('done', @params)\r
    \r
    count: () ->\r
@@@ -43,15 -43,16 +43,16 @@@ class Pettanr.SheetsController extends 
      @set_play(@render_play)\r
    \r
    render_play: (@item) ->\r
-     @list.open(() => \r
-       @trigger('title', @params, @item.get('caption'))\r
-       show = new Pettanr.Views.Sheet.Play({\r
-         item: @item,\r
-         list: @list,\r
-       })\r
-       show.render()\r
-       @trigger('ready', show)\r
-     )\r
+     @list.open(this, {\r
+       success: (items) => \r
+         @trigger('title', @params, @item.get('caption'))\r
+         show = new Pettanr.Views.Sheet.Play({\r
+           item: @item,\r
 -          list: items,\r
++          list: @list,\r
+         })\r
+         show.render()\r
+         @trigger('ready', show)\r
+     })\r
      @trigger('done', @params)\r
    \r
    count: () ->\r
@@@ -45,15 -45,16 +45,16 @@@ class Pettanr.StoriesController extend
      @set_play(@render_play)\r
    \r
    render_play: (@item) ->\r
-     @list.open(() => \r
-       @trigger('title', @params, @item.get('title'))\r
-       show = new Pettanr.Views.Story.Play({\r
-         item: @item,\r
-         list: @list,\r
-       })\r
-       show.render()\r
-       @trigger('ready', show)\r
-     )\r
+     @list.open(this, {\r
+       success: (items) => \r
+         @trigger('title', @params, @item.get('title'))\r
+         show = new Pettanr.Views.Story.Play({\r
+           item: @item,\r
 -          list: items,\r
++          list: @list,\r
+         })\r
+         show.render()\r
+         @trigger('ready', show)\r
+     })\r
      @trigger('done', @params)\r
    \r
    count: () ->\r
@@@ -7,13 -7,14 +7,12 @@@ class Locmare.FilerModule.BodyModule.Fi
    # get symbol data and send message\r
    render: () ->\r
      if @item[@method_name()]\r
-       @listenTo(@item, 'ready:symbol', @ready_symbol)\r
-       @item[@method_name()]()\r
+       @item[@method_name()].call(@item, this, {\r
+         success: (symbol) =>\r
+           @trigger('ready:symbol', symbol)\r
+       })\r
      this\r
    \r
    method_name: () ->\r
      @my_manifest.method_name\r
    \r
--  ready_symbol: (symbol) ->\r
-     @trigger('ready:symbol', symbol)\r
--  \r
@@@ -55,12 -55,13 +55,15 @@@ class Locmare.FormModule.FieldModule.Ta
          {id: filter_id}\r
        else\r
          {}\r
--      list = Locmare.ListGroup.list(resource_controller_name, resource_action_name, params)\r
-       list.open((page_status) ->\r
-         members = _.map list.models, (member) ->\r
-           [member.get(caption_name), member.get('id')]\r
-         cb(members)\r
-       )\r
++      controller = Manifest.manifest().controllers[resource_controller_name]\r
++      action = @my_controller.actions[resource_action_name]\r
++      list = action.find(params)\r
+       list.open(this, {\r
+         success: (page_status) ->\r
+           members = _.map list.models, (member) ->\r
+             [member.get(caption_name), member.get('id')]\r
+           cb(members)\r
+       })\r
      else\r
        members = Manifest.manifest().system_resources.select_items[@select_item_name()]\r
        cb(members)\r
@@@ -1,4 -1,4 +1,4 @@@
- class Locmare.ProfilerModule.AssociationModule.HasMany extends Backbone.View\r
+ class Locmare.ProfilerModule.AssociationModule.HasMany extends Pettanr.View\r
    tagName: 'div'\r
    \r
    initialize: (options) ->\r
@@@ -7,20 -7,21 +7,18 @@@
      @filer = null\r
      controller = Manifest.manifest().controllers[@has_many_manifest.controller_name]\r
      action = controller.actions[@has_many_manifest.action_name]\r
--    @list = Locmare.ListGroup.list(\r
--      action.path_name(), action.name, \r
--      {id: @item().get('id'), page: 1, page_size: 3}\r
--    )\r
++    @list = action.find({id: @item().get('id'), page: 1, page_size: 3})\r
      @pager = new Locmare.ListGroupModule.LibModule.PagerModule.More({\r
        params: {controller: action.path_name(), action: action.name, id: @item().get('id')}\r
      })\r
    \r
    clear: () ->\r
      this.$el.html('')\r
-     @list.open((page_status) =>\r
-       @set_filer()\r
-       @render()\r
-     )\r
+     @list.open(this, {\r
+       success: (page_status) =>\r
+         @set_filer()\r
+         @render()\r
+     })\r
      this\r
    \r
    render: () ->\r
@@@ -1,4 -1,4 +1,4 @@@
- class Locmare.ProfilerModule.AssociationModule.HasOne extends Backbone.View\r
+ class Locmare.ProfilerModule.AssociationModule.HasOne extends Pettanr.View\r
    tagName: 'div'\r
    \r
    initialize: (options) ->\r
@@@ -7,17 -7,18 +7,15 @@@
      @filer = null\r
      controller = Manifest.manifest().controllers[@has_one_manifest.controller_name]\r
      action = controller.actions[@has_one_manifest.action_name]\r
--    @list = Locmare.ListGroup.list(\r
--      action.path_name(), action.name, \r
--      {id: @item().get('id')}\r
--    )\r
++    @list = action.find({id: @item().get('id')})\r
    \r
    clear: () ->\r
      this.$el.html('')\r
-     @list.open((page_status) =>\r
-       @set_filer()\r
-       @render()\r
-     )\r
+     @list.open(this, {\r
+       success: (page_status) =>\r
+         @set_filer()\r
+         @render()\r
+     })\r
      this\r
    \r
    render: () ->\r
@@@ -12,7 -12,7 +12,11 @@@ class Manifest.ControllerModule.ActionM
      @direction = @args.direction\r
      @default_page_size = @args.default_page_size\r
      @max_page_size = @args.max_page_size\r
++    @return_item_name = @args.return_item_name || @item_name\r
    \r
    a_arg_names: () ->\r
      _.union(super(), ['order', 'direction', 'default_page_size', 'max_page_size'])\r
    \r
++  find: (params = {}) ->\r
++    new Pettanr.Finder(this, params)\r
++  \r
@@@ -10,28 -10,17 +10,17 @@@ class Pettanr.License extends Peta.Syst
      id: null\r
    } \r
    \r
-   license_group: () ->\r
-     new Pettanr.Cache.Retriever(Pettanr.LicenseGroup, @get('license_group_id'))\r
-   \r
-   system_picture: () ->\r
-     new Pettanr.Cache.Retriever(Pettanr.SystemPicture, @get('system_picture_id'))\r
-   \r
-   symbol_option: () ->\r
-     retriever = @system_picture()\r
-     @listenTo(retriever, 'retrieve', @retrieve_symbol)\r
-     retriever.retrieve()\r
-   \r
-   retrieve_symbol: (item) -> \r
-     @trigger('ready:symbol', item.tmb_opt_img_tag())\r
-   \r
-   caption_with_group: () ->\r
-     retriever = @license_group()\r
-     @listenTo(retriever, 'retrieve', @retrieve_license_group)\r
-     retriever.retrieve()\r
-   \r
-   retrieve_license_group: (license_group) -> \r
-     caption = license_group.escape('caption') + '/' + @escape('caption')\r
-     @trigger('ready:caption', caption)\r
+   @trace_routes: () ->\r
+     {\r
+       symbol: ['system_picture']\r
+     }\r
+   \r
 -  caption_with_group: () ->\r
++  caption_with_group: (context, options) ->\r
+     @get_parent('license_group', this, {\r
+       success: (license_group) => \r
+         caption = license_group.escape('caption') + '/' + @escape('caption')\r
 -        @trigger('ready:caption', caption)\r
++        options.success.call(context, caption)\r
+     })\r
    \r
    is_own: () ->\r
      true\r
index 0000000,0000000..f54ca3e
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,32 @@@
++class Pettanr.Finder extends Backbone.Collection\r
++  \r
++  initialize: (@action_manifest, @params) ->\r
++    @return_model = Manifest.item_name_to_model @action_manifest.return_item_name\r
++  \r
++  parse: (res) ->\r
++    @page_status = res.page_status\r
++    res.list\r
++  \r
++  items: () ->\r
++    _.map @models, (model) =>\r
++      item = new @return_model(model.attributes)\r
++      Pettanr.cache.store(item)\r
++  \r
++  open: (context, options) ->\r
++    @url = '/' + @action_manifest.url(@params)\r
++    @fetch().done =>\r
++      # @boost(items)\r
++      options.success.call(context, @items())\r
++  \r
++  to_filer: (context, options) ->\r
++    @open(context, {\r
++      success: (items) => \r
++        pager = Locmare.ListGroupModule.LibModule.Pager.factory(@page_status, @params)\r
++        filer = new Locmare.Filer({\r
++          item_name: @action_manifest.return_item_name, \r
++          items: items, \r
++          pager: pager\r
++        })\r
++        options.success.call(context, filer)\r
++    })\r
++  \r
diff --combined app/assets/javascripts/pettanr/remover.js.coffee
index 663af13,663af13..0000000
deleted file mode 100644,100644
+++ /dev/null
@@@ -1,6 -1,6 +1,0 @@@
--class Pettanr.Remover\r
--  \r
--  constructor: (options) ->\r
--    _.extend(this, Backbone.Events)\r
--    @item = options.item\r
--  \r
@@@ -4,7 -4,7 +4,7 @@@ class Pettanr.Views.Artist.ShowModule.H
    initialize: (options) ->\r
      super(options)\r
    \r
- class Pettanr.Views.Artist.ShowModule.ResourcePictures extends Backbone.View\r
+ class Pettanr.Views.Artist.ShowModule.ResourcePictures extends Pettanr.View\r
    \r
    initialize: (options) ->\r
      super(options)\r
        controller: 'resource_pictures', action: 'by_artist', id: @item.get('id'),\r
        page_size: 5\r
      }\r
--    @list = Locmare.ListGroup.list(\r
--      params['controller'], params['action'], params\r
-     )\r
-     @list.open(() =>\r
-       pager = Locmare.ListGroupModule.LibModule.Pager.factory(@list.page_status, params)\r
-       filer = new Locmare.Filer({\r
-         item_name: @list.item_name, \r
-         items: @list.items(), \r
-         pager: pager\r
-       })\r
-       @listenTo(filer, 'http_get', @http_get)\r
-       this.$el.append(filer.render().el)\r
--    )\r
 -    @list.open(this, {\r
 -      success: (items) => \r
++    controller = Manifest.manifest().controllers[params['controller']]\r
++    action = controller.actions[params['action']]\r
++    @list = action.find(params)\r
++    @list.to_filer(this, {\r
++      success: (filer) => \r
+         pager = Locmare.ListGroupModule.LibModule.Pager.factory(@list.page_status, params)\r
 -        filer = new Locmare.Filer({\r
 -          item_name: @list.item_name, \r
 -          items: items, \r
 -          pager: pager\r
 -        })\r
+         @listenTo(filer, 'http_get', @http_get)\r
+         this.$el.append(filer.render().el)\r
+     })\r
      this\r
    \r
    http_get: (url) ->\r
      @trigger('http_get', url)\r
    \r
- class Pettanr.Views.Artist.ShowModule.Body extends Backbone.View\r
+ class Pettanr.Views.Artist.ShowModule.Body extends Pettanr.View\r
    \r
    initialize: (options) ->\r
      super(options)\r
@@@ -49,7 -50,7 +45,7 @@@
    http_get: (url) ->\r
      @trigger('http_get', url)\r
    \r
- class Pettanr.Views.Artist.Show extends Backbone.View\r
+ class Pettanr.Views.Artist.Show extends Pettanr.View\r
    tagName: 'div'\r
    \r
    initialize: (options) ->\r
@@@ -4,7 -4,7 +4,7 @@@ class Pettanr.Views.Author.ShowModule.H
    initialize: (options) ->\r
      super(options)\r
    \r
- class Pettanr.Views.Author.ShowModule.Scrolls extends Backbone.View\r
+ class Pettanr.Views.Author.ShowModule.Scrolls extends Pettanr.View\r
    \r
    initialize: (options) ->\r
      super(options)\r
        controller: 'scrolls', action: 'by_author', id: @item.get('id'),\r
        page_size: 5\r
      }\r
--    @list = Locmare.ListGroup.list(\r
--      params['controller'], params['action'], params\r
-     )\r
-     @list.open(() =>\r
-       pager = Locmare.ListGroupModule.LibModule.Pager.factory(@list.page_status, params)\r
-       filer = new Locmare.Filer({\r
-         item_name: @list.item_name, \r
-         items: @list.items(), \r
-         pager: pager\r
-       })\r
-       @listenTo(filer, 'http_get', @http_get)\r
-       this.$el.append(filer.render().el)\r
--    )\r
 -    @list.open(this, {\r
 -      success: (items) => \r
++    controller = Manifest.manifest().controllers[params['controller']]\r
++    action = controller.actions[params['action']]\r
++    @list = action.find(params)\r
++    @list.to_filer(this, {\r
++      success: (filer) => \r
+         pager = Locmare.ListGroupModule.LibModule.Pager.factory(@list.page_status, params)\r
 -        filer = new Locmare.Filer({\r
 -          item_name: @list.item_name, \r
 -          items: items, \r
 -          pager: pager\r
 -        })\r
+         @listenTo(filer, 'http_get', @http_get)\r
+         this.$el.append(filer.render().el)\r
+     })\r
      this\r
    \r
    http_get: (url) ->\r
      @trigger('http_get', url)\r
    \r
- class Pettanr.Views.Author.ShowModule.PanelsBody extends Backbone.View\r
+ class Pettanr.Views.Author.ShowModule.PanelsBody extends Pettanr.View\r
    \r
    initialize: (options) ->\r
      super(options)\r
      @list = Locmare.ListGroup.list(\r
        params['controller'], params['action'], params\r
      )\r
-     @list.open(() =>\r
-       pager = Locmare.ListGroupModule.LibModule.Pager.factory(@list.page_status, params)\r
-       _.each @list.items(), (panel) =>\r
-         panel = panel.with_elements() # retake panel for 'with_elements' mode\r
-         panel.fetch({cache: false}).done =>\r
-           panel.attributes = panel.replaced_attributes()\r
-           body = new Pettanr.Views.Panel.Body({\r
-             panel: panel,\r
-             spot: null\r
-           })\r
-           @trigger('ready', panel)\r
-           this.$el.append(body.render().el)\r
-     )\r
+     @list.open(this, {\r
+       success: (items) => \r
+         pager = Locmare.ListGroupModule.LibModule.Pager.factory(@list.page_status, params)\r
+         _.each items, (panel) =>\r
+           panel = panel.with_elements() # retake panel for 'with_elements' mode\r
+           panel.fetch({cache: false}).done =>\r
+             panel.attributes = panel.replaced_attributes()\r
+             body = new Pettanr.Views.Panel.Body({\r
+               panel: panel,\r
+               spot: null\r
+             })\r
+             @trigger('ready', panel)\r
+             this.$el.append(body.render().el)\r
+     })\r
      this\r
    \r
- class Pettanr.Views.Author.ShowModule.Panels extends Backbone.View\r
+ class Pettanr.Views.Author.ShowModule.Panels extends Pettanr.View\r
    \r
    initialize: (options) ->\r
      super(options)\r
      @item = options.item\r
      @panels_body = new Pettanr.Views.Author.ShowModule.PanelsBody({item: @item})\r
-     @credits = new Pettanr.Views.Scroll.PlayModule.Credits({parent: this})\r
+     @credits = new Pettanr.Views.Common.Credits({parent: this})\r
    \r
    render: () ->\r
      @listenTo(@panels_body, 'ready', @ready)\r
@@@ -87,7 -89,7 +84,7 @@@
    click_credit_icon: (item) ->\r
      @trigger('http_get', item.show_url())\r
    \r
- class Pettanr.Views.Author.ShowModule.Body extends Backbone.View\r
+ class Pettanr.Views.Author.ShowModule.Body extends Pettanr.View\r
    \r
    initialize: (options) ->\r
      super(options)\r
    http_get: (url) ->\r
      @trigger('http_get', url)\r
    \r
- class Pettanr.Views.Author.Show extends Backbone.View\r
+ class Pettanr.Views.Author.Show extends Pettanr.View\r
    tagName: 'div'\r
    \r
    initialize: (options) ->\r
@@@ -6,10 -6,10 +6,11 @@@ class Pettanr.Views.ResourcePicturePict
      @load()\r
    \r
    load: () ->\r
--    @picture = @item.picture()\r
--    @picture.fetch({cache: true}).done =>\r
--      @credit = @picture.credit_view(false)\r
--      @trigger('ready')\r
++    @item.get_parent('picture', this, {\r
++      success: (@picture) =>\r
++        @credit = @picture.credit_view(false)\r
++        @trigger('ready')\r
++    })\r
    \r
    render: () ->\r
      this.$el.html('')\r
@@@ -9,7 -9,7 +9,7 @@@ class Pettanr.Views.Sheet.PlayModule.Ow
    initialize: (options) ->\r
      super(options)\r
    \r
- class Pettanr.Views.Sheet.PlayModule.Footer extends Backbone.View\r
+ class Pettanr.Views.Sheet.PlayModule.Footer extends Pettanr.View\r
    tagName: 'table'\r
    className: 'no-border'\r
    \r
        this.$el.append('')\r
      this\r
    \r
- class Pettanr.Views.Sheet.PlayModule.Credits extends Backbone.View\r
-   tagName: 'div'\r
-   className: 'credits'\r
-   \r
-   initialize: (options) ->\r
-     @parent = options.parent\r
-     @licensed_pictures = {}\r
-   \r
-   render: () ->\r
-     this.$el.html('')\r
-     this\r
-   \r
-   push: (append_pictures) ->\r
-     _.each append_pictures, (retriever, pid) =>\r
-       return if @licensed_pictures[pid]\r
-       @listenTo(retriever, 'retrieve', @retrieve_picture)\r
-       retriever.retrieve()\r
-   \r
-   retrieve_picture: (picture) ->\r
-     @licensed_pictures[pid] = picture\r
-     credit = picture.credit_view()\r
-     this.$el.append(credit.render().el)\r
-   \r
- class Pettanr.Views.Sheet.PlayModule.Panel extends Backbone.View\r
+ class Pettanr.Views.Sheet.PlayModule.Panel extends Pettanr.View\r
    tagName: 'div'\r
    \r
    initialize: (options) ->\r
    \r
    clear: () ->\r
      this.$el.html('')\r
-     retriever = @sheet_panel.panel()\r
-     @listenTo(retriever, 'retrieve', @retrieve_panel)\r
-     retriever.retrieve()\r
+     @sheet_panel.get_parent('panel', this, {\r
+       success: (@panel) =>\r
+         @render()\r
+     })\r
      this\r
    \r
-   retrieve_panel: (@panel) ->\r
-     @render()\r
-   \r
    render: () ->\r
      this.$el.html('')\r
      body = new Pettanr.Views.Panel.Body({\r
@@@ -93,7 -68,7 +68,7 @@@
      this.credits.push(@panel.licensed_pictures())\r
      this\r
    \r
- class Pettanr.Views.Sheet.PlayModule.Panels extends Backbone.View\r
+ class Pettanr.Views.Sheet.PlayModule.Panels extends Pettanr.View\r
    tagName: 'div'\r
    \r
    initialize: (options) ->\r
        this.$el.append(panel_view.render().el)\r
      this\r
    \r
- class Pettanr.Views.Sheet.PlayModule.Body extends Backbone.View\r
+ class Pettanr.Views.Sheet.PlayModule.Body extends Pettanr.View\r
    tagName: 'div'\r
    \r
    initialize: (options) ->\r
    render: () ->\r
      this.$el.html('')\r
      # paginate(@pager)\r
--    credits = new Pettanr.Views.Sheet.PlayModule.Credits({parent: this})\r
++    credits = new Pettanr.Views.Common.Credits({parent: this})\r
      panels = new Pettanr.Views.Sheet.PlayModule.Panels({\r
        parent: this,\r
        items: @items,\r
      })\r
      this.$el.append(panels.render().el)\r
      this.$el.append(credits.render().el)\r
-     rb = new Tag.RowBreak()\r
-     this.$el.append(rb.render().el)\r
+     @rb()\r
      # paginate(@pager)\r
      this\r
    \r
- class Pettanr.Views.Sheet.Play extends Backbone.View\r
+ class Pettanr.Views.Sheet.Play extends Pettanr.View\r
    tagName: 'div'\r
    className: 'show'\r
    \r
@@@ -9,7 -9,7 +9,7 @@@ class Pettanr.Views.Story.PlayModule.Ow
    initialize: (options) ->\r
      super(options)\r
    \r
- class Pettanr.Views.Story.PlayModule.Footer extends Backbone.View\r
+ class Pettanr.Views.Story.PlayModule.Footer extends Pettanr.View\r
    tagName: 'table'\r
    className: 'no-border'\r
    \r
        this.$el.append('')\r
      this\r
    \r
- class Pettanr.Views.Story.PlayModule.Credits extends Backbone.View\r
-   tagName: 'div'\r
-   className: 'credits'\r
-   \r
-   initialize: (options) ->\r
-     @parent = options.parent\r
-     @licensed_pictures = {}\r
-   \r
-   render: () ->\r
-     this.$el.html('')\r
-     this\r
-   \r
-   push: (append_pictures) ->\r
-     _.each append_pictures, (retriever, pid) =>\r
-       return if @licensed_pictures[pid]\r
-       @listenTo(retriever, 'retrieve', @retrieve_picture)\r
-       retriever.retrieve()\r
-   \r
-   retrieve_picture: (picture) ->\r
-     @licensed_pictures[pid] = picture\r
-     credit = picture.credit_view()\r
-     this.$el.append(credit.render().el)\r
-   \r
- class Pettanr.Views.Story.PlayModule.Sheet extends Backbone.View\r
+ class Pettanr.Views.Story.PlayModule.Sheet extends Pettanr.View\r
    tagName: 'div'\r
    \r
    initialize: (options) ->\r
      @story_sheet = options.story_sheet\r
-     retriever = @story_sheet.sheet()\r
-     @listenTo(retriever, 'retrieve', @retrieve_sheet)\r
-     retriever.retrieve()\r
-   \r
-   retrieve_sheet: (@sheet) ->\r
-     @render()\r
+     @story_sheet.get_parent('sheet', this, {\r
+       success: (@sheet) =>\r
+         @render()\r
+     })\r
    \r
    render: () ->\r
      this.$el.html('')\r
--    body = new Pettanr.Views.Sheet.PlayModule.Body({\r
--      parent: this,\r
--      list: [], # list of sheets/by_story/1\r
++    @sheet.get_children('panel', this, {\r
++      success: (panels) => \r
++        body = new Pettanr.Views.Sheet.PlayModule.Body({\r
++          parent: this,\r
++          list: [], # list of sheets/by_story/1\r
++        })\r
++        this.$el.append(body.render().el)\r
      })\r
--    this.$el.append(body.render().el)\r
      this\r
    \r
- class Pettanr.Views.Story.PlayModule.Sheets extends Backbone.View\r
+ class Pettanr.Views.Story.PlayModule.Sheets extends Pettanr.View\r
    tagName: 'div'\r
    \r
    initialize: (options) ->\r
        this.$el.append(sheet_view.render().el)\r
      this\r
    \r
- class Pettanr.Views.Story.PlayModule.Body extends Backbone.View\r
+ class Pettanr.Views.Story.PlayModule.Body extends Pettanr.View\r
    tagName: 'div'\r
    \r
    initialize: (options) ->\r
      # paginate(@pager)\r
      this\r
    \r
- class Pettanr.Views.Story.Play extends Backbone.View\r
+ class Pettanr.Views.Story.Play extends Pettanr.View\r
    tagName: 'div'\r
    className: 'show'\r
    \r
@@@ -17,6 -17,9 +17,9 @@@
  //= require json2
  //= require backbone
  //= require i18n
+ //= require ./pettanr
+ //= require ./routes
+ //= require ./view
  //= require ./tags
  //= require ./manifest_base/manifest_base
  //= require ./manifest_base/base
  //= require ./locmare/list_group
  //= require ./locmare/list_group/lib
  //= require ./locmare/list_group/lib/pager
+ //= require ./locmare/list_group/lib/play_pager
  //= require ./locmare/list_group/list/base
  //= require ./locmare/list_group/list/public
  //= require ./locmare/list_group/list/private
  //= require ./peta/binder
  //= require ./peta/leaf
  //= require ./peta/editize
- //= require ./pettanr
- //= require ./routes
  //= require ./controllers
  //= require ./views
  //= require ./editor
  //= require ./pettanr/proxy
  //= require ./pettanr/cache
  //= require ./pettanr/inspire
+ //= require ./pettanr/tg
++//= require ./pettanr/finder
  //= require ./backbone.fetch-cache
  //= require main
@@@ -1,14 -1,14 +1,14 @@@
  class BalloonsController < ApplicationController
    if Manifest.manifest.magic_numbers['run_mode'] == 0
 -    before_filter :authenticate_user, :only => [:new, :edit, :create, :update, :destroy]
 -    before_filter :authenticate_author, :only => [:new, :edit, :create, :update, :destroy]
 +    before_action :authenticate_user, :only => [:new, :edit, :create, :update, :destroy]
 +    before_action :authenticate_author, :only => [:new, :edit, :create, :update, :destroy]
    else
 -    before_filter :authenticate_reader, :only => [
 +    before_action :authenticate_reader, :only => [
        :index, :show, 
        :by_author, :by_speech_balloon, :by_speech_balloon_template, :by_system_picture
      ]
 -    before_filter :authenticate_user, :only => [:new, :edit, :create, :update, :destroy]
 -    before_filter :authenticate_author, :only => [:new, :edit, :create, :update, :destroy]
 +    before_action :authenticate_user, :only => [:new, :edit, :create, :update, :destroy]
 +    before_action :authenticate_author, :only => [:new, :edit, :create, :update, :destroy]
    end
    
    def index
    end
    
    def by_author
--    filer_list
++    filer_list param: params[:id]
    end
    
    def by_speech_balloon
--    filer_list
++    filer_list param: params[:id]
    end
    
    def by_speech_balloon_template
--    filer_list
++    filer_list param: params[:id]
    end
    
    def by_system_picture
--    filer_list
++    filer_list param: params[:id]
    end
    
    def show_html_format format
@@@ -1,13 -1,13 +1,13 @@@
  class ComicStoriesController < ApplicationController
    if Manifest.manifest.magic_numbers['run_mode'] == 0
 -    before_filter :authenticate_user, :only => [:new, :create, :edit, :update, :destroy]
 -    before_filter :authenticate_author, :only => [:new, :create, :edit, :update, :destroy]
 +    before_action :authenticate_user, :only => [:new, :create, :edit, :update, :destroy]
 +    before_action :authenticate_author, :only => [:new, :create, :edit, :update, :destroy]
    else
 -    before_filter :authenticate_reader, :only => [
 +    before_action :authenticate_reader, :only => [
        :index, :show, :by_story, :by_comic, :by_author
      ]
 -    before_filter :authenticate_user, :only => [:new, :create, :edit, :update, :destroy]
 -    before_filter :authenticate_author, :only => [:new, :create, :edit, :update, :destroy]
 +    before_action :authenticate_user, :only => [:new, :create, :edit, :update, :destroy]
 +    before_action :authenticate_author, :only => [:new, :create, :edit, :update, :destroy]
    end
    
    def index
    end
    
    def by_story
--    filer_list
++    filer_list param: params[:id]
    end
    
    def by_comic
--    filer_list
++    filer_list param: params[:id]
    end
    
    def by_author
--    filer_list
++    filer_list param: params[:id]
    end
    
    def show
@@@ -50,7 -50,7 +50,7 @@@
      set_model
      @item = @my_model_class.new
      @item.supply_default
 -    @item.attributes = params[@item.item_name]
 +    @item.attributes = @item.permit_params params
      @item.overwrite @operators
      @binder = @my_model_class.binder_model.edit(@item.binder_id, @operators) if @item.binder_id
      @panel = @my_model_class.destination_model.show(@item.destination_id, @operators) if @item.destination_id
@@@ -62,7 -62,7 +62,7 @@@
      set_model
      @item = @my_model_class.edit(params[:id], @operators)
      ot = @item.t
 -    @item.attributes = params[@item.item_name]
 +    @item.attributes = @item.permit_params params
      @item.overwrite @operators
      @binder = @my_model_class.binder_model.edit(@item.binder_id, @operators) if @item.binder_id
      # no check permission for destination
@@@ -1,13 -1,13 +1,13 @@@
  class ComicsController < ApplicationController
    if Manifest.manifest.magic_numbers['run_mode'] == 0
 -    before_filter :authenticate_user, :only => [:new, :create, :edit, :update, :destroy]
 -    before_filter :authenticate_author, :only => [:new, :create, :edit, :update, :destroy]
 +    before_action :authenticate_user, :only => [:new, :create, :edit, :update, :destroy]
 +    before_action :authenticate_author, :only => [:new, :create, :edit, :update, :destroy]
    else
 -    before_filter :authenticate_reader, :only => [
 +    before_action :authenticate_reader, :only => [
        :index, :show, :play, :by_story, :by_author
      ]
 -    before_filter :authenticate_user, :only => [:new, :create, :edit, :update, :destroy]
 -    before_filter :authenticate_author, :only => [:new, :create, :edit, :update, :destroy]
 +    before_action :authenticate_user, :only => [:new, :create, :edit, :update, :destroy]
 +    before_action :authenticate_author, :only => [:new, :create, :edit, :update, :destroy]
    end
    
    def index
    end
    
    def by_story
--    filer_list
++    filer_list param: params[:id]
    end
    
    def by_author
--    filer_list
++    filer_list param: params[:id]
    end
    
    def show_html_format format
    
    def play
      set_play
 -    @list.options.merge!({'page_size' => -1})    # no limit no pager
 -    @list.reset
 +    @finder.per(-1)    # no limit no pager
      play_list
      respond_to do |format|
        format.html {
          if @item.own? @operators
 -          @new_story_items = assist_items('home', 'stories')
 +          @new_story_items = assist_items('home', 'stories', finder: :find_private, param: @operators)
          end
        }
 -      list_json_format @list, format
 +      list_json_format @finder, format
      end
    end
    
@@@ -69,7 -70,7 +69,7 @@@
      @item = @my_model_class.new
      @item.supply_default 
      @my_model_class.fold_extend_settings params[@my_model_class.item_name]
 -    @item.attributes = params[@my_model_class.item_name]
 +    @item.attributes = @item.permit_params params
      @item.overwrite @operators
      render_create
    end
@@@ -77,7 -78,7 +77,7 @@@
    def update
      set_edit
      @my_model_class.fold_extend_settings params[@my_model_class.item_name]
 -    @item.attributes = params[@my_model_class.item_name]
 +    @item.attributes = @item.permit_params params
      @item.overwrite @operators
      render_update
    end
@@@ -1,13 -1,13 +1,13 @@@
  class GroundColorsController < ApplicationController
    if Manifest.manifest.magic_numbers['run_mode'] == 0
 -    before_filter :authenticate_user, :only => []
 -    before_filter :authenticate_author, :only => []
 +    before_action :authenticate_user, :only => []
 +    before_action :authenticate_author, :only => []
    else
 -    before_filter :authenticate_reader, :only => [
 +    before_action :authenticate_reader, :only => [
        :index, :show, :by_panel, :by_author
      ]
 -    before_filter :authenticate_user, :only => []
 -    before_filter :authenticate_author, :only => []
 +    before_action :authenticate_user, :only => []
 +    before_action :authenticate_author, :only => []
    end
    
    def index
    end
    
    def by_panel
--    filer_list
++    filer_list param: params[:id]
    end
    
    def by_author
--    filer_list
++    filer_list param: params[:id]
    end
    
    def show_html_format format
@@@ -1,13 -1,13 +1,13 @@@
  class GroundPicturesController < ApplicationController
    if Manifest.manifest.magic_numbers['run_mode'] == 0
 -    before_filter :authenticate_user, :only => []
 -    before_filter :authenticate_author, :only => []
 +    before_action :authenticate_user, :only => []
 +    before_action :authenticate_author, :only => []
    else
 -    before_filter :authenticate_reader, :only => [
 +    before_action :authenticate_reader, :only => [
        :index, :show, :by_panel, :by_author
      ]
 -    before_filter :authenticate_user, :only => []
 -    before_filter :authenticate_author, :only => []
 +    before_action :authenticate_user, :only => []
 +    before_action :authenticate_author, :only => []
    end
    
    def index
    end
    
    def by_panel
--    filer_list
++    filer_list param: params[:id]
    end
    
    def by_author
--    filer_list
++    filer_list param: params[:id]
    end
    
    def show_html_format format
@@@ -1,18 -1,18 +1,18 @@@
  class LicenseGroupsController < ApplicationController
    if Manifest.manifest.magic_numbers['run_mode'] == 0
    else
 -    before_filter :authenticate_reader, :only => [
 +    before_action :authenticate_reader, :only => [
        :by_resource_picture
      ]
    end
 -  before_filter :authenticate_admin, :only => [:new, :create, :edit, :update, :destroy]
 +  before_action :authenticate_admin, :only => [:new, :create, :edit, :update, :destroy]
    
    def index
      filer_list
    end
    
    def by_resource_picture
--    filer_list
++    filer_list param: params[:id]
    end
    
    def show_html_format format
@@@ -43,7 -43,7 +43,7 @@@
      @item = @my_model_class.new
      @item.supply_default 
      @my_model_class.fold_extend_settings params[@my_model_class.item_name]
 -    @item.attributes = params[@my_model_class.item_name]
 +    @item.attributes = @item.permit_params params
      @item.overwrite 
      render_create
    end
@@@ -51,7 -51,7 +51,7 @@@
    def update
      set_edit
      @my_model_class.fold_extend_settings params[@my_model_class.item_name]
 -    @item.attributes = params[@my_model_class.item_name]
 +    @item.attributes = @item.permit_params params
      @item.overwrite 
      render_update
    end
@@@ -1,19 -1,19 +1,19 @@@
  class LicensesController < ApplicationController
 -  before_filter :authenticate_resource_reader, :only => [
 +  before_action :authenticate_resource_reader, :only => [
      :by_license_group, :by_system_picture
    ]
 -  before_filter :authenticate_admin, :only => [:new, :create, :edit, :update, :destroy]
 +  before_action :authenticate_admin, :only => [:new, :create, :edit, :update, :destroy]
    
    def index
      filer_list
    end
    
    def by_license_group
 -    filer_list
 +    filer_list param: params[:id]
    end
    
    def by_system_picture
--    filer_list
++    filer_list param: params[:id]
    end
    
    def show_html_format format
@@@ -30,7 -30,7 +30,7 @@@
        show_json_format format
      end
    end
--
++  
    def search
      @licenses = License.list_by_name(params[:name])
      
@@@ -53,7 -53,7 +53,7 @@@
      @item = @my_model_class.new
      @item.supply_default 
      @my_model_class.fold_extend_settings params[@my_model_class.item_name]
 -    @item.attributes = params[@my_model_class.item_name]
 +    @item.attributes = @item.permit_params params
      @item.overwrite 
      render_create
    end
@@@ -61,7 -61,7 +61,7 @@@
    def update
      set_edit
      @my_model_class.fold_extend_settings params[@my_model_class.item_name]
 -    @item.attributes = params[@my_model_class.item_name]
 +    @item.attributes = @item.permit_params params
      @item.overwrite 
      render_update
    end
@@@ -1,13 -1,13 +1,13 @@@
  class PanelPicturesController < ApplicationController
    if Manifest.manifest.magic_numbers['run_mode'] == 0
 -    before_filter :authenticate_user, :only => []
 -    before_filter :authenticate_author, :only => []
 +    before_action :authenticate_user, :only => []
 +    before_action :authenticate_author, :only => []
    else
 -    before_filter :authenticate_reader, :only => [
 +    before_action :authenticate_reader, :only => [
        :index, :show, :by_panel, :by_author
      ]
 -    before_filter :authenticate_user, :only => []
 -    before_filter :authenticate_author, :only => []
 +    before_action :authenticate_user, :only => []
 +    before_action :authenticate_author, :only => []
    end
    
    def index
    end
    
    def by_panel
--    filer_list
++    filer_list param: params[:id]
    end
    
    def by_author
--    filer_list
++    filer_list param: params[:id]
    end
    
    def show_html_format format
@@@ -1,23 -1,23 +1,23 @@@
  class PanelsController < ApplicationController
    if Manifest.manifest.magic_numbers['run_mode'] == 0
 -    before_filter :authenticate_user, :only => [:new, :edit, :create, :update, :destroy]
 -    before_filter :authenticate_author, :only => [:new, :edit, :create, :update, :destroy]
 +    before_action :authenticate_user, :only => [:new, :edit, :create, :update, :destroy]
 +    before_action :authenticate_author, :only => [:new, :edit, :create, :update, :destroy]
    else
 -    before_filter :authenticate_reader, :only => [
 +    before_action :authenticate_reader, :only => [
        :index, :show, :by_scroll, :by_sheet, :by_author, :by_speech_balloon_template
      ]
 -    before_filter :authenticate_user, :only => [:new, :edit, :create, :update, :destroy]
 -    before_filter :authenticate_author, :only => [:new, :edit, :create, :update, :destroy]
 +    before_action :authenticate_user, :only => [:new, :edit, :create, :update, :destroy]
 +    before_action :authenticate_author, :only => [:new, :edit, :create, :update, :destroy]
    end
    
    private
    def panel_list
      set_list
 -    @items = @list.items 
 -    @pager = @list.page_status.pager
 +    @items = @finder
 +    @pager = @finder
      respond_to do |format|
        format.html 
 -      list_json_format @list, format
 +      list_json_format @finder, format
        format.atom 
        format.rss
      end
    end
    
    def by_scroll
--    filer_list
++    filer_list param: params[:id]
    end
    
    def by_sheet
--    filer_list
++    filer_list param: params[:id]
    end
    
    def by_author
--    filer_list
++    filer_list param: params[:id]
    end
    
    def by_speech_balloon_template
--    filer_list
++    filer_list param: params[:id]
    end
    
    def show_html_format format
        jsn = JSON.parse_no_except(params[:json])
      end
      @prm = if params[:panel] == nil or params[:panel].empty?
 -       jsn
 +      jsn
      else
 -       params[:panel]
 +      @item.permit_params(params)
      end
      @item.class.fold_extend_settings @prm
      #@item.refresh
      if params[:json]
        jsn = JSON.parse(params[:json])
      end
 -    @prm = params[:panel] || jsn
 +    @prm = if params[:panel] == nil or params[:panel].empty?
 +      jsn
 +    else
 +      @item.permit_params(params)
 +    end
      @item.class.fold_extend_settings @prm
      # @item.refresh
      respond_to do |format|
@@@ -1,22 -1,22 +1,22 @@@
  class PicturesController < ApplicationController
    if Manifest.manifest.magic_numbers['run_mode'] == 0
 -    before_filter :authenticate_user, :only => []
 -    before_filter :authenticate_author, :only => []
 +    before_action :authenticate_user, :only => []
 +    before_action :authenticate_author, :only => []
    else
 -    before_filter :authenticate_user, :only => []
 -    before_filter :authenticate_resource_reader, :only => [
 +    before_action :authenticate_user, :only => []
 +    before_action :authenticate_resource_reader, :only => [
        :show, :credit, :search
      ]
 -    before_filter :authenticate_author, :only => []
 +    before_action :authenticate_author, :only => []
    end
 -  before_filter :authenticate_admin, :only => [:index, :by_artist ]
 +  before_action :authenticate_admin, :only => [:index, :by_artist ]
    
    def index
      filer_list
    end
    
    def by_artist
--    filer_list
++    filer_list param: params[:id]
    end
    
    def show_html_format format
@@@ -1,9 -1,9 +1,9 @@@
  class ResourcePicturePicturesController < ApplicationController
    if Manifest.manifest.magic_numbers['run_mode'] == 0
 -    before_filter :authenticate_admin, :only => [:new, :create, :edit, :update, :destroy]
 +    before_action :authenticate_admin, :only => [:new, :create, :edit, :update, :destroy]
    else
 -    before_filter :authenticate_reader, :only => [:index, :show, :by_original_picture, :by_resource_picture, :by_picture]
 -    before_filter :authenticate_admin, :only => [:new, :create, :edit, :update, :destroy]
 +    before_action :authenticate_reader, :only => [:index, :show, :by_original_picture, :by_resource_picture, :by_picture]
 +    before_action :authenticate_admin, :only => [:new, :create, :edit, :update, :destroy]
    end
    
    def index
    end
    
    def by_original_picture
--    filer_list
++    filer_list param: params[:id]
    end
    
    def by_resource_picture
--    filer_list
++    filer_list param: params[:id]
    end
    
    def by_picture
--    filer_list
++    filer_list param: params[:id]
    end
    
    def show
@@@ -1,14 -1,14 +1,14 @@@
  class ResourcePicturesController < ApplicationController
    if Manifest.manifest.magic_numbers['run_mode'] == 0
 -    before_filter :authenticate_user, :only => [:new, :create, :update, :destroy]
 -    before_filter :authenticate_artist, :only => [:new, :create, :update, :destroy]
 +    before_action :authenticate_user, :only => [:new, :create, :update, :destroy]
 +    before_action :authenticate_artist, :only => [:new, :create, :update, :destroy]
    else
 -    before_filter :authenticate_resource_reader, :only => [
 +    before_action :authenticate_resource_reader, :only => [
        :index, :show, :credit, 
        :by_original_picture, :by_license_group, :by_license, :by_artist
      ]
 -    before_filter :authenticate_user, :only => [:new, :create, :update, :destroy]
 -    before_filter :authenticate_artist, :only => [:new, :create, :update, :destroy]
 +    before_action :authenticate_user, :only => [:new, :create, :update, :destroy]
 +    before_action :authenticate_artist, :only => [:new, :create, :update, :destroy]
    end
    
    def index
    end
    
    def by_original_picture
--    filer_list
++    filer_list param: params[:id]
    end
    
    def by_license_group
--    filer_list
++    filer_list param: params[:id]
    end
    
    def by_license
--    filer_list
++    filer_list param: params[:id]
    end
    
    def by_artist
--    filer_list
++    filer_list param: params[:id]
    end
    
    def show_html_format format
      if params[:json]
        jsn = JSON.parse_no_except(params[:json])
      end
 +    @item = @original_picture.resource_picture || ResourcePicture.new
      @prm = if params[:resource_picture] == nil or params[:resource_picture].empty?
 -       jsn
 +      jsn
      else
 -       params[:resource_picture]
 +      @item.permit_params(params)
      end
 -    @item = @original_picture.resource_picture || ResourcePicture.new
      @item.attributes = @prm
      @item.overwrite @original_picture
      @item.boosts 'post'
@@@ -1,13 -1,13 +1,13 @@@
  class ScrollPanelsController < ApplicationController
    if Manifest.manifest.magic_numbers['run_mode'] == 0
 -    before_filter :authenticate_user, :only => [:new, :create, :edit, :update, :destroy]
 -    before_filter :authenticate_author, :only => [:new, :create, :edit, :update, :destroy]
 +    before_action :authenticate_user, :only => [:new, :create, :edit, :update, :destroy]
 +    before_action :authenticate_author, :only => [:new, :create, :edit, :update, :destroy]
    else
 -    before_filter :authenticate_reader, :only => [
 +    before_action :authenticate_reader, :only => [
        :index, :show, :by_panel, :by_scroll, :by_author
      ]
 -    before_filter :authenticate_user, :only => [:new, :create, :edit, :update, :destroy]
 -    before_filter :authenticate_author, :only => [:new, :create, :edit, :update, :destroy]
 +    before_action :authenticate_user, :only => [:new, :create, :edit, :update, :destroy]
 +    before_action :authenticate_author, :only => [:new, :create, :edit, :update, :destroy]
    end
    
    def index
    end
    
    def by_panel
--    filer_list
++    filer_list param: params[:id]
    end
    
    def by_scroll
--    filer_list
++    filer_list param: params[:id]
    end
    
    def by_author
--    filer_list
++    filer_list param: params[:id]
    end
    
    def show
@@@ -46,7 -46,7 +46,7 @@@
      set_model
      @item = @my_model_class.new
      @item.supply_default
 -    @item.attributes = params[@item.item_name]
 +    @item.attributes = @item.permit_params params
      @item.overwrite @operators
      @binder = @my_model_class.binder_model.edit(@item.binder_id, @operators) if @item.binder_id
      @panel = @my_model_class.destination_model.show(@item.destination_id, @operators) if @item.destination_id
@@@ -58,7 -58,7 +58,7 @@@
      set_model
      @item = @my_model_class.edit(params[:id], @operators)
      ot = @item.t
 -    @item.attributes = params[@item.item_name]
 +    @item.attributes = @item.permit_params params
      @item.overwrite @operators
      @binder = @my_model_class.binder_model.edit(@item.binder_id, @operators) if @item.binder_id
      # no check permission for destination
@@@ -1,13 -1,13 +1,13 @@@
  class ScrollsController < ApplicationController
    if Manifest.manifest.magic_numbers['run_mode'] == 0
 -    before_filter :authenticate_user, :only => [:new, :create, :edit, :update, :destroy]
 -    before_filter :authenticate_author, :only => [:new, :create, :edit, :update, :destroy]
 +    before_action :authenticate_user, :only => [:new, :create, :edit, :update, :destroy]
 +    before_action :authenticate_author, :only => [:new, :create, :edit, :update, :destroy]
    else
 -    before_filter :authenticate_reader, :only => [
 +    before_action :authenticate_reader, :only => [
        :top, :index, :show, :play, :by_panel, :by_author
      ]
 -    before_filter :authenticate_user, :only => [:new, :create, :edit, :update, :destroy]
 -    before_filter :authenticate_author, :only => [:new, :create, :edit, :update, :destroy]
 +    before_action :authenticate_user, :only => [:new, :create, :edit, :update, :destroy]
 +    before_action :authenticate_author, :only => [:new, :create, :edit, :update, :destroy]
    end
    
    def index
    end
    
    def by_author
--    filer_list
++    filer_list param: params[:id]
    end
    
    def by_panel
--    filer_list
++    filer_list param: params[:id]
    end
    
    def show_html_format format
        format.html {
          if @item.own? @operators
            @fresh_panel_items = assist_items('panels', 'index')
 -          @new_panel_items = assist_items('home', 'panels')
 +          @new_panel_items = assist_items('home', 'panels', finder: :find_private, param: @operators)
          end
        }
 -      list_json_format @list, format
 +      list_json_format @finder, format
      end
    end
    
      set_model
      @item = @my_model_class.new
      @item.supply_default 
 -    @item.attributes = params[@my_model_class.item_name]
 +    @item.attributes = @item.permit_params params
      @item.overwrite @operators
      render_create
    end
    
    def update
      set_edit
 -    @item.attributes = params[@my_model_class.item_name]
 +    @item.attributes = @item.permit_params params
      @item.overwrite @operators
      render_update
    end
@@@ -1,13 -1,13 +1,13 @@@
  class SheetPanelsController < ApplicationController
    if Manifest.manifest.magic_numbers['run_mode'] == 0
 -    before_filter :authenticate_user, :only => [:new, :create, :edit, :update, :destroy]
 -    before_filter :authenticate_author, :only => [:new, :create, :edit, :update, :destroy]
 +    before_action :authenticate_user, :only => [:new, :create, :edit, :update, :destroy]
 +    before_action :authenticate_author, :only => [:new, :create, :edit, :update, :destroy]
    else
 -    before_filter :authenticate_reader, :only => [
 +    before_action :authenticate_reader, :only => [
        :index, :show, :by_sheet, :by_panel, :by_author
      ]
 -    before_filter :authenticate_user, :only => [:new, :create, :edit, :update, :destroy]
 -    before_filter :authenticate_author, :only => [:new, :create, :edit, :update, :destroy]
 +    before_action :authenticate_user, :only => [:new, :create, :edit, :update, :destroy]
 +    before_action :authenticate_author, :only => [:new, :create, :edit, :update, :destroy]
    end
    
    def index
    end
    
    def by_sheet
--    filer_list
++    filer_list param: params[:id]
    end
    
    def by_panel
--    filer_list
++    filer_list param: params[:id]
    end
    
    def by_author
--    filer_list
++    filer_list param: params[:id]
    end
    
    def show
@@@ -1,13 -1,13 +1,13 @@@
  class SheetsController < ApplicationController
    if Manifest.manifest.magic_numbers['run_mode'] == 0
 -    before_filter :authenticate_user, :only => [:new, :create, :edit, :update, :destroy]
 -    before_filter :authenticate_author, :only => [:new, :create, :edit, :update, :destroy]
 +    before_action :authenticate_user, :only => [:new, :create, :edit, :update, :destroy]
 +    before_action :authenticate_author, :only => [:new, :create, :edit, :update, :destroy]
    else
 -    before_filter :authenticate_reader, :only => [
 +    before_action :authenticate_reader, :only => [
        :index, :show, :play, :by_story, :by_panel, :by_author
      ]
 -    before_filter :authenticate_user, :only => [:new, :create, :edit, :update, :destroy]
 -    before_filter :authenticate_author, :only => [:new, :create, :edit, :update, :destroy]
 +    before_action :authenticate_user, :only => [:new, :create, :edit, :update, :destroy]
 +    before_action :authenticate_author, :only => [:new, :create, :edit, :update, :destroy]
    end
    
    def index
    end
    
    def by_story
--    filer_list
++    filer_list param: params[:id]
    end
    
    def by_panel
--    filer_list
++    filer_list param: params[:id]
    end
    
    def by_author
--    filer_list
++    filer_list param: params[:id]
    end
    
    def show_html_format format
    
    def play
      set_play
 -    @list.options.merge!({'page_size' => -1})    # no limit no pager
 -    @list.reset
 +    @finder.per(-1)    # no limit no pager
      play_list
      respond_to do |format|
        format.html {
 -        if @operators.author
 -          @new_panel_items = assist_items('home', 'panels')
 +        if @item.own? @operators
 +          @new_panel_items = assist_items('home', 'panels', finder: :find_private, param: @operators)
          end
        }
 -      list_json_format @list, format
 +      list_json_format @finder, format
      end
    end
    
      set_model
      @item = @my_model_class.new
      @item.supply_default 
 -    jsn = nil
 -    if params[:json]
 -      jsn = JSON.parse_no_except(params[:json])
 +    @prm = if params[:json]
 +      JSON.parse_no_except(params[:json])
 +    else
 +      @item.permit_params params
      end
 -    @prm = params[:sheet] || jsn
      
      respond_to do |format|
        if @item.store @prm, @operators
    def update
      set_edit
      jsn = nil
 -    if params[:json]
 -      jsn = JSON.parse(params[:json])
 +    @prm = if params[:json]
 +      JSON.parse(params[:json])
 +    else
 +      @item.permit_params params
      end
 -    @prm = params[:sheet] || jsn
      respond_to do |format|
        if @item.store @prm, @operators
          updated_html_format format
@@@ -1,13 -1,13 +1,13 @@@
  class SpeechBalloonsController < ApplicationController
    if Manifest.manifest.magic_numbers['run_mode'] == 0
 -    before_filter :authenticate_user, :only => []
 -    before_filter :authenticate_author, :only => []
 +    before_action :authenticate_user, :only => []
 +    before_action :authenticate_author, :only => []
    else
 -    before_filter :authenticate_reader, :only => [
 +    before_action :authenticate_reader, :only => [
        :index, :show, :by_panel, :by_author, :by_speech_balloon_template
      ]
 -    before_filter :authenticate_user, :only => []
 -    before_filter :authenticate_author, :only => []
 +    before_action :authenticate_user, :only => []
 +    before_action :authenticate_author, :only => []
    end
    
    def index
    end
    
    def by_panel
--    filer_list
++    filer_list param: params[:id]
    end
    
    def by_author
--    filer_list
++    filer_list param: params[:id]
    end
    
    def by_speech_balloon_template
--    filer_list
++    filer_list param: params[:id]
    end
    
    def show_html_format format
@@@ -1,35 -1,35 +1,35 @@@
  class SpeechesController < ApplicationController
    if Manifest.manifest.magic_numbers['run_mode'] == 0
 -    before_filter :authenticate_user, :only => [:new, :edit, :create, :update, :destroy]
 -    before_filter :authenticate_author, :only => [:new, :edit, :create, :update, :destroy]
 +    before_action :authenticate_user, :only => [:new, :edit, :create, :update, :destroy]
 +    before_action :authenticate_author, :only => [:new, :edit, :create, :update, :destroy]
    else
 -    before_filter :authenticate_reader, :only => [
 +    before_action :authenticate_reader, :only => [
        :index, :show, 
        :by_author, :by_speech_balloon, :by_speech_balloon_template, :by_writing_format 
      ]
 -    before_filter :authenticate_user, :only => [:new, :edit, :create, :update, :destroy]
 -    before_filter :authenticate_author, :only => [:new, :edit, :create, :update, :destroy]
 +    before_action :authenticate_user, :only => [:new, :edit, :create, :update, :destroy]
 +    before_action :authenticate_author, :only => [:new, :edit, :create, :update, :destroy]
    end
 -  before_filter :authenticate_admin!, :only => []
 +  before_action :authenticate_admin!, :only => []
    
    def index
      filer_list
    end
    
    def by_author
--    filer_list
++    filer_list param: params[:id]
    end
    
    def by_speech_balloon
--    filer_list
++    filer_list param: params[:id]
    end
    
    def by_speech_balloon_template
--    filer_list
++    filer_list param: params[:id]
    end
    
    def by_writing_format
--    filer_list
++    filer_list param: params[:id]
    end
    
    def show_html_format format
@@@ -1,13 -1,13 +1,13 @@@
  class StoriesController < ApplicationController
    if Manifest.manifest.magic_numbers['run_mode'] == 0
 -    before_filter :authenticate_user, :only => [:new, :create, :edit, :update, :destroy]
 -    before_filter :authenticate_author, :only => [:new, :create, :edit, :update, :destroy]
 +    before_action :authenticate_user, :only => [:new, :create, :edit, :update, :destroy]
 +    before_action :authenticate_author, :only => [:new, :create, :edit, :update, :destroy]
    else
 -    before_filter :authenticate_reader, :only => [
 +    before_action :authenticate_reader, :only => [
        :index, :show, :play, :by_comic, :by_sheet, :by_author
      ]
 -    before_filter :authenticate_user, :only => [:new, :create, :edit, :update, :destroy]
 -    before_filter :authenticate_author, :only => [:new, :create, :edit, :update, :destroy]
 +    before_action :authenticate_user, :only => [:new, :create, :edit, :update, :destroy]
 +    before_action :authenticate_author, :only => [:new, :create, :edit, :update, :destroy]
    end
    
    def index
    end
    
    def by_comic
--    filer_list
++    filer_list param: params[:id]
    end
    
    def by_sheet
--    filer_list
++    filer_list param: params[:id]
    end
    
    def by_author
--    filer_list
++    filer_list param: params[:id]
    end
    
    def show_html_format format
    
    def play
      set_play
 -    @list.options.merge!({'per_page' => 1})    # show one sheet
 -    @list.reset
 +    @finder.per( 1)   # show one sheet
      play_list
      respond_to do |format|
        format.html {
 -        @pager = @list.page_status.pager
 +        @pager = @finder
          if @item.own? @operators
 -          @new_sheet_items = assist_items('home', 'sheets')
 +          @new_sheet_items = assist_items('home', 'sheets', finder: :find_private, param: @operators)
          end
        }
 -      list_json_format @list, format
 +      list_json_format @finder, format
      end
    end
    
@@@ -72,7 -73,7 +72,7 @@@
      @story = @item
      @item = @my_model_class.new
      @item.supply_default 
 -    @item.attributes = params[@my_model_class.item_name]
 +    @item.attributes = @item.permit_params params
      @item.overwrite @operators
      render_create
    end
@@@ -80,7 -81,7 +80,7 @@@
    def update
      set_edit
      @story = @item
 -    @item.attributes = params[@my_model_class.item_name]
 +    @item.attributes = @item.permit_params params
      @item.overwrite @operators
      render_update
    end
@@@ -1,13 -1,13 +1,13 @@@
  class StorySheetsController < ApplicationController
    if Manifest.manifest.magic_numbers['run_mode'] == 0
 -    before_filter :authenticate_user, :only => [:new, :create, :edit, :update, :destroy]
 -    before_filter :authenticate_author, :only => [:new, :create, :edit, :update, :destroy]
 +    before_action :authenticate_user, :only => [:new, :create, :edit, :update, :destroy]
 +    before_action :authenticate_author, :only => [:new, :create, :edit, :update, :destroy]
    else
 -    before_filter :authenticate_reader, :only => [
 +    before_action :authenticate_reader, :only => [
        :index, :show, :by_story, :by_sheet, :by_author
      ]
 -    before_filter :authenticate_user, :only => [:new, :create, :edit, :update, :destroy]
 -    before_filter :authenticate_author, :only => [:new, :create, :edit, :update, :destroy]
 +    before_action :authenticate_user, :only => [:new, :create, :edit, :update, :destroy]
 +    before_action :authenticate_author, :only => [:new, :create, :edit, :update, :destroy]
    end
    
    def index
    end
    
    def by_story
--    filer_list
++    filer_list param: params[:id]
    end
    
    def by_sheet
--    filer_list
++    filer_list param: params[:id]
    end
    
    def by_author
--    filer_list
++    filer_list param: params[:id]
    end
    
    def show
@@@ -46,7 -46,7 +46,7 @@@
      set_model
      @item = @my_model_class.new
      @item.supply_default
 -    @item.attributes = params[@item.item_name]
 +    @item.attributes = @item.permit_params params
      @item.overwrite @operators
      @binder = @my_model_class.binder_model.edit(@item.binder_id, @operators) if @item.binder_id
      @panel = @my_model_class.destination_model.show(@item.destination_id, @operators) if @item.destination_id
@@@ -58,7 -58,7 +58,7 @@@
      set_model
      @item = @my_model_class.edit(params[:id], @operators)
      ot = @item.t
 -    @item.attributes = params[@item.item_name]
 +    @item.attributes = @item.permit_params params
      @item.overwrite @operators
      @binder = @my_model_class.binder_model.edit(@item.binder_id, @operators) if @item.binder_id
      # no check permission for destination
@@@ -1,20 -1,20 +1,20 @@@
  class WritingFormatsController < ApplicationController
    if Manifest.manifest.magic_numbers['run_mode'] == 0
 -    before_filter :authenticate_user, :only => []
 +    before_action :authenticate_user, :only => []
    else
 -    before_filter :authenticate_reader, :only => [
 +    before_action :authenticate_reader, :only => [
        :index, :by_system_picture, :show
      ]
 -    before_filter :authenticate_user, :only => []
 +    before_action :authenticate_user, :only => []
    end
 -  before_filter :authenticate_admin, :only => [:new, :create, :edit, :update, :destroy]
 +  before_action :authenticate_admin, :only => [:new, :create, :edit, :update, :destroy]
    
    def index
      filer_list
    end
    
    def by_system_picture
--    filer_list
++    filer_list param: params[:id]
    end
    
    def show_html_format format
@@@ -44,7 -44,7 +44,7 @@@
      @item = @my_model_class.new
      @item.supply_default 
      @my_model_class.fold_extend_settings params[@my_model_class.item_name]
 -    @item.attributes = params[@my_model_class.item_name]
 +    @item.attributes = @item.permit_params params
      @item.overwrite 
      render_create
    end
@@@ -52,7 -52,7 +52,7 @@@
    def update
      set_edit
      @my_model_class.fold_extend_settings params[@my_model_class.item_name]
 -    @item.attributes = params[@my_model_class.item_name]
 +    @item.attributes = @item.permit_params params
      @item.overwrite 
      render_update
    end
diff --combined public/manifest.json
          "play": {\r
            "type": "list",\r
            "args": {\r
 -            "alias": "scroll_panels.by_scroll",\r
 +            "return_item_name": "scroll_panel",\r
              "order": "t",\r
              "direction": 1\r
            }\r
          "play": {\r
            "type": "list",\r
            "args": {\r
 -            "alias": "comic_stories.by_comic",\r
 +            "return_item_name": "comic_story",\r
              "max_page_size": -1,\r
              "order": "t",\r
              "direction": 1\r
          "play": {\r
            "type": "list",\r
            "args": {\r
 -            "alias": "story_sheets.by_story",\r
 +            "return_item_name": "story_sheet",\r
              "max_page_size": -1,\r
              "order": "t",\r
              "direction": 1\r
          "play": {\r
            "type": "list",\r
            "args": {\r
 -            "alias": "sheet_panels.by_sheet",\r
 +            "return_item_name": "sheet_panel",\r
              "order": "t",\r
              "direction": 1\r
            }\r
          "scrolls": {\r
            "type": "list",\r
            "args": {\r
 -            "alias": "scrolls.index"\r
 +            "item_name": "scroll"\r
            }\r
          },\r
          "scroll_panels": {\r
            "type": "list",\r
            "args": {\r
 -            "alias": "scroll_panels.index"\r
 +            "item_name": "scroll_panel"\r
            }\r
          },\r
          "comics": {\r
            "type": "list",\r
            "args": {\r
 -            "alias": "comics.index"\r
 +            "item_name": "comic"\r
            }\r
          },\r
          "comic_stories": {\r
            "type": "list",\r
            "args": {\r
 -            "alias": "comic_stories.index"\r
 +            "item_name": "comic_story"\r
            }\r
          },\r
          "stories": {\r
            "type": "list",\r
            "args": {\r
 -            "alias": "stories.index"\r
 +            "item_name": "story"\r
            }\r
          },\r
          "story_sheets": {\r
            "type": "list",\r
            "args": {\r
 -            "alias": "story_sheets.index"\r
 +            "item_name": "story_sheet"\r
            }\r
          },\r
          "sheets": {\r
            "type": "list",\r
            "args": {\r
 -            "alias": "sheets.index"\r
 +            "item_name": "sheet"\r
            }\r
          },\r
          "sheet_panels": {\r
            "type": "list",\r
            "args": {\r
 -            "alias": "sheet_panels.index"\r
 +            "item_name": "sheet_panel"\r
            }\r
          },\r
          "panels": {\r
            "type": "list",\r
            "args": {\r
 -            "alias": "panels.index"\r
 +            "item_name": "panel"\r
            }\r
          },\r
          "panel_pictures": {\r
            "type": "list",\r
            "args": {\r
 -            "alias": "panel_pictures.index"\r
 +            "item_name": "panel_picture"\r
            }\r
          },\r
          "speech_balloons": {\r
            "type": "list",\r
            "args": {\r
 -            "alias": "speech_balloons.index"\r
 +            "item_name": "speech_balloon"\r
            }\r
          },\r
          "speeches": {\r
            "type": "list",\r
            "args": {\r
 -            "alias": "speeches.index"\r
 +            "item_name": "speech"\r
            }\r
          },\r
          "balloons": {\r
            "type": "list",\r
            "args": {\r
 -            "alias": "balloons.index"\r
 +            "item_name": "balloon"\r
            }\r
          },\r
          "ground_pictures": {\r
            "type": "list",\r
            "args": {\r
 -            "alias": "ground_pictures.index"\r
 +            "item_name": "ground_picture"\r
            }\r
          },\r
          "ground_colors": {\r
            "type": "list",\r
            "args": {\r
 -            "alias": "ground_colors.index"\r
 +            "item_name": "ground_color"\r
            }\r
          },\r
          "original_pictures": {\r
            "type": "list",\r
            "args": {\r
 -            "alias": "original_pictures.index"\r
 +            "item_name": "original_picture"\r
            }\r
          },\r
          "resource_pictures": {\r
            "type": "list",\r
            "args": {\r
 -            "alias": "resource_pictures.index"\r
 +            "item_name": "resource_picture"\r
            }\r
          }\r
        }\r
      "panel_picture": {\r
        "associations": {\r
          "belongs_to": {\r
-           "panel": {}\r
+           "panel": {},\r
+           "picture": {}\r
          },\r
          "has_many": {}\r
        },\r
      "ground_picture": {\r
        "associations": {\r
          "belongs_to": {\r
-           "panel": {}\r
+           "panel": {},\r
+           "picture": {}\r
          },\r
          "has_many": {}\r
        },\r
            "artist": {},\r
            "system_picture": {}\r
          },\r
-         "has_many": {},\r
+         "has_many": {\r
+           "panel_pictures": {},\r
+           "ground_pictures": {}\r
+         },\r
          "has_one": {\r
            "resource_picture_picture": {}\r
          }\r