OSDN Git Service

t#:
authoryasushiito <yas@pen-chan.jp>
Mon, 16 Dec 2013 05:02:40 +0000 (14:02 +0900)
committeryasushiito <yas@pen-chan.jp>
Mon, 16 Dec 2013 05:02:40 +0000 (14:02 +0900)
57 files changed:
app/assets/javascripts/application.js
app/assets/javascripts/configurations.js.coffee.erb [deleted file]
app/assets/javascripts/configurations2.js.coffee.erb [deleted file]
app/assets/javascripts/panels.js.coffee
app/controllers/application_controller.rb
app/controllers/artists_controller.rb
app/controllers/authors_controller.rb
app/controllers/comics_controller.rb
app/controllers/ground_colors_controller.rb
app/controllers/ground_pictures_controller.rb
app/controllers/home_controller.rb
app/controllers/licenses_controller.rb
app/controllers/original_pictures_controller.rb
app/controllers/panel_pictures_controller.rb
app/controllers/panels_controller.rb
app/controllers/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/stories_controller.rb
app/controllers/story_sheets_controller.rb
app/helpers/application_helper.rb
app/models/artist.rb
app/models/ground_color.rb
app/models/ground_picture.rb
app/models/license_group.rb
app/models/original_picture.rb
app/models/panel.rb
app/models/panel_picture.rb
app/models/picture.rb
app/models/scroll_panel.rb
app/models/sheet.rb
app/models/sheet_panel.rb
app/models/speech_balloon.rb
app/models/speech_balloon_template.rb
app/models/story.rb
app/models/story_sheet.rb
app/models/system_picture.rb
app/models/writing_format.rb
app/views/original_picture_license_groups/_allform.html.erb
app/views/original_picture_license_groups/_form.html.erb
app/views/original_pictures/_form.html.erb
app/views/scrolls/show.html.erb
app/views/sheets/_body.html.erb
config/routes.rb
lib/content.rb
lib/item.rb
lib/manifest/controller.rb
lib/manifest/filer.rb
lib/manifest/list.rb
lib/manifest/manifest.rb
lib/manifest/profiler.rb
lib/tasks/licenses.rake
lib/tasks/speech_balloons.rake
public/manifest.json

index d80f0c0..1e408d0 100644 (file)
@@ -13,8 +13,7 @@
 //= require textchange
 //= require underscore
 //= require backbone
-//= require configurations
-//= require configurations2
+//= require_directory ./manifest/work
 //= require pettanr_editor
 //= require pettanr_sheeter
 //= require writing_formats
diff --git a/app/assets/javascripts/configurations.js.coffee.erb b/app/assets/javascripts/configurations.js.coffee.erb
deleted file mode 100644 (file)
index f8781b3..0000000
+++ /dev/null
@@ -1,3249 +0,0 @@
-#マニフェスト\r
-@configurations = {\r
-  controllers: {\r
-    scroll: {\r
-      model_name: 'scroll',\r
-      actions: {\r
-        index: {\r
-          type: 'list',\r
-          list: {\r
-            list_name: 'public_list',\r
-          },\r
-        },\r
-        scroll_panels: {\r
-          type: 'list',\r
-          list: {\r
-            list_name: 'scroll_panels',\r
-          },\r
-        },\r
-        panels: {\r
-          type: 'list',\r
-          list: {\r
-            list_name: 'panels',\r
-          },\r
-        },\r
-        by_author: {\r
-          type: 'list',\r
-          list: {\r
-            list_name: 'by_author',\r
-          },\r
-        },\r
-        by_panel: {\r
-          type: 'list',\r
-          list: {\r
-            list_name: 'by_panel',\r
-          },\r
-        },\r
-        show: {\r
-          type: 'show',\r
-          name: 'show',\r
-        },\r
-      },\r
-    },\r
-    scroll_panel: {\r
-      model_name: 'scroll_panel',\r
-      actions: {\r
-        index: {\r
-          type: 'list',\r
-          list: {\r
-            list_name: 'public_list',\r
-            \r
-          },\r
-        },\r
-        by_panel: {\r
-          type: 'list',\r
-          list: {\r
-            list_name: 'by_panel',\r
-          },\r
-        },\r
-        by_scroll: {\r
-          type: 'list',\r
-          list: {\r
-            list_name: 'by_scroll',\r
-          },\r
-        },\r
-      },\r
-    },\r
-    comic: {\r
-      model_name: 'comic',\r
-      actions: {\r
-        index: {\r
-          type: 'list',\r
-          list: {\r
-            list_name: 'public_list',\r
-            \r
-          },\r
-        },\r
-        stories: {\r
-          type: 'list',\r
-          list: {\r
-            list_name: 'stories',\r
-          },\r
-        },\r
-        by_author: {\r
-          type: 'list',\r
-          list: {\r
-            list_name: 'by_author',\r
-          },\r
-        },\r
-      },\r
-    },\r
-    story: {\r
-      model_name: 'story',\r
-      actions: {\r
-        index: {\r
-          type: 'list',\r
-          list: {\r
-            list_name: 'public_list',\r
-            \r
-          },\r
-        },\r
-        story_sheets: {\r
-          type: 'list',\r
-          list: {\r
-            list_name: 'story_sheets',\r
-          },\r
-        },\r
-        sheets: {\r
-          type: 'list',\r
-          list: {\r
-            list_name: 'sheets',\r
-          },\r
-        },\r
-        by_sheet: {\r
-          type: 'list',\r
-          list: {\r
-            list_name: 'by_sheet',\r
-          },\r
-        },\r
-        by_author: {\r
-          type: 'list',\r
-          list: {\r
-            list_name: 'by_author',\r
-          },\r
-        },\r
-      },\r
-    },\r
-    story_sheet: {\r
-      model_name: 'story_sheet',\r
-      actions: {\r
-        index: {\r
-          type: 'list',\r
-          list: {\r
-            list_name: 'public_list',\r
-            \r
-          },\r
-        },\r
-        by_story: {\r
-          type: 'list',\r
-          list: {\r
-            list_name: 'by_story',\r
-          },\r
-        },\r
-        by_sheet: {\r
-          type: 'list',\r
-          list: {\r
-            list_name: 'by_sheet',\r
-          },\r
-        },\r
-      },\r
-    },\r
-    sheet: {\r
-      model_name: 'sheet',\r
-      actions: {\r
-        index: {\r
-          type: 'list',\r
-          list: {\r
-            list_name: 'public_list',\r
-            \r
-          },\r
-        },\r
-        story_sheets: {\r
-          type: 'list',\r
-          list: {\r
-            list_name: 'story_sheets',\r
-          },\r
-        },\r
-        stories: {\r
-          type: 'list',\r
-          list: {\r
-            list_name: 'stories',\r
-          },\r
-        },\r
-        sheet_panels: {\r
-          type: 'list',\r
-          list: {\r
-            list_name: 'sheet_panels',\r
-          },\r
-        },\r
-        panels: {\r
-          type: 'list',\r
-          list: {\r
-            list_name: 'panels',\r
-          },\r
-        },\r
-        by_story: {\r
-          type: 'list',\r
-          list: {\r
-            list_name: 'by_story',\r
-          },\r
-        },\r
-        by_panel: {\r
-          type: 'list',\r
-          list: {\r
-            list_name: 'by_panel',\r
-          },\r
-        },\r
-        by_author: {\r
-          type: 'list',\r
-          list: {\r
-            list_name: 'by_author',\r
-          },\r
-        },\r
-      },\r
-    },\r
-    sheet_panel: {\r
-      model_name: 'sheet_panel',\r
-      actions: {\r
-        index: {\r
-          type: 'list',\r
-          list: {\r
-            list_name: 'public_list',\r
-            \r
-          },\r
-        },\r
-        by_sheet: {\r
-          type: 'list',\r
-          list: {\r
-            list_name: 'by_sheet',\r
-          },\r
-        },\r
-        by_panel: {\r
-          type: 'list',\r
-          list: {\r
-            list_name: 'by_panel',\r
-          },\r
-        },\r
-      },\r
-    },\r
-    panel: {\r
-      model_name: 'panel',\r
-      actions: {\r
-        index: {\r
-          type: 'list',\r
-          list: {\r
-            list_name: 'public_list',\r
-            \r
-          },\r
-        },\r
-        by_scroll: {\r
-          type: 'list',\r
-          list: {\r
-            list_name: 'by_scroll',\r
-          },\r
-        },\r
-        by_sheet: {\r
-          type: 'list',\r
-          list: {\r
-            list_name: 'by_sheet',\r
-          },\r
-        },\r
-        by_author: {\r
-          type: 'list',\r
-          list: {\r
-            list_name: 'by_author',\r
-          },\r
-        },\r
-      },\r
-    },\r
-    panel_picture: {\r
-      model_name: 'panel_picture',\r
-      actions: {\r
-        index: {\r
-          type: 'list',\r
-          list: {\r
-            list_name: 'public_list',\r
-            \r
-          },\r
-        },\r
-      },\r
-    },\r
-    speech_balloon: {\r
-      model_name: 'speech_balloon',\r
-      actions: {\r
-        index: {\r
-          type: 'list',\r
-          list: {\r
-            list_name: 'public_list',\r
-            \r
-          },\r
-        },\r
-      },\r
-    },\r
-    speech: {\r
-      model_name: 'speech',\r
-      actions: {\r
-        index: {\r
-          type: 'list',\r
-          list: {\r
-            list_name: 'public_list',\r
-            \r
-          },\r
-        },\r
-      },\r
-    },\r
-    balloon: {\r
-      model_name: 'balloon',\r
-      actions: {\r
-        index: {\r
-          type: 'list',\r
-          list: {\r
-            list_name: 'public_list',\r
-            \r
-          },\r
-        },\r
-      },\r
-    },\r
-    ground_picture: {\r
-      model_name: 'ground_picture',\r
-      actions: {\r
-        index: {\r
-          type: 'list',\r
-          list: {\r
-            list_name: 'public_list',\r
-            \r
-          },\r
-        },\r
-      },\r
-    },\r
-    ground_color: {\r
-      model_name: 'ground_color',\r
-      actions: {\r
-        index: {\r
-          type: 'list',\r
-          list: {\r
-            list_name: 'public_list',\r
-            \r
-          },\r
-        },\r
-      },\r
-    },\r
-    original_picture: {\r
-      model_name: 'original_picture',\r
-      actions: {\r
-        index: {\r
-          type: 'list',\r
-          list: {\r
-            list_name: 'private_list',\r
-            \r
-          },\r
-        },\r
-      },\r
-    },\r
-    picture: {\r
-    },\r
-    resource_picture: {\r
-      model_name: 'resource_picture',\r
-      actions: {\r
-        index: {\r
-          type: 'list',\r
-          list: {\r
-            list_name: 'public_list',\r
-            \r
-          },\r
-        },\r
-        by_license: {\r
-          type: 'list',\r
-          list: {\r
-            list_name: 'by_license',\r
-          },\r
-        },\r
-        by_artist: {\r
-          type: 'list',\r
-          list: {\r
-            list_name: 'by_artist',\r
-          },\r
-        },\r
-      },\r
-    },\r
-    speech_balloon_template: {\r
-      model_name: 'speech_balloon_template',\r
-      actions: {\r
-        index: {\r
-          type: 'list',\r
-          list: {\r
-            list_name: 'public_list',\r
-            \r
-          },\r
-        },\r
-      },\r
-    },\r
-    writing_format: {\r
-      model_name: 'writing_format',\r
-      actions: {\r
-        index: {\r
-          type: 'list',\r
-          list: {\r
-            list_name: 'public_list',\r
-            \r
-          },\r
-        },\r
-      },\r
-    },\r
-    license_group: {\r
-      model_name: 'license_group',\r
-      actions: {\r
-        index: {\r
-          type: 'list',\r
-          list: {\r
-            list_name: 'public_list',\r
-            \r
-          },\r
-        },\r
-      },\r
-    },\r
-    license: {\r
-      model_name: 'license',\r
-      actions: {\r
-        index: {\r
-          type: 'list',\r
-          list: {\r
-            list_name: 'public_list',\r
-            \r
-          },\r
-        },\r
-      },\r
-    },\r
-    author: {\r
-      model_name: 'author',\r
-      actions: {\r
-        index: {\r
-          type: 'list',\r
-          list: {\r
-            list_name: 'public_list',\r
-            \r
-          },\r
-        },\r
-      },\r
-    },\r
-    artist: {\r
-      model_name: '',\r
-      actions: {\r
-        index: {\r
-          type: 'list',\r
-          list: {\r
-            list_name: 'public_list',\r
-            \r
-          },\r
-        },\r
-      },\r
-    },\r
-    system_picture: {\r
-      model_name: 'system_picture',\r
-      actions: {\r
-        index: {\r
-          type: 'list',\r
-          list: {\r
-            list_name: 'public_list',\r
-            \r
-          },\r
-        },\r
-      },\r
-    },\r
-    home: {\r
-      actions: {\r
-        scrolls: {\r
-          item_name: 'scroll',\r
-          type: 'list',\r
-          list: {\r
-            list_name: 'private_list',\r
-            \r
-          },\r
-        },\r
-        scroll_panel: {\r
-          item_name: 'scroll_panel',\r
-          type: 'list',\r
-          list: {\r
-            list_name: 'private_list',\r
-            \r
-          },\r
-        },\r
-        comics: {\r
-          item_name: 'comic',\r
-          type: 'list',\r
-          list: {\r
-            list_name: 'private_list',\r
-            \r
-          },\r
-        },\r
-        stories: {\r
-          item_name: 'story',\r
-          type: 'list',\r
-          list: {\r
-            list_name: 'private_list',\r
-            \r
-          },\r
-        },\r
-        story_sheets: {\r
-          item_name: 'story_sheet',\r
-          type: 'list',\r
-          list: {\r
-            list_name: 'private_list',\r
-            \r
-          },\r
-        },\r
-        sheets: {\r
-          item_name: 'sheet',\r
-          type: 'list',\r
-          list: {\r
-            list_name: 'private_list',\r
-            \r
-          },\r
-        },\r
-        sheet_panels: {\r
-          item_name: 'sheet_panel',\r
-          type: 'list',\r
-          list: {\r
-            list_name: 'private_list',\r
-            \r
-          },\r
-        },\r
-        panels: {\r
-          item_name: 'panel',\r
-          type: 'list',\r
-          list: {\r
-            list_name: 'private_list',\r
-            \r
-          },\r
-        },\r
-        panel_pictures: {\r
-          item_name: 'panel_picture',\r
-          type: 'list',\r
-          list: {\r
-            list_name: 'private_list',\r
-            \r
-          },\r
-        },\r
-        speech_balloons: {\r
-          item_name: 'speech_balloon',\r
-          type: 'list',\r
-          list: {\r
-            list_name: 'private_list',\r
-            \r
-          },\r
-        },\r
-        speeches {\r
-          item_name: 'speech',\r
-          type: 'list',\r
-          list: {\r
-            list_name: 'private_list',\r
-            \r
-          },\r
-        },\r
-        balloons: {\r
-          item_name: 'balloon',\r
-          type: 'list',\r
-          list: {\r
-            list_name: 'private_list',\r
-            \r
-          },\r
-        },\r
-        ground_pictures: {\r
-          item_name: 'ground_picture',\r
-          type: 'list',\r
-          list: {\r
-            list_name: 'private_list',\r
-            \r
-          },\r
-        },\r
-        ground_colors: {\r
-          item_name: 'ground_color',\r
-          type: 'list',\r
-          list: {\r
-            list_name: 'private_list',\r
-            \r
-          },\r
-        },\r
-        original_pictures: {\r
-          item_name: 'original_picture',\r
-          type: 'list',\r
-          list: {\r
-            list_name: 'private_list',\r
-            \r
-          },\r
-        },\r
-        resource_pictures: {\r
-          item_name: 'resource_picture',\r
-          type: 'list',\r
-          list: {\r
-            list_name: 'private_list',\r
-            \r
-          },\r
-        },\r
-      },\r
-    },\r
-  },\r
-  lists: {\r
-    scroll: {\r
-      default_page_size: 25, \r
-      max_page_size: 100, \r
-      lists: {\r
-        public_list: {\r
-          type: 'public',\r
-        },\r
-        private_list: {\r
-          type: 'private',\r
-        },\r
-        scroll_panels: {\r
-          type: 'has_many',\r
-          association_name: 'scroll_panels',\r
-        },\r
-        panels: {\r
-          type: 'has_many',\r
-          association_name: 'panels',\r
-        },\r
-        by_author: {\r
-          type: 'filter',\r
-          from: 'author',\r
-          filter_key: 'author_id',\r
-        },\r
-        by_panel: {\r
-          type: 'through_filter',\r
-          from: 'panel',\r
-          through: 'scroll_panels',\r
-          filter_key: 'panel_id',\r
-        },\r
-      },\r
-    },\r
-    scroll_panel: {\r
-      default_page_size: 20, \r
-      lists: {\r
-        public_list: {\r
-          type: 'public',\r
-        },\r
-        private_list: {\r
-          type: 'private',\r
-        },\r
-        by_scroll: {\r
-          type: 'filter',\r
-          from: 'scroll',\r
-          filter_key: 'scroll_id',\r
-        },\r
-        by_panel: {\r
-          type: 'filter',\r
-          from: 'panel',\r
-          filter_key: 'panel_id',\r
-        },\r
-      },\r
-    },\r
-    comic: {\r
-      default_page_size: 20, \r
-      lists: {\r
-        public_list: {\r
-          type: 'public',\r
-        },\r
-        private_list: {\r
-          type: 'private',\r
-        },\r
-        stories: {\r
-          type: 'has_many',\r
-          association_name: 'stories',\r
-        },\r
-        by_author: {\r
-          type: 'filter',\r
-          from: 'author',\r
-          filter_key: 'author_id',\r
-        },\r
-      },\r
-    },\r
-    story: {\r
-      default_page_size: 20, \r
-      lists: {\r
-        public_list: {\r
-          type: 'public',\r
-        },\r
-        private_list: {\r
-          type: 'private',\r
-        },\r
-        story_sheets: {\r
-          type: 'has_many',\r
-          association_name: 'story_sheets',\r
-        },\r
-        sheets: {\r
-          type: 'has_many',\r
-          association_name: 'sheets',\r
-        },\r
-        by_comic: {\r
-          type: 'filter',\r
-          from: 'comic',\r
-          filter_key: 'comic_id',\r
-        },\r
-        by_sheet: {\r
-          type: 'through_filter',\r
-          from: 'sheet',\r
-          through: 'sheet_panels',\r
-          filter_key: 'sheet_id',\r
-        },\r
-      },\r
-    },\r
-    story_sheet: {\r
-      default_page_size: 20, \r
-      lists: {\r
-        public_list: {\r
-          type: 'public',\r
-        },\r
-        private_list: {\r
-          type: 'private',\r
-        },\r
-        by_story: {\r
-          type: 'filter',\r
-          from: 'story',\r
-          filter_key: 'story_id',\r
-        },\r
-        by_sheet: {\r
-          type: 'filter',\r
-          with: 'story',\r
-          from: 'sheet',\r
-          filter_key: 'sheet_id',\r
-        },\r
-      },\r
-    },\r
-    sheet: {\r
-      default_page_size: 20, \r
-      lists: {\r
-        public_list: {\r
-          type: 'public',\r
-        },\r
-        private_list: {\r
-          type: 'private',\r
-        },\r
-        story_sheets: {\r
-          type: 'has_many',\r
-          association_name: 'story_sheets',\r
-        },\r
-        stories: {\r
-          type: 'has_many',\r
-          association_name: 'stories',\r
-        },\r
-        sheet_panels: {\r
-          type: 'has_many',\r
-          association_name: 'sheet_panels',\r
-        },\r
-        panels: {\r
-          type: 'has_many',\r
-          association_name: 'panels',\r
-        },\r
-        by_story: {\r
-          type: 'through_filter',\r
-          from: 'story',\r
-          through: 'story_sheets',\r
-          filter_key: 'story_id',\r
-        },\r
-        by_panel: {\r
-          type: 'through_filter',\r
-          from: 'panel',\r
-          through: 'sheet_panels',\r
-          filter_key: 'panel_id',\r
-        },\r
-        by_author: {\r
-          type: 'filter',\r
-          from: 'author',\r
-          filter_key: 'author_id',\r
-        },\r
-      },\r
-    },\r
-    sheet_panel: {\r
-      default_page_size: 20, \r
-      lists: {\r
-        public_list: {\r
-          type: 'public',\r
-        },\r
-        private_list: {\r
-          type: 'private',\r
-        },\r
-        by_sheet: {\r
-          type: 'filter',\r
-          association_name: 'sheet_panels',\r
-          from: 'sheet',\r
-          filter_key: 'sheet_id',\r
-        },\r
-        by_panel: {\r
-          type: 'filter',\r
-          from: 'panel',\r
-          filter_key: 'panel_id',\r
-        },\r
-      },\r
-    },\r
-    panel: {\r
-      default_page_size: 20, \r
-      lists: {\r
-        public_list: {\r
-          type: 'public',\r
-        },\r
-        scroll_panels: {\r
-          type: 'has_many',\r
-          association_name: 'scroll_panels',\r
-        },\r
-        scrolls: {\r
-          type: 'has_many',\r
-          association_name: 'scrolls',\r
-        },\r
-        sheet_panels: {\r
-          type: 'has_many',\r
-          association_name: 'sheet_panels',\r
-        },\r
-        sheets: {\r
-          type: 'has_many',\r
-          association_name: 'sheets',\r
-        },\r
-        by_scroll: {\r
-          type: 'through_filter',\r
-          from: 'scroll',\r
-          through: 'scroll_panels',\r
-          filter_key: 'scroll_id',\r
-        },\r
-        by_sheet: {\r
-          type: 'through_filter',\r
-          from: 'sheet',\r
-          through: 'sheet_panels',\r
-          filter_key: 'sheet_id',\r
-        },\r
-        by_author: {\r
-          type: 'filter',\r
-          from: 'author',\r
-          filter_key: 'author_id',\r
-        },\r
-      },\r
-    },\r
-    panel_picture: {\r
-      default_page_size: 20, \r
-      lists: {\r
-        public_list: {\r
-          type: 'public',\r
-        },\r
-      },\r
-    },\r
-    speech_balloon: {\r
-      default_page_size: 20, \r
-      lists: {\r
-        public_list: {\r
-          type: 'public',\r
-        },\r
-      },\r
-    },\r
-    speech: {\r
-      default_page_size: 20, \r
-      lists: {\r
-        public_list: {\r
-          type: 'public',\r
-        },\r
-      },\r
-    },\r
-    balloon: {\r
-      default_page_size: 20, \r
-      lists: {\r
-        public_list: {\r
-          type: 'public',\r
-        },\r
-      },\r
-    },\r
-    ground_picture: {\r
-      default_page_size: 20, \r
-      lists: {\r
-        public_list: {\r
-          type: 'public',\r
-        },\r
-      },\r
-    },\r
-    ground_color: {\r
-      default_page_size: 20, \r
-      lists: {\r
-        public_list: {\r
-          type: 'public',\r
-        },\r
-      },\r
-    },\r
-    original_picture: {\r
-      default_page_size: 20, \r
-      lists: {\r
-        private_list: {\r
-          type: 'private',\r
-        },\r
-      },\r
-    },\r
-    picture: {\r
-    },\r
-    resource_picture: {\r
-      default_page_size: 20, \r
-      lists: {\r
-        public_list: {\r
-          type: 'public',\r
-        },\r
-        by_license: {\r
-          type: 'filter',\r
-          from: 'license',\r
-          filter_key: 'license_id',\r
-        },\r
-        by_artist: {\r
-          type: 'filter',\r
-          from: 'artist',\r
-          filter_key: 'artist_id',\r
-        },\r
-      },\r
-    },\r
-    speech_balloon_template: {\r
-      default_page_size: 20, \r
-      lists: {\r
-        public_list: {\r
-          type: 'public',\r
-        },\r
-      },\r
-    },\r
-    writing_format: {\r
-      default_page_size: 20, \r
-      lists: {\r
-        public_list: {\r
-          type: 'public',\r
-        },\r
-      },\r
-    },\r
-    license_group: {\r
-      default_page_size: 20, \r
-      lists: {\r
-        public_list: {\r
-          type: 'public',\r
-        },\r
-      },\r
-    },\r
-    license: {\r
-      default_page_size: 20, \r
-      lists: {\r
-        public_list: {\r
-          type: 'public',\r
-        },\r
-      },\r
-    },\r
-    author: {\r
-      default_page_size: 20, \r
-      lists: {\r
-        public_list: {\r
-          type: 'public',\r
-        },\r
-      },\r
-    },\r
-    artist: {\r
-      default_page_size: 20, \r
-      lists: {\r
-        public_list: {\r
-          type: 'public',\r
-        },\r
-      },\r
-    },\r
-    system_picture: {\r
-      default_page_size: 20, \r
-      lists: {\r
-        public_list: {\r
-          type: 'public',\r
-        },\r
-      },\r
-    },\r
-  },\r
-  system_resources: {\r
-    licenses: {\r
-      pettanr_creative_commons_v30_licenses: 'PettanrCreativeCommonsV30Licenses',\r
-      pettanr_pettan_commons_v01_licenses: 'PettanrPettanCommonsV01Licenses',\r
-      pettanr_pettan_protected_v01_licenses: 'PettanrPettanProtectedV01Licenses',\r
-      pettanr_pettan_public_v01_licenses: 'PettanrPettanPublicV01Licenses',\r
-      pettanr_public_domain_v01_licenses: 'PettanrPublicDomainV01Licenses',\r
-      pettanr_unknown_v01_licenses: 'PettanrUnknownV01Licenses',\r
-    },\r
-    elements: {\r
-      PanelPicture: 'panel_pictures',\r
-      SpeechBalloon: 'speech_balloons',\r
-      GroundPicture: 'ground_pictures',\r
-      GroundColor: 'ground_colors',\r
-    },\r
-    speech_balloon_templates: {\r
-      CircleSpeechBalloon: 'circle_speech_balloon',\r
-      PlainSpeechBalloon: 'plain_speech_balloon',\r
-      SquareSpeechBalloon: 'square_speech_balloon',\r
-      #  TestSpeechBalloon: 'test_speech_balloon',\r
-    },\r
-    writing_formats: {\r
-      SimpleFormat: 'pettanr_simple_format',\r
-    },\r
-  },\r
-  magic_numbers: {\r
-    run_mode: 1, \r
-    thumbnail_width: 64, \r
-    thumbnail_height: 64, \r
-    profile: {\r
-      users: {\r
-        caption: "ペンギン王国",\r
-        url: "http://localhost:3001/", \r
-        description: "ペンギン王国はペンギン素材を豊富に用意したペンギンマニアのサイトです。",\r
-      },\r
-      admins: {\r
-        caption: "site name for admin",\r
-        url: "http://your.site.url/admins/", \r
-        description: "admin register",\r
-      },\r
-      demand_users: {\r
-        caption: "provider name",\r
-        url: "http://your.site.url/demanders/", \r
-        description: "provider description",\r
-      },\r
-    },\r
-    provider_sources: [\r
-      'http://sourceforge.jp/projects/pettanr/wiki/ProviderSource/attach/provider_source.json'\r
-    ], \r
-  },\r
-  select_items: {\r
-    provider_status_status_items: [\r
-      ['select_items.provider_status.status.waiting', 0], \r
-      ['select_items.provider_status.status.receiving', 1], \r
-    ],\r
-    demander_status_status_items: [\r
-      ['select_items.demander_status.status.waiting', 0], \r
-      ['select_items.demander_status.status.rejected', 1], \r
-      ['select_items.demander_status.status.requesting', 2], \r
-      ['select_items.demander_status.status.approved', 3], \r
-    ],\r
-    scroll_visible_items: [\r
-      ['select_items.scroll.visible.private', 0], \r
-      ['select_items.scroll.visible.public', 1], \r
-    ],\r
-    comic_visible_items: [\r
-      ['select_items.comic.visible.private', 0], \r
-      ['select_items.comic.visible.public', 1], \r
-    ],\r
-    story_visible_items: [\r
-      ['select_items.story.visible.private', 0], \r
-      ['select_items.story.visible.public', 1], \r
-    ],\r
-    sheet_visible_items: [\r
-      ['select_items.sheet.visible.private', 0], \r
-      ['select_items.sheet.visible.public', 1], \r
-    ],\r
-    panel_visible_items: [\r
-      ['select_items.panel.visible.private', 0], \r
-      ['select_items.panel.visible.public', 1], \r
-    ],\r
-    ground_picture_repeat_items: [\r
-      ['select_items.ground_pictures.repeat.repeat', 0], \r
-      ['select_items.ground_pictures.repeat.repeat-x', 1], \r
-      ['select_items.ground_pictures.repeat.repeat-y', 2], \r
-      ['select_items.ground_pictures.repeat.no-repeat', 3], \r
-    ],\r
-    ground_color_orientation_items: [\r
-      ['select_items.ground_color.orientation.horizontal', 0], \r
-      ['select_items.ground_color.orientation.vertical', 1], \r
-    ],\r
-    speech_font_size_items: [\r
-      ['select_items.speeches.font_size.ultra_small', 0.2], \r
-      ['select_items.speeches.font_size.very_small', 0.4], \r
-      ['select_items.speeches.font_size.small', 0.6], \r
-      ['select_items.speeches.font_size.semi_small', 0.8], \r
-      ['select_items.speeches.font_size.normal', 1.0], \r
-      ['select_items.speeches.font_size.semi_large', 1.5], \r
-      ['select_items.speeches.font_size.large', 2.0], \r
-      ['select_items.speeches.font_size.very_large', 3.5], \r
-      ['select_items.speeches.font_size.ultra_large', 5.0], \r
-    ],\r
-    speech_text_align_items: [\r
-      ['select_items.speeches.text_align.none', 0], \r
-      ['select_items.speeches.text_align.left', 1], \r
-      ['select_items.speeches.text_align.right', 2], \r
-      ['select_items.speeches.text_align.center', 3], \r
-    ],\r
-  },\r
-  locals: {\r
-    profilers: {\r
-      scroll: {\r
-        lists: {\r
-          'scroll_panels.by_scroll': {\r
-            model_name: 'scroll_panel',\r
-            list_name: 'by_scroll',\r
-          }, \r
-          'panels.by_scroll': {\r
-            model_name: 'panel',\r
-            list_name: 'by_scroll',\r
-          }, \r
-        }, \r
-        columns: [\r
-          'id', \r
-          'title', \r
-          'description', \r
-          'visible', \r
-          'author_id', \r
-          'created_at', \r
-          'updated_at',\r
-        ],\r
-        associations: {\r
-          belongs_to: [\r
-            'author',\r
-          ],\r
-          has_many: [\r
-            'scroll_panels.by_scroll', \r
-            'panels.by_scroll'\r
-          ],\r
-        }, \r
-      },\r
-      scroll_panel: {\r
-        lists: {\r
-        }, \r
-        columns: [\r
-          'id', \r
-          'scroll_id', \r
-          'panel_id', \r
-          't', \r
-          'author_id', \r
-          'created_at', \r
-          'updated_at',\r
-        ],\r
-        associations: {\r
-          belongs_to: [\r
-            'scroll', \r
-            'panel'\r
-          ],\r
-          has_many: [\r
-          ],\r
-        }, \r
-      },\r
-      comic: {\r
-        lists: {\r
-          'stories.by_comic': {\r
-            model_name: 'story',\r
-            list_name: 'by_comic',\r
-          }, \r
-        }, \r
-        columns: [\r
-          'id', \r
-          'title', \r
-          'description', \r
-          'visible', \r
-          'author_id', \r
-          'created_at', \r
-          'updated_at',\r
-        ],\r
-        associations: {\r
-          belongs_to: [\r
-            'author',\r
-          ],\r
-          has_many: [\r
-            'stories.by_comic', \r
-          ],\r
-        }, \r
-      },\r
-      story: {\r
-        lists: {\r
-          'story_sheets.by_story': {\r
-            model_name: 'story_sheet',\r
-            list_name: 'by_story',\r
-          }, \r
-          'sheets.by_story': {\r
-            model_name: 'sheet',\r
-            list_name: 'by_sheet',\r
-          }, \r
-        }, \r
-        columns: [\r
-          'id', \r
-          'comic_id', \r
-          'title', \r
-          'description', \r
-          't', \r
-          'visible', \r
-          'created_at', \r
-          'updated_at',\r
-        ],\r
-        associations: {\r
-          belongs_to: [\r
-            'comic',\r
-          ],\r
-          has_many: [\r
-            'story_sheets.by_story', \r
-            'sheets.by_story'\r
-          ],\r
-        }, \r
-      },\r
-      story_sheet: {\r
-        lists: {\r
-        }, \r
-        columns: [\r
-          'id', \r
-          'story_id', \r
-          'sheet_id', \r
-          't', \r
-          'author_id', \r
-          'created_at', \r
-          'updated_at',\r
-        ],\r
-        associations: {\r
-          belongs_to: [\r
-            'story',\r
-            'sheet',\r
-          ],\r
-          has_many: [\r
-          ],\r
-        }, \r
-      },\r
-      sheet: {\r
-        lists: {\r
-          'story_sheets.by_sheet': {\r
-            model_name: 'story_sheet',\r
-            list_name: 'by_sheet',\r
-          }, \r
-          'stories.by_sheet': {\r
-            model_name: 'story',\r
-            list_name: 'by_sheet',\r
-          }, \r
-          'sheet_panels.by_sheet': {\r
-            model_name: 'sheet_panel',\r
-            list_name: 'by_sheet',\r
-          }, \r
-          'panels.by_sheet': {\r
-            model_name: 'panel',\r
-            list_name: 'by_sheet',\r
-          }, \r
-        }, \r
-        columns: [\r
-          'id', \r
-          'caption', \r
-          'width', \r
-          'height', \r
-          'visible', \r
-          'author_id', \r
-          'created_at', \r
-          'updated_at',\r
-        ],\r
-        associations: {\r
-          belongs_to: [\r
-            'author',\r
-          ],\r
-          has_many: [\r
-            'story_sheets.by_sheet', \r
-            'stories.by_sheet', \r
-            'sheet_panels.by_sheet'\r
-            'panels.by_sheet'\r
-          ],\r
-        }, \r
-      },\r
-      sheet_panel: {\r
-        lists: {\r
-        }, \r
-        columns: [\r
-          'id', \r
-          'sheet_id', \r
-          'panel_id', \r
-          'x', \r
-          'y', \r
-          'z', \r
-          't', \r
-          'author_id', \r
-          'created_at', \r
-          'updated_at',\r
-        ],\r
-        associations: {\r
-          belongs_to: [\r
-            'sheet',\r
-            'panel',\r
-          ],\r
-          has_many: [\r
-          ],\r
-        }, \r
-      },\r
-      panel: {\r
-        lists: {\r
-          'scroll_panels.by_panel': {\r
-            model_name: 'scroll_panel',\r
-            list_name: 'by_panel',\r
-          }, \r
-          'scrolls.by_panel': {\r
-            model_name: 'scroll',\r
-            list_name: 'by_panel',\r
-          }, \r
-          'sheet_panels.by_panel': {\r
-            model_name: 'sheet_panel',\r
-            list_name: 'by_panel',\r
-          }, \r
-          'sheets.by_panel': {\r
-            model_name: 'sheet',\r
-            list_name: 'by_panel',\r
-          }, \r
-          'panel_pictures.by_panel': {\r
-            model_name: 'panel_picture',\r
-            list_name: 'by_panel',\r
-          }, \r
-          'speech_balloons.by_panel': {\r
-            model_name: 'speech_balloon',\r
-            list_name: 'by_panel',\r
-          }, \r
-          'ground_pictures.by_panel': {\r
-            model_name: 'ground_picture',\r
-            list_name: 'by_panel',\r
-          }, \r
-          'ground_colors.by_panel': {\r
-            model_name: 'ground_color',\r
-            list_name: 'by_panel',\r
-          }, \r
-        }, \r
-        columns: [\r
-          'id', \r
-          'width', \r
-          'height', \r
-          'border', \r
-          'caption', \r
-          'publish', \r
-          'author_id', \r
-          'created_at', \r
-          'updated_at',\r
-        ],\r
-        associations: {\r
-          belongs_to: [\r
-            'author',\r
-          ],\r
-          has_many: [\r
-            'scroll_panels.by_panel',\r
-            'scrolls.by_panel',\r
-            'sheet_panels.by_panel',\r
-            'sheets.by_panel',\r
-            'panel_pictures.by_panel',\r
-            'speech_balloons.by_panel',\r
-            'ground_pictures.by_panel',\r
-            'ground_colors.by_panel',\r
-          ],\r
-        }, \r
-      },\r
-      panel_picture: {\r
-        lists: {\r
-          'scroll_panels.by_scroll': {\r
-            model_name: 'scroll_panel',\r
-            list_name: 'by_scroll',\r
-          }, \r
-          'panels.by_scroll': {\r
-            model_name: 'panel',\r
-            list_name: 'by_scroll',\r
-          }, \r
-        }, \r
-        columns: [\r
-          'id', \r
-          'panel_id', \r
-          'picture_id', \r
-          'caption', \r
-          'x', \r
-          'y', \r
-          'width', \r
-          'height', \r
-          'link', \r
-          'z', \r
-          't', \r
-          'created_at', \r
-          'updated_at',\r
-        ],\r
-        associations: {\r
-          belongs_to: [\r
-            'panel',\r
-          ],\r
-          has_many: [\r
-          ],\r
-        }, \r
-      },\r
-      speech_balloon: {\r
-        lists: {\r
-          'scroll_panels.by_scroll': {\r
-            model_name: 'scroll_panel',\r
-            list_name: 'by_scroll',\r
-          }, \r
-          'panels.by_scroll': {\r
-            model_name: 'panel',\r
-            list_name: 'by_scroll',\r
-          }, \r
-        }, \r
-        columns: [\r
-          'id', \r
-          'panel_id', \r
-          'speech_balloon_template_id', \r
-          'classname', \r
-          'z', \r
-          't', \r
-          'settings', \r
-          'caption', \r
-          'created_at', \r
-          'updated_at',\r
-        ],\r
-        associations: {\r
-          belongs_to: [\r
-            'panel',\r
-          ],\r
-          has_many: [\r
-          ],\r
-          has_one: [\r
-            'balloon',\r
-            'speech',\r
-          ],\r
-        }, \r
-      },\r
-      speech: {\r
-        lists: {\r
-          'scroll_panels.by_scroll': {\r
-            model_name: 'scroll_panel',\r
-            list_name: 'by_scroll',\r
-          }, \r
-          'panels.by_scroll': {\r
-            model_name: 'panel',\r
-            list_name: 'by_scroll',\r
-          }, \r
-        }, \r
-        columns: [\r
-          'id', \r
-          'speech_balloon_id', \r
-          'writing_format_id', \r
-          'content', \r
-          'font_size', \r
-          'text_align', \r
-          'fore_color', \r
-          'x', \r
-          'y', \r
-          'width', \r
-          'height', \r
-          'quotes', \r
-          'settings', \r
-          'created_at', \r
-          'updated_at',\r
-        ],\r
-        associations: {\r
-          belongs_to: [\r
-            'speech_balloon',\r
-            'writing_format',\r
-          ],\r
-          has_many: [\r
-          ],\r
-        }, \r
-      },\r
-      balloon: {\r
-        lists: {\r
-          'scroll_panels.by_scroll': {\r
-            model_name: 'scroll_panel',\r
-            list_name: 'by_scroll',\r
-          }, \r
-          'panels.by_scroll': {\r
-            model_name: 'panel',\r
-            list_name: 'by_scroll',\r
-          }, \r
-        }, \r
-        columns: [\r
-          'id', \r
-          'speech_balloon_id', \r
-          'system_picture_id', \r
-          'x', \r
-          'y', \r
-          'width', \r
-          'height', \r
-          'r', \r
-          'settings', \r
-          'created_at', \r
-          'updated_at',\r
-        ],\r
-        associations: {\r
-          belongs_to: [\r
-            'speech_balloon',\r
-            'system_picture',\r
-          ],\r
-          has_many: [\r
-          ],\r
-        }, \r
-      },\r
-      ground_picture: {\r
-        lists: {\r
-          'scroll_panels.by_scroll': {\r
-            model_name: 'scroll_panel',\r
-            list_name: 'by_scroll',\r
-          }, \r
-          'panels.by_scroll': {\r
-            model_name: 'panel',\r
-            list_name: 'by_scroll',\r
-          }, \r
-        }, \r
-        columns: [\r
-          'id', \r
-          'panel_id', \r
-          'picture_id', \r
-          'caption', \r
-          'repeat', \r
-          'x', \r
-          'y', \r
-          'z', \r
-          't', \r
-          'created_at', \r
-          'updated_at',\r
-        ],\r
-        associations: {\r
-          belongs_to: [\r
-            'panel',\r
-          ],\r
-          has_many: [\r
-          ],\r
-        }, \r
-      },\r
-      ground_color: {\r
-        lists: {\r
-          'scroll_panels.by_scroll': {\r
-            model_name: 'scroll_panel',\r
-            list_name: 'by_scroll',\r
-          }, \r
-          'panels.by_scroll': {\r
-            model_name: 'panel',\r
-            list_name: 'by_scroll',\r
-          }, \r
-        }, \r
-        columns: [\r
-          'id', \r
-          'panel_id', \r
-          'caption', \r
-          'code', \r
-          'orientation', \r
-          'xy', \r
-          'wh', \r
-          'z', \r
-          't', \r
-          'created_at', \r
-          'updated_at',\r
-        ],\r
-        associations: {\r
-          belongs_to: [\r
-            'panel',\r
-          ],\r
-          has_many: [\r
-          ],\r
-        }, \r
-      },\r
-      original_picture: {\r
-        lists: {\r
-          'scroll_panels.by_scroll': {\r
-            model_name: 'scroll_panel',\r
-            list_name: 'by_scroll',\r
-          }, \r
-          'panels.by_scroll': {\r
-            model_name: 'panel',\r
-            list_name: 'by_scroll',\r
-          }, \r
-        }, \r
-        columns: [\r
-          'id', \r
-          'ext', \r
-          'width', \r
-          'height', \r
-          'filesize', \r
-          'artist_id', \r
-          'md5', \r
-          'uploaded_at', \r
-          'published_at', \r
-          'stopped_at', \r
-          'created_at', \r
-          'updated_at',\r
-        ],\r
-        associations: {\r
-          belongs_to: [\r
-            'artist',\r
-          ],\r
-          has_many: [\r
-            'pictures',\r
-          ],\r
-          has_one: [\r
-            'resource_picture',\r
-          ],\r
-        }, \r
-      },\r
-      picture: {\r
-        lists: {\r
-          'scroll_panels.by_scroll': {\r
-            model_name: 'scroll_panel',\r
-            list_name: 'by_scroll',\r
-          }, \r
-          'panels.by_scroll': {\r
-            model_name: 'panel',\r
-            list_name: 'by_scroll',\r
-          }, \r
-        }, \r
-        columns: [\r
-          'id', \r
-          'original_picture_id', \r
-          'revision', \r
-          'ext', \r
-          'width', \r
-          'height', \r
-          'filesize', \r
-          'artist_id', \r
-          'license_id', \r
-          'md5', \r
-          'artist_name', \r
-          'credit', \r
-          'settings', \r
-          'classname', \r
-          'created_at', \r
-          'updated_at',\r
-        ],\r
-        associations: {\r
-          belongs_to: [\r
-            'license',\r
-            'artist',\r
-          ],\r
-          has_many: [\r
-          ],\r
-          has_one: [\r
-          ],\r
-        }, \r
-      },\r
-      resource_picture: {\r
-        lists: {\r
-          'scroll_panels.by_scroll': {\r
-            model_name: 'scroll_panel',\r
-            list_name: 'by_scroll',\r
-          }, \r
-          'panels.by_scroll': {\r
-            model_name: 'panel',\r
-            list_name: 'by_scroll',\r
-          }, \r
-        }, \r
-        columns: [\r
-          'id', \r
-          'original_picture_id', \r
-          'revision', \r
-          'ext', \r
-          'width', \r
-          'height', \r
-          'filesize', \r
-          'artist_id', \r
-          'license_id', \r
-          'md5', \r
-          'artist_name', \r
-          'credit', \r
-          'settings', \r
-          'picture_id', \r
-          'classname', \r
-          'created_at', \r
-          'updated_at',\r
-        ],\r
-        associations: {\r
-          belongs_to: [\r
-            'license',\r
-            'artist',\r
-          ],\r
-          has_many: [\r
-          ],\r
-          has_one: [\r
-          ],\r
-        }, \r
-      },\r
-      speech_balloon_template: {\r
-        lists: {\r
-          'scroll_panels.by_scroll': {\r
-            model_name: 'scroll_panel',\r
-            list_name: 'by_scroll',\r
-          }, \r
-          'panels.by_scroll': {\r
-            model_name: 'panel',\r
-            list_name: 'by_scroll',\r
-          }, \r
-        }, \r
-        columns: [\r
-          'id', \r
-          'name', \r
-          'classname', \r
-          'caption', \r
-          't', \r
-          'system_picture_id', \r
-          'settings', \r
-          'created_at', \r
-          'updated_at',\r
-        ],\r
-        associations: {\r
-          belongs_to: [\r
-            'system_picture',\r
-          ],\r
-          has_many: [\r
-            'speech_balloons', \r
-            'panels', \r
-          ],\r
-          has_one: [\r
-          ],\r
-        }, \r
-      },\r
-      writing_format: {\r
-        lists: {\r
-          'scroll_panels.by_scroll': {\r
-            model_name: 'scroll_panel',\r
-            list_name: 'by_scroll',\r
-          }, \r
-          'panels.by_scroll': {\r
-            model_name: 'panel',\r
-            list_name: 'by_scroll',\r
-          }, \r
-        }, \r
-        columns: [\r
-          'id', \r
-          'name', \r
-          'classname', \r
-          'caption', \r
-          'system_picture_id', \r
-          'settings', \r
-          'created_at', \r
-          'updated_at',\r
-        ],\r
-        associations: {\r
-          belongs_to: [\r
-            'system_picture',\r
-          ],\r
-          has_many: [\r
-            'speeches', \r
-          ],\r
-          has_one: [\r
-          ],\r
-        }, \r
-      },\r
-      license_group: {\r
-        lists: {\r
-          'scroll_panels.by_scroll': {\r
-            model_name: 'scroll_panel',\r
-            list_name: 'by_scroll',\r
-          }, \r
-          'panels.by_scroll': {\r
-            model_name: 'panel',\r
-            list_name: 'by_scroll',\r
-          }, \r
-        }, \r
-        columns: [\r
-          'id', \r
-          'name', \r
-          'classname', \r
-          'caption', \r
-          'url', \r
-          'created_at', \r
-          'updated_at',\r
-        ],\r
-        associations: {\r
-          belongs_to: [\r
-          ],\r
-          has_many: [\r
-            'licenses', \r
-          ],\r
-          has_one: [\r
-          ],\r
-        }, \r
-      },\r
-      license: {\r
-        lists: {\r
-          'scroll_panels.by_scroll': {\r
-            model_name: 'scroll_panel',\r
-            list_name: 'by_scroll',\r
-          }, \r
-          'panels.by_scroll': {\r
-            model_name: 'panel',\r
-            list_name: 'by_scroll',\r
-          }, \r
-        }, \r
-        columns: [\r
-          'id', \r
-          'license_group_id', \r
-          'name', \r
-          'caption', \r
-          'system_picture_id', \r
-          'url', \r
-          'settings', \r
-          'credit_pictures', \r
-          'created_at', \r
-          'updated_at',\r
-        ],\r
-        associations: {\r
-          belongs_to: [\r
-            'license_group', \r
-            'system_picture', \r
-          ],\r
-          has_many: [\r
-            'resource_pictures', \r
-          ],\r
-          has_one: [\r
-          ],\r
-        }, \r
-      },\r
-      author: {\r
-        lists: {\r
-          'scroll_panels.by_scroll': {\r
-            model_name: 'scroll_panel',\r
-            list_name: 'by_scroll',\r
-          }, \r
-          'panels.by_scroll': {\r
-            model_name: 'panel',\r
-            list_name: 'by_scroll',\r
-          }, \r
-        }, \r
-        columns: [\r
-          'id', \r
-          'name', \r
-          'user_id', \r
-          'created_at', \r
-          'updated_at',\r
-        ],\r
-        associations: {\r
-          belongs_to: [\r
-          ],\r
-          has_many: [\r
-            'scrolls', \r
-            'comics', \r
-            'stories', \r
-            'sheets', \r
-            'panels', \r
-          ],\r
-          has_one: [\r
-          ],\r
-        }, \r
-      },\r
-      artist: {\r
-        lists: {\r
-          'scroll_panels.by_scroll': {\r
-            model_name: 'scroll_panel',\r
-            list_name: 'by_scroll',\r
-          }, \r
-          'panels.by_scroll': {\r
-            model_name: 'panel',\r
-            list_name: 'by_scroll',\r
-          }, \r
-        }, \r
-        columns: [\r
-          'id', \r
-          'name', \r
-          'author_id', \r
-          'created_at', \r
-          'updated_at',\r
-        ],\r
-        associations: {\r
-          belongs_to: [\r
-          ],\r
-          has_many: [\r
-            'resource_pictures', \r
-          ],\r
-          has_one: [\r
-          ],\r
-        }, \r
-      },\r
-      system_picture: {\r
-        lists: {\r
-          'scroll_panels.by_scroll': {\r
-            model_name: 'scroll_panel',\r
-            list_name: 'by_scroll',\r
-          }, \r
-          'panels.by_scroll': {\r
-            model_name: 'panel',\r
-            list_name: 'by_scroll',\r
-          }, \r
-        }, \r
-        columns: [\r
-          'id', \r
-          'ext', \r
-          'width', \r
-          'height', \r
-          'filesize', \r
-          'md5', \r
-          'created_at', \r
-          'updated_at',\r
-        ],\r
-        associations: {\r
-          belongs_to: [\r
-          ],\r
-          has_many: [\r
-          ],\r
-          has_one: [\r
-          ],\r
-        }, \r
-      },\r
-    },\r
-    filers: {\r
-      scroll: {\r
-        symbol: {\r
-          type: 'image',\r
-          name: '<%= asset_path('item.png') %>',\r
-        },\r
-        caption: {\r
-          type: 'column',\r
-          name: 'title',\r
-          link: {\r
-            type: 'action'\r
-            name: 'play',\r
-          },\r
-        },\r
-        summary: {\r
-          type: 'template',\r
-          name: 'summary',\r
-        },\r
-        edit: {\r
-          type: 'default',\r
-        },\r
-      },\r
-      scroll_panel: {\r
-        symbol: {\r
-          type: 'image',\r
-          name: '<%= asset_path('item.png') %>',\r
-          link: {\r
-            type: 'none'\r
-          },\r
-        },\r
-        caption: {\r
-          type: 'none',\r
-        },\r
-        summary: {\r
-          type: 'template',\r
-          name: 'summary',\r
-        },\r
-        edit: {\r
-          type: 'none'\r
-        },\r
-      },\r
-      comic: {\r
-        symbol: {\r
-          type: 'image',\r
-          name: '<%= asset_path('item.png') %>',\r
-        },\r
-        caption: {\r
-          type: 'column',\r
-          name: 'title',\r
-        },\r
-        summary: {\r
-          type: 'template',\r
-          name: 'summary',\r
-        },\r
-        edit: {\r
-          type: 'default',\r
-        },\r
-      },\r
-      story: {\r
-        symbol: {\r
-          type: 'image',\r
-          name: '<%= asset_path('item.png') %>',\r
-        },\r
-        caption: {\r
-          type: 'method',\r
-          name: 'title_with_t',\r
-          link: {\r
-            type: 'action'\r
-            name: 'play',\r
-          },\r
-        },\r
-        summary: {\r
-          type: 'template',\r
-          name: 'summary',\r
-        },\r
-        edit: {\r
-          type: 'default',\r
-        },\r
-      },\r
-      story_sheet: {\r
-        symbol: {\r
-          type: 'image',\r
-          name: '<%= asset_path('item.png') %>',\r
-          link: {\r
-            type: 'none'\r
-          },\r
-        },\r
-        caption: {\r
-          type: 'none',\r
-        },\r
-        summary: {\r
-          type: 'template',\r
-          name: 'summary',\r
-        },\r
-        edit: {\r
-          type: 'none'\r
-        },\r
-      },\r
-      sheet: {\r
-        symbol: {\r
-          type: 'image',\r
-          name: '<%= asset_path('item.png') %>',\r
-        },\r
-        caption: {\r
-          type: 'column',\r
-          name: 'caption',\r
-          link: {\r
-            type: 'action'\r
-            name: 'play',\r
-          },\r
-        },\r
-        summary: {\r
-          type: 'template',\r
-          name: 'summary',\r
-        },\r
-        edit: {\r
-          type: 'default',\r
-        },\r
-      },\r
-      sheet_panel: {\r
-        symbol: {\r
-          type: 'image',\r
-          name: '<%= asset_path('item.png') %>',\r
-          link: {\r
-            type: 'none'\r
-          },\r
-        },\r
-        caption: {\r
-          type: 'none',\r
-        },\r
-        summary: {\r
-          type: 'template',\r
-          name: 'summary',\r
-        },\r
-        edit: {\r
-          type: 'none'\r
-        },\r
-      },\r
-      panel: {\r
-        symbol: {\r
-          type: 'image',\r
-          name: '<%= asset_path('item.png') %>',\r
-        },\r
-        caption: {\r
-          type: 'method',\r
-          name: 'plain_scenario',\r
-          link: {\r
-            type: 'none'\r
-          },\r
-        },\r
-        summary: {\r
-          type: 'template',\r
-          name: 'summary',\r
-        },\r
-        edit: {\r
-          type: 'default',\r
-        },\r
-      },\r
-      panel_picture: {\r
-        symbol: {\r
-          type: 'picture',\r
-          name: 'symbol_option',\r
-        },\r
-        caption: {\r
-          type: 'column',\r
-          name: 'caption',\r
-        },\r
-        summary: {\r
-          type: 'template',\r
-          name: 'summary',\r
-        },\r
-        edit: {\r
-          type: 'none',\r
-        },\r
-      },\r
-      speech_balloon: {\r
-        symbol: {\r
-          type: 'picture',\r
-          name: 'symbol_option',\r
-        },\r
-        caption: {\r
-          type: 'method',\r
-          name: 'plain_scenario',\r
-          link: {\r
-            type: 'none'\r
-          },\r
-        },\r
-        summary: {\r
-          type: 'template',\r
-          name: 'summary',\r
-        },\r
-        edit: {\r
-          type: 'none',\r
-        },\r
-      },\r
-      speech: {\r
-        symbol: {\r
-          type: 'picture',\r
-          name: 'symbol_option',\r
-        },\r
-        caption: {\r
-          type: 'column',\r
-          name: 'content',\r
-          link: {\r
-            type: 'none'\r
-          },\r
-        },\r
-        summary: {\r
-          type: 'template',\r
-          name: 'summary',\r
-        },\r
-        edit: {\r
-          type: 'none',\r
-        },\r
-      },\r
-      balloon: {\r
-        symbol: {\r
-          type: 'picture',\r
-          name: 'symbol_option',\r
-        },\r
-        caption: {\r
-          type: 'none',\r
-        },\r
-        summary: {\r
-          type: 'template',\r
-          name: 'summary',\r
-        },\r
-        edit: {\r
-          type: 'none',\r
-        },\r
-      },\r
-      ground_picture: {\r
-        symbol: {\r
-          type: 'picture',\r
-          name: 'symbol_option',\r
-        },\r
-        caption: {\r
-          type: 'column',\r
-          name: 'caption',\r
-        },\r
-        summary: {\r
-          type: 'template',\r
-          name: 'summary',\r
-        },\r
-        edit: {\r
-          type: 'none',\r
-        },\r
-      },\r
-      ground_color: {\r
-        symbol: {\r
-          type: 'template',\r
-          name: 'symbol',\r
-        },\r
-        caption: {\r
-          type: 'column',\r
-          name: 'caption',\r
-        },\r
-        summary: {\r
-          type: 'template',\r
-          name: 'summary',\r
-        },\r
-        edit: {\r
-          type: 'none',\r
-        },\r
-      },\r
-      original_picture: {\r
-        symbol: {\r
-          type: 'picture',\r
-          name: 'symbol_option',\r
-        },\r
-        caption: {\r
-          type: 'method',\r
-          name: 'revision',\r
-          link: {\r
-            type: 'action'\r
-            name: 'history',\r
-          },\r
-        },\r
-        summary: {\r
-          type: 'template',\r
-          name: 'summary',\r
-        },\r
-        edit: {\r
-          type: 'template',\r
-          name: 'publish',\r
-        },\r
-      },\r
-      picture: {\r
-        symbol: {\r
-          type: 'picture',\r
-          name: 'symbol_option',\r
-        },\r
-        caption: {\r
-          type: 'column',\r
-          name: 'revision',\r
-        },\r
-        summary: {\r
-          type: 'template',\r
-          name: 'summary',\r
-        },\r
-        edit: {\r
-          type: 'none',\r
-        },\r
-      },\r
-      resource_picture: {\r
-        symbol: {\r
-          type: 'picture',\r
-          name: 'symbol_option',\r
-        },\r
-        caption: {\r
-          type: 'none',\r
-        },\r
-        summary: {\r
-          type: 'template',\r
-          name: 'summary',\r
-        },\r
-        edit: {\r
-          type: 'none',\r
-        },\r
-      },\r
-      speech_balloon_template: {\r
-        symbol: {\r
-          type: 'picture',\r
-          name: 'symbol_option',\r
-        },\r
-        caption: {\r
-          type: 'column',\r
-          name: 'caption',\r
-        },\r
-        summary: {\r
-          type: 'none',\r
-        },\r
-        edit: {\r
-          type: 'none',\r
-        },\r
-      },\r
-      writing_format: {\r
-        symbol: {\r
-          type: 'image',\r
-          name: '<%= asset_path('item.png') %>',\r
-        },\r
-        caption: {\r
-          type: 'column',\r
-          name: 'caption',\r
-        },\r
-        summary: {\r
-          type: 'none',\r
-        },\r
-        edit: {\r
-          type: 'none',\r
-        },\r
-      },\r
-      license_group: {\r
-        symbol: {\r
-          type: 'image',\r
-          name: '<%= asset_path('item.png') %>',\r
-        },\r
-        caption: {\r
-          type: 'column',\r
-          name: 'caption',\r
-          link: {\r
-            type: 'url_column'\r
-            name: 'url',\r
-          },\r
-        },\r
-        summary: {\r
-          type: 'none',\r
-        },\r
-        edit: {\r
-          type: 'none',\r
-        },\r
-      },\r
-      license: {\r
-        symbol: {\r
-          type: 'image',\r
-          name: '<%= asset_path('item.png') %>',\r
-        },\r
-        caption: {\r
-          type: 'method',\r
-          name: 'caption_with_group',\r
-          link: {\r
-            type: 'url_column'\r
-            name: 'url',\r
-          },\r
-        },\r
-        summary: {\r
-          type: 'template',\r
-          name: 'summary',\r
-        },\r
-        edit: {\r
-          type: 'none',\r
-        },\r
-      },\r
-      author: {\r
-        symbol: {\r
-          type: 'image',\r
-          name: '<%= asset_path('item.png') %>',\r
-        },\r
-        caption: {\r
-          type: 'column',\r
-          name: 'name',\r
-        },\r
-        summary: {\r
-          type: 'template',\r
-          name: 'summary',\r
-        },\r
-        edit: {\r
-          type: 'account',\r
-        },\r
-      },\r
-      artist: {\r
-        symbol: {\r
-          type: 'image',\r
-          name: '<%= asset_path('item.png') %>',\r
-        },\r
-        caption: {\r
-          type: 'column',\r
-          name: 'name',\r
-        },\r
-        summary: {\r
-          type: 'template',\r
-          name: 'summary',\r
-        },\r
-        edit: {\r
-          type: 'account',\r
-        },\r
-      },\r
-      system_picture: {\r
-        symbol: {\r
-          type: 'picture',\r
-          name: 'symbol_option',\r
-        },\r
-        caption: {\r
-          type: 'none',\r
-        },\r
-        summary: {\r
-          type: 'none',\r
-        },\r
-        edit: {\r
-          type: 'none',\r
-        },\r
-      },\r
-    },\r
-    elements: [\r
-      {\r
-        name: 'panel_picture',\r
-        path_name: 'panel_pictures', \r
-        parts: []\r
-      },\r
-      {\r
-        name: 'speech_balloon',\r
-        path_name: 'circle_speech_balloon/speech_balloons', \r
-        parts: ['balloon', 'speech']\r
-      },\r
-      {\r
-        name: 'ground_picture',\r
-        path_name: 'ground_pictures', \r
-        parts: []\r
-      },\r
-      {\r
-        name: 'ground_color',\r
-        path_name: 'ground_colors', \r
-        parts: []\r
-      },\r
-    ],\r
-    forms: {\r
-      Panel: 'panel',\r
-      panel: {\r
-        attributes: {\r
-          caption: {\r
-            column: 'caption',\r
-            type: 'text',\r
-            label: {\r
-            },\r
-            options: {\r
-              row_break: true\r
-            }\r
-          },\r
-          width: {\r
-            column: 'width',\r
-            type: 'number',\r
-            label: {\r
-            },\r
-            options: {\r
-              size: 5, \r
-            },\r
-          },\r
-          height: {\r
-            column: 'height',\r
-            type: 'number',\r
-            label: {\r
-            },\r
-            options: {\r
-              size: 5, \r
-              row_break: true\r
-            }, \r
-          },\r
-          border: {\r
-            column: 'border',\r
-            type: 'number',\r
-            label: {\r
-            },\r
-            options: {\r
-              size: 5, \r
-            },\r
-          },\r
-          publish: {\r
-            column: 'publish',\r
-            type: 'select',\r
-            label: {\r
-            },\r
-            options: {\r
-              source: 'magic_number',\r
-              key: 'comic_visible_items',\r
-              size: 5, \r
-              row_break: true\r
-            }\r
-          },\r
-          id: {\r
-            column: 'id',\r
-            type: 'hidden',\r
-            label: {\r
-              type: 'hidden'\r
-            },\r
-            options: {\r
-            }\r
-          },\r
-          author_id: {\r
-            column: 'author_id',\r
-            type: 'hidden',\r
-            label: {\r
-              type: 'hidden'\r
-            },\r
-            options: {\r
-            }\r
-          },\r
-        },\r
-        fields: [\r
-          'caption',\r
-          'width',\r
-          'height',\r
-          'border',\r
-          'publish',\r
-          'id',\r
-          'author_id',\r
-        ]\r
-      },\r
-      PanelPicture: 'panel_picture',\r
-      panel_picture: {\r
-        attributes: {\r
-          caption: {\r
-            column: 'caption',\r
-            type: 'text',\r
-            label: {\r
-            },\r
-            options: {\r
-              row_break: true\r
-            }\r
-          },\r
-          x: {\r
-            column: 'x',\r
-            type: 'number',\r
-            label: {\r
-            },\r
-            options: {\r
-              size: 5, \r
-            }\r
-          },\r
-          y: {\r
-            column: 'y',\r
-            type: 'number',\r
-            label: {\r
-            },\r
-            options: {\r
-              size: 5, \r
-              row_break: true\r
-            }\r
-          },\r
-          width: {\r
-            column: 'width',\r
-            type: 'number',\r
-            label: {\r
-            },\r
-            options: {\r
-              size: 5, \r
-              row_break: true\r
-            },\r
-            helpers: {\r
-              size: {\r
-                path: 'panels/size_helper',\r
-                options: {\r
-                  class: 'panel_picture_width_tool', \r
-                }\r
-              }\r
-            },\r
-          },\r
-          height: {\r
-            column: 'height',\r
-            type: 'number',\r
-            label: {\r
-            },\r
-            options: {\r
-              size: 5, \r
-              row_break: true\r
-            }, \r
-            helpers: {\r
-              size: {\r
-                path: 'panels/size_helper',\r
-                options: {\r
-                  class: 'panel_picture_height_tool', \r
-                }\r
-              }\r
-            },\r
-          },\r
-          link: {\r
-            column: 'link',\r
-            type: 'text',\r
-            label: {\r
-            },\r
-            options: {\r
-              row_break: true\r
-            }\r
-          },\r
-          id: {\r
-            column: 'id',\r
-            type: 'hidden',\r
-            label: {\r
-              type: 'hidden'\r
-            },\r
-            options: {\r
-            }\r
-          },\r
-          panel_id: {\r
-            column: 'panel_id',\r
-            type: 'hidden',\r
-            label: {\r
-              type: 'hidden'\r
-            },\r
-            options: {\r
-            }\r
-          },\r
-          picture_id: {\r
-            column: 'picture_id',\r
-            type: 'hidden',\r
-            label: {\r
-            },\r
-            helpers: {\r
-              popup: {\r
-                path: 'panels/popup_helper',\r
-                source: 'pictures',\r
-                options: {\r
-                }\r
-              }\r
-            }\r
-            options: {\r
-            }\r
-          },\r
-          z: {\r
-            column: 'z',\r
-            type: 'hidden',\r
-            label: {\r
-              type: 'hidden'\r
-            },\r
-            options: {\r
-            }\r
-          },\r
-          t: {\r
-            column: 't',\r
-            type: 'hidden',\r
-            label: {\r
-              type: 'hidden'\r
-            },\r
-            options: {\r
-            }\r
-          },\r
-        },\r
-        fields: [\r
-          'caption',\r
-          'x',\r
-          'y',\r
-          'width',\r
-          'height',\r
-          'link',\r
-          'id',\r
-          'panel_id',\r
-          'picture_id',\r
-          'z',\r
-          't',\r
-        ]\r
-      },\r
-      speech_balloon: {\r
-        attributes: {\r
-          'speech_balloon.id': {\r
-            column: 'id',\r
-            type: 'hidden',\r
-            label: {\r
-              type: 'hidden'\r
-            },\r
-            options: {\r
-            }\r
-          },\r
-          'speech_balloon.panel_id': {\r
-            column: 'panel_id',\r
-            type: 'hidden',\r
-            label: {\r
-              type: 'hidden'\r
-            },\r
-            options: {\r
-            }\r
-          },\r
-          'speech_balloon.speech_balloon_template_id': {\r
-            column: 'speech_balloon_template_id',\r
-            type: 'hidden',\r
-            label: {\r
-              type: 'hidden'\r
-            },\r
-            options: {\r
-            }\r
-          },\r
-          'speech_balloon.caption': {\r
-            column: 'caption',\r
-            type: 'text',\r
-            label: {\r
-            },\r
-            options: {\r
-              row_break: true\r
-            }\r
-          },\r
-          'speech_balloon.z': {\r
-            column: 'z',\r
-            type: 'hidden',\r
-            label: {\r
-              type: 'hidden'\r
-            },\r
-            options: {\r
-            }\r
-          },\r
-          'speech_balloon.t': {\r
-            column: 't',\r
-            type: 'hidden',\r
-            label: {\r
-              type: 'hidden'\r
-            },\r
-            options: {\r
-            }\r
-          },\r
-          'speech_balloon.classname': {\r
-            column: 'classname',\r
-            type: 'hidden',\r
-            label: {\r
-              type: 'hidden'\r
-            },\r
-            options: {\r
-            }\r
-          },\r
-          'speech_balloon.settings': {\r
-            column: 'settings',\r
-            type: 'hidden',\r
-            label: {\r
-              type: 'hidden'\r
-            },\r
-            options: {\r
-            }\r
-          },\r
-          'balloon.id': {\r
-            model: 'balloon',\r
-            part: 'balloon',\r
-            column: 'id',\r
-            type: 'hidden',\r
-            label: {\r
-              type: 'hidden'\r
-            },\r
-            options: {\r
-            }\r
-          },\r
-          'balloon.speech_balloon_id': {\r
-            model: 'balloon',\r
-            part: 'balloon',\r
-            column: 'speech_balloon_id',\r
-            type: 'hidden',\r
-            label: {\r
-              type: 'hidden'\r
-            },\r
-            options: {\r
-            }\r
-          },\r
-          'balloon.system_picture_id': {\r
-            model: 'balloon',\r
-            part: 'balloon',\r
-            column: 'system_picture_id',\r
-            type: 'hidden',\r
-            label: {\r
-              type: 'hidden'\r
-            },\r
-            options: {\r
-            }\r
-          },\r
-          'balloon.r': {\r
-            model: 'balloon',\r
-            part: 'balloon',\r
-            column: 'r',\r
-            type: 'number',\r
-            label: {\r
-            },\r
-            options: {\r
-              size: 5, \r
-              row_break: true\r
-            },\r
-            helpers: {\r
-              tail_angle: {\r
-                path: 'panels/tail_angle_helper',\r
-                options: {\r
-                }\r
-              }\r
-            }\r
-          },\r
-          'balloon.x': {\r
-            model: 'balloon',\r
-            part: 'balloon',\r
-            column: 'x',\r
-            type: 'number',\r
-            label: {\r
-            },\r
-            options: {\r
-              size: 5, \r
-            }\r
-          },\r
-          'balloon.y': {\r
-            model: 'balloon',\r
-            part: 'balloon',\r
-            column: 'y',\r
-            type: 'number',\r
-            label: {\r
-            },\r
-            options: {\r
-              size: 5, \r
-              row_break: true\r
-            }\r
-          },\r
-          'balloon.width': {\r
-            model: 'balloon',\r
-            part: 'balloon',\r
-            column: 'width',\r
-            type: 'number',\r
-            label: {\r
-            },\r
-            options: {\r
-              size: 5, \r
-            }\r
-          },\r
-          'balloon.height': {\r
-            model: 'balloon',\r
-            part: 'balloon',\r
-            column: 'height',\r
-            type: 'number',\r
-            label: {\r
-            },\r
-            options: {\r
-              size: 5, \r
-              row_break: true\r
-            }\r
-          },\r
-          'balloon.settings': {\r
-            model: 'balloon',\r
-            part: 'balloon',\r
-            column: 'settings',\r
-            type: 'hidden',\r
-            label: {\r
-              type: 'hidden'\r
-            },\r
-            options: {\r
-            }\r
-          },\r
-          'speech.id': {\r
-            model: 'speech',\r
-            part: 'speech',\r
-            column: 'id',\r
-            type: 'hidden',\r
-            label: {\r
-              type: 'hidden'\r
-            },\r
-            options: {\r
-            }\r
-          },\r
-          'speech.speech_balloon_id': {\r
-            model: 'speech',\r
-            part: 'speech',\r
-            column: 'speech_balloon_id',\r
-            type: 'hidden',\r
-            label: {\r
-              type: 'hidden'\r
-            },\r
-            options: {\r
-            }\r
-          },\r
-          'speech.x': {\r
-            model: 'speech',\r
-            part: 'speech',\r
-            column: 'x',\r
-            type: 'hidden',\r
-            label: {\r
-              type: 'hidden'\r
-            },\r
-            options: {\r
-            }\r
-          },\r
-          'speech.y': {\r
-            model: 'speech',\r
-            part: 'speech',\r
-            column: 'y',\r
-            type: 'hidden',\r
-            label: {\r
-              type: 'hidden'\r
-            },\r
-            options: {\r
-            }\r
-          },\r
-          'speech.width': {\r
-            model: 'speech',\r
-            part: 'speech',\r
-            column: 'width',\r
-            type: 'hidden',\r
-            label: {\r
-              type: 'hidden'\r
-            },\r
-            options: {\r
-            }\r
-          },\r
-          'speech.height': {\r
-            model: 'speech',\r
-            part: 'speech',\r
-            column: 'height',\r
-            type: 'hidden',\r
-            label: {\r
-              type: 'hidden'\r
-            },\r
-            options: {\r
-            }\r
-          },\r
-          'speech.writing_format_id': {\r
-            model: 'speech',\r
-            part: 'speech',\r
-            column: 'writing_format_id',\r
-            type: 'select',\r
-            label: {\r
-            },\r
-            options: {\r
-              source: 'model',\r
-              model: 'writing_format',\r
-              method: 'enable_list',\r
-              caption: 'caption'\r
-            }\r
-          },\r
-          'speech.font_size': {\r
-            model: 'speech',\r
-            part: 'speech',\r
-            column: 'font_size',\r
-            type: 'select',\r
-            label: {\r
-            },\r
-            options: {\r
-              source: 'magic_number',\r
-              key: 'speech_font_size_items',\r
-              row_break: true\r
-            }\r
-          },\r
-          'speech.text_align': {\r
-            model: 'speech',\r
-            part: 'speech',\r
-            column: 'text_align',\r
-            type: 'select',\r
-            label: {\r
-            },\r
-            options: {\r
-              source: 'magic_number',\r
-              key: 'speech_text_align_items',\r
-            }\r
-          },\r
-          'speech.quotes': {\r
-            model: 'speech',\r
-            part: 'speech',\r
-            column: 'quotes',\r
-            type: 'text',\r
-            label: {\r
-            },\r
-            options: {\r
-              size: 5, \r
-            }\r
-          },\r
-          'speech.content': {\r
-            model: 'speech',\r
-            part: 'speech',\r
-            column: 'content',\r
-            type: 'text_area',\r
-            label: {\r
-              row_break: true\r
-            },\r
-            options: {\r
-              size: '45x5', \r
-            }\r
-          },\r
-          'speech.fore_color': {\r
-            model: 'speech',\r
-            part: 'speech',\r
-            column: 'fore_color',\r
-            type: 'hidden',\r
-            label: {\r
-              row_break: true\r
-            },\r
-            options: {\r
-            },\r
-            helpers: {\r
-              color: {\r
-                path: 'panels/color_helper',\r
-                options: {\r
-                },\r
-                wrapper: 'speech-fore_color-wrap'\r
-              }\r
-            }\r
-          },\r
-          'speech.settings': {\r
-            model: 'speech',\r
-            part: 'speech',\r
-            column: 'settings',\r
-            type: 'hidden',\r
-            label: {\r
-              type: 'hidden'\r
-            },\r
-            options: {\r
-            }\r
-          },\r
-        },\r
-      },\r
-      CircleSpeechBalloon: 'circle_speech_balloon',\r
-      circle_speech_balloon: {\r
-        base: 'speech_balloon',\r
-        attributes: {\r
-        },\r
-        fields: [\r
-            'speech_balloon.caption',\r
-            'balloon.r',\r
-            'balloon.x',\r
-            'balloon.y',\r
-            'balloon.width',\r
-            'balloon.height',\r
-            'balloon.id',\r
-            'balloon.speech_balloon_id',\r
-            'balloon.system_picture_id',\r
-            'balloon.settings',\r
-            'speech.writing_format_id',\r
-            'speech.font_size',\r
-            'speech.text_align',\r
-            'speech.quotes',\r
-            'speech.content',\r
-            'speech.fore_color',\r
-            'speech.id',\r
-            'speech.speech_balloon_id',\r
-            'speech.x',\r
-            'speech.y',\r
-            'speech.width',\r
-            'speech.height',\r
-            'speech.settings',\r
-            'speech_balloon.id',\r
-            'speech_balloon.panel_id',\r
-            'speech_balloon.speech_balloon_template_id',\r
-            'speech_balloon.classname',\r
-            'speech_balloon.z',\r
-            'speech_balloon.t',\r
-            'speech_balloon.settings',\r
-        ]\r
-      },\r
-      PlainSpeechBalloon: 'plain_speech_balloon',\r
-      plain_speech_balloon: {\r
-        base: 'speech_balloon',\r
-        attributes: {\r
-          'balloon.r': {\r
-            model: 'balloon',\r
-            part: 'balloon',\r
-            column: 'r',\r
-            type: 'hidden',\r
-            label: {\r
-              type: 'hidden'\r
-            },\r
-            options: {\r
-            },\r
-          },\r
-        },\r
-        fields: [\r
-          'speech_balloon.caption',\r
-          'balloon.r',\r
-          'balloon.x',\r
-          'balloon.y',\r
-          'balloon.width',\r
-          'balloon.height',\r
-          'balloon.id',\r
-          'balloon.speech_balloon_id',\r
-          'balloon.system_picture_id',\r
-          'balloon.settings',\r
-          'speech.writing_format_id',\r
-          'speech.font_size',\r
-          'speech.text_align',\r
-          'speech.quotes',\r
-          'speech.content',\r
-          'speech.fore_color',\r
-          'speech.id',\r
-          'speech.speech_balloon_id',\r
-          'speech.x',\r
-          'speech.y',\r
-          'speech.width',\r
-          'speech.height',\r
-          'speech.settings',\r
-          'speech_balloon.id',\r
-          'speech_balloon.panel_id',\r
-          'speech_balloon.speech_balloon_template_id',\r
-          'speech_balloon.classname',\r
-          'speech_balloon.z',\r
-          'speech_balloon.t',\r
-          'speech_balloon.settings',\r
-        ]\r
-      },\r
-      SquareSpeechBalloon: 'square_speech_balloon',\r
-      square_speech_balloon: {\r
-        base: 'speech_balloon',\r
-        attributes: {\r
-          'balloon.r': {\r
-            model: 'balloon',\r
-            part: 'balloon',\r
-            column: 'r',\r
-            type: 'hidden',\r
-            label: {\r
-              type: 'hidden'\r
-            },\r
-            options: {\r
-            },\r
-          },\r
-        },\r
-        fields: [\r
-          'speech_balloon.caption',\r
-          'balloon.r',\r
-          'balloon.x',\r
-          'balloon.y',\r
-          'balloon.width',\r
-          'balloon.height',\r
-          'balloon.id',\r
-          'balloon.speech_balloon_id',\r
-          'balloon.system_picture_id',\r
-          'balloon.settings',\r
-          'speech.writing_format_id',\r
-          'speech.font_size',\r
-          'speech.text_align',\r
-          'speech.quotes',\r
-          'speech.content',\r
-          'speech.fore_color',\r
-          'speech.id',\r
-          'speech.speech_balloon_id',\r
-          'speech.x',\r
-          'speech.y',\r
-          'speech.width',\r
-          'speech.height',\r
-          'speech.settings',\r
-          'speech_balloon.id',\r
-          'speech_balloon.panel_id',\r
-          'speech_balloon.speech_balloon_template_id',\r
-          'speech_balloon.classname',\r
-          'speech_balloon.z',\r
-          'speech_balloon.t',\r
-          'speech_balloon.settings',\r
-        ]\r
-      },\r
-      GroundPicture: 'ground_picture',\r
-      ground_picture: {\r
-        attributes: {\r
-          id: {\r
-            column: 'id',\r
-            type: 'hidden',\r
-            label: {\r
-              type: 'hidden'\r
-            },\r
-            options: {\r
-            }\r
-          },\r
-          panel_id: {\r
-            column: 'panel_id',\r
-            type: 'hidden',\r
-            label: {\r
-              type: 'hidden'\r
-            },\r
-            options: {\r
-            }\r
-          },\r
-          picture_id: {\r
-            column: 'picture_id',\r
-            type: 'hidden',\r
-            label: {\r
-              type: 'hidden'\r
-            },\r
-            options: {\r
-            }\r
-          },\r
-          caption: {\r
-            column: 'caption',\r
-            type: 'text',\r
-            label: {\r
-            },\r
-            options: {\r
-              row_break: true\r
-            }\r
-          },\r
-          repeat: {\r
-            column: 'repeat',\r
-            type: 'select',\r
-            label: {\r
-            },\r
-            options: {\r
-              source: 'magic_number',\r
-              key: 'ground_picture_repeat_items',\r
-              row_break: true\r
-            }\r
-          },\r
-          x: {\r
-            column: 'x',\r
-            type: 'number',\r
-            label: {\r
-            },\r
-            options: {\r
-              size: 5, \r
-            }\r
-          },\r
-          y: {\r
-            column: 'y',\r
-            type: 'number',\r
-            label: {\r
-            },\r
-            options: {\r
-              size: 5, \r
-              row_break: true\r
-            }\r
-          },\r
-          z: {\r
-            column: 'z',\r
-            type: 'hidden',\r
-            label: {\r
-              type: 'hidden'\r
-            },\r
-            options: {\r
-            }\r
-          },\r
-          t: {\r
-            column: 't',\r
-            type: 'hidden',\r
-            label: {\r
-              type: 'hidden'\r
-            },\r
-            options: {\r
-            }\r
-          },\r
-        },\r
-        fields: [\r
-          'caption',\r
-          'repeat',\r
-          'x',\r
-          'y',\r
-          'z',\r
-          't',\r
-          'id',\r
-          'panel_id',\r
-          'picture_id',\r
-        ]\r
-      },\r
-      GroundColor: 'ground_color',\r
-      ground_color: {\r
-        attributes: {\r
-          id: {\r
-            column: 'id',\r
-            type: 'hidden',\r
-            label: {\r
-              type: 'hidden'\r
-            },\r
-            options: {\r
-            }\r
-          },\r
-          panel_id: {\r
-            column: 'panel_id',\r
-            type: 'hidden',\r
-            label: {\r
-              type: 'hidden'\r
-            },\r
-            options: {\r
-            }\r
-          },\r
-          caption: {\r
-            column: 'caption',\r
-            type: 'text',\r
-            label: {\r
-            },\r
-            options: {\r
-              row_break: true\r
-            }\r
-          },\r
-          code: {\r
-            column: 'code',\r
-            type: 'hidden',\r
-            label: {\r
-              row_break: true\r
-            },\r
-            options: {\r
-              row_break: true\r
-            }\r
-            helpers: {\r
-              color: {\r
-                path: 'panels/color_helper',\r
-                options: {\r
-                },\r
-                wrapper: 'ground_color-code-wrap'\r
-              }\r
-            },\r
-          },\r
-          orientation: {\r
-            column: 'orientation',\r
-            type: 'select',\r
-            label: {\r
-            },\r
-            options: {\r
-              source: 'magic_number',\r
-              key: 'ground_color_orientation_items',\r
-              row_break: true\r
-            }\r
-          },\r
-          xy: {\r
-            column: 'xy',\r
-            type: 'number',\r
-            label: {\r
-            },\r
-            options: {\r
-              size: 5, \r
-            }\r
-          },\r
-          wh: {\r
-            column: 'wh',\r
-            type: 'number',\r
-            label: {\r
-            },\r
-            options: {\r
-              size: 5, \r
-              row_break: true\r
-            }\r
-          },\r
-          z: {\r
-            column: 'z',\r
-            type: 'hidden',\r
-            label: {\r
-              type: 'hidden'\r
-            },\r
-            options: {\r
-            }\r
-          },\r
-          t: {\r
-            column: 't',\r
-            type: 'hidden',\r
-            label: {\r
-              type: 'hidden'\r
-            },\r
-            options: {\r
-            }\r
-          },\r
-        },\r
-        fields: [\r
-          'id',\r
-          'panel_id',\r
-          'caption',\r
-          'code',\r
-          'orientation',\r
-          'xy',\r
-          'wh',\r
-          'z',\r
-          't',\r
-        ]\r
-      }\r
-    },\r
-  },\r
-  locales: {\r
-    ja: {\r
-    }\r
-  },\r
-}\r
-\r
-@repeat_texts = ['repeat', 'repeat-x', 'repeat-y', 'no-repeat']\r
-\r
-@text_align_texts = ['left', 'left', 'right', 'center']\r
-\r
diff --git a/app/assets/javascripts/configurations2.js.coffee.erb b/app/assets/javascripts/configurations2.js.coffee.erb
deleted file mode 100644 (file)
index a8ed085..0000000
+++ /dev/null
@@ -1,2035 +0,0 @@
-#マニフェスト\r
-@configurations2 = {\r
-  models: {\r
-    Scroll: 'scroll',\r
-    scroll: {\r
-      class_name: 'Scroll',\r
-      table_name: 'scrolls',\r
-      associations: {\r
-        belongs_to: {\r
-          author: {\r
-            id_column: 'author_id'\r
-          }, \r
-        },\r
-        has_many: {\r
-          scroll_panels: {\r
-            foreign_key: 'scroll_id',\r
-            model: 'scroll_panel',\r
-          }, \r
-          panels: {\r
-            through: 'scroll_panel',\r
-            foreign_key: 'scroll_id'\r
-            model: 'panel',\r
-          }, \r
-        },\r
-      },\r
-      attributes: {\r
-        id: {\r
-          type: 'number',\r
-          primary_key: 1,\r
-          rules : {\r
-            number: true,\r
-          }\r
-        },\r
-        title: {\r
-          type: 'text',\r
-          rules : {\r
-            required: true,\r
-          }\r
-        },\r
-        description: {\r
-          type: 'text',\r
-          rules : {\r
-          }\r
-        },\r
-        visible: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-          },\r
-          source: {\r
-            type: 'magic_number',\r
-            key: 'scroll_visible_items',\r
-          },\r
-        },\r
-        author_id: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-          },\r
-        },\r
-        created_at: {\r
-          type: 'datetime',\r
-        },\r
-        updated_at: {\r
-          type: 'datetime',\r
-        }\r
-      },\r
-      select: {\r
-        list: {\r
-          name: 'public'\r
-        },\r
-        caption: {\r
-          type: 'column',\r
-          name: 'title'\r
-        },\r
-      },\r
-    },\r
-    ScrollPanel: 'scroll_panel',\r
-    scroll_panel: {\r
-      class_name: 'ScrollPanel',\r
-      table_name: 'scroll_panels',\r
-      associations: {\r
-        belongs_to: {\r
-          panel: {\r
-            id_column: 'panel_id'\r
-          }, \r
-          scroll: {\r
-            id_column: 'scroll_id'\r
-          }, \r
-        },\r
-        has_many: {\r
-        },\r
-      },\r
-      attributes: {\r
-        id: {\r
-          type: 'number',\r
-          primary_key: 1,\r
-          rules : {\r
-            number: true,\r
-          }\r
-        },\r
-        scroll_id: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-          }\r
-        },\r
-        panel_id: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-          }\r
-        },\r
-        t: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-            min: 0,\r
-          }\r
-        },\r
-        author_id: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-          }\r
-        },\r
-        created_at: {\r
-          type: 'datetime',\r
-        },\r
-        updated_at: {\r
-          type: 'datetime',\r
-        }\r
-      },\r
-    },\r
-    Comic: 'comic',\r
-    comic: {\r
-      class_name: 'Comic',\r
-      table_name: 'comics',\r
-      associations: {\r
-        belongs_to: {\r
-          author: {\r
-            id_column: 'author_id'\r
-          }, \r
-        },\r
-        has_many: {\r
-          stories: {\r
-            foreign_key: 'comic_id'\r
-            model: 'story',\r
-          }, \r
-        },\r
-        has_many_through: {\r
-        },\r
-      },\r
-      attributes: {\r
-        id: {\r
-          type: 'number',\r
-          primary_key: 1,\r
-          rules : {\r
-            number: true,\r
-          }\r
-        },\r
-        title: {\r
-          type: 'text',\r
-          rules : {\r
-            required: true,\r
-          }\r
-        },\r
-        description: {\r
-          type: 'text',\r
-          rules : {\r
-          }\r
-        },\r
-        visible: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-          },\r
-          source: {\r
-            type: 'magic_number',\r
-            key: 'comic_visible_items',\r
-          },\r
-        },\r
-        author_id: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-          }\r
-        },\r
-        created_at: {\r
-          type: 'datetime',\r
-        },\r
-        updated_at: {\r
-          type: 'datetime',\r
-        }\r
-      },\r
-      select: {\r
-        method: 'list',\r
-        caption: {\r
-          type: 'column',\r
-          name: 'title'\r
-        },\r
-      },\r
-    },\r
-    Story: 'story',\r
-    story: {\r
-      class_name: 'Story',\r
-      table_name: 'stories',\r
-      associations: {\r
-        belongs_to: {\r
-          comic: {\r
-            id_column: 'comic_id'\r
-          }, \r
-        },\r
-        has_many: {\r
-          story_sheets: {\r
-            foreign_key: 'story_id',\r
-            list_method: 'list_by_story',\r
-          }, \r
-          sheets: {\r
-            through: 'story_sheets',\r
-            foreign_key: 'story_id'\r
-            list_method: 'list_by_story',\r
-          }, \r
-        },\r
-      },\r
-      attributes: {\r
-        id: {\r
-          type: 'number',\r
-          primary_key: 1,\r
-          rules : {\r
-            number: true,\r
-          }\r
-        },\r
-        comic_id: {\r
-          type: 'number',\r
-          rules : {\r
-            number: true,\r
-          }\r
-        },\r
-        title: {\r
-          type: 'text',\r
-          rules : {\r
-          }\r
-        },\r
-        description: {\r
-          type: 'text',\r
-          rules : {\r
-          }\r
-        },\r
-        t: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-            min: 0,\r
-          }\r
-        },\r
-        visible: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-          },\r
-          source: {\r
-            type: 'magic_number',\r
-            key: 'story_visible_items',\r
-          },\r
-        },\r
-        created_at: {\r
-          type: 'datetime',\r
-        },\r
-        updated_at: {\r
-          type: 'datetime',\r
-        }\r
-      },\r
-      select: {\r
-        method: 'list',\r
-        caption: {\r
-          type: 'method',\r
-          name: 'title_with_t',\r
-        },\r
-      },\r
-    },\r
-    StorySheet: 'story_sheet',\r
-    story_sheet: {\r
-      class_name: 'StorySheet',\r
-      table_name: 'story_sheets',\r
-      associations: {\r
-        belongs_to: {\r
-          story: {\r
-            id_column: 'story_id'\r
-          }, \r
-          sheet: {\r
-            id_column: 'sheet_id'\r
-          }, \r
-        },\r
-        has_many: {\r
-        },\r
-      },\r
-      attributes: {\r
-        id: {\r
-          type: 'number',\r
-          primary_key: 1,\r
-          rules : {\r
-            number: true,\r
-          }\r
-        },\r
-        story_id: {\r
-          type: 'number',\r
-          rules : {\r
-            number: true,\r
-          }\r
-        },\r
-        sheet_id: {\r
-          type: 'number',\r
-          rules : {\r
-            number: true,\r
-          }\r
-        },\r
-        t: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-            min: 0,\r
-          }\r
-        },\r
-        author_id: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-          }\r
-        },\r
-        created_at: {\r
-          type: 'datetime',\r
-        },\r
-        updated_at: {\r
-          type: 'datetime',\r
-        }\r
-      }\r
-    },\r
-    Sheet: 'sheet',\r
-    sheet: {\r
-      class_name: 'Sheet',\r
-      table_name: 'sheets',\r
-      associations: {\r
-        belongs_to: {\r
-          author: {\r
-            id_column: 'author_id'\r
-          }, \r
-        },\r
-        has_many: {\r
-          story_sheets: {\r
-            foreign_key: 'story_id',\r
-            list_method: 'list_by_sheet',\r
-          }, \r
-          stories: {\r
-            through: 'story_sheets',\r
-            foreign_key: 'sheet_id'\r
-            list_method: 'list_by_sheet',\r
-          }, \r
-          sheet_panels: {\r
-            foreign_key: 'sheet_id',\r
-            list_method: 'list_by_sheet',\r
-          }, \r
-          panels: {\r
-            through: 'sheet_panels',\r
-            foreign_key: 'sheet_id'\r
-            list_method: 'list_by_sheet',\r
-          }, \r
-        },\r
-      },\r
-      attributes: {\r
-        id: {\r
-          type: 'number',\r
-          primary_key: 1,\r
-          rules : {\r
-            number: true,\r
-          }\r
-        },\r
-        caption: {\r
-          type: 'text',\r
-          rules : {\r
-          }\r
-        },\r
-        width: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-          }\r
-        },\r
-        height: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-          }\r
-        },\r
-        visible: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-          },\r
-          source: {\r
-            type: 'magic_number',\r
-            key: 'sheet_visible_items',\r
-          },\r
-        },\r
-        author_id: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-          }\r
-        },\r
-        created_at: {\r
-          type: 'datetime',\r
-        },\r
-        updated_at: {\r
-          type: 'datetime',\r
-        }\r
-      },\r
-      select: {\r
-        method: 'list',\r
-        caption: {\r
-          type: 'column',\r
-          name: 'caption'\r
-        },\r
-      },\r
-    },\r
-    SheetPanel: 'sheet_panel',\r
-    sheet_panel: {\r
-      class_name: 'SheetPanel',\r
-      table_name: 'sheet_panels',\r
-      associations: {\r
-        belongs_to: {\r
-          sheet: {\r
-            id_column: 'sheet_id'\r
-          }, \r
-          panel: {\r
-            id_column: 'panel_id'\r
-          }, \r
-        },\r
-        has_many: {\r
-        },\r
-      },\r
-      attributes: {\r
-        id: {\r
-          type: 'number',\r
-          primary_key: 1,\r
-          rules : {\r
-            number: true,\r
-          }\r
-        },\r
-        sheet_id: {\r
-          type: 'number',\r
-          rules : {\r
-            number: true,\r
-          }\r
-        },\r
-        panel_id: {\r
-          type: 'number',\r
-          rules : {\r
-            number: true,\r
-          }\r
-        },\r
-        x: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-          }\r
-        },\r
-        y: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-          }\r
-        },\r
-        z: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-            min: 1,\r
-          }\r
-        },\r
-        t: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-            min: 0,\r
-          }\r
-        },\r
-        author_id: {\r
-          type: 'number',\r
-          rules : {\r
-            number: true,\r
-          }\r
-        },\r
-        created_at: {\r
-          type: 'datetime',\r
-        },\r
-        updated_at: {\r
-          type: 'datetime',\r
-        }\r
-      }\r
-    },\r
-    Panel: 'panel',\r
-    panel: {\r
-      class_name: 'Panel',\r
-      table_name: 'panels',\r
-      associations: {\r
-        belongs_to: {\r
-          author: {\r
-            id_column: 'author_id'\r
-          }, \r
-        },\r
-        has_many: {\r
-          scroll_panels: {\r
-            foreign_key: 'panel_id',\r
-            list_method: 'list_by_panel',\r
-          }, \r
-          scrolls: {\r
-            through: 'scroll_panels',\r
-            foreign_key: 'panel_id'\r
-            list_method: 'list_by_panel',\r
-          }, \r
-          sheet_panels: {\r
-            foreign_key: 'panel_id',\r
-            list_method: 'list_by_panel',\r
-          }, \r
-          sheets: {\r
-            through: 'sheet_panels',\r
-            foreign_key: 'panel_id'\r
-            list_method: 'list_by_panel',\r
-          }, \r
-          panel_pictures: {\r
-            foreign_key: 'panel_id',\r
-            list_method: 'list_by_panel',\r
-          }, \r
-          speech_balloons: {\r
-            foreign_key: 'panel_id',\r
-            list_method: 'list_by_panel',\r
-          }, \r
-          ground_pictures: {\r
-            foreign_key: 'panel_id',\r
-            list_method: 'list_by_panel',\r
-          }, \r
-          ground_colors: {\r
-            foreign_key: 'panel_id',\r
-            list_method: 'list_by_panel',\r
-          }, \r
-        },\r
-      },\r
-      attributes: {\r
-        id: {\r
-          type: 'number',\r
-          primary_key: 1,\r
-          rules : {\r
-            number: true,\r
-          }\r
-        },\r
-        width: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-            min: 1,\r
-          }\r
-        },\r
-        height: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-            min: 1,\r
-          }\r
-        },\r
-        border: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-            min: 0,\r
-          }\r
-        },\r
-        caption: {\r
-          type: 'text',\r
-          rules : {\r
-          }\r
-        },\r
-        publish: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-          },\r
-          source: {\r
-            type: 'magic_number',\r
-            key: 'panel_visible_items',\r
-          },\r
-        },\r
-        author_id: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-          }\r
-        },\r
-        created_at: {\r
-          type: 'datetime',\r
-        },\r
-        updated_at: {\r
-          type: 'datetime',\r
-        }\r
-      },\r
-      select: {\r
-        method: 'list',\r
-        caption: {\r
-          type: 'method',\r
-          name: 'plain_scenario',\r
-        },\r
-      },\r
-    },\r
-    PanelPicture: 'panel_picture',\r
-    panel_picture: {\r
-      class_name: 'PanelPicture',\r
-      table_name: 'panel_pictures',\r
-      associations: {\r
-        belongs_to: {\r
-          panel: {\r
-            id_column: 'panel_id'\r
-          }, \r
-        },\r
-        has_many: {\r
-        },\r
-      },\r
-      attributes: {\r
-        id: {\r
-          type: 'number',\r
-          primary_key: 1,\r
-          rules : {\r
-            number: true,\r
-          }\r
-        },\r
-        panel_id: {\r
-          type: 'number',\r
-          rules : {\r
-            number: true,\r
-          }\r
-        },\r
-        picture_id: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-          }\r
-        },\r
-        caption: {\r
-          type: 'text',\r
-          rules : {\r
-          }\r
-        },\r
-        x: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-          }\r
-        },\r
-        y: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-          }\r
-        },\r
-        width: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-          }\r
-        },\r
-        height: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-          }\r
-        },\r
-        link: {\r
-          type: 'text',\r
-          rules : {\r
-            url: true,\r
-          }\r
-        },\r
-        z: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-            min: 1,\r
-          }\r
-        },\r
-        t: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-            min: 0,\r
-          }\r
-        },\r
-        created_at: {\r
-          type: 'datetime',\r
-        },\r
-        updated_at: {\r
-          type: 'datetime',\r
-        }\r
-      }\r
-    },\r
-    SpeechBalloon: 'speech_balloon',\r
-    speech_balloon: {\r
-      class_name: 'SpeechBalloon',\r
-      table_name: 'speech_balloons',\r
-      extend: 'classname', \r
-      associations: {\r
-        belongs_to: {\r
-          panel: {\r
-            id_column: 'panel_id'\r
-          }, \r
-        },\r
-        has_many: {\r
-        },\r
-        has_one: {\r
-          balloon: {\r
-            foreign_key: 'speech_balloon_id',\r
-            list_method: 'list_by_speech_balloon',\r
-          }, \r
-          speech: {\r
-            foreign_key: 'speech_balloon_id',\r
-            list_method: 'list_by_speech_balloon',\r
-          }, \r
-        },\r
-      },\r
-      attributes: {\r
-        id: {\r
-          type: 'number',\r
-          primary_key: 1,\r
-          rules : {\r
-            number: true,\r
-          }\r
-        },\r
-        panel_id: {\r
-          type: 'number',\r
-          rules : {\r
-            number: true,\r
-          }\r
-        },\r
-        speech_balloon_template_id: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-          }\r
-        },\r
-        classname: {\r
-          type: 'text',\r
-          rules : {\r
-            required: true,\r
-          }\r
-        },\r
-        z: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-            min: 1,\r
-          }\r
-        },\r
-        t: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-            min: 0,\r
-          }\r
-        },\r
-        settings: {\r
-          type: 'text',\r
-          rules : {\r
-          }\r
-        },\r
-        caption: {\r
-          type: 'text',\r
-          rules : {\r
-          }\r
-        },\r
-        created_at: {\r
-          type: 'datetime',\r
-        },\r
-        updated_at: {\r
-          type: 'datetime',\r
-        }\r
-      },\r
-      select: {\r
-        method: 'list',\r
-        caption: {\r
-          type: 'method',\r
-          name: 'plain_scenario',\r
-        },\r
-      },\r
-    }, \r
-    Balloon: 'balloon',\r
-    balloon: {\r
-      class_name: 'Balloon',\r
-      table_name: 'balloons',\r
-      associations: {\r
-        belongs_to: {\r
-          speech_balloon: {\r
-            id_column: 'speech_balloon_id'\r
-          }, \r
-          system_picture: {\r
-            id_column: 'system_picture_id'\r
-          }, \r
-        },\r
-        has_many: {\r
-        },\r
-      },\r
-      attributes: {\r
-        id: {\r
-          type: 'number',\r
-          primary_key: 1,\r
-          rules : {\r
-            number: true,\r
-          }\r
-        },\r
-        speech_balloon_id: {\r
-          type: 'number',\r
-          rules : {\r
-            number: true,\r
-          }\r
-        },\r
-        system_picture_id: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-          }\r
-        },\r
-        x: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-          }\r
-        },\r
-        y: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-          }\r
-        },\r
-        width: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-            min: 1,\r
-          }\r
-        },\r
-        height: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-            min: 1,\r
-          }\r
-        },\r
-        r: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-          }\r
-        },\r
-        settings: {\r
-          type: 'text',\r
-          rules : {\r
-          }\r
-        },\r
-        created_at: {\r
-          type: 'datetime',\r
-        },\r
-        updated_at: {\r
-          type: 'datetime',\r
-        }\r
-      }\r
-    },\r
-    Speech: 'speech',\r
-    speech: {\r
-      class_name: 'Speech',\r
-      table_name: 'speeches',\r
-      associations: {\r
-        belongs_to: {\r
-          speech_balloon: {\r
-            id_column: 'speech_balloon_id'\r
-          }, \r
-          writing_format: {\r
-            id_column: 'writing_format_id'\r
-          }, \r
-        },\r
-        has_many: {\r
-        },\r
-      },\r
-      attributes: {\r
-        id: {\r
-          type: 'number',\r
-          primary_key: 1,\r
-          rules : {\r
-            number: true,\r
-          }\r
-        },\r
-        speech_balloon_id: {\r
-          type: 'number',\r
-          rules : {\r
-            number: true,\r
-          }\r
-        },\r
-        writing_format_id: {\r
-          type: 'number',\r
-          source: {\r
-            type: 'model',\r
-            model: 'writing_format',\r
-            method: 'enable_list',\r
-            caption: 'caption'\r
-          },\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-          }\r
-        },\r
-        content: {\r
-          type: 'text',\r
-          rules : {\r
-          }\r
-        },\r
-        font_size: {\r
-          type: 'float',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-            min: 0,\r
-          },\r
-          source: {\r
-            type: 'magic_number',\r
-            key: 'speech_font_size_items',\r
-          },\r
-        },\r
-        text_align: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-            range: [0, 3],\r
-          },\r
-          source: {\r
-            type: 'magic_number',\r
-            key: 'speech_text_align_items',\r
-          },\r
-        },\r
-        fore_color: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-            range: [0, 0xffffff],\r
-          }\r
-        },\r
-        x: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-          }\r
-        },\r
-        y: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-          }\r
-        },\r
-        width: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-            min: 1,\r
-          }\r
-        },\r
-        height: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-            min: 1,\r
-          }\r
-        },\r
-        quotes: {\r
-          type: 'text',\r
-          rules : {\r
-          }\r
-        },\r
-        settings: {\r
-          type: 'text',\r
-          rules : {\r
-          }\r
-        },\r
-        created_at: {\r
-          type: 'datetime',\r
-        },\r
-        updated_at: {\r
-          type: 'datetime',\r
-        }\r
-      }\r
-    },\r
-    GroundPicture: 'ground_picture',\r
-    ground_picture: {\r
-      class_name: 'GroundPicture',\r
-      table_name: 'ground_pictures',\r
-      associations: {\r
-        belongs_to: {\r
-          panel: {\r
-            id_column: 'panel_id'\r
-          }, \r
-        },\r
-        has_many: {\r
-        },\r
-      },\r
-      attributes: {\r
-        id: {\r
-          type: 'number',\r
-          primary_key: 1,\r
-          rules : {\r
-            number: true,\r
-          }\r
-        },\r
-        panel_id: {\r
-          type: 'number',\r
-          rules : {\r
-            number: true,\r
-          }\r
-        },\r
-        picture_id: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-          }\r
-        },\r
-        caption: {\r
-          type: 'text',\r
-          rules : {\r
-          }\r
-        },\r
-        repeat: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-            range: [0, 3],\r
-          },\r
-          source: {\r
-            type: 'magic_number',\r
-            key: 'ground_picture_repeat_items',\r
-          },\r
-        },\r
-        x: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-          }\r
-        },\r
-        y: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-          }\r
-        },\r
-        z: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-            min: 1,\r
-          }\r
-        },\r
-        t: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-            min: 0,\r
-          }\r
-        },\r
-        created_at: {\r
-          type: 'datetime',\r
-        },\r
-        updated_at: {\r
-          type: 'datetime',\r
-        }\r
-      }\r
-    },\r
-    GroundColor: 'ground_color',\r
-    ground_color: {\r
-      class_name: 'GroundColor',\r
-      table_name: 'ground_colors',\r
-      associations: {\r
-        belongs_to: {\r
-          panel: {\r
-            id_column: 'panel_id'\r
-          }, \r
-        },\r
-        has_many: {\r
-        },\r
-      },\r
-      attributes: {\r
-        id: {\r
-          type: 'number',\r
-          primary_key: 1,\r
-          rules : {\r
-            number: true,\r
-          }\r
-        },\r
-        panel_id: {\r
-          type: 'number',\r
-          rules : {\r
-            number: true,\r
-          }\r
-        },\r
-        caption: {\r
-          type: 'text',\r
-          rules : {\r
-          }\r
-        },\r
-        code: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-            range: [0, 0xffffff],\r
-          }\r
-        },\r
-        orientation: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-            range: [0, 1],\r
-          },\r
-          source: {\r
-            type: 'magic_number',\r
-            key: 'ground_color_orientation_items',\r
-          },\r
-        },\r
-        xy: {\r
-          type: 'number',\r
-          rules : {\r
-            number: true,\r
-          }\r
-        },\r
-        wh: {\r
-          type: 'number',\r
-          rules : {\r
-            number: true,\r
-          }\r
-        },\r
-        z: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-            min: 1,\r
-          }\r
-        },\r
-        t: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-            min: 0,\r
-          }\r
-        },\r
-        created_at: {\r
-          type: 'datetime',\r
-        },\r
-        updated_at: {\r
-          type: 'datetime',\r
-        }\r
-      }\r
-    },\r
-    OriginalPicture: 'original_picture',\r
-    original_picture: {\r
-      class_name: 'OriginalPicture',\r
-      table_name: 'original_pictures',\r
-      associations: {\r
-        belongs_to: {\r
-          artist: {\r
-            id_column: 'artist_id'\r
-          }, \r
-        },\r
-        has_many: {\r
-          pictures: {\r
-            foreign_key: 'original_picture_id',\r
-            list_method: 'list_by_original_picture',\r
-          }, \r
-        },\r
-        has_one: {\r
-          resource_picture: {\r
-            foreign_key: 'original_picture_id',\r
-            list_method: 'list_by_original_picture',\r
-          }, \r
-        },\r
-      },\r
-      attributes: {\r
-        id: {\r
-          type: 'number',\r
-          primary_key: 1,\r
-          rules : {\r
-            number: true,\r
-          }\r
-        },\r
-        ext: {\r
-          type: 'text',\r
-          rules : {\r
-            required: true,\r
-          }\r
-        },\r
-        width: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-          }\r
-        },\r
-        height: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-          }\r
-        },\r
-        filesize: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-          }\r
-        },\r
-        artist_id: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-          }\r
-        },\r
-        md5: {\r
-          type: 'text',\r
-          rules : {\r
-            required: true,\r
-            required: true,\r
-          }\r
-        },\r
-        uploaded_at: {\r
-          type: 'datetime',\r
-        },\r
-        published_at: {\r
-          type: 'datetime',\r
-        },\r
-        stopped_at: {\r
-          type: 'datetime',\r
-        },\r
-        created_at: {\r
-          type: 'datetime',\r
-        },\r
-        updated_at: {\r
-          type: 'datetime',\r
-        }\r
-      },\r
-    },\r
-    Picture: 'picture',\r
-    picture: {\r
-      class_name: 'Picture',\r
-      table_name: 'pictures',\r
-      associations: {\r
-        belongs_to: {\r
-          license: {\r
-            id_column: 'license_id'\r
-          }, \r
-          artist: {\r
-            id_column: 'artist_id'\r
-          }, \r
-        },\r
-        has_many: {\r
-        },\r
-        has_one: {\r
-        },\r
-      },\r
-      attributes: {\r
-        id: {\r
-          type: 'number',\r
-          primary_key: 1,\r
-          rules : {\r
-            number: true,\r
-          }\r
-        },\r
-        original_picture_id: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-          }\r
-        },\r
-        revision: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-          }\r
-        },\r
-        ext: {\r
-          type: 'text',\r
-          rules : {\r
-            required: true,\r
-          }\r
-        },\r
-        width: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-          }\r
-        },\r
-        height: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-          }\r
-        },\r
-        filesize: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-          }\r
-        },\r
-        artist_id: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-          }\r
-        },\r
-        license_id: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-          }\r
-        },\r
-        md5: {\r
-          type: 'text',\r
-          rules : {\r
-            required: true,\r
-          }\r
-        },\r
-        artist_name: {\r
-          type: 'text',\r
-          rules : {\r
-            required: true,\r
-          }\r
-        },\r
-        credit: {\r
-          type: 'text',\r
-          rules : {\r
-          }\r
-        },\r
-        settings: {\r
-          type: 'text',\r
-          rules : {\r
-          }\r
-        },\r
-        classname: {\r
-          type: 'text',\r
-          rules : {\r
-            required: true,\r
-          }\r
-        },\r
-        created_at: {\r
-          type: 'datetime',\r
-        },\r
-        updated_at: {\r
-          type: 'datetime',\r
-        }\r
-      }\r
-    },\r
-    ResourcePicture: 'resource_picture',\r
-    resource_picture: {\r
-      class_name: 'ResourcePicture',\r
-      table_name: 'resource_pictures',\r
-      associations: {\r
-        belongs_to: {\r
-          license: {\r
-            id_column: 'license_id'\r
-          }, \r
-          artist: {\r
-            id_column: 'artist_id'\r
-          }, \r
-        },\r
-        has_many: {\r
-        },\r
-        has_one: {\r
-        },\r
-      },\r
-      attributes: {\r
-        id: {\r
-          type: 'number',\r
-          primary_key: 1,\r
-          rules : {\r
-            number: true,\r
-          }\r
-        },\r
-        original_picture_id: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-          }\r
-        },\r
-        revision: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-          }\r
-        },\r
-        ext: {\r
-          type: 'text',\r
-          rules : {\r
-            required: true,\r
-          }\r
-        },\r
-        width: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-          }\r
-        },\r
-        height: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-          }\r
-        },\r
-        filesize: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-          }\r
-        },\r
-        artist_id: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-          }\r
-        },\r
-        license_id: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-          }\r
-        },\r
-        md5: {\r
-          type: 'text',\r
-          rules : {\r
-            required: true,\r
-          }\r
-        },\r
-        artist_name: {\r
-          type: 'text',\r
-          rules : {\r
-            required: true,\r
-          }\r
-        },\r
-        credit: {\r
-          type: 'text',\r
-          rules : {\r
-          }\r
-        },\r
-        settings: {\r
-          type: 'text',\r
-          rules : {\r
-          }\r
-        },\r
-        picture_id: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-          }\r
-        },\r
-        classname: {\r
-          type: 'text',\r
-          rules : {\r
-            required: true,\r
-          }\r
-        },\r
-        created_at: {\r
-          type: 'datetime',\r
-        },\r
-        updated_at: {\r
-          type: 'datetime',\r
-        }\r
-      }\r
-    },\r
-    SpeechBalloonTemplate: 'speech_balloon_template',\r
-    speech_balloon_template: {\r
-      class_name: 'SpeechBalloonTemplate',\r
-      table_name: 'speech_balloon_templates',\r
-      associations: {\r
-        belongs_to: {\r
-          system_picture: {\r
-            id_column: 'system_picture_id'\r
-          }, \r
-        },\r
-        has_many: {\r
-          speech_balloons: {\r
-            foreign_key: 'speech_balloon_template_id',\r
-            list_method: 'list_by_speech_balloon_template',\r
-          }, \r
-          panels: {\r
-            through: 'speech_balloons',\r
-            foreign_key: 'speech_balloon_template_id',\r
-            list_method: 'list_by_speech_balloon_template',\r
-          }, \r
-        },\r
-        has_one: {\r
-        },\r
-      },\r
-      attributes: {\r
-        id: {\r
-          type: 'number',\r
-          primary_key: 1,\r
-          rules : {\r
-            number: true,\r
-          }\r
-        },\r
-        name: {\r
-          type: 'text',\r
-          rules : {\r
-            required: true,\r
-          }\r
-        },\r
-        classname: {\r
-          type: 'text',\r
-          rules : {\r
-            required: true,\r
-          }\r
-        },\r
-        caption: {\r
-          type: 'text',\r
-          rules : {\r
-            required: true,\r
-          }\r
-        },\r
-        t: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-            min: 0,\r
-          }\r
-        },\r
-        system_picture_id: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-          }\r
-        },\r
-        settings: {\r
-          type: 'text',\r
-          rules : {\r
-            required: true,\r
-          }\r
-        },\r
-        created_at: {\r
-          type: 'datetime',\r
-        },\r
-        updated_at: {\r
-          type: 'datetime',\r
-        }\r
-      },\r
-      select: {\r
-        method: 'enable_list',\r
-        caption: {\r
-          type: 'column',\r
-          name: 'caption',\r
-        },\r
-      },\r
-    },\r
-    WritingFormat: 'writing_format',\r
-    writing_format: {\r
-      class_name: 'WritingFormat',\r
-      table_name: 'writing_formats',\r
-      associations: {\r
-        belongs_to: {\r
-          system_picture: {\r
-            id_column: 'system_picture_id'\r
-          }, \r
-        },\r
-        has_many: {\r
-          speeches: {\r
-            foreign_key: 'writing_format_id',\r
-            list_method: 'list_by_writing_format',\r
-          }, \r
-        },\r
-        has_one: {\r
-        },\r
-      },\r
-      attributes: {\r
-        id: {\r
-          type: 'number',\r
-          primary_key: 1,\r
-          rules : {\r
-            number: true,\r
-          }\r
-        },\r
-        name: {\r
-          type: 'text',\r
-          rules : {\r
-            required: true,\r
-          }\r
-        },\r
-        classname: {\r
-          type: 'text',\r
-          rules : {\r
-            required: true,\r
-          }\r
-        },\r
-        caption: {\r
-          type: 'text',\r
-          rules : {\r
-            required: true,\r
-          }\r
-        },\r
-        system_picture_id: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-          }\r
-        },\r
-        settings: {\r
-          type: 'text',\r
-          rules : {\r
-            required: true,\r
-          }\r
-        },\r
-        created_at: {\r
-          type: 'datetime',\r
-        },\r
-        updated_at: {\r
-          type: 'datetime',\r
-        }\r
-      },\r
-      select: {\r
-        method: 'enable_list',\r
-        caption: {\r
-          type: 'column',\r
-          name: 'caption',\r
-        },\r
-      },\r
-    },\r
-    LicenseGroup: 'license_group',\r
-    license_group: {\r
-      class_name: 'LicenseGroup',\r
-      table_name: 'license_groups',\r
-      associations: {\r
-        belongs_to: {\r
-        },\r
-        has_many: {\r
-          licenses: {\r
-            foreign_key: 'license_group_id',\r
-            list_method: 'list_by_license_group',\r
-          }, \r
-        },\r
-        has_one: {\r
-        },\r
-      },\r
-      attributes: {\r
-        id: {\r
-          type: 'number',\r
-          primary_key: 1,\r
-          rules : {\r
-            number: true,\r
-          }\r
-        },\r
-        name: {\r
-          type: 'text',\r
-          rules : {\r
-            required: true,\r
-          }\r
-        },\r
-        classname: {\r
-          type: 'text',\r
-          rules : {\r
-            required: true,\r
-          }\r
-        },\r
-        caption: {\r
-          type: 'text',\r
-          rules : {\r
-            required: true,\r
-          }\r
-        },\r
-        url: {\r
-          type: 'text',\r
-          rules : {\r
-            required: true,\r
-          }\r
-        },\r
-        created_at: {\r
-          type: 'datetime',\r
-        },\r
-        updated_at: {\r
-          type: 'datetime',\r
-        }\r
-      },\r
-      select: {\r
-        method: 'list',\r
-        caption: {\r
-          type: 'column',\r
-          name: 'caption',\r
-        },\r
-      },\r
-    },\r
-    License: 'license',\r
-    license: {\r
-      class_name: 'License',\r
-      table_name: 'licenses',\r
-      associations: {\r
-        belongs_to: {\r
-          license_group: {\r
-            id_column: 'license_group_id'\r
-          }, \r
-          system_picture: {\r
-            id_column: 'system_picture_id'\r
-          }, \r
-        },\r
-        has_many: {\r
-          resource_pictures: {\r
-            foreign_key: 'license_id',\r
-            list_method: 'list_by_license',\r
-          }, \r
-        },\r
-        has_one: {\r
-        },\r
-      },\r
-      attributes: {\r
-        id: {\r
-          type: 'number',\r
-          primary_key: 1,\r
-          rules : {\r
-            number: true,\r
-          }\r
-        },\r
-        license_group_id: {\r
-          type: 'number',\r
-          rules : {\r
-            number: true,\r
-          }\r
-        },\r
-        name: {\r
-          type: 'text',\r
-          rules : {\r
-            required: true,\r
-          }\r
-        },\r
-        caption: {\r
-          type: 'text',\r
-          rules : {\r
-            required: true,\r
-          }\r
-        },\r
-        system_picture_id: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-          }\r
-        },\r
-        url: {\r
-          type: 'text',\r
-          rules : {\r
-            required: true,\r
-          }\r
-        },\r
-        settings: {\r
-          type: 'text',\r
-          rules : {\r
-          }\r
-        },\r
-        credit_pictures: {\r
-          type: 'text',\r
-          rules : {\r
-          }\r
-        },\r
-        created_at: {\r
-          type: 'datetime',\r
-        },\r
-        updated_at: {\r
-          type: 'datetime',\r
-        }\r
-      }\r
-    },\r
-    Author: 'author',\r
-    author: {\r
-      class_name: 'Author',\r
-      table_name: 'authors',\r
-      associations: {\r
-        belongs_to: {\r
-        },\r
-        has_many: {\r
-          scrolls: {\r
-            foreign_key: 'author_id',\r
-            list_method: 'list_by_author',\r
-          }, \r
-          comics: {\r
-            foreign_key: 'author_id',\r
-            list_method: 'list_by_author',\r
-          }, \r
-          stories: {\r
-            foreign_key: 'author_id',\r
-            list_method: 'list_by_author',\r
-          }, \r
-          sheets: {\r
-            foreign_key: 'author_id',\r
-            list_method: 'list_by_author',\r
-          }, \r
-          panels: {\r
-            foreign_key: 'author_id',\r
-            list_method: 'list_by_author',\r
-          }, \r
-        },\r
-        has_one: {\r
-        },\r
-      },\r
-      attributes: {\r
-        id: {\r
-          type: 'number',\r
-          primary_key: 1,\r
-          rules : {\r
-            number: true,\r
-          }\r
-        },\r
-        name: {\r
-          type: 'text',\r
-          rules : {\r
-            required: true,\r
-          }\r
-        },\r
-        user_id: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-          }\r
-        },\r
-        created_at: {\r
-          type: 'datetime',\r
-        },\r
-        updated_at: {\r
-          type: 'datetime',\r
-        }\r
-      },\r
-      select: {\r
-        method: 'list',\r
-        caption: {\r
-          type: 'column',\r
-          name: 'name',\r
-        },\r
-      },\r
-    },\r
-    Artist: 'artist',\r
-    artist: {\r
-      class_name: 'Artist',\r
-      table_name: 'artists',\r
-      associations: {\r
-        belongs_to: {\r
-        },\r
-        has_many: {\r
-          resource_pictures: {\r
-            foreign_key: 'artist_id',\r
-            list_method: 'list_by_artist',\r
-          }, \r
-        },\r
-        has_one: {\r
-        },\r
-      },\r
-      attributes: {\r
-        id: {\r
-          type: 'number',\r
-          primary_key: 1,\r
-          rules : {\r
-            number: true,\r
-          }\r
-        },\r
-        name: {\r
-          type: 'text',\r
-          rules : {\r
-            required: true,\r
-          }\r
-        },\r
-        author_id: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-          }\r
-        },\r
-        created_at: {\r
-          type: 'datetime',\r
-        },\r
-        updated_at: {\r
-          type: 'datetime',\r
-        }\r
-      },\r
-      select: {\r
-        method: 'list',\r
-        caption: {\r
-          type: 'column',\r
-          name: 'name',\r
-        },\r
-      },\r
-    },\r
-    SystemPicture: 'system_picture',\r
-    system_picture: {\r
-      class_name: 'SystemPicture',\r
-      table_name: 'system_pictures',\r
-      associations: {\r
-        belongs_to: {\r
-        },\r
-        has_many: {\r
-        },\r
-        has_one: {\r
-        },\r
-      },\r
-      attributes: {\r
-        id: {\r
-          type: 'number',\r
-          primary_key: 1,\r
-          rules : {\r
-            number: true,\r
-          }\r
-        },\r
-        ext: {\r
-          type: 'text',\r
-          rules : {\r
-            required: true,\r
-          }\r
-        },\r
-        width: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-          }\r
-        },\r
-        height: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-          }\r
-        },\r
-        filesize: {\r
-          type: 'number',\r
-          rules : {\r
-            required: true,\r
-            number: true,\r
-          }\r
-        },\r
-        md5: {\r
-          type: 'text',\r
-          rules : {\r
-            required: true,\r
-            required: true,\r
-          }\r
-        },\r
-        created_at: {\r
-          type: 'datetime',\r
-        },\r
-        updated_at: {\r
-          type: 'datetime',\r
-        }\r
-      }\r
-    },\r
-  },\r
-}\r
-\r
index 464975c..070b83f 100644 (file)
@@ -2,10 +2,22 @@ $ ->
   confirm_confirm_confirm = () ->\r
     confirm(  )\r
   editor = window.PettanrEditor\r
-  _.extend(window.configurations, window.configurations2)\r
-  j = JSON.stringify(window.configurations, undefined, 2)\r
+  configurations =  {\r
+    controllers: window.controllers,\r
+    models: window.models,\r
+    lists: window.lists,\r
+    system_resources: window.system_resources,\r
+    magic_numbers: window.magic_numbers,\r
+    select_items: window.select_items,\r
+    locals: {\r
+      profilers: window.profilers,\r
+      filers: window.filers,\r
+      elements: window.elements,\r
+      forms: window.forms,\r
+    }\r
+  }\r
+  j = JSON.stringify(configurations, undefined, 2)\r
   $('#pettanr-configurations').val(j)\r
-  configurations =  window.configurations\r
   WritingFormat = window.PettanrWritingFormat\r
   WritingFormat.load($('#writing_formats'))\r
   SpeechBalloonTemplate = window.PettanrSpeechBalloonTemplate\r
index 6d495b1..906f5b4 100644 (file)
@@ -125,6 +125,24 @@ class ApplicationController < ActionController::Base
     end
   end
   
+  def my_list params
+    controller_name = params[:controller]
+    action_name = params[:action]
+    controller = Pettanr::Application::manifest.controller_managers[controller_name]
+    @action = controller.open(action_name, params, @operators)
+    @items = @action.items 
+
+    respond_to do |format|
+      format.html {
+        @filer = @action.filer
+        render :template => 'system/filer', :locals => {
+          :filer => @filer
+        }
+      }
+      format.json { render json: @items.to_json(Scroll.list_json_opt) }
+    end
+  end
+  
   def format_filer format
     format.html {
       @paginate = @@model.list_paginate(@page, @page_size)
index 60cf49e..9176367 100644 (file)
@@ -8,7 +8,6 @@ class ArtistsController < ApplicationController
     before_filter :authenticate_user, :only => [:new, :create, :edit, :update, :destroy]
     before_filter :authenticate_author, :only => [:new, :create, :edit, :update, :destroy]
   end
-  before_filter :authenticate_admin!, :only => [:list, :browse]
 
   def self.model
     Artist
@@ -50,30 +49,12 @@ class ArtistsController < ApplicationController
     end
   end
   
-  def list
-    @artists = Artist.all
-
-    respond_to do |format|
-      format.html { render layout: 'system' }
-      format.json { render json: @artists }
-    end
-  end
-
-  def browse
-    @artist = Artist.find(params[:id])
-
-    respond_to do |format|
-      format.html { render layout: 'system' }
-      format.json { render json: @artist }
-    end
-  end
-
   def new
     @artist = Artist.new
     @artist.supply_default 
 
     respond_to do |format|
-      format.html # new.html.erb
+      format.html
       format.js
       format.json { render json: @artist.to_json(Artist.show_json_opt) }
     end
index 886b714..eafdb52 100644 (file)
@@ -8,7 +8,6 @@ class AuthorsController < ApplicationController
     before_filter :authenticate_user, :only => [:new, :create, :edit, :update]
     before_filter :authenticate_author, :only => [:edit, :update]
   end
-  before_filter :authenticate_admin!, :only => [:list, :browse]
 
   def self.model
     Author
@@ -265,28 +264,12 @@ class AuthorsController < ApplicationController
     end
   end
   
-  def list
-    @authors = Author.all
-
-    respond_to do |format|
-      format.html { render layout: 'system' }
-    end
-  end
-
-  def browse
-    @au = Author.find(params[:id])
-
-    respond_to do |format|
-      format.html { render layout: 'system' }
-    end
-  end
-  
   def new
     @author = Author.new
     @author.supply_default 
 
     respond_to do |format|
-      format.html # new.html.erb
+      format.html
       format.js
       format.json { render json: @au.to_json(Author.show_json_opt) }
     end
index c3ce66a..f8f0a04 100644 (file)
@@ -8,7 +8,6 @@ class ComicsController < ApplicationController
     before_filter :authenticate_user, :only => [:new, :create, :edit, :update, :destroy]
     before_filter :authenticate_author, :only => [:new, :create, :edit, :update, :destroy]
   end
-  before_filter :authenticate_admin!, :only => [:list, :browse]
 
   def self.model
     Comic
@@ -38,36 +37,18 @@ class ComicsController < ApplicationController
     end
   end
   
-  def list
-    @comics = Comic.all
-
-    respond_to do |format|
-      format.html { render layout: 'system' }# index.html.erb
-      format.json { render json: @comics }
-    end
-  end
-
-  def browse
-    @comic = Comic.find(params[:id])
-
-    respond_to do |format|
-      format.html { render layout: 'system' } # show.html.erb
-      format.json { render json: @comic }
-    end
-  end
-  
   def new
     @comic = Comic.new
     @comic.supply_default
     respond_to do |format|
-      format.html # new.html.erb
+      format.html
       format.js
       format.json { render json: @comic.to_json(Comic.show_json_opt) }
     end
   end
 
   def edit
-    @comic = Comic.edit(params[:id], @author)
+    @comic = Comic.edit(params[:id], @operators)
     respond_to do |format|
       format.html 
       format.js
@@ -111,7 +92,7 @@ class ComicsController < ApplicationController
   end
 
   def destroy
-    @comic = Comic.edit(params[:id], @author)
+    @comic = Comic.edit(params[:id], @operators)
     respond_to do |format|
       if @comic.destroy_with_story
         flash[:notice] = I18n.t('flash.notice.destroyed', :model => Comic.model_name.human)
index da4a45f..582d34b 100644 (file)
@@ -29,8 +29,8 @@ class GroundColorsController < ApplicationController
   end
   
   def new
-    raise Pettanr::NotWork unless @author.working_panel
-    @panel = Panel.edit(@author.working_panel, @author)
+    raise Pettanr::NotWork unless @operators.author.working_panel
+    @panel = Panel.edit(@operators.author.working_panel, @operators)
     @ground_color = GroundColor.new :panel_id => @panel.id, :code => params[:code].to_i
     @ground_color.supply_default
 
@@ -41,8 +41,8 @@ class GroundColorsController < ApplicationController
   end
 
   def edit
-    @ground_color = GroundColor.show(params[:id], @author)
-    @panel = Panel.edit(@ground_color.panel.id, @author)
+    @ground_color = GroundColor.show(params[:id], @operators)
+    @panel = Panel.edit(@ground_color.panel.id, @operators)
     
     respond_to do |format|
       format.html
@@ -50,8 +50,8 @@ class GroundColorsController < ApplicationController
   end
 
   def create
-    raise Pettanr::NotWork unless @author.working_panel
-    @panel = Panel.edit(@author.working_panel, @author)
+    raise Pettanr::NotWork unless @operators.author.working_panel
+    @panel = Panel.edit(@operators.author.working_panel, @operators)
     
     @ground_color = GroundColor.new 
     @ground_color.attributes = params[:ground_color]
@@ -59,7 +59,7 @@ class GroundColorsController < ApplicationController
     
     respond_to do |format|
       if @ground_color.valid?
-        if @ground_color.store @author
+        if @ground_color.store @operators
           flash[:notice] = I18n.t('flash.notice.created', :model => Panel.model_name.human)
           format.html { redirect_to @panel }
           format.json { render json: @panel.panel_elements_as_json, status: :created, location: @panel }
@@ -77,13 +77,13 @@ class GroundColorsController < ApplicationController
   end
 
   def update
-    @ground_color = GroundColor.show(params[:id], @author)
+    @ground_color = GroundColor.show(params[:id], @operators)
     @ground_color.attributes = params[:ground_color]
-    @panel = Panel.edit(@ground_color.panel.id, @author)
+    @panel = Panel.edit(@ground_color.panel.id, @operators)
     @ground_color.overwrite @panel.id
     
     respond_to do |format|
-      if @ground_color.store @author
+      if @ground_color.store @operators
         flash[:notice] = I18n.t('flash.notice.updated', :model => GroundColor.model_name.human)
         format.html { redirect_to @ground_color }
         format.json { head :ok }
@@ -96,11 +96,11 @@ class GroundColorsController < ApplicationController
   end
 
   def destroy
-    @ground_color = GroundColor.show(params[:id], @author)
-    @panel = Panel.edit(@ground_color.panel.id, @author)
+    @ground_color = GroundColor.show(params[:id], @operators)
+    @panel = Panel.edit(@ground_color.panel.id, @operators)
     
     respond_to do |format|
-      if @ground_color.remove @author
+      if @ground_color.remove @operators
         flash[:notice] = I18n.t('flash.notice.destroyed', :model => GroundColor.model_name.human)
         format.html { redirect_to @panel }
         format.json { head :ok }
index a4faa83..9a222d3 100644 (file)
@@ -29,10 +29,10 @@ class GroundPicturesController < ApplicationController
   end
   
   def new
-    raise Pettanr::NotWork unless @author.working_panel
-    @picture = Picture.show params[:picture_id], @author
+    raise Pettanr::NotWork unless @operators.author.working_panel
+    @picture = Picture.show params[:picture_id], @operators
     raise ActiveRecord::Forbidden unless @picture.enable?
-    @panel = Panel.edit(@author.working_panel, @author)
+    @panel = Panel.edit(@operators.author.working_panel, @operators)
     
     @ground_picture = GroundPicture.new :panel_id => @panel.id, :picture_id => @picture.id
     @ground_picture.supply_default
@@ -44,8 +44,8 @@ class GroundPicturesController < ApplicationController
   end
 
   def edit
-    @ground_picture = GroundPicture.show(params[:id], @author)
-    @panel = Panel.edit(@ground_picture.panel.id, @author)
+    @ground_picture = GroundPicture.show(params[:id], @operators)
+    @panel = Panel.edit(@ground_picture.panel.id, @operators)
     
     respond_to do |format|
       format.html
@@ -53,19 +53,19 @@ class GroundPicturesController < ApplicationController
   end
 
   def create
-    raise Pettanr::NotWork unless @author.working_panel
-    @panel = Panel.edit(@author.working_panel, @author)
+    raise Pettanr::NotWork unless @operators.author.working_panel
+    @panel = Panel.edit(@operators.author.working_panel, @operators)
     
     @ground_picture = GroundPicture.new
     @ground_picture.attributes = params[:ground_picture]
     @ground_picture.overwrite @panel.id
     
-    @picture = Picture.show @ground_picture.picture_id, @author
+    @picture = Picture.show @ground_picture.picture_id, @operators
     raise ActiveRecord::Forbidden unless @picture.enable?
     
     respond_to do |format|
       if @ground_picture.valid?
-        if @ground_picture.store @author
+        if @ground_picture.store @operators
           flash[:notice] = I18n.t('flash.notice.created', :model => Panel.model_name.human)
           format.html { redirect_to @panel }
           format.json { render json: @panel.panel_elements_as_json, status: :created, location: @panel }
@@ -83,16 +83,16 @@ class GroundPicturesController < ApplicationController
   end
 
   def update
-    @ground_picture = GroundPicture.show(params[:id], @author)
+    @ground_picture = GroundPicture.show(params[:id], @operators)
     @ground_picture.attributes = params[:ground_picture]
-    @panel = Panel.edit(@ground_picture.panel.id, @author)
+    @panel = Panel.edit(@ground_picture.panel.id, @operators)
     @ground_picture.overwrite @panel.id
     
-    @picture = Picture.show @ground_picture.picture_id, @author
+    @picture = Picture.show @ground_picture.picture_id, @operators
     raise ActiveRecord::Forbidden unless @picture.enable?
     
     respond_to do |format|
-      if @ground_picture.store @author
+      if @ground_picture.store @operators
         flash[:notice] = I18n.t('flash.notice.updated', :model => GroundPicture.model_name.human)
         format.html { redirect_to @ground_picture }
         format.json { head :ok }
@@ -105,11 +105,11 @@ class GroundPicturesController < ApplicationController
   end
 
   def destroy
-    @ground_picture = GroundPicture.show(params[:id], @author)
-    @panel = Panel.edit(@ground_picture.panel.id, @author)
+    @ground_picture = GroundPicture.show(params[:id], @operators)
+    @panel = Panel.edit(@ground_picture.panel.id, @operators)
     
     respond_to do |format|
-      if @ground_picture.remove @author
+      if @ground_picture.remove @operators
         flash[:notice] = I18n.t('flash.notice.destroyed', :model => GroundPicture.model_name.human)
         format.html { redirect_to @panel }
         format.json { head :ok }
index 5ee2052..201ae89 100644 (file)
@@ -41,226 +41,55 @@ class HomeController < ApplicationController
   end
   
   def scrolls
-    model = Scroll
-    controller_name = params[:controller]
-    action_name = params[:action]
-    controller = Pettanr::Application::manifest.controller_managers[controller_name]
-    @action = controller.open(action_name, params, @operators)
-    @items = @action.items 
-
-    respond_to do |format|
-      format.html {
-        @filer = @action.filer
-        render :template => 'system/filer', :locals => {
-          :filer => @filer
-        }
-      }
-      format.json { render json: @items.to_json(Scroll.list_json_opt) }
-    end
+    my_list params
   end
   
   def scroll_panels
-    @page = Author.page params[:page]
-    @page_size = Author.scroll_panel_page_size params[:page_size]
-    @scroll_panels = ScrollPanel.mylist(@author, @page, @page_size)
-
-    respond_to do |format|
-      format.html {
-        @paginate = ScrollPanel.mylist_paginate(@author, @page, @page_size)
-        render :template => 'system/filer', :locals => {
-          :items => @scroll_panels, :model => ScrollPanel, 
-          :roles => [@user, @admin], :pager => @paginate
-        }
-      }
-      format.json { render json: @scroll_panels.to_json(ScrollPanel.list_json_opt) }
-    end
+    my_list params
   end
   
   def comics
-    @page = Author.page params[:page]
-    @page_size = Author.comic_page_size params[:page_size]
-    @comics = Comic.mylist(@author, @page, @page_size)
-
-    respond_to do |format|
-      format.html {
-        @paginate = Comic.mylist_paginate(@author, @page, @page_size)
-        render :template => 'system/filer', :locals => {
-          :items => @comics, :model => Comic, 
-          :roles => [@user, @admin], :pager => @paginate
-        }
-      }
-      format.json { render json: @comics.to_json(Comic.list_json_opt) }
-    end
+    my_list params
   end
   
   def stories
-    @page = Author.page params[:page]
-    @page_size = Author.story_page_size params[:page_size]
-    @stories = Story.mylist(@author, @page, @page_size)
-
-    respond_to do |format|
-      format.html {
-        @paginate = Story.mylist_paginate(@author, @page, @page_size)
-        render :template => 'system/filer', :locals => {
-          :items => @stories, :model => Story, 
-          :roles => [@user, @admin], :pager => @paginate
-        }
-      }
-      format.json { render json: @stories.to_json(Story.list_json_opt) }
-    end
+    my_list params
   end
   
   def story_sheets
-    @page = Author.page params[:page]
-    @page_size = Author.story_sheet_page_size params[:page_size]
-    @story_sheets = StorySheet.mylist(@author, @page, @page_size)
-
-    respond_to do |format|
-      format.html {
-        @paginate = StorySheet.mylist_paginate(@author, @page, @page_size)
-        render :template => 'system/filer', :locals => {
-          :items => @story_sheets, :model => StorySheet, 
-          :roles => [@user, @admin], :pager => @paginate
-        }
-      }
-      format.json { render json: @story_sheets.to_json(StorySheet.list_json_opt) }
-    end
+    my_list params
   end
   
   def sheets
-    @page = Author.page params[:page]
-    @page_size = Author.sheet_page_size params[:page_size]
-    @sheets = Sheet.mylist(@author, @page, @page_size)
-
-    respond_to do |format|
-      format.html {
-        @paginate = Sheet.mylist_paginate(@author, @page, @page_size)
-        render :template => 'system/filer', :locals => {
-          :items => @sheets, :model => Sheet, 
-          :roles => [@user, @admin], :pager => @paginate
-        }
-      }
-      format.json { render json: @sheets.to_json(Sheet.list_json_opt) }
-    end
+    my_list params
   end
   
   def sheet_panels
-    @page = Author.page params[:page]
-    @page_size = Author.sheet_panel_page_size params[:page_size]
-    @sheet_panels = SheetPanel.mylist(@author, @page, @page_size)
-
-    respond_to do |format|
-      format.html {
-        @paginate = SheetPanel.mylist_paginate(@author, @page, @page_size)
-        render :template => 'system/filer', :locals => {
-          :items => @sheet_panels, :model => SheetPanel, 
-          :roles => [@user, @admin], :pager => @paginate
-        }
-      }
-      format.json { render json: @sheet_panels.to_json(SheetPanel.list_json_opt) }
-    end
+    my_list params
   end
   
   def panels
-    @page = Author.page params[:page]
-    @page_size = Author.panel_page_size params[:page_size]
-    @panels = Panel.mylist(@author, @page, @page_size)
-
-    respond_to do |format|
-      format.html {
-        @paginate = Panel.mylist_paginate(@author, @page, @page_size)
-        render :template => 'system/filer', :locals => {
-          :items => @panels, :model => Panel, 
-          :roles => [@user, @admin], :pager => @paginate
-        }
-      }
-      format.json { render text: Panel.list_as_json_text(@panels) }
-    end
+    my_list params
   end
   
   def panel_pictures
-    @page = Author.page params[:page]
-    @page_size = Author.panel_picture_page_size params[:page_size]
-    @panel_pictures = PanelPicture.mylist(@author, @page, @page_size)
-
-    respond_to do |format|
-      format.html {
-        @paginate = PanelPicture.mylist_paginate(@author, @page, @page_size)
-        render :template => 'system/filer', :locals => {
-          :items => @panel_pictures, :model => PanelPicture, 
-          :roles => [@user, @admin], :pager => @paginate
-        }
-      }
-      format.json { render json: @panel_pictures.to_json(PanelPicture.list_json_opt) }
-    end
+    my_list params
   end
   
   def speech_balloons
-    @page = Author.page params[:page]
-    @page_size = Author.speech_balloon_page_size params[:page_size]
-    @speech_balloons = SpeechBalloon.mylist(@author, @page, @page_size)
-
-    respond_to do |format|
-      format.html {
-        @paginate = SpeechBalloon.mylist_paginate(@author, @page, @page_size)
-        render :template => 'system/filer', :locals => {
-          :items => @speech_balloons, :model => SpeechBalloon, 
-          :roles => [@user, @admin], :pager => @paginate
-        }
-      }
-      format.json { render json: @speech_balloons.to_json(SpeechBalloon.list_json_opt) }
-    end
+    my_list params
   end
   
   def ground_pictures
-    @page = Author.page params[:page]
-    @page_size = Author.ground_picture_page_size params[:page_size]
-    @ground_pictures = GroundPicture.mylist(@author, @page, @page_size)
-
-    respond_to do |format|
-      format.html {
-        @paginate = GroundPicture.mylist_paginate(@author, @page, @page_size)
-        render :template => 'system/filer', :locals => {
-          :items => @ground_pictures, :model => GroundPicture, 
-          :roles => [@user, @admin], :pager => @paginate
-        }
-      }
-      format.json { render json: @ground_pictures.to_json(GroundPicture.list_json_opt) }
-    end
+    my_list params
   end
   
   def ground_colors
-    @page = Author.page params[:page]
-    @page_size = Author.ground_color_page_size params[:page_size]
-    @ground_colors = GroundColor.mylist(@author, @page, @page_size)
-
-    respond_to do |format|
-      format.html {
-        @paginate = GroundColor.mylist_paginate(@author, @page, @page_size)
-        render :template => 'system/filer', :locals => {
-          :items => @ground_colors, :model => GroundColor, 
-          :roles => [@user, @admin], :pager => @paginate
-        }
-      }
-      format.json { render json: @ground_colors.to_json(GroundColor.list_json_opt) }
-    end
+    my_list params
   end
   
   def resource_pictures
-    @page = Author.page params[:page]
-    @page_size = Author.resource_picture_page_size params[:page_size]
-    @resource_pictures = ResourcePicture.mylist(@artist, @page, @page_size)
-
-    respond_to do |format|
-      format.html {
-        @paginate = ResourcePicture.mylist_paginate(@author, @page, @page_size)
-        render :template => 'system/filer', :locals => {
-          :items => @resource_pictures, :model => ResourcePicture, 
-          :roles => [@user, @admin], :pager => @paginate
-        }
-      }
-      format.json { render json: @resource_pictures.to_json(ResourcePicture.list_json_opt) }
-    end
+    my_list params
   end
   
 end
index a365198..6e7ead5 100644 (file)
@@ -1,15 +1,12 @@
 class LicensesController < ApplicationController
   layout 'test' if MagicNumber['test_layout']
-  before_filter :authenticate_admin!, :only => [:list, :browse]
 
-  @@model = License
+  def self.model
+    License
+  end
+  
   def index
-    set_filer
-
-    respond_to do |format|
-      format_filer format
-      format.json { render json: @items.to_json(@@model.list_json_opt) }
-    end
+    public_list
   end
 
   def show
@@ -32,21 +29,4 @@ class LicensesController < ApplicationController
     end
   end
   
-  def list
-    @licenses = License.all
-
-    respond_to do |format|
-      format.html { render layout: 'system' }
-      format.json { render json: @licenses }
-    end
-  end
-
-  def browse
-    @license = License.find(params[:id])
-
-    respond_to do |format|
-      format.html { render layout: 'system' }
-      format.json { render json: @license }
-    end
-  end
 end
index 51987a4..88428c2 100644 (file)
@@ -4,7 +4,6 @@ class OriginalPicturesController < ApplicationController
   before_filter :authenticate_reader, :only => [:show, :history]
   before_filter :authenticate_user, :only => [:index, :new, :edit, :create, :update, :destroy]
   before_filter :authenticate_artist, :only => [:index, :new, :edit, :create, :update, :destroy]
-  before_filter :authenticate_admin!, :only => [:list, :browse]
   
   def self.model
     OriginalPicture
@@ -34,46 +33,28 @@ class OriginalPicturesController < ApplicationController
   end
 
   def history
-    @original_picture = OriginalPicture.show(params[:id], [@artist, @admin])
+    @original_picture = OriginalPicture.show(params[:id], @operators)
     @history = @original_picture.history
     
     respond_to do |format|
-      format.html # index.html.erb
+      format.html
       format.json { render json: @history.to_json }
     end
   end
   
-  def list
-    @original_pictures = OriginalPicture.all
-
-    respond_to do |format|
-      format.html { render layout: 'system' }
-      format.json { render json: @original_pictures }
-    end
-  end
-
-  def browse
-    @original_picture = OriginalPicture.find(params[:id])
-
-    respond_to do |format|
-      format.html { render layout: 'system' }
-      format.json { render json: @original_picture }
-    end
-  end
-
   def new
     @original_picture = OriginalPicture.new
     @original_picture.supply_default
 
     respond_to do |format|
-      format.html # new.html.erb
+      format.html
       format.js
       format.json { render json: @original_picture.to_json(OriginalPicture.show_json_opt) }
     end
   end
 
   def edit
-    @original_picture = OriginalPicture.edit(params[:id], @artist)
+    @original_picture = OriginalPicture.edit(params[:id], @operators)
     respond_to do |format|
       format.html
       format.js
@@ -88,7 +69,7 @@ class OriginalPicturesController < ApplicationController
     end
     @original_picture = OriginalPicture.new
     @original_picture.supply_default
-    @original_picture.overwrite @artist
+    @original_picture.overwrite @operators
 
     respond_to do |format|
       if @original_picture.store(@imager)
@@ -109,8 +90,8 @@ class OriginalPicturesController < ApplicationController
     else
       nil
     end
-    @original_picture = OriginalPicture.edit(params[:id], @artist)
-    @original_picture.overwrite @artist
+    @original_picture = OriginalPicture.edit(params[:id], @operators)
+    @original_picture.overwrite @operators
 
     respond_to do |format|
       if @original_picture.store(@imager)
@@ -126,7 +107,7 @@ class OriginalPicturesController < ApplicationController
   end
 
   def destroy
-    @original_picture = OriginalPicture.edit(params[:id], @artist)
+    @original_picture = OriginalPicture.edit(params[:id], @operators)
     
     respond_to do |format|
       if @original_picture.destroy_with_resource_picture
index 1a23777..cf55a8f 100644 (file)
@@ -8,7 +8,6 @@ class PanelPicturesController < ApplicationController
     before_filter :authenticate_user, :only => [:new, :edit, :create, :update, :destroy]
     before_filter :authenticate_author, :only => [:new, :edit, :create, :update, :destroy]
   end
-  before_filter :authenticate_admin!, :only => [:list, :browse]
 
   def self.model
     PanelPicture
@@ -30,29 +29,11 @@ class PanelPicturesController < ApplicationController
     end
   end
 
-  def list
-    @panel_pictures = PanelPicture.all
-
-    respond_to do |format|
-      format.html { render layout: 'system' }
-      format.json { render json: @panel_pictures }
-    end
-  end
-
-  def browse
-    @panel_picture = PanelPicture.find(params[:id])
-
-    respond_to do |format|
-      format.html { render layout: 'system' }
-      format.json { render json: @panel_picture}
-    end
-  end
-
   def new
-    raise Pettanr::NotWork unless @author.working_panel
-    @picture = Picture.show params[:picture_id], @author
+    raise Pettanr::NotWork unless @operators.author.working_panel
+    @picture = Picture.show params[:picture_id], @operators
     raise ActiveRecord::Forbidden unless @picture.enable?
-    @panel = Panel.edit(@author.working_panel, @author)
+    @panel = Panel.edit(@operators.author.working_panel, @operators)
     
     @panel_picture = PanelPicture.new :panel_id => @panel.id, :picture_id => @picture.id
     @panel_picture.supply_default
@@ -64,8 +45,8 @@ class PanelPicturesController < ApplicationController
   end
 
   def edit
-    @panel_picture = PanelPicture.show(params[:id], @author)
-    @panel = Panel.edit(@panel_picture.panel.id, @author)
+    @panel_picture = PanelPicture.show(params[:id], @operators)
+    @panel = Panel.edit(@panel_picture.panel.id, @operators)
     
     respond_to do |format|
       format.html
@@ -74,18 +55,18 @@ class PanelPicturesController < ApplicationController
 
   def create
     raise Pettanr::NotWork unless @author.working_panel
-    @panel = Panel.edit(@author.working_panel, @author)
+    @panel = Panel.edit(@operators.author.working_panel, @operators)
     
     @panel_picture = PanelPicture.new 
     @panel_picture.attributes = params[:panel_picture]
     @panel_picture.overwrite @panel.id
     
-    @picture = Picture.show @panel_picture.picture_id, @author
+    @picture = Picture.show @panel_picture.picture_id, @operators
     raise ActiveRecord::Forbidden unless @picture.enable?
     
     respond_to do |format|
       if @panel_picture.valid?
-        if @panel_picture.store @author
+        if @panel_picture.store @operators
           flash[:notice] = I18n.t('flash.notice.created', :model => Panel.model_name.human)
           format.html { redirect_to @panel }
           format.json { render json: @panel.panel_elements_as_json, status: :created, location: @panel }
@@ -103,16 +84,16 @@ class PanelPicturesController < ApplicationController
   end
 
   def update
-    @panel_picture = PanelPicture.show(params[:id], @author)
+    @panel_picture = PanelPicture.show(params[:id], @operators)
     @panel_picture.attributes = params[:panel_picture]
-    @panel = Panel.edit(@panel_picture.panel.id, @author)
+    @panel = Panel.edit(@panel_picture.panel.id, @operators)
     @panel_picture.overwrite @panel.id
     
-    @picture = Picture.show @panel_picture.picture_id, @author
+    @picture = Picture.show @panel_picture.picture_id, @operators
     raise ActiveRecord::Forbidden unless @picture.enable?
     
     respond_to do |format|
-      if @panel_picture.store @author
+      if @panel_picture.store @operators
         flash[:notice] = I18n.t('flash.notice.updated', :model => PanelPicture.model_name.human)
         format.html { redirect_to @panel_picture }
         format.json { head :ok }
@@ -125,11 +106,11 @@ class PanelPicturesController < ApplicationController
   end
 
   def destroy
-    @panel_picture = PanelPicture.show(params[:id], @author)
-    @panel = Panel.edit(@panel_picture.panel.id, @author)
+    @panel_picture = PanelPicture.show(params[:id], @operators)
+    @panel = Panel.edit(@panel_picture.panel.id, @operators)
     
     respond_to do |format|
-      if @panel_picture.remove @author
+      if @panel_picture.remove @operators
         flash[:notice] = I18n.t('flash.notice.destroyed', :model => PanelPicture.model_name.human)
         format.html { redirect_to @panel }
         format.json { head :ok }
index fb76c25..76b3f06 100644 (file)
@@ -8,7 +8,6 @@ class PanelsController < ApplicationController
     before_filter :authenticate_user, :only => [:new, :edit, :create, :update, :destroy, :catch]
     before_filter :authenticate_author, :only => [:new, :edit, :create, :update, :destroy, :catch]
   end
-  before_filter :authenticate_admin!, :only => [:list, :browse]
   
   def self.model
     Panel
@@ -43,23 +42,6 @@ class PanelsController < ApplicationController
     end
   end
   
-  def list
-    @panels = Panel.all :order => 'updated_at'
-
-    respond_to do |format|
-      format.html { render layout: 'system' }
-      format.json { render json: @panels }
-    end
-  end
-
-  def browse
-    @panel = Panel.find(params[:id])
-
-    respond_to do |format|
-      format.html { render layout: 'system' }
-    end
-  end
-
   def new
     @panel = Panel.new
     @panel.supply_default
@@ -72,7 +54,7 @@ class PanelsController < ApplicationController
   end
 
   def edit
-    @panel = Panel.edit(params[:id], @author)
+    @panel = Panel.edit(params[:id], @operators)
     respond_to do |format|
       format.html
       format.js
@@ -88,7 +70,7 @@ class PanelsController < ApplicationController
     end
     @prm = params[:panel] || jsn
     respond_to do |format|
-      if @panel.store @prm, @author
+      if @panel.store @prm, @operators
         flash[:notice] = I18n.t('flash.notice.created', :model => Panel.model_name.human)
         format.html { redirect_to @panel }
         format.json { render json: @panel.panel_elements_as_json, status: :created, location: @panel }
@@ -100,14 +82,14 @@ class PanelsController < ApplicationController
   end
 
   def update
-    @panel = Panel.edit(params[:id], @author)
+    @panel = Panel.edit(params[:id], @operators)
     jsn = nil
     if params[:json]
       jsn = JSON.parse(params[:json])
     end
     @prm = params[:panel] || jsn
     respond_to do |format|
-      if @panel.store @prm, @author
+      if @panel.store @prm, @operators
         flash[:notice] = I18n.t('flash.notice.updated', :model => Panel.model_name.human)
         format.html { redirect_to @panel }
         format.json { head :ok }
@@ -119,7 +101,7 @@ class PanelsController < ApplicationController
   end
 
   def destroy
-    @panel = Panel.edit(params[:id], @author)
+    @panel = Panel.edit(params[:id], @operators)
     respond_to do |format|
       Panel.transaction do
         if @panel.destroy_with_elements
@@ -136,11 +118,11 @@ class PanelsController < ApplicationController
   end
   
   def catch
-    @panel = Panel.edit(params[:id], @author)
+    @panel = Panel.edit(params[:id], @operators)
 
     respond_to do |format|
-      @author.working_panel_id = @panel.id
-      if @author.save
+      @operators.author.working_panel_id = @panel.id
+      if @operators.author.save
         format.html { redirect_to @panel }
       else
       end
index 959f171..5f4d81e 100644 (file)
@@ -8,7 +8,6 @@ class PicturesController < ApplicationController
     before_filter :authenticate_resource_reader, :only => [:show, :credit, :search]
     before_filter :authenticate_author, :only => []
   end
-  before_filter :authenticate_admin!, :only => [:list, :browse]
   
   def show
     @item = Picture.show(params[:id], @operators)
@@ -27,10 +26,10 @@ class PicturesController < ApplicationController
   end
   
   def credit
-    @picture = Picture.show(params[:id], [@user, @admin, @demand_user])
+    @picture = Picture.show(params[:id], @operators)
 
     respond_to do |format|
-      format.html { render :layout => false } # show.html.erb
+      format.html { render :layout => false }
       format.json { render :json => @picture.to_json}
     end
   end
@@ -44,21 +43,4 @@ class PicturesController < ApplicationController
     end
   end
   
-  def list
-    @pictures = Picture.all
-
-    respond_to do |format|
-      format.html { render layout: 'system' }# index.html.erb
-      format.json { render json: @pictures }
-    end
-  end
-
-  def browse
-    @picture = Picture.find(params[:id])
-
-    respond_to do |format|
-      format.html { render layout: 'system' } # show.html.erb
-      format.json { render json: @picture }
-    end
-  end
 end
index bd6d1c6..e75fc0b 100644 (file)
@@ -8,7 +8,6 @@ class ResourcePicturesController < ApplicationController
     before_filter :authenticate_user, :only => [:new, :create, :update, :destroy]
     before_filter :authenticate_artist, :only => [:new, :create, :update, :destroy]
   end
-  before_filter :authenticate_admin!, :only => [:list, :browse]
 
   def self.model
     ResourcePicture
@@ -35,7 +34,7 @@ class ResourcePicturesController < ApplicationController
   end
   
   def credit
-    @resource_picture = ResourcePicture.show(params[:id], [@user, @admin, @demand_user])
+    @resource_picture = ResourcePicture.show(params[:id], @operators)
 
     respond_to do |format|
       format.html { render :layout => false } # show.html.erb
@@ -44,7 +43,7 @@ class ResourcePicturesController < ApplicationController
   end
   
   def new
-    @original_picture = OriginalPicture.edit params[:original_picture_id], @artist
+    @original_picture = OriginalPicture.edit params[:original_picture_id], @operators
     @imager = PettanImager.load @original_picture.restore
     @original_picture_license_group = OriginalPictureLicenseGroup.new params[:original_picture_license_group]
     @license_group = LicenseGroup.show @original_picture_license_group.license_group_id
@@ -64,7 +63,7 @@ class ResourcePicturesController < ApplicationController
   end
   
   def create
-    @original_picture = OriginalPicture.edit params[:original_picture_id], @artist
+    @original_picture = OriginalPicture.edit params[:original_picture_id], @operators
     @imager = PettanImager.load @original_picture.restore
     @original_picture_license_group = OriginalPictureLicenseGroup.new params[:original_picture_license_group]
     @license_group = LicenseGroup.show @original_picture_license_group.license_group_id
@@ -89,7 +88,7 @@ class ResourcePicturesController < ApplicationController
   end
   
   def destroy
-    @resource_picture = ResourcePicture.edit(params[:id], @artist)
+    @resource_picture = ResourcePicture.edit(params[:id], @operators)
 
     respond_to do |format|
       if @resource_picture.unpublish
@@ -109,22 +108,4 @@ class ResourcePicturesController < ApplicationController
     end
   end
   
-  def list
-    @resource_pictures = ResourcePicture.all
-
-    respond_to do |format|
-      format.html { render layout: 'system' }
-      format.json { render json: @resource_pictures }
-    end
-  end
-
-  def browse
-    @resource_picture = ResourcePicture.find(params[:id])
-
-    respond_to do |format|
-      format.html { render layout: 'system' }
-      format.json { render json: @resource_picture }
-    end
-  end
-
 end
index 982e9ff..f9db91f 100644 (file)
@@ -8,7 +8,6 @@ class ScrollPanelsController < ApplicationController
     before_filter :authenticate_user, :only => [:new, :create, :edit, :update, :destroy]
     before_filter :authenticate_author, :only => [:new, :create, :edit, :update, :destroy]
   end
-  before_filter :authenticate_admin!, :only => [:list, :browse]
 
   def self.model
     ScrollPanel
@@ -30,36 +29,18 @@ class ScrollPanelsController < ApplicationController
     end
   end
   
-  def list
-    @scroll_panels = ScrollPanel.all
-
-    respond_to do |format|
-      format.html { render layout: 'system' }# index.html.erb
-      format.json { render json: @scroll_panels }
-    end
-  end
-
-  def browse
-    @scroll_panel = ScrollPanel.find(params[:id])
-
-    respond_to do |format|
-      format.html { render layout: 'system' } # show.html.erb
-      format.json { render json: @scroll_panel }
-    end
-  end
-  
   def new
     @scroll_panel = ScrollPanel.new 
     @scroll_panel.supply_default
     respond_to do |format|
-      format.html # new.html.erb
+      format.html
       format.js
-      format.json { render json: @scroll_panel.scroll_panel_as_json(@author) }
+      format.json { render json: @scroll_panel.scroll_panel_as_json(@operators.author) }
     end
   end
 
   def edit
-    @scroll_panel = ScrollPanel.edit(params[:id], @author)
+    @scroll_panel = ScrollPanel.edit(params[:id], @operators)
     respond_to do |format|
       format.html 
       format.js
@@ -70,15 +51,15 @@ class ScrollPanelsController < ApplicationController
     @scroll_panel = ScrollPanel.new 
     @scroll_panel.supply_default
     @scroll_panel.attributes = params[:scroll_panel]
-    @scroll_panel.overwrite @author
-    @scroll = Scroll.edit(@scroll_panel.scroll_id, @author) if @scroll_panel.scroll_id
-    @panel = Panel.show(@scroll_panel.panel_id, @author) if @scroll_panel.panel_id
+    @scroll_panel.overwrite @operators
+    @scroll = Scroll.edit(@scroll_panel.scroll_id, @operators) if @scroll_panel.scroll_id
+    @panel = Panel.show(@scroll_panel.panel_id, @operators) if @scroll_panel.panel_id
     
     respond_to do |format|
-      if @scroll_panel.store
+      if @scroll_panel.store @operators
         flash[:notice] = I18n.t('flash.notice.created', :model => ScrollPanel.model_name.human)
         format.html { redirect_to play_scroll_path(@scroll) }
-        format.json { render json: @scroll_panel.scroll_panel_as_json(@author) }
+        format.json { render json: @scroll_panel.scroll_panel_as_json(@operators.author) }
       else
         flash[:notice] = I18n.t('flash.notice.not_created', :model => ScrollPanel.model_name.human)
         format.html { render action: "new" }
@@ -88,13 +69,13 @@ class ScrollPanelsController < ApplicationController
   end
   
   def update
-    @scroll_panel = ScrollPanel.edit(params[:id], @author)
+    @scroll_panel = ScrollPanel.edit(params[:id], @operators)
     ot = @scroll_panel.t
     @scroll_panel.attributes = params[:scroll_panel]
-    @scroll_panel.overwrite @author
-    @scroll = Scroll.edit(@scroll_panel.scroll_id, @author) if @scroll_panel.scroll_id
+    @scroll_panel.overwrite @operators
+    @scroll = Scroll.edit(@scroll_panel.scroll_id, @operators) if @scroll_panel.scroll_id
     respond_to do |format|
-      if @scroll_panel.store ot
+      if @scroll_panel.store @operators, ot
         flash[:notice] = I18n.t('flash.notice.updated', :model => ScrollPanel.model_name.human)
         format.html { redirect_to play_scroll_path(@scroll) }
         format.json { head :ok }
@@ -107,8 +88,8 @@ class ScrollPanelsController < ApplicationController
   end
 
   def destroy
-    @scroll_panel = ScrollPanel.edit(params[:id], @author)
-    @scroll = Scroll.edit(@scroll_panel.scroll_id, @author) if @scroll_panel.scroll_id
+    @scroll_panel = ScrollPanel.edit(params[:id], @operators)
+    @scroll = Scroll.edit(@scroll_panel.scroll_id, @operators) if @scroll_panel.scroll_id
     respond_to do |format|
       if @scroll_panel.destroy_and_shorten
         flash[:notice] = I18n.t('flash.notice.destroyed', :model => ScrollPanel.model_name.human)
index 6d96c1d..80e40a8 100644 (file)
@@ -8,7 +8,6 @@ class ScrollsController < ApplicationController
     before_filter :authenticate_user, :only => [:new, :create, :edit, :update, :destroy]
     before_filter :authenticate_author, :only => [:new, :create, :edit, :update, :destroy]
   end
-  before_filter :authenticate_admin!, :only => [:list, :browse]
   
   def self.model
     Scroll
@@ -25,7 +24,9 @@ class ScrollsController < ApplicationController
       format.html {
         @scroll = @item
         if @operators.author
-          @new_panels = Panel.mylist(@operators.author, 1, 5)
+          controller = Pettanr::Application::manifest.controller_managers['home']
+          @action = controller.open('panels', {:page => 1, :page_size => 5}, @operators)
+          @new_panels_filer = @action.filer
         end
       }
       format.json { render json: @item.to_json(Scroll.show_json_opt) }
@@ -75,36 +76,18 @@ class ScrollsController < ApplicationController
     end
   end
   
-  def list
-    @scrolls = Scroll.all
-
-    respond_to do |format|
-      format.html { render layout: 'system' }# index.html.erb
-      format.json { render json: @scrolls }
-    end
-  end
-
-  def browse
-    @scroll = Scroll.find(params[:id])
-
-    respond_to do |format|
-      format.html { render layout: 'system' } # show.html.erb
-      format.json { render json: @scroll }
-    end
-  end
-  
   def new
     @scroll = Scroll.new
     @scroll.supply_default
     respond_to do |format|
-      format.html # new.html.erb
+      format.html
       format.js
       format.json { render json: @scroll.to_json(Scroll.show_json_opt) }
     end
   end
 
   def edit
-    @scroll = Scroll.edit(params[:id], @author)
+    @scroll = Scroll.edit(params[:id], @operators)
     respond_to do |format|
       format.html 
       format.js
@@ -131,9 +114,9 @@ class ScrollsController < ApplicationController
   end
 
   def update
-    @scroll = Scroll.edit(params[:id], @author)
+    @scroll = Scroll.edit(params[:id], @operators)
     @scroll.attributes = params[:scroll]
-    @scroll.overwrite @author
+    @scroll.overwrite @operators
     respond_to do |format|
       if @scroll.save
         flash[:notice] = I18n.t('flash.notice.updated', :model => Scroll.model_name.human)
@@ -148,7 +131,7 @@ class ScrollsController < ApplicationController
   end
 
   def destroy
-    @scroll = Scroll.edit(params[:id], @author)
+    @scroll = Scroll.edit(params[:id], @operators)
     respond_to do |format|
       if @scroll.destroy_with_scroll_panel
         flash[:notice] = I18n.t('flash.notice.destroyed', :model => Scroll.model_name.human)
index c0d5565..5d51278 100644 (file)
@@ -8,7 +8,6 @@ class SheetPanelsController < ApplicationController
     before_filter :authenticate_user, :only => [:new, :create, :edit, :update, :destroy]
     before_filter :authenticate_author, :only => [:new, :create, :edit, :update, :destroy]
   end
-  before_filter :authenticate_admin!, :only => [:list, :browse]
 
   def self.model
     SheetPanel
@@ -26,25 +25,7 @@ class SheetPanelsController < ApplicationController
         @sheet_panel = @item
       }
       format_prof format
-      format.json { render json: @item.sheet_panel_as_json(@author) }
-    end
-  end
-  
-  def list
-    @sheet_panels = SheetPanel.all
-
-    respond_to do |format|
-      format.html { render layout: 'system' }# index.html.erb
-      format.json { render json: @sheet_panels }
-    end
-  end
-
-  def browse
-    @sheet_panel = SheetPanel.find(params[:id])
-
-    respond_to do |format|
-      format.html { render layout: 'system' } # show.html.erb
-      format.json { render json: @sheet_panel }
+      format.json { render json: @item.sheet_panel_as_json(@operators.author) }
     end
   end
   
@@ -52,14 +33,14 @@ class SheetPanelsController < ApplicationController
     @sheet_panel = SheetPanel.new 
     @sheet_panel.supply_default
     respond_to do |format|
-      format.html # new.html.erb
+      format.html
       format.js
-      format.json { render json: @sheet_panel.sheet_panel_as_json(@author) }
+      format.json { render json: @sheet_panel.sheet_panel_as_json(@operators.author) }
     end
   end
 
   def edit
-    @sheet_panel = SheetPanel.edit(params[:id], @author)
+    @sheet_panel = SheetPanel.edit(params[:id], @operators)
     respond_to do |format|
       format.html 
       format.js
@@ -70,15 +51,15 @@ class SheetPanelsController < ApplicationController
     @sheet_panel = SheetPanel.new 
     @sheet_panel.supply_default
     @sheet_panel.attributes = params[:sheet_panel]
-    @sheet_panel.overwrite @author
-    @sheet = Sheet.edit(@sheet_panel.sheet_id, @author) if @sheet_panel.sheet_id
-    @panel = Panel.show(@sheet_panel.panel_id, @author) if @sheet_panel.panel_id
+    @sheet_panel.overwrite @operators
+    @sheet = Sheet.edit(@sheet_panel.sheet_id, @operators) if @sheet_panel.sheet_id
+    @panel = Panel.show(@sheet_panel.panel_id, @operators) if @sheet_panel.panel_id
     
     respond_to do |format|
-      if @sheet_panel.store
+      if @sheet_panel.store @operators
         flash[:notice] = I18n.t('flash.notice.created', :model => SheetPanel.model_name.human)
         format.html { redirect_to play_sheet_path(@sheet) }
-        format.json { render json: @sheet_panel.sheet_panel_as_json(@author) }
+        format.json { render json: @sheet_panel.sheet_panel_as_json(@operators.author) }
       else
         flash[:notice] = I18n.t('flash.notice.not_created', :model => SheetPanel.model_name.human)
         format.html { render action: "new" }
@@ -88,13 +69,13 @@ class SheetPanelsController < ApplicationController
   end
   
   def update
-    @sheet_panel = SheetPanel.edit(params[:id], @author)
+    @sheet_panel = SheetPanel.edit(params[:id], @operators)
     ot = @sheet_panel.t
     @sheet_panel.attributes = params[:sheet_panel]
-    @sheet_panel.overwrite @author
-    @sheet = Sheet.edit(@sheet_panel.sheet_id, @author) if @sheet_panel.sheet_id
+    @sheet_panel.overwrite @operators
+    @sheet = Sheet.edit(@sheet_panel.sheet_id, @operators) if @sheet_panel.sheet_id
     respond_to do |format|
-      if @sheet_panel.store ot
+      if @sheet_panel.store @operators, ot
         flash[:notice] = I18n.t('flash.notice.updated', :model => SheetPanel.model_name.human)
         format.html { redirect_to play_sheet_path(@sheet) }
         format.json { head :ok }
@@ -107,8 +88,8 @@ class SheetPanelsController < ApplicationController
   end
 
   def destroy
-    @sheet_panel = SheetPanel.edit(params[:id], @author)
-    @sheet = Sheet.edit(@sheet_panel.sheet_id, @author) if @sheet_panel.sheet_id
+    @sheet_panel = SheetPanel.edit(params[:id], @operators)
+    @sheet = Sheet.edit(@sheet_panel.sheet_id, @operators) if @sheet_panel.sheet_id
     respond_to do |format|
       if @sheet_panel.destroy_and_shorten
         flash[:notice] = I18n.t('flash.notice.destroyed', :model => SheetPanel.model_name.human)
index db4777e..c6929a9 100644 (file)
@@ -8,7 +8,6 @@ class SheetsController < ApplicationController
     before_filter :authenticate_user, :only => [:new, :create, :edit, :update, :destroy]
     before_filter :authenticate_author, :only => [:new, :create, :edit, :update, :destroy]
   end
-  before_filter :authenticate_admin!, :only => [:list, :browse]
 
   def self.model
     Sheet
@@ -38,7 +37,7 @@ class SheetsController < ApplicationController
   end
 
   def play
-    @sheet = Sheet.show(params[:id], [@user, @admin])
+    @sheet = Sheet.show(params[:id], @operators)
     respond_to do |format|
       format.html {
         if @author
@@ -59,36 +58,18 @@ class SheetsController < ApplicationController
     end
   end
   
-  def list
-    @sheets = Sheet.all
-
-    respond_to do |format|
-      format.html { render layout: 'system' }# index.html.erb
-      format.json { render json: @sheets }
-    end
-  end
-
-  def browse
-    @sheet = Sheet.find(params[:id])
-
-    respond_to do |format|
-      format.html { render layout: 'system' } # show.html.erb
-      format.json { render json: @sheet }
-    end
-  end
-  
   def new
     @sheet = Sheet.new
     @sheet.supply_default
     respond_to do |format|
-      format.html # new.html.erb
+      format.html
       format.js
       format.json { render json: @sheet.to_json(Sheet.show_json_opt) }
     end
   end
 
   def edit
-    @sheet = Sheet.edit(params[:id], @author)
+    @sheet = Sheet.edit(params[:id], @operators)
     respond_to do |format|
       format.html 
       format.js
@@ -105,7 +86,7 @@ class SheetsController < ApplicationController
     @prm = params[:sheet] || jsn
 
     respond_to do |format|
-      if @sheet.store @prm, @author
+      if @sheet.store @prm, @operators
         flash[:notice] = I18n.t('flash.notice.created', :model => Sheet.model_name.human)
         format.html { redirect_to @sheet }
         format.json { render json: @sheet.to_json(Sheet.show_json_opt), status: :created, location: @sheet }
@@ -118,14 +99,14 @@ class SheetsController < ApplicationController
   end
 
   def update
-    @sheet = Sheet.edit(params[:id], @author)
+    @sheet = Sheet.edit(params[:id], @operators)
     jsn = nil
     if params[:json]
       jsn = JSON.parse(params[:json])
     end
     @prm = params[:sheet] || jsn
     respond_to do |format|
-      if @sheet.store @prm, @author
+      if @sheet.store @prm, @operators
         flash[:notice] = I18n.t('flash.notice.updated', :model => Sheet.model_name.human)
         format.html { redirect_to @sheet }
         format.json { head :ok }
@@ -138,7 +119,7 @@ class SheetsController < ApplicationController
   end
 
   def destroy
-    @sheet = Sheet.edit(params[:id], @author)
+    @sheet = Sheet.edit(params[:id], @operators)
     respond_to do |format|
       if @sheet.destroy_with_sheet_panel
         flash[:notice] = I18n.t('flash.notice.destroyed', :model => Sheet.model_name.human)
index 85c47d6..378a275 100644 (file)
@@ -8,7 +8,6 @@ class StoriesController < ApplicationController
     before_filter :authenticate_user, :only => [:new, :create, :edit, :update, :destroy]
     before_filter :authenticate_author, :only => [:new, :create, :edit, :update, :destroy]
   end
-  before_filter :authenticate_admin!, :only => [:list, :browse]
 
   def self.model
     Story
@@ -58,36 +57,18 @@ class StoriesController < ApplicationController
     end
   end
   
-  def list
-    @stories = Story.all
-
-    respond_to do |format|
-      format.html { render layout: 'system' }# index.html.erb
-      format.json { render json: @stories }
-    end
-  end
-
-  def browse
-    @story = Story.find(params[:id])
-
-    respond_to do |format|
-      format.html { render layout: 'system' } # show.html.erb
-      format.json { render json: @story }
-    end
-  end
-  
   def new
     @story = Story.new 
     @story.supply_default
     respond_to do |format|
-      format.html # new.html.erb
+      format.html
       format.js
       format.json { render json: @story.to_json(Story.show_json_opt) }
     end
   end
 
   def edit
-    @story = Story.edit(params[:id], @author)
+    @story = Story.edit(params[:id], @operators)
     respond_to do |format|
       format.html 
       format.js
@@ -99,10 +80,10 @@ class StoriesController < ApplicationController
     @story.supply_default
     @story.attributes = params[:story]
     @story.overwrite
-    @comic = Comic.edit(@story.comic_id, @author) if @story.comic_id
+    @comic = Comic.edit(@story.comic_id, @operators) if @story.comic_id
     
     respond_to do |format|
-      if @story.store @author
+      if @story.store @operators
         flash[:notice] = I18n.t('flash.notice.created', :model => Story.model_name.human)
         format.html { redirect_to play_story_path(@story, :page => @story.t.to_i + 1) }
         format.json { render json: @story.to_json(Story.show_json_opt) }
@@ -115,12 +96,12 @@ class StoriesController < ApplicationController
   end
   
   def update
-    @story = Story.edit(params[:id], @author)
+    @story = Story.edit(params[:id], @operators)
     ot = @story.t
     @story.attributes = params[:story]
     @story.overwrite
     respond_to do |format|
-      if @story.store  @author, ot
+      if @story.store @operators, ot
         flash[:notice] = I18n.t('flash.notice.updated', :model => Story.model_name.human)
         format.html { redirect_to play_story_path(@story, :page => @story.t.to_i + 1) }
         format.json { head :ok }
@@ -133,7 +114,7 @@ class StoriesController < ApplicationController
   end
 
   def destroy
-    @story = Story.edit(params[:id], @author)
+    @story = Story.edit(params[:id], @operators)
     respond_to do |format|
       if @story.destroy_and_shorten
         flash[:notice] = I18n.t('flash.notice.destroyed', :model => Story.model_name.human)
index d4f6cf5..c976228 100644 (file)
@@ -8,7 +8,6 @@ class StorySheetsController < ApplicationController
     before_filter :authenticate_user, :only => [:new, :create, :edit, :update, :destroy]
     before_filter :authenticate_author, :only => [:new, :create, :edit, :update, :destroy]
   end
-  before_filter :authenticate_admin!, :only => [:list, :browse]
 
   def self.model
     StorySheet
@@ -30,29 +29,11 @@ class StorySheetsController < ApplicationController
     end
   end
   
-  def list
-    @story_sheets = StorySheet.all
-
-    respond_to do |format|
-      format.html { render layout: 'system' }# index.html.erb
-      format.json { render json: @story_sheets }
-    end
-  end
-
-  def browse
-    @story_sheet = StorySheet.find(params[:id])
-
-    respond_to do |format|
-      format.html { render layout: 'system' } # show.html.erb
-      format.json { render json: @story_sheet }
-    end
-  end
-  
   def new
     @story_sheet = StorySheet.new 
     @story_sheet.supply_default
     respond_to do |format|
-      format.html # new.html.erb
+      format.html
       format.js
       format.json { render json: @story_sheet.to_json(StorySheet.show_json_opt) }
     end
@@ -70,12 +51,12 @@ class StorySheetsController < ApplicationController
     @story_sheet = StorySheet.new 
     @story_sheet.supply_default
     @story_sheet.attributes = params[:story_sheet]
-    @story_sheet.overwrite @author
-    @story = Story.edit(@story_sheet.story_id, @author) if @story_sheet.story_id
-    @sheet = Sheet.show(@story_sheet.sheet_id, @author) if @story_sheet.sheet_id
+    @story_sheet.overwrite @operators
+    @story = Story.edit(@story_sheet.story_id, @operators) if @story_sheet.story_id
+    @sheet = Sheet.show(@story_sheet.sheet_id, @operators) if @story_sheet.sheet_id
     
     respond_to do |format|
-      if @story_sheet.store
+      if @story_sheet.store @operators
         flash[:notice] = I18n.t('flash.notice.created', :model => StorySheet.model_name.human)
         format.html { redirect_to play_story_path(@story) }
         format.json { render json: @story_sheet.to_json(StorySheet.show_json_opt) }
@@ -88,13 +69,13 @@ class StorySheetsController < ApplicationController
   end
   
   def update
-    @story_sheet = StorySheet.edit(params[:id], @author)
+    @story_sheet = StorySheet.edit(params[:id], @operators)
     ot = @story_sheet.t
     @story_sheet.attributes = params[:story_sheet]
-    @story_sheet.overwrite @author
-    @story = Story.edit(@story_sheet.story_id, @author) if @story_sheet.story_id
+    @story_sheet.overwrite @operators
+    @story = Story.edit(@story_sheet.story_id, @operators) if @story_sheet.story_id
     respond_to do |format|
-      if @story_sheet.store ot
+      if @story_sheet.store @operators, ot
         flash[:notice] = I18n.t('flash.notice.updated', :model => StorySheet.model_name.human)
         format.html { redirect_to play_story_path(@story) }
         format.json { head :ok }
@@ -107,8 +88,8 @@ class StorySheetsController < ApplicationController
   end
 
   def destroy
-    @story_sheet = StorySheet.edit(params[:id], @author)
-    @story = Story.edit(@story_sheet.story_id, @author) if @story_sheet.story_id
+    @story_sheet = StorySheet.edit(params[:id], @operators)
+    @story = Story.edit(@story_sheet.story_id, @operators) if @story_sheet.story_id
     respond_to do |format|
       if @story_sheet.destroy_and_shorten
         flash[:notice] = I18n.t('flash.notice.destroyed', :model => StorySheet.model_name.human)
index 5a57fd5..007d3ac 100644 (file)
@@ -79,16 +79,14 @@ module ApplicationHelper
   end
   
   def panel_editor_javascript_include_tags
-    writing_format_list = Pettanr::Application::manifest.list_managers[WritingFormat.item_name].open('public_list', nil, nil, @operators)
-    speech_balloon_template_list = Pettanr::Application::manifest.list_managers[SpeechBalloonTemplate.item_name].open('public_list', nil, nil, @operators)
-    writing_format_list.items.map {|wf|
+    WritingFormat.enable_list().map {|wf|
 #      javascript_include_tag wf.engine_name
       javascript_include_tag wf.engine_name + "/application"
     }.join("\n") + 
-    speech_balloon_template_list.items.map {|sbt|
+    SpeechBalloonTemplate.enable_list().map {|sbt|
       stylesheet_link_tag sbt.engine_name + "/application"
     }.join("\n") + 
-    speech_balloon_template_list.items.map {|sbt|
+    SpeechBalloonTemplate.enable_list().map {|sbt|
       javascript_include_tag sbt.engine_name + "/application"
     }.join("\n")
   end
index 87b7082..3806133 100644 (file)
@@ -25,7 +25,7 @@ class Artist < Pettanr::Owner
   end
   
   def self.list_where
-    'artists.provider = 0'
+    'artists.provider_id is null'
   end
   
   def self.list_order
index 1a757fa..ea59cc4 100644 (file)
@@ -12,8 +12,8 @@ class GroundColor < Pettanr::Content
   validates :z, :presence => true, :numericality => {:greater_than => 0}
   validates :t, :presence => true, :numericality => {:greater_than_or_equal_to => 0}
   
-  def owner_model
-    self.panel
+  def self.owner_model
+    Panel
   end
   
   def self.valid_encode_columns
@@ -144,7 +144,7 @@ class GroundColor < Pettanr::Content
     {:include => {:panel => {:include => {:author => {}}} }}
   end
   
-  def store au
+  def store operators
     if self.new_record?
       self.panel.ground_colors.build(self.attributes)
     else
@@ -156,11 +156,11 @@ class GroundColor < Pettanr::Content
         break
       end
     end
-    self.panel.store({}, au)
+    self.panel.store({}, operators)
   end
   
-  def remove au
-    self.panel.remove_element(self, au)
+  def remove operators
+    self.panel.remove_element(self, operators)
   end
   
   def scenario
index 98e0abb..0959c61 100644 (file)
@@ -14,8 +14,8 @@ class GroundPicture < Pettanr::Content
   
   @@repeat_texts = ['repeat', 'repeat-x', 'repeat-y', 'no-repeat']
   
-  def owner_model
-    self.panel
+  def self.owner_model
+    Panel
   end
   
   def self.valid_encode_columns
@@ -116,7 +116,7 @@ class GroundPicture < Pettanr::Content
     {:include => {:panel => {:include => {:author => {}}}, :picture => {:include => {:artist => {}, :license => {}}} }}
   end
   
-  def store au
+  def store operators
     if self.new_record?
       self.panel.ground_pictures.build(self.attributes)
     else
@@ -128,11 +128,11 @@ class GroundPicture < Pettanr::Content
         break
       end
     end
-    self.panel.store({}, au)
+    self.panel.store({}, operators)
   end
   
-  def remove au
-    self.panel.remove_element(self, au)
+  def remove operators
+    self.panel.remove_element(self, operators)
   end
   
   def scenario
index b628f01..2387347 100644 (file)
@@ -25,6 +25,12 @@ class LicenseGroup < Pettanr::Item
     'license_groups.name asc'
   end
   
+  def self.enable_list
+    LicenseGroup.find(:all).delete_if {|lg|
+      lg.enable? == false
+    }
+  end
+  
   def self.list_opt
     {:include => {:licenses => {}}}
   end
@@ -41,6 +47,21 @@ class LicenseGroup < Pettanr::Item
     {:include => {:licenses => {}}}
   end
   
+  def engine_name
+    Pettanr::Application.manifest.system_resources.license_groups[self.classname]
+  end
+  
+  def enable?
+    Pettanr::Application.manifest.system_resources.license_groups.include? self.classname
+  end
+  
+  def engine_module_name
+    self.engine_name.camelize
+  end
+  
+  def engine
+    Object.const_get self.engine_module_name
+  end
   def self.store name, attr
     #ライセンスデータがあるとライセンスグループのデータ生成で邪魔するので移しておく
     lattr = attr["licenses_attributes"]
index 5b3b29d..3004bb5 100644 (file)
@@ -18,14 +18,14 @@ class OriginalPicture < Pettanr::Content
   def supply_default
   end
   
-  def overwrite ar
+  def overwrite operators
     self.uploaded_at = Time.now
-    self.artist_id = ar.id
+    return unless operators.artist
+    self.artist_id = operators.artist.id
   end
   
   def visible? operators
-    return false unless super
-    false
+    self.own? operators
   end
   def filename
     "#{self.id}.#{self.ext}"
index fe47e36..11ac112 100644 (file)
@@ -48,8 +48,9 @@ class Panel < Pettanr::Content
     self.publish = 0
   end
   
-  def overwrite au
-    self.author_id = au.id
+  def overwrite operators
+    return false unless operators.author
+    self.author_id = operators.author.id
   end
   
   def visible? operators
@@ -58,8 +59,8 @@ class Panel < Pettanr::Content
     self.publish?
   end
   
-  def usable? au
-    visible? au
+  def usable? operators
+    self.visible? operators
   end
   
   def publish?
@@ -270,13 +271,13 @@ class Panel < Pettanr::Content
     end
   end 
   
-  def store attr, au
+  def store attr, operators
     if attr == false
       self.errors.add :base, I18n.t('errors.invalid_json')
       return false
     end
     self.attributes = attr
-    self.overwrite au
+    self.overwrite operators
     res = false
     Panel.transaction do
       self.panel_elements.each do |elm|
@@ -294,7 +295,7 @@ class Panel < Pettanr::Content
     res
   end
   
-  def remove_element target, au
+  def remove_element target, operators
     ct = target.t
     cz = target.z
     panel_attributes = {}
@@ -312,7 +313,7 @@ class Panel < Pettanr::Content
       panel_attributes[elm.class.to_s.tableize + '_attributes'] ||= {}
       panel_attributes[elm.class.to_s.tableize + '_attributes'][elm.id] = attr
     end
-    self.store(panel_attributes, au)
+    self.store(panel_attributes, operators)
   end
   
   def destroy_with_elements
index a68af58..e74806c 100644 (file)
@@ -14,8 +14,8 @@ class PanelPicture < Pettanr::Content
   validates :z, :presence => true, :numericality => {:greater_than => 0}
   validates :t, :presence => true, :numericality => {:greater_than_or_equal_to => 0}
   
-  def owner_model
-    self.panel
+  def self.owner_model
+    Panel
   end
   
   def self.valid_encode_columns
@@ -147,7 +147,7 @@ class PanelPicture < Pettanr::Content
     {:include => {:panel => {:include => {:author => {}}}, :picture => {:include => {:artist => {}, :license => {}}} }}
   end
   
-  def store au
+  def store operators
     if self.new_record?
       self.panel.panel_pictures.build(self.attributes)
     else
@@ -159,11 +159,11 @@ class PanelPicture < Pettanr::Content
         break
       end
     end
-    self.panel.store({}, au)
+    self.panel.store({}, operators)
   end
   
-  def remove au
-    self.panel.remove_element(self, au)
+  def remove operators
+    self.panel.remove_element(self, operators)
   end
   
   def scenario
index 5aeeee3..89b95fb 100644 (file)
@@ -41,9 +41,9 @@ class Picture < Pettanr::Content
     return true
   end
   
-  def showable? au = nil
+  def showable? operators = nil
     return false unless self.original_picture
-    return true if self.own?(au)
+    return true if self.own?(operators)
     self.enable? and self.head?
   end
   
index b628edf..9ff9fc2 100644 (file)
@@ -8,8 +8,8 @@ class ScrollPanel < Pettanr::Content
   validates :author_id, :presence => true, :numericality => true, :existence => {:both => false}
   validates :t, :presence => true, :numericality => {:greater_than_or_equal_to => 0}
   
-  def owner_model
-    self.scroll
+  def self.owner_model
+    Scroll
   end
   
   def supply_default
@@ -18,9 +18,9 @@ class ScrollPanel < Pettanr::Content
     self.t = nil
   end
   
-  def overwrite au
-    return false unless au
-    self.author_id = au.id
+  def overwrite operators
+    return false unless operators.author
+    self.author_id = operators.author.id
   end
   
   def visible? operators
@@ -181,15 +181,15 @@ class ScrollPanel < Pettanr::Content
     end
   end
   
-  def allow?
+  def allow? operators
     return nil if self.scroll_id == nil or self.panel_id == nil
-    self.scroll.own?(self.author) and self.panel.usable?(self.author)
+    self.scroll.own?(operators) and self.panel.usable?(operators)
   end
   
-  def store old_t = nil
+  def store operators, old_t = nil
     res = false
     ScrollPanel.transaction do
-      case self.allow?
+      case self.allow? operators
       when true
         self.rotate old_t
       when false
index b79dd52..3161dab 100644 (file)
@@ -38,9 +38,9 @@ class Sheet < Pettanr::Content
     self.visible = 0 if self.visible.blank?
   end
   
-  def overwrite au
-    return false unless au
-    self.author_id = au.id
+  def overwrite operators
+    return false unless operators.author
+    self.author_id = operators.author.id
   end
   
   def visible? operators
@@ -49,8 +49,8 @@ class Sheet < Pettanr::Content
     self.visible > 0
   end
   
-  def usable? au
-    visible? au
+  def usable? operators
+    self.visible? operators
   end
   
   def symbol_filename
@@ -186,18 +186,18 @@ class Sheet < Pettanr::Content
     end
   end 
   
-  def store attr, au
+  def store attr, operators
     if attr == false
       self.errors.add :base, I18n.t('errors.invalid_json')
       return false
     end
     self.attributes = attr
-    self.overwrite au
+    self.overwrite operators
     res = false
     Sheet.transaction do
       self.sheet_elements.each do |elm|
         elm.new_sheet = self
-        elm.boost au
+        elm.boost operators
       end
       res = self.save
       unless validate_child
index 3af5219..b3abfe6 100644 (file)
@@ -12,8 +12,8 @@ class SheetPanel < Pettanr::Content
   validates :z, :presence => true, :numericality => {:greater_than => 0}
   validates :t, :presence => true, :numericality => {:greater_than_or_equal_to => 0}
   
-  def owner_model
-    self.sheet
+  def self.owner_model
+    Sheet
   end
   
   def supply_default
@@ -30,9 +30,9 @@ class SheetPanel < Pettanr::Content
     end
   end
   
-  def overwrite au
-    return false unless au
-    self.author_id = au.id
+  def overwrite operators
+    return false unless operators.author
+    self.author_id = operators.author.id
   end
   
   def visible? operators
@@ -158,9 +158,9 @@ class SheetPanel < Pettanr::Content
     end
   end
   
-  def boost au
+  def boost operators
     if self.panel
-      self.panel.author_id = au.id
+      self.panel.author_id = operators.author.id
       self.panel.panel_elements.each do |elm|
         elm.new_panel = self
         elm.boost
@@ -246,15 +246,15 @@ class SheetPanel < Pettanr::Content
     end
   end
   
-  def allow?
+  def allow? operators
     return nil if self.sheet_id == nil or self.panel_id == nil
-    self.sheet.own?(self.author) and self.panel.usable?(self.author)
+    self.sheet.own?(operators) and self.panel.usable?(operators)
   end
   
-  def store old_t = nil
+  def store operators, old_t = nil
     res = false
     SheetPanel.transaction do
-      case self.allow?
+      case self.allow? operators
       when true
         self.rotate old_t
       when false
index c839a97..63764dd 100644 (file)
@@ -16,8 +16,8 @@ class SpeechBalloon < Pettanr::Content
   validates :t, :presence => true, :numericality => {:greater_than_or_equal_to => 0}
   validates :settings, :extend_speech_balloon => true
   
-  def owner_model
-    self.panel
+  def self.owner_model
+    Panel
   end
   
   def self.valid_encode_columns
index b2f3d99..dd20d25 100644 (file)
@@ -25,16 +25,9 @@ class SpeechBalloonTemplate < Pettanr::Item
     self.system_picture.tmb_opt_img_tag
   end
   
-  def self.list
-    opt = {}
-    opt.merge!(self.list_opt)
-    opt.merge!({:order => 'speech_balloon_templates.t asc'})
-    SpeechBalloonTemplate.find(:all, opt)
-  end
-  
   def self.enable_list
-    SpeechBalloonTemplate.list.delete_if {|sbt|
-      Pettanr::Application.manifest.system_resources.speech_balloon_templates[sbt.classname] == nil
+    SpeechBalloonTemplate.find(:all).delete_if {|sbt|
+      sbt.enable? == false
     }
   end
   
@@ -72,6 +65,10 @@ class SpeechBalloonTemplate < Pettanr::Item
     Pettanr::Application.manifest.system_resources.speech_balloon_templates[self.classname]
   end
   
+  def enable?
+    Pettanr::Application.manifest.system_resources.speech_balloon_templates.include? self.classname
+  end
+  
   def engine_module_name
     self.engine_name.camelize
   end
index 7a9b829..899ff12 100644 (file)
@@ -8,8 +8,8 @@ class Story < Pettanr::Content
   validates :visible, :presence => true, :numericality => true, :inclusion => {:in => 0..1}
   validates :t, :presence => true, :numericality => {:greater_than_or_equal_to => 0}
   
-  def owner_model
-    self.comic
+  def self.owner_model
+    Comic
   end
   
   def self.valid_encode_columns
@@ -156,15 +156,15 @@ class Story < Pettanr::Content
     end
   end
   
-  def allow? au
+  def allow? operators
     return nil if self.comic_id == nil
-    self.comic.own?(au)
+    self.comic.own?(operators)
   end
   
-  def store au, old_t = nil
+  def store operators, old_t = nil
     res = false
     Story.transaction do
-      case self.allow? au
+      case self.allow? operators
       when true
         self.rotate old_t
       when false
index ef1dda8..02712f6 100644 (file)
@@ -8,8 +8,8 @@ class StorySheet < Pettanr::Content
   validates :author_id, :presence => true, :numericality => true, :existence => {:both => false}
   validates :t, :presence => true, :numericality => {:greater_than_or_equal_to => 0}
   
-  def owner_model
-    self.story
+  def self.owner_model
+    Story
   end
   
   def supply_default
@@ -18,9 +18,9 @@ class StorySheet < Pettanr::Content
     self.t = nil
   end
   
-  def overwrite au
-    return false unless au
-    self.author_id = au.id
+  def overwrite operators
+    return false unless operators.author
+    self.author_id = operators.author.id
   end
   
   def visible? operators
@@ -185,15 +185,15 @@ class StorySheet < Pettanr::Content
     end
   end
   
-  def allow?
+  def allow? operators
     return nil if self.story_id == nil or self.sheet_id == nil
-    self.story.own?(self.author) and self.sheet.usable?(self.author)
+    self.story.own?(operators) and self.sheet.usable?(operators)
   end
   
-  def store old_t = nil
+  def store operators, old_t = nil
     res = false
     StorySheet.transaction do
-      case self.allow?
+      case self.allow? operators
       when true
         self.rotate old_t
       when false
index 144c152..b89e595 100644 (file)
@@ -1,6 +1,6 @@
 class SystemPicture < Pettanr::Item
   has_many :balloons
-  has_many :balloon_templates
+  has_many :speech_balloon_templates
   has_many :licenses
   
   validates :ext, :presence => true, :length => {:maximum => 4}, :inclusion => {:in => ['png', 'jpeg', 'gif']}
index 88f2016..cf68b4d 100644 (file)
@@ -9,10 +9,6 @@ class WritingFormat < Pettanr::Item
   validates :system_picture_id, :presence => true, :numericality => true, :existence => {:both => false}
   validates :settings, :presence => true
   
-def self.list 
-  WritingFormat.find :all
-end
-
   def self.valid_encode_columns
     super + ['name', 'classname', 'caption', 'settings']
   end
@@ -32,8 +28,12 @@ end
     'writing_formats.t asc'
   end
   
+#engine vw
+def self.list
+  self.enable_list
+end
   def self.enable_list
-    WritingFormat.list.delete_if {|wf|
+    WritingFormat.find(:all).delete_if {|wf|
       wf.enable? == false
     }
   end
index f21cc9f..5c6ec22 100644 (file)
@@ -3,7 +3,7 @@
 
   <div class="field">
     <%= f.label :license_group_id %><br />
-    <%= f.collection_select :license_group_id, LicenseGroup.list.map {|l| [l.caption, l.id] }, :last, :first %>
+    <%= f.collection_select :license_group_id, LicenseGroup.enable_list().map {|l| [l.caption, l.id] }, :last, :first %>
     <%= f.hidden_field :original_picture_id %>
   </div>
   <%= hidden_field_tag :original_picture_id, @original_picture.id %>
index d0a5019..732e615 100644 (file)
@@ -4,7 +4,7 @@
   <table class="no-border">
     <tr>
       <td><%= t_m 'OriginalPictureLicenseGroup.license_group_id' -%></td>
-      <td><%= f.collection_select :license_group_id, LicenseGroup.list.map {|l| [l.caption, l.id] }, :last, :first %></td>
+      <td><%= f.collection_select :license_group_id, LicenseGroup.enable_list().map {|l| [l.caption, l.id] }, :last, :first %></td>
       <td><%= t 'original_picture_license_groups.new.no_blank' %></td>
     </tr>
   </table>
index b6295da..e045829 100644 (file)
@@ -1,4 +1,4 @@
-<% if @artist -%>
+<% if @operators.artist -%>
   <%= form_tag( original_pictures_path , { :multipart => true, :method => :post }) do %>
     <% if @original_picture -%>
       <%= render 'system/error_explanation', :obj => @original_picture %>
index 8134fa8..ac1d9f4 100644 (file)
   <%= l @scroll.updated_at %>
 </p>
 
-<% if @scroll.own? @author -%>
+<% if @scroll.own? @operators -%>
   <%= link_to t('link.edit'), edit_scroll_path(@scroll) %>
   <h3><%= t('scroll_panels.append.new_panels') -%></h3>
-  <table>
-    <% @new_panels.each do |panel| %>
-      <%= render 'scroll_panels/append_panel', :scroll => @scroll, :panel => panel, :author => @author %>
-    <% end %>
-  </table>
+  <%= render 'system/filer', {:filer => @new_panels_filer} %>
 <% end %>
index cdc19f2..e1c58df 100644 (file)
@@ -1,5 +1,5 @@
 <div id="<%= sheet.tag_id -%>" sheet_id="<%= sheet.tag_sheet_id -%>" class="sheet" style="width:<%= sheet.width %>px;height:<%= sheet.height %>px;">
-  <% if sheet.visible? author -%>
+  <% if sheet.visible? @operators -%>
     <% sheet.sheet_elements.each do |elm| %>
       <%= render elm.class.to_s.tableize + '/element', :elm => elm, :author => author %>
     <% end %>
index 9cf242b..604cd7b 100644 (file)
@@ -4,14 +4,14 @@ Pettanr::Application.routes.draw do
   devise_for :admins
   devise_for :demand_users
   
-  Pettanr::Application.manifest.system_resources.licenses.each do |name, klass|
+  Pettanr::Application.manifest.system_resources.license_groups.each do |klass, name|
     mount Module.const_get(klass)::Engine => "/#{name}"
   end
   Pettanr::Application.manifest.system_resources.speech_balloon_templates.each do |klass , name|
     mount Module.const_get(klass)::Engine => "/#{name}"
   end
   
-  resources :authors do
+  resources :scrolls do
     new do
       get :new
     end
@@ -20,44 +20,34 @@ Pettanr::Application.routes.draw do
       get :show
       get :count
       post :create
-      get :list
     end
     member do
+      get :scroll_panels
+      get :panels
+      get :by_author
+      get :by_panel
+      get :play
       get :edit
       put :update
       delete :destroy
       get :browse
-      get :scrolls
-      get :scroll_panels
-      get :comics
-      get :stories
-      get :story_sheets
-      get :sheets
-      get :sheet_panels
-      get :panels
-      get :panel_pictures
-      get :speech_balloons
-      get :ground_pictures
-      get :ground_colors
     end
   end
-  resources :artists do
+  resources :scroll_panels do
     new do
       get :new
     end
     collection do
       get :index
       get :show
-      get :count
       post :create
-      get :list
     end
     member do
+      get :by_panel
+      get :by_scroll
       get :edit
       put :update
       delete :destroy
-      get :browse
-      get :resource_pictures
     end
   end
   resources :comics do
@@ -69,7 +59,6 @@ Pettanr::Application.routes.draw do
       get :show
       get :count
       post :create
-      get :list
     end
     member do
       get :stories
@@ -78,7 +67,6 @@ Pettanr::Application.routes.draw do
       get :edit
       put :update
       delete :destroy
-      get :browse
     end
   end
   resources :stories do
@@ -89,18 +77,16 @@ Pettanr::Application.routes.draw do
       get :index
       get :show
       post :create
-      get :list
     end
     member do
-      get :play
       get :story_sheets
       get :sheets
       get :by_sheet
       get :by_author
+      get :play
       get :edit
       put :update
       delete :destroy
-      get :browse
     end
   end
   resources :story_sheets do
@@ -111,7 +97,6 @@ Pettanr::Application.routes.draw do
       get :index
       get :show
       post :create
-      get :list
     end
     member do
       get :by_story
@@ -119,7 +104,6 @@ Pettanr::Application.routes.draw do
       get :edit
       put :update
       delete :destroy
-      get :browse
     end
   end
   resources :sheets do
@@ -131,7 +115,6 @@ Pettanr::Application.routes.draw do
       get :show
       get :count
       post :create
-      get :list
     end
     member do
       get :story_sheets
@@ -145,7 +128,6 @@ Pettanr::Application.routes.draw do
       get :edit
       put :update
       delete :destroy
-      get :browse
     end
   end
   resources :sheet_panels do
@@ -156,7 +138,6 @@ Pettanr::Application.routes.draw do
       get :index
       get :show
       post :create
-      get :list
     end
     member do
       get :by_sheet
@@ -164,49 +145,6 @@ Pettanr::Application.routes.draw do
       get :edit
       put :update
       delete :destroy
-      get :browse
-    end
-  end
-  resources :scrolls do
-    new do
-      get :new
-    end
-    collection do
-      get :index
-      get :show
-      get :count
-      post :create
-      get :list
-    end
-    member do
-      get :play
-      get :scroll_panels
-      get :panels
-      get :by_author
-      get :by_panel
-      get :edit
-      put :update
-      delete :destroy
-      get :browse
-    end
-  end
-  resources :scroll_panels do
-    new do
-      get :new
-    end
-    collection do
-      get :index
-      get :show
-      post :create
-      get :list
-    end
-    member do
-      get :by_panel
-      get :by_scroll
-      get :edit
-      put :update
-      delete :destroy
-      get :browse
     end
   end
   resources :panels do
@@ -218,9 +156,16 @@ Pettanr::Application.routes.draw do
       get :show
       get :count
       post :create
-      get :list
     end
     member do
+      get :scroll_panels
+      get :scrolls
+      get :sheet_panels
+      get :sheets
+      get :panel_pictures
+      get :speech_balloons
+      get :ground_pictures
+      get :ground_colors
       get :by_scroll
       get :by_sheet
       get :by_author
@@ -228,7 +173,6 @@ Pettanr::Application.routes.draw do
       get :edit
       put :update
       delete :destroy
-      get :browse
     end
   end
   resources :panel_pictures do
@@ -239,13 +183,13 @@ Pettanr::Application.routes.draw do
       get :index
       get :show
       post :create
-      get :list
     end
     member do
+      get :by_panel
+      get :by_author
       get :edit
       put :update
       delete :destroy
-      get :browse
     end
   end
   resources :speech_balloons do
@@ -256,36 +200,34 @@ Pettanr::Application.routes.draw do
       get :index
       get :show
       post :create
-      get :list
     end
     member do
+      get :by_panel
+      get :by_author
       get :edit
       put :update
       delete :destroy
-      get :browse
     end
   end
   resources :balloons do
     collection do
       get :index
       get :show
-      get :list
     end
     member do
-      get :browse
+      #get :by_system_picture
     end
   end
   resources :speeches do
     collection do
       get :index
       get :show
-      get :list
     end
     member do
-      get :browse
+      get :by_writing_format
     end
   end
-  resources :ground_colors do
+  resources :ground_pictures do
     new do
       get :new
     end
@@ -294,13 +236,14 @@ Pettanr::Application.routes.draw do
       get :show
     end
     member do
+      get :by_panel
+      get :by_author
       get :edit
       put :update
       delete :destroy
-      get :browse
     end
   end
-  resources :ground_pictures do
+  resources :ground_colors do
     new do
       get :new
     end
@@ -309,10 +252,11 @@ Pettanr::Application.routes.draw do
       get :show
     end
     member do
+      get :by_panel
+      get :by_author
       get :edit
       put :update
       delete :destroy
-      get :browse
     end
   end
   resources :original_pictures do
@@ -323,13 +267,23 @@ Pettanr::Application.routes.draw do
       get :index
       get :show
       post :create
-      get :list
     end
     member do
       get :edit
       put :update
       delete :destroy
       get :history
+    end
+  end
+  resources :pictures do
+    collection do
+      get :show
+      get :credit
+      get :search
+      get :list
+    end
+    member do
+      get :credit
       get :browse
     end
   end
@@ -340,52 +294,45 @@ Pettanr::Application.routes.draw do
       get :new
       post :create
       get :count
-      get :list
     end
     member do
       get :by_license
+        get :by_license_group
       get :artist
       delete :destroy
       get :credit
-      get :browse
     end
   end
-  resources :pictures do
+  resources :speech_balloon_templates do
     collection do
+      get :index
       get :show
-      get :credit
-      get :search
-      get :list
     end
     member do
-      get :credit
-      get :browse
+      get :speech_balloons
+      get :panels
+      get :by_system_picture
+      delete :destroy
     end
   end
-  resources :speech_balloon_templates do
+  resources :writing_formats do
     collection do
       get :index
       get :show
-      get :list
     end
     member do
+      get :speeches
       get :by_system_picture
-      get :speech_balloons
-      get :panels
-      get :browse
-      delete :destroy
     end
   end
-  resources :writing_formats do
+  resources :license_groups do
     collection do
       get :index
       get :show
-      get :list
     end
     member do
-      get :by_system_picture
-      get :speeches
-      get :browse
+      get :licenses
+      delete :destroy
     end
   end
   resources :licenses do
@@ -393,42 +340,78 @@ Pettanr::Application.routes.draw do
       get :index
       get :show
       get :search
-      get :list
     end
     member do
-      get :browse
+      get :resource_pictures
+      get :by_license_group
+      get :by_system_picture
     end
   end
-  resources :license_groups do
+  resources :authors do
+    new do
+      get :new
+    end
     collection do
       get :index
       get :show
-      get :list
+      get :count
+      post :create
     end
     member do
-      get :browse
+      get :scrolls
+      get :scroll_panels
+      get :comics
+      get :stories
+      get :story_sheets
+      get :sheets
+      get :sheet_panels
+      get :panels
+      get :panel_pictures
+      get :speech_balloons
+      get :ground_pictures
+      get :ground_colors
+      get :edit
+      put :update
       delete :destroy
     end
   end
-  resources :original_picture_license_groups do
+  resources :artists do
     new do
-      post :new
+      get :new
     end
     collection do
+      get :index
+      get :show
+      get :count
       post :create
     end
+    member do
+      get :resource_pictures
+      get :edit
+      put :update
+      delete :destroy
+    end
   end
   resources :system_pictures do
     collection do
       get :index
       get :show
-      get :list
     end
     member do
-      get :browse
+      #get :balloons
+      get :speech_balloon_templates
+      get :licenses
       delete :destroy
     end
   end
+  resources :original_picture_license_groups do
+    new do
+      post :new
+    end
+    collection do
+      post :create
+    end
+  end
   resources :provider_sources do
     collection do
       get :index
index 7b5b00b..45e0aaf 100644 (file)
@@ -2,10 +2,18 @@ class Pettanr::Content < Pettanr::Item
   self.abstract_class = true
   # ClassMethods
   
+  def self.owner_model
+    nil
+  end
+  
   def self.owner_type
     :author
   end
   
+  def self.content?
+    true
+  end
+  
   def self.operator operators
     case self.owner_type
     when :author
@@ -30,7 +38,7 @@ class Pettanr::Content < Pettanr::Item
   #InstanceMethods
   
   def owner_model
-    self
+    self.class.owner_model ? self.__send__(self.class.owner_model.item_name) : self
   end
   
   def visible? operators
index 3716f0a..5e4aa45 100644 (file)
@@ -18,6 +18,14 @@ class Pettanr::Item < ActiveRecord::Base
     self.singular.underscore
   end
   
+  def self.item?
+    true
+  end
+  
+  def self.content?
+    false
+  end
+  
   def self.path_name with_engine = false
     self.plural.underscore
   end
index fff689e..cfb5124 100644 (file)
@@ -55,6 +55,7 @@ module Pettanr
       end
       list_name = @controller_manifest.list_name action_name
       @list = @manifest.list_managers[name].open(list_name, params[:page], params[:page_size], operators)
+      raise "undefined controller for #{@item_name}::#{action_name}\nconf:#{@controller_conf}\n" unless @actions[action_name]
       @actions[action_name].new action_name, name, operators, @list, @controller_conf, @manifest
     end
     
index 811435a..21d94d7 100644 (file)
@@ -355,9 +355,14 @@ module Pettanr
         @date = date
         @edit = edit
         @manifest = manifest
-        @file_items = @items.map {|item| 
-          FileItem.new item, operators, symbol, caption, summary, icon, date, edit, manifest
-        }
+        begin
+          @file_items = @items.map {|item| 
+            FileItem.new item, operators, symbol, caption, summary, icon, date, edit, manifest
+          }
+        rescue
+          raise "List define err for #{@item_name} in #{@items}\n"
+          
+        end
       end
         
       def model_name
index 88ca897..8707b4c 100644 (file)
@@ -16,6 +16,10 @@ module Pettanr
         @model = @item_name.classify.constantize
         @offset = (@page -1) * @page_size
         @table_name = @model.table_name
+       if @model.content?
+          @owner_model = @model.owner_model
+          @owner_table_name = @owner_model.table_name if @owner_model
+        end
       end
       
       def page_number prm = nil
@@ -36,7 +40,7 @@ module Pettanr
       end
       
       def includes
-        @model.list_opt
+        @owner_model ? {@owner_model.item_name => {}} : {}
       end
       
       def order
@@ -48,7 +52,8 @@ module Pettanr
       end
       
       def paginate
-        Kaminari.paginate_array(Array.new(@model.where(self.where()).includes(self.includes).count, nil)).page(@offset).per(@page_size)
+        c = @model.where(self.where()).includes(self.includes).count
+        Kaminari.paginate_array(Array.new(c, nil)).page(@offset).per(@page_size)
       end
       
     end
@@ -56,25 +61,6 @@ module Pettanr
     class PublicList < BaseList
     end
     
-    class SystemResourceList < BaseList
-      def items
-        @model.where(self.where()).includes(@model.list_opt).order(@model.order).offset(@offset).limit(@page_size).delete_if {|sbt|
-          Pettanr::Application.manifest.system_resources.speech_balloon_templates[sbt.classname] == nil
-        }
-      end
-      
-      def all_items
-        @model.where(self.where()).includes(@model.list_opt).order(@model.order).delete_if {|sbt|
-          Pettanr::Application.manifest.system_resources.speech_balloon_templates[sbt.classname] == nil
-        }
-      end
-      
-      def paginate
-        Kaminari.paginate_array(Array.new(@model.where(self.where()).includes(@model.list_opt).count, nil)).page(@offset).per(@page_size)
-      end
-      
-    end
-    
     class PrivateList < BaseList
       def where 
         case @model.owner_type
@@ -83,7 +69,8 @@ module Pettanr
         when :artist
           operator = @operators.artist
         end
-        [@model.plural + '.' + @model.owner_type.to_s + '_id = ?', operator.id]
+        t = @owner_model ? @owner_table_name : @table_name
+        [t + '.' + @model.owner_type.to_s + '_id = ?', operator.id]
       end
      
     end
@@ -97,18 +84,19 @@ module Pettanr
         @association_model_name = @association_conf['model']
         @association_model = @association_model_name.classify.constantize
         @foreign_key = @association_conf['foreign_key']
-        @with_model_name = @association_conf['with']
       end
       
       def where parent_item
         w = @model.list_where
         w += ' and ' unless w.blank?
+        t = @owner_model ? @owner_table_name : @table_name
         [w + @association_model_name + '.' + @foreign_key + ' = ?', parent_item.id] 
       end
       
       def includes
-        w = @with_model_name ? {@with_model_name.classify.constantize.table_name => {}} : {}
-        {@association_model.table_name => w }
+     @with_model_name ? {@with_model_name.classify.constantize.table_name => {}} : {}
+        w = @owner_model ? {@owner_model.item_name => {}} : {}
+        w.merge({@association_model.table_name => {} }) 
       end
       
       def items parent_item
@@ -116,7 +104,7 @@ module Pettanr
       end
       
       def paginate parent_item
-        Kaminari.paginate_array(Array.new(@model.where(self.where(parent_item)).includes(self.includes).count, nil)).page(@offset).per(@page_size)
+        Kaminari.paginate_array(Array.new(@model.where(self.where(parent_item).includes(self.includes)).count, nil)).page(@offset).per(@page_size)
       end
       
     end
@@ -138,8 +126,8 @@ module Pettanr
       end
       
       def includes
-        w = @with_model_name ? {@with_model_name => {}} : {}
-        {@from => w }
+        w = @owner_model ? {@owner_model.item_name => {}} : {}
+        w.merge({@from => {} }) 
       end
       
       def items filter_item
@@ -147,45 +135,46 @@ module Pettanr
       end
       
       def paginate filter_item
-        Kaminari.paginate_array(Array.new(@model.where(self.where(filter_item)).includes(self.includes).count, nil)).page(@offset).per(@page_size)
+        Kaminari.paginate_array(Array.new(@model.where(self.where(filter_item).includes(self.includes)).count, nil)).page(@offset).per(@page_size)
       end
       
     end
     
-    class WithFilterList < FilterList
+    class ThroughFilterList < FilterList
       def initialize page, page_size, operators, item_name, list_name, conf, manifest
         super
-        @with = @list_list_conf['with']
+        @through = @list_list_conf['through']
       end
       
       def includes
-        {@from => {@with => {}} }
+        {@through => {@from => {}} }
       end
       
-    end
-    
-    class ThroughFilterList < FilterList
-      def initialize page, page_size, operators, item_name, list_name, conf, manifest
-        super
-        @through = @list_list_conf['through']
+      def where filter_item
+        w = @model.list_where
+        w += ' and ' unless w.blank?
+        [w + @through + '.' + @filter_key + ' = ?', filter_item.id] 
       end
       
+    end
+    
+    class ElementFilterList < FilterList
       def includes
-        {@through => {@from => {}} }
+        {@owner_model.item_name => {}}
       end
       
       def where filter_item
         w = @model.list_where
         w += ' and ' unless w.blank?
-        [w + @through + '.' + @filter_key + ' = ?', filter_item.id] 
+        [w + @owner_table_name + '.' + @filter_key + ' = ?', filter_item.id] 
       end
       
     end
     
     @@types = {
-      'public' => PublicList, 'system_resource' => SystemResourceList, 'private' => PrivateList, 
-      'has_many' => HasManyList, 'filter' => FilterList, 'with_filter' => WithFilterList, 
-      'through_filter' => ThroughFilterList
+      'public' => PublicList, 'private' => PrivateList, 
+      'has_many' => HasManyList, 'filter' => FilterList, 
+      'through_filter' => ThroughFilterList, 'element_filter' => ElementFilterList
     }
     def initialize list_manifest
       @list_manifest = list_manifest
@@ -200,6 +189,7 @@ module Pettanr
     end
     
     def open list_name, page, page_size, operators
+      raise "undefined list for #{@item_name}::#{list_name}\nconf:#{@list_conf}\n" unless @lists[list_name]
       @lists[list_name].new page, page_size, operators, @item_name, list_name, @list_conf, @manifest
     end
     
index b0eb591..14d4397 100644 (file)
@@ -48,13 +48,14 @@ module Pettanr
     end
     
     class SystemResources
-      attr :conf, :licenses, :elements, :speech_balloon_templates, :writing_formats
+      attr :conf, :license_groups, :elements, :speech_balloon_templates, :writing_formats
       def initialize system_resource_conf
         @conf = system_resource_conf || {}
-        @licenses = @conf['licenses'] || {}
+        @engine_resources = @conf['engine_resources'] || {}
+        @license_groups = @engine_resources['license_groups'] || {}
+        @speech_balloon_templates = @engine_resources['speech_balloon_templates'] || {}
+        @writing_formats = @engine_resources['writing_formats'] || {}
         @elements = @conf['elements'] || {}
-        @speech_balloon_templates = @conf['speech_balloon_templates'] || {}
-        @writing_formats = @conf['writing_formats'] || {}
       end
       
     end
index 6bccdc2..0b6140e 100644 (file)
@@ -120,8 +120,10 @@ module Pettanr
       
       def each_has_many
         @has_many_conf.each do |profiler_list_name|
+          raise "undefined lists for #{profiler_list_name} in #{@lists}\n" unless @lists[profiler_list_name]
           model_name = @lists[profiler_list_name]['model_name']
           list_name = @lists[profiler_list_name]['list_name']
+          raise "undefined has_many list for #{model_name}::#{list_name}\nconf:#{@controller_conf}\n" unless @manifest.list_managers[model_name]
           list = @manifest.list_managers[model_name].open(list_name, 1, 3, @operators)
           items = list.items @item
           has_many_filer = @manifest.filer_managers[model_name].open model_name, items, @operators, nil
index 8caed78..0351a42 100644 (file)
@@ -1,8 +1,9 @@
 namespace :licenses do
   desc "Import json format license data in license engine"
   task :import => :environment do
-    licenses = YAML.load(open(Rails.root + 'config/license.yml').read)
-    licenses.each do |name, klass|
+    Pettanr::Application.manifest = JSON.parse(open(Rails.root + 'public/manifest.json').read)
+    licenses = Pettanr::Application.manifest.system_resources.license_groups
+    licenses.each do |klass, name|
       puts name + "\n"
       system 'rake ' + name + ':import'
     end
@@ -10,8 +11,9 @@ namespace :licenses do
   
   desc "Copy migration file for license "
   task :install => :environment do
-    licenses = YAML.load(open(Rails.root + 'config/license.yml').read)
-    licenses.each do |name, klass|
+    Pettanr::Application.manifest = JSON.parse(open(Rails.root + 'public/manifest.json').read)
+    licenses = Pettanr::Application.manifest.system_resources.license_groups
+    licenses.each do |klass, name|
       puts name + "\n"
       system 'rake ' + name + ':install:migrations'
     end
index eb6f9f6..bac19d8 100644 (file)
@@ -1,8 +1,9 @@
 namespace :speech_balloons do
   desc "Import json format speech balloon data in speech balloon engine"
   task :import => :environment do
-    speech_balloons = YAML.load(open(Rails.root + 'config/speech_balloon.yml').read)
-    speech_balloons.each do |klass , name|
+    Pettanr::Application.manifest = JSON.parse(open(Rails.root + 'public/manifest.json').read)
+    speech_balloon_templates = Pettanr::Application.manifest.system_resources.speech_balloon_templates
+    speech_balloon_templates.each do |klass , name|
       puts name + "\n"
       system 'rake ' + name + ':import'
     end
@@ -10,8 +11,9 @@ namespace :speech_balloons do
   
   desc "Copy migration file for speech balloon "
   task :install => :environment do
-    speech_balloons = YAML.load(open(Rails.root + 'config/speech_balloon.yml').read)
-    speech_balloons.each do |klass , name|
+    Pettanr::Application.manifest = JSON.parse(open(Rails.root + 'public/manifest.json').read)
+    speech_balloon_templates = Pettanr::Application.manifest.system_resources.speech_balloon_templates
+    speech_balloon_templates.each do |klass , name|
       puts name + "\n"
       system 'rake ' + name + ':install:migrations'
     end
index d8cd316..232f777 100644 (file)
             "list_name": "public_list"\r
           }\r
         },\r
+        "scroll_panels": {\r
+          "type": "list",\r
+          "list": {\r
+            "list_name": "scroll_panels"\r
+          }\r
+        },\r
+        "scrolls": {\r
+          "type": "list",\r
+          "list": {\r
+            "list_name": "scrolls"\r
+          }\r
+        },\r
+        "sheet_panels": {\r
+          "type": "list",\r
+          "list": {\r
+            "list_name": "sheet_panels"\r
+          }\r
+        },\r
+        "sheets": {\r
+          "type": "list",\r
+          "list": {\r
+            "list_name": "sheets"\r
+          }\r
+        },\r
+        "panel_pictures": {\r
+          "type": "list",\r
+          "list": {\r
+            "list_name": "panel_pictures"\r
+          }\r
+        },\r
+        "speech_balloons": {\r
+          "type": "list",\r
+          "list": {\r
+            "list_name": "speech_balloons"\r
+          }\r
+        },\r
+        "ground_pictures": {\r
+          "type": "list",\r
+          "list": {\r
+            "list_name": "ground_pictures"\r
+          }\r
+        },\r
+        "ground_colors": {\r
+          "type": "list",\r
+          "list": {\r
+            "list_name": "ground_colors"\r
+          }\r
+        },\r
         "by_scroll": {\r
           "type": "list",\r
           "list": {\r
           "list": {\r
             "list_name": "by_author"\r
           }\r
+        },\r
+        "by_speech_balloon_template": {\r
+          "type": "list",\r
+          "list": {\r
+            "list_name": "by_speech_balloon_template"\r
+          }\r
         }\r
       }\r
     },\r
           "list": {\r
             "list_name": "public_list"\r
           }\r
+        },\r
+        "by_panel": {\r
+          "type": "list",\r
+          "list": {\r
+            "list_name": "by_panel"\r
+          }\r
+        },\r
+        "by_author": {\r
+          "type": "list",\r
+          "list": {\r
+            "list_name": "by_author"\r
+          }\r
         }\r
       }\r
     },\r
           "list": {\r
             "list_name": "public_list"\r
           }\r
+        },\r
+        "by_panel": {\r
+          "type": "list",\r
+          "list": {\r
+            "list_name": "by_panel"\r
+          }\r
+        },\r
+        "by_author": {\r
+          "type": "list",\r
+          "list": {\r
+            "list_name": "by_author"\r
+          }\r
         }\r
       }\r
     },\r
           "list": {\r
             "list_name": "public_list"\r
           }\r
+        },\r
+        "by_writing_format": {\r
+          "type": "list",\r
+          "list": {\r
+            "list_name": "by_writing_format"\r
+          }\r
         }\r
       }\r
     },\r
           "list": {\r
             "list_name": "public_list"\r
           }\r
+        },\r
+        "by_panel": {\r
+          "type": "list",\r
+          "list": {\r
+            "list_name": "by_panel"\r
+          }\r
+        },\r
+        "by_author": {\r
+          "type": "list",\r
+          "list": {\r
+            "list_name": "by_author"\r
+          }\r
         }\r
       }\r
     },\r
           "list": {\r
             "list_name": "public_list"\r
           }\r
+        },\r
+        "by_panel": {\r
+          "type": "list",\r
+          "list": {\r
+            "list_name": "by_panel"\r
+          }\r
+        },\r
+        "by_author": {\r
+          "type": "list",\r
+          "list": {\r
+            "list_name": "by_author"\r
+          }\r
         }\r
       }\r
     },\r
           "list": {\r
             "list_name": "public_list"\r
           }\r
+        },\r
+        "speech_balloons": {\r
+          "type": "list",\r
+          "list": {\r
+            "list_name": "speech_balloons"\r
+          }\r
+        },\r
+        "panels": {\r
+          "type": "list",\r
+          "list": {\r
+            "list_name": "panels"\r
+          }\r
         }\r
       }\r
     },\r
           "list": {\r
             "list_name": "public_list"\r
           }\r
+        },\r
+        "speeches": {\r
+          "type": "list",\r
+          "list": {\r
+            "list_name": "speeches"\r
+          }\r
+        },\r
+        "by_system_picture": {\r
+          "type": "list",\r
+          "list": {\r
+            "list_name": "by_system_picture"\r
+          }\r
         }\r
       }\r
     },\r
           "list": {\r
             "list_name": "public_list"\r
           }\r
+        },\r
+        "licenses": {\r
+          "type": "list",\r
+          "list": {\r
+            "list_name": "licenses"\r
+          }\r
         }\r
       }\r
     },\r
           "list": {\r
             "list_name": "public_list"\r
           }\r
+        },\r
+        "resource_pictures": {\r
+          "type": "list",\r
+          "list": {\r
+            "list_name": "resource_pictures"\r
+          }\r
+        },\r
+        "by_license_group": {\r
+          "type": "list",\r
+          "list": {\r
+            "list_name": "by_license_group"\r
+          }\r
+        },\r
+        "by_system_picture": {\r
+          "type": "list",\r
+          "list": {\r
+            "list_name": "by_system_picture"\r
+          }\r
         }\r
       }\r
     },\r
           "list": {\r
             "list_name": "public_list"\r
           }\r
+        },\r
+        "scrolls": {\r
+          "type": "list",\r
+          "list": {\r
+            "list_name": "scrolls"\r
+          }\r
+        },\r
+        "comics": {\r
+          "type": "list",\r
+          "list": {\r
+            "list_name": "comics"\r
+          }\r
+        },\r
+        "stories": {\r
+          "type": "list",\r
+          "list": {\r
+            "list_name": "stories"\r
+          }\r
+        },\r
+        "sheets": {\r
+          "type": "list",\r
+          "list": {\r
+            "list_name": "sheets"\r
+          }\r
+        },\r
+        "panels": {\r
+          "type": "list",\r
+          "list": {\r
+            "list_name": "panels"\r
+          }\r
+        },\r
+        "panel_pictures": {\r
+          "type": "list",\r
+          "list": {\r
+            "list_name": "panel_pictures"\r
+          }\r
+        },\r
+        "speech_balloons": {\r
+          "type": "list",\r
+          "list": {\r
+            "list_name": "speech_balloons"\r
+          }\r
+        },\r
+        "ground_pictures": {\r
+          "type": "list",\r
+          "list": {\r
+            "list_name": "ground_pictures"\r
+          }\r
+        },\r
+        "ground_colors": {\r
+          "type": "list",\r
+          "list": {\r
+            "list_name": "ground_colors"\r
+          }\r
         }\r
       }\r
     },\r
           "list": {\r
             "list_name": "public_list"\r
           }\r
+        },\r
+        "resource_pictures": {\r
+          "type": "list",\r
+          "list": {\r
+            "list_name": "resource_pictures"\r
+          }\r
         }\r
       }\r
     },\r
           "list": {\r
             "list_name": "private_list"\r
           }\r
-        }\r
-      }\r
-    }\r
-  },\r
-  "lists": {\r
-    "scroll": {\r
-      "default_page_size": 25,\r
-      "max_page_size": 100,\r
-      "lists": {\r
-        "public_list": {\r
-          "type": "public"\r
-        },\r
-        "private_list": {\r
-          "type": "private"\r
         },\r
         "scroll_panels": {\r
-          "type": "has_many",\r
-          "association_name": "scroll_panels"\r
+          "item_name": "scroll_panel",\r
+          "type": "list",\r
+          "list": {\r
+            "list_name": "private_list"\r
+          }\r
         },\r
-        "panels": {\r
-          "type": "has_many",\r
-          "association_name": "panels"\r
+        "comics": {\r
+          "item_name": "comic",\r
+          "type": "list",\r
+          "list": {\r
+            "list_name": "private_list"\r
+          }\r
         },\r
-        "by_author": {\r
-          "type": "filter",\r
-          "from": "author",\r
-          "filter_key": "author_id"\r
+        "stories": {\r
+          "item_name": "story",\r
+          "type": "list",\r
+          "list": {\r
+            "list_name": "private_list"\r
+          }\r
         },\r
-        "by_panel": {\r
-          "type": "through_filter",\r
-          "from": "panel",\r
-          "through": "scroll_panels",\r
-          "filter_key": "panel_id"\r
-        }\r
-      }\r
-    },\r
-    "scroll_panel": {\r
-      "default_page_size": 20,\r
-      "lists": {\r
-        "public_list": {\r
-          "type": "public"\r
+        "story_sheets": {\r
+          "item_name": "story_sheet",\r
+          "type": "list",\r
+          "list": {\r
+            "list_name": "private_list"\r
+          }\r
         },\r
-        "private_list": {\r
-          "type": "private"\r
+        "sheets": {\r
+          "item_name": "sheet",\r
+          "type": "list",\r
+          "list": {\r
+            "list_name": "private_list"\r
+          }\r
         },\r
-        "by_scroll": {\r
-          "type": "filter",\r
-          "from": "scroll",\r
-          "filter_key": "scroll_id"\r
+        "sheet_panels": {\r
+          "item_name": "sheet_panel",\r
+          "type": "list",\r
+          "list": {\r
+            "list_name": "private_list"\r
+          }\r
         },\r
-        "by_panel": {\r
-          "type": "filter",\r
-          "from": "panel",\r
-          "filter_key": "panel_id"\r
-        }\r
-      }\r
-    },\r
-    "comic": {\r
-      "default_page_size": 20,\r
-      "lists": {\r
-        "public_list": {\r
-          "type": "public"\r
+        "panels": {\r
+          "item_name": "panel",\r
+          "type": "list",\r
+          "list": {\r
+            "list_name": "private_list"\r
+          }\r
         },\r
-        "private_list": {\r
-          "type": "private"\r
+        "panel_pictures": {\r
+          "item_name": "panel_picture",\r
+          "type": "list",\r
+          "list": {\r
+            "list_name": "private_list"\r
+          }\r
         },\r
-        "stories": {\r
-          "type": "has_many",\r
-          "association_name": "stories"\r
+        "speech_balloons": {\r
+          "item_name": "speech_balloon",\r
+          "type": "list",\r
+          "list": {\r
+            "list_name": "private_list"\r
+          }\r
         },\r
-        "by_author": {\r
-          "type": "filter",\r
-          "from": "author",\r
-          "filter_key": "author_id"\r
-        }\r
-      }\r
-    },\r
-    "story": {\r
-      "default_page_size": 20,\r
-      "lists": {\r
-        "public_list": {\r
-          "type": "public"\r
+        "speeches": {\r
+          "item_name": "speech",\r
+          "type": "list",\r
+          "list": {\r
+            "list_name": "private_list"\r
+          }\r
         },\r
-        "private_list": {\r
-          "type": "private"\r
+        "balloons": {\r
+          "item_name": "balloon",\r
+          "type": "list",\r
+          "list": {\r
+            "list_name": "private_list"\r
+          }\r
         },\r
-        "story_sheets": {\r
-          "type": "has_many",\r
-          "association_name": "story_sheets"\r
+        "ground_pictures": {\r
+          "item_name": "ground_picture",\r
+          "type": "list",\r
+          "list": {\r
+            "list_name": "private_list"\r
+          }\r
         },\r
-        "sheets": {\r
-          "type": "has_many",\r
-          "association_name": "sheets"\r
+        "ground_colors": {\r
+          "item_name": "ground_color",\r
+          "type": "list",\r
+          "list": {\r
+            "list_name": "private_list"\r
+          }\r
         },\r
-        "by_comic": {\r
-          "type": "filter",\r
-          "from": "comic",\r
-          "filter_key": "comic_id"\r
+        "original_pictures": {\r
+          "item_name": "original_picture",\r
+          "type": "list",\r
+          "list": {\r
+            "list_name": "private_list"\r
+          }\r
         },\r
-        "by_sheet": {\r
-          "type": "through_filter",\r
-          "from": "sheet",\r
-          "through": "sheet_panels",\r
-          "filter_key": "sheet_id"\r
+        "resource_pictures": {\r
+          "item_name": "resource_picture",\r
+          "type": "list",\r
+          "list": {\r
+            "list_name": "private_list"\r
+          }\r
         }\r
       }\r
-    },\r
-    "story_sheet": {\r
-      "default_page_size": 20,\r
-      "lists": {\r
-        "public_list": {\r
-          "type": "public"\r
-        },\r
-        "private_list": {\r
-          "type": "private"\r
-        },\r
-        "by_story": {\r
-          "type": "filter",\r
-          "from": "story",\r
-          "filter_key": "story_id"\r
+    }\r
+  },\r
+  "models": {\r
+    "Scroll": "scroll",\r
+    "scroll": {\r
+      "class_name": "Scroll",\r
+      "table_name": "scrolls",\r
+      "associations": {\r
+        "belongs_to": {\r
+          "author": {\r
+            "id_column": "author_id"\r
+          }\r
         },\r
-        "by_sheet": {\r
-          "type": "filter",\r
-          "with": "story",\r
-          "from": "sheet",\r
-          "filter_key": "sheet_id"\r
+        "has_many": {\r
+          "scroll_panels": {\r
+            "foreign_key": "scroll_id",\r
+            "model": "scroll_panel"\r
+          },\r
+          "panels": {\r
+            "through": "scroll_panel",\r
+            "foreign_key": "scroll_id",\r
+            "model": "panel"\r
+          }\r
         }\r
-      }\r
-    },\r
-    "sheet": {\r
-      "default_page_size": 20,\r
-      "lists": {\r
-        "public_list": {\r
-          "type": "public"\r
-        },\r
-        "private_list": {\r
-          "type": "private"\r
-        },\r
-        "story_sheets": {\r
-          "type": "has_many",\r
-          "association_name": "story_sheets"\r
+      },\r
+      "attributes": {\r
+        "id": {\r
+          "type": "number",\r
+          "primary_key": 1,\r
+          "rules": {\r
+            "number": true\r
+          }\r
         },\r
-        "stories": {\r
-          "type": "has_many",\r
-          "association_name": "stories"\r
+        "title": {\r
+          "type": "text",\r
+          "rules": {\r
+            "required": true\r
+          }\r
         },\r
-        "sheet_panels": {\r
-          "type": "has_many",\r
-          "association_name": "sheet_panels"\r
+        "description": {\r
+          "type": "text",\r
+          "rules": {}\r
         },\r
-        "panels": {\r
-          "type": "has_many",\r
-          "association_name": "panels"\r
+        "visible": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true\r
+          },\r
+          "source": {\r
+            "type": "magic_number",\r
+            "key": "scroll_visible_items"\r
+          }\r
         },\r
-        "by_story": {\r
-          "type": "through_filter",\r
-          "from": "story",\r
-          "through": "story_sheets",\r
-          "filter_key": "story_id"\r
+        "author_id": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true\r
+          }\r
         },\r
-        "by_panel": {\r
-          "type": "through_filter",\r
-          "from": "panel",\r
-          "through": "sheet_panels",\r
-          "filter_key": "panel_id"\r
+        "created_at": {\r
+          "type": "datetime"\r
         },\r
-        "by_author": {\r
-          "type": "filter",\r
-          "from": "author",\r
-          "filter_key": "author_id"\r
+        "updated_at": {\r
+          "type": "datetime"\r
         }\r
-      }\r
-    },\r
-    "sheet_panel": {\r
-      "default_page_size": 20,\r
-      "lists": {\r
-        "public_list": {\r
-          "type": "public"\r
-        },\r
-        "private_list": {\r
-          "type": "private"\r
-        },\r
-        "by_sheet": {\r
-          "type": "filter",\r
-          "association_name": "sheet_panels",\r
-          "from": "sheet",\r
-          "filter_key": "sheet_id"\r
+      },\r
+      "select": {\r
+        "list": {\r
+          "name": "public"\r
         },\r
-        "by_panel": {\r
-          "type": "filter",\r
-          "from": "panel",\r
-          "filter_key": "panel_id"\r
+        "caption": {\r
+          "type": "column",\r
+          "name": "title"\r
         }\r
       }\r
     },\r
-    "panel": {\r
-      "default_page_size": 20,\r
-      "lists": {\r
-        "public_list": {\r
-          "type": "public"\r
-        },\r
-        "scroll_panels": {\r
-          "type": "has_many",\r
-          "association_name": "scroll_panels"\r
+    "ScrollPanel": "scroll_panel",\r
+    "scroll_panel": {\r
+      "class_name": "ScrollPanel",\r
+      "table_name": "scroll_panels",\r
+      "associations": {\r
+        "belongs_to": {\r
+          "panel": {\r
+            "id_column": "panel_id"\r
+          },\r
+          "scroll": {\r
+            "id_column": "scroll_id"\r
+          }\r
         },\r
-        "scrolls": {\r
-          "type": "has_many",\r
-          "association_name": "scrolls"\r
+        "has_many": {}\r
+      },\r
+      "attributes": {\r
+        "id": {\r
+          "type": "number",\r
+          "primary_key": 1,\r
+          "rules": {\r
+            "number": true\r
+          }\r
         },\r
-        "sheet_panels": {\r
-          "type": "has_many",\r
-          "association_name": "sheet_panels"\r
+        "scroll_id": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true\r
+          }\r
         },\r
-        "sheets": {\r
-          "type": "has_many",\r
-          "association_name": "sheets"\r
+        "panel_id": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true\r
+          }\r
         },\r
-        "by_scroll": {\r
-          "type": "through_filter",\r
-          "from": "scroll",\r
-          "through": "scroll_panels",\r
-          "filter_key": "scroll_id"\r
+        "t": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true,\r
+            "min": 0\r
+          }\r
         },\r
-        "by_sheet": {\r
-          "type": "through_filter",\r
-          "from": "sheet",\r
-          "through": "sheet_panels",\r
-          "filter_key": "sheet_id"\r
+        "author_id": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true\r
+          }\r
         },\r
-        "by_author": {\r
-          "type": "filter",\r
-          "from": "author",\r
-          "filter_key": "author_id"\r
-        }\r
-      }\r
-    },\r
-    "panel_picture": {\r
-      "default_page_size": 20,\r
-      "lists": {\r
-        "public_list": {\r
-          "type": "public"\r
-        }\r
-      }\r
-    },\r
-    "speech_balloon": {\r
-      "default_page_size": 20,\r
-      "lists": {\r
-        "public_list": {\r
-          "type": "public"\r
-        }\r
-      }\r
-    },\r
-    "speech": {\r
-      "default_page_size": 20,\r
-      "lists": {\r
-        "public_list": {\r
-          "type": "public"\r
-        }\r
-      }\r
-    },\r
-    "balloon": {\r
-      "default_page_size": 20,\r
-      "lists": {\r
-        "public_list": {\r
-          "type": "public"\r
+        "created_at": {\r
+          "type": "datetime"\r
+        },\r
+        "updated_at": {\r
+          "type": "datetime"\r
         }\r
       }\r
     },\r
-    "ground_picture": {\r
-      "default_page_size": 20,\r
-      "lists": {\r
-        "public_list": {\r
-          "type": "public"\r
+    "Comic": "comic",\r
+    "comic": {\r
+      "class_name": "Comic",\r
+      "table_name": "comics",\r
+      "associations": {\r
+        "belongs_to": {\r
+          "author": {\r
+            "id_column": "author_id"\r
+          }\r
+        },\r
+        "has_many": {\r
+          "stories": {\r
+            "foreign_key": "comic_id",\r
+            "model": "story"\r
+          }\r
+        },\r
+        "has_many_through": {}\r
+      },\r
+      "attributes": {\r
+        "id": {\r
+          "type": "number",\r
+          "primary_key": 1,\r
+          "rules": {\r
+            "number": true\r
+          }\r
+        },\r
+        "title": {\r
+          "type": "text",\r
+          "rules": {\r
+            "required": true\r
+          }\r
+        },\r
+        "description": {\r
+          "type": "text",\r
+          "rules": {}\r
+        },\r
+        "visible": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true\r
+          },\r
+          "source": {\r
+            "type": "magic_number",\r
+            "key": "comic_visible_items"\r
+          }\r
+        },\r
+        "author_id": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true\r
+          }\r
+        },\r
+        "created_at": {\r
+          "type": "datetime"\r
+        },\r
+        "updated_at": {\r
+          "type": "datetime"\r
         }\r
-      }\r
-    },\r
-    "ground_color": {\r
-      "default_page_size": 20,\r
-      "lists": {\r
-        "public_list": {\r
-          "type": "public"\r
+      },\r
+      "select": {\r
+        "method": "list",\r
+        "caption": {\r
+          "type": "column",\r
+          "name": "title"\r
         }\r
       }\r
     },\r
-    "original_picture": {\r
-      "default_page_size": 20,\r
-      "lists": {\r
-        "private_list": {\r
-          "type": "private"\r
+    "Story": "story",\r
+    "story": {\r
+      "class_name": "Story",\r
+      "table_name": "stories",\r
+      "associations": {\r
+        "belongs_to": {\r
+          "comic": {\r
+            "id_column": "comic_id"\r
+          }\r
+        },\r
+        "has_many": {\r
+          "story_sheets": {\r
+            "foreign_key": "story_id",\r
+            "list_method": "list_by_story"\r
+          },\r
+          "sheets": {\r
+            "through": "story_sheets",\r
+            "foreign_key": "story_id",\r
+            "list_method": "list_by_story"\r
+          }\r
         }\r
-      }\r
-    },\r
-    "picture": {},\r
-    "resource_picture": {\r
-      "default_page_size": 20,\r
-      "lists": {\r
-        "public_list": {\r
-          "type": "public"\r
+      },\r
+      "attributes": {\r
+        "id": {\r
+          "type": "number",\r
+          "primary_key": 1,\r
+          "rules": {\r
+            "number": true\r
+          }\r
         },\r
-        "by_license": {\r
-          "type": "filter",\r
-          "from": "license",\r
-          "filter_key": "license_id"\r
+        "comic_id": {\r
+          "type": "number",\r
+          "rules": {\r
+            "number": true\r
+          }\r
         },\r
-        "by_artist": {\r
-          "type": "filter",\r
-          "from": "artist",\r
-          "filter_key": "artist_id"\r
-        }\r
-      }\r
-    },\r
-    "speech_balloon_template": {\r
-      "default_page_size": 20,\r
-      "lists": {\r
-        "public_list": {\r
-          "type": "public"\r
+        "title": {\r
+          "type": "text",\r
+          "rules": {}\r
+        },\r
+        "description": {\r
+          "type": "text",\r
+          "rules": {}\r
+        },\r
+        "t": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true,\r
+            "min": 0\r
+          }\r
+        },\r
+        "visible": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true\r
+          },\r
+          "source": {\r
+            "type": "magic_number",\r
+            "key": "story_visible_items"\r
+          }\r
+        },\r
+        "created_at": {\r
+          "type": "datetime"\r
+        },\r
+        "updated_at": {\r
+          "type": "datetime"\r
         }\r
-      }\r
-    },\r
-    "writing_format": {\r
-      "default_page_size": 20,\r
-      "lists": {\r
-        "public_list": {\r
-          "type": "public"\r
+      },\r
+      "select": {\r
+        "method": "list",\r
+        "caption": {\r
+          "type": "method",\r
+          "name": "title_with_t"\r
         }\r
       }\r
     },\r
-    "license_group": {\r
-      "default_page_size": 20,\r
-      "lists": {\r
-        "public_list": {\r
-          "type": "public"\r
+    "StorySheet": "story_sheet",\r
+    "story_sheet": {\r
+      "class_name": "StorySheet",\r
+      "table_name": "story_sheets",\r
+      "associations": {\r
+        "belongs_to": {\r
+          "story": {\r
+            "id_column": "story_id"\r
+          },\r
+          "sheet": {\r
+            "id_column": "sheet_id"\r
+          }\r
+        },\r
+        "has_many": {}\r
+      },\r
+      "attributes": {\r
+        "id": {\r
+          "type": "number",\r
+          "primary_key": 1,\r
+          "rules": {\r
+            "number": true\r
+          }\r
+        },\r
+        "story_id": {\r
+          "type": "number",\r
+          "rules": {\r
+            "number": true\r
+          }\r
+        },\r
+        "sheet_id": {\r
+          "type": "number",\r
+          "rules": {\r
+            "number": true\r
+          }\r
+        },\r
+        "t": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true,\r
+            "min": 0\r
+          }\r
+        },\r
+        "author_id": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true\r
+          }\r
+        },\r
+        "created_at": {\r
+          "type": "datetime"\r
+        },\r
+        "updated_at": {\r
+          "type": "datetime"\r
         }\r
       }\r
     },\r
-    "license": {\r
-      "default_page_size": 20,\r
-      "lists": {\r
-        "public_list": {\r
-          "type": "public"\r
+    "Sheet": "sheet",\r
+    "sheet": {\r
+      "class_name": "Sheet",\r
+      "table_name": "sheets",\r
+      "associations": {\r
+        "belongs_to": {\r
+          "author": {\r
+            "id_column": "author_id"\r
+          }\r
+        },\r
+        "has_many": {\r
+          "story_sheets": {\r
+            "foreign_key": "story_id",\r
+            "list_method": "list_by_sheet"\r
+          },\r
+          "stories": {\r
+            "through": "story_sheets",\r
+            "foreign_key": "sheet_id",\r
+            "list_method": "list_by_sheet"\r
+          },\r
+          "sheet_panels": {\r
+            "foreign_key": "sheet_id",\r
+            "list_method": "list_by_sheet"\r
+          },\r
+          "panels": {\r
+            "through": "sheet_panels",\r
+            "foreign_key": "sheet_id",\r
+            "list_method": "list_by_sheet"\r
+          }\r
         }\r
-      }\r
-    },\r
-    "author": {\r
-      "default_page_size": 20,\r
-      "lists": {\r
-        "public_list": {\r
-          "type": "public"\r
+      },\r
+      "attributes": {\r
+        "id": {\r
+          "type": "number",\r
+          "primary_key": 1,\r
+          "rules": {\r
+            "number": true\r
+          }\r
+        },\r
+        "caption": {\r
+          "type": "text",\r
+          "rules": {}\r
+        },\r
+        "width": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true\r
+          }\r
+        },\r
+        "height": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true\r
+          }\r
+        },\r
+        "visible": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true\r
+          },\r
+          "source": {\r
+            "type": "magic_number",\r
+            "key": "sheet_visible_items"\r
+          }\r
+        },\r
+        "author_id": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true\r
+          }\r
+        },\r
+        "created_at": {\r
+          "type": "datetime"\r
+        },\r
+        "updated_at": {\r
+          "type": "datetime"\r
         }\r
-      }\r
-    },\r
-    "artist": {\r
-      "default_page_size": 20,\r
-      "lists": {\r
-        "public_list": {\r
-          "type": "public"\r
+      },\r
+      "select": {\r
+        "method": "list",\r
+        "caption": {\r
+          "type": "column",\r
+          "name": "caption"\r
         }\r
       }\r
     },\r
-    "system_picture": {\r
-      "default_page_size": 20,\r
-      "lists": {\r
-        "public_list": {\r
-          "type": "public"\r
+    "SheetPanel": "sheet_panel",\r
+    "sheet_panel": {\r
+      "class_name": "SheetPanel",\r
+      "table_name": "sheet_panels",\r
+      "associations": {\r
+        "belongs_to": {\r
+          "sheet": {\r
+            "id_column": "sheet_id"\r
+          },\r
+          "panel": {\r
+            "id_column": "panel_id"\r
+          }\r
+        },\r
+        "has_many": {}\r
+      },\r
+      "attributes": {\r
+        "id": {\r
+          "type": "number",\r
+          "primary_key": 1,\r
+          "rules": {\r
+            "number": true\r
+          }\r
+        },\r
+        "sheet_id": {\r
+          "type": "number",\r
+          "rules": {\r
+            "number": true\r
+          }\r
+        },\r
+        "panel_id": {\r
+          "type": "number",\r
+          "rules": {\r
+            "number": true\r
+          }\r
+        },\r
+        "x": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true\r
+          }\r
+        },\r
+        "y": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true\r
+          }\r
+        },\r
+        "z": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true,\r
+            "min": 1\r
+          }\r
+        },\r
+        "t": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true,\r
+            "min": 0\r
+          }\r
+        },\r
+        "author_id": {\r
+          "type": "number",\r
+          "rules": {\r
+            "number": true\r
+          }\r
+        },\r
+        "created_at": {\r
+          "type": "datetime"\r
+        },\r
+        "updated_at": {\r
+          "type": "datetime"\r
         }\r
       }\r
-    }\r
-  },\r
-  "system_resources": {\r
-    "licenses": {\r
-      "pettanr_creative_commons_v30_licenses": "PettanrCreativeCommonsV30Licenses",\r
-      "pettanr_pettan_commons_v01_licenses": "PettanrPettanCommonsV01Licenses",\r
-      "pettanr_pettan_protected_v01_licenses": "PettanrPettanProtectedV01Licenses",\r
-      "pettanr_pettan_public_v01_licenses": "PettanrPettanPublicV01Licenses",\r
-      "pettanr_public_domain_v01_licenses": "PettanrPublicDomainV01Licenses",\r
-      "pettanr_unknown_v01_licenses": "PettanrUnknownV01Licenses"\r
     },\r
-    "elements": {\r
-      "PanelPicture": "panel_pictures",\r
-      "SpeechBalloon": "speech_balloons",\r
-      "GroundPicture": "ground_pictures",\r
-      "GroundColor": "ground_colors"\r
-    },\r
-    "speech_balloon_templates": {\r
-      "CircleSpeechBalloon": "circle_speech_balloon",\r
-      "PlainSpeechBalloon": "plain_speech_balloon",\r
-      "SquareSpeechBalloon": "square_speech_balloon"\r
-    },\r
-    "writing_formats": {\r
-      "SimpleFormat": "pettanr_simple_format"\r
-    }\r
-  },\r
-  "magic_numbers": {\r
-    "run_mode": 1,\r
-    "thumbnail_width": 64,\r
-    "thumbnail_height": 64,\r
-    "profile": {\r
-      "users": {\r
-        "caption": "ペンギン王国",\r
-        "url": "http://localhost:3001/",\r
-        "description": "ペンギン王国はペンギン素材を豊富に用意したペンギンマニアのサイトです。"\r
+    "Panel": "panel",\r
+    "panel": {\r
+      "class_name": "Panel",\r
+      "table_name": "panels",\r
+      "associations": {\r
+        "belongs_to": {\r
+          "author": {\r
+            "id_column": "author_id"\r
+          }\r
+        },\r
+        "has_many": {\r
+          "scroll_panels": {\r
+            "foreign_key": "panel_id",\r
+            "list_method": "list_by_panel"\r
+          },\r
+          "scrolls": {\r
+            "through": "scroll_panels",\r
+            "foreign_key": "panel_id",\r
+            "list_method": "list_by_panel"\r
+          },\r
+          "sheet_panels": {\r
+            "foreign_key": "panel_id",\r
+            "list_method": "list_by_panel"\r
+          },\r
+          "sheets": {\r
+            "through": "sheet_panels",\r
+            "foreign_key": "panel_id",\r
+            "list_method": "list_by_panel"\r
+          },\r
+          "panel_pictures": {\r
+            "foreign_key": "panel_id",\r
+            "list_method": "list_by_panel"\r
+          },\r
+          "speech_balloons": {\r
+            "foreign_key": "panel_id",\r
+            "list_method": "list_by_panel"\r
+          },\r
+          "ground_pictures": {\r
+            "foreign_key": "panel_id",\r
+            "list_method": "list_by_panel"\r
+          },\r
+          "ground_colors": {\r
+            "foreign_key": "panel_id",\r
+            "list_method": "list_by_panel"\r
+          }\r
+        }\r
       },\r
-      "admins": {\r
-        "caption": "site name for admin",\r
-        "url": "http://your.site.url/admins/",\r
-        "description": "admin register"\r
+      "attributes": {\r
+        "id": {\r
+          "type": "number",\r
+          "primary_key": 1,\r
+          "rules": {\r
+            "number": true\r
+          }\r
+        },\r
+        "width": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true,\r
+            "min": 1\r
+          }\r
+        },\r
+        "height": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true,\r
+            "min": 1\r
+          }\r
+        },\r
+        "border": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true,\r
+            "min": 0\r
+          }\r
+        },\r
+        "caption": {\r
+          "type": "text",\r
+          "rules": {}\r
+        },\r
+        "publish": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true\r
+          },\r
+          "source": {\r
+            "type": "magic_number",\r
+            "key": "panel_visible_items"\r
+          }\r
+        },\r
+        "author_id": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true\r
+          }\r
+        },\r
+        "created_at": {\r
+          "type": "datetime"\r
+        },\r
+        "updated_at": {\r
+          "type": "datetime"\r
+        }\r
       },\r
-      "demand_users": {\r
-        "caption": "provider name",\r
-        "url": "http://your.site.url/demanders/",\r
-        "description": "provider description"\r
+      "select": {\r
+        "method": "list",\r
+        "caption": {\r
+          "type": "method",\r
+          "name": "plain_scenario"\r
+        }\r
       }\r
     },\r
-    "provider_sources": [\r
-      "http://sourceforge.jp/projects/pettanr/wiki/ProviderSource/attach/provider_source.json"\r
-    ]\r
-  },\r
-  "select_items": {\r
-    "provider_status_status_items": [\r
-      [\r
-        "select_items.provider_status.status.waiting",\r
-        0\r
-      ],\r
-      [\r
-        "select_items.provider_status.status.receiving",\r
-        1\r
-      ]\r
-    ],\r
-    "demander_status_status_items": [\r
-      [\r
-        "select_items.demander_status.status.waiting",\r
-        0\r
-      ],\r
-      [\r
-        "select_items.demander_status.status.rejected",\r
-        1\r
-      ],\r
-      [\r
-        "select_items.demander_status.status.requesting",\r
-        2\r
-      ],\r
-      [\r
-        "select_items.demander_status.status.approved",\r
-        3\r
-      ]\r
-    ],\r
-    "scroll_visible_items": [\r
-      [\r
-        "select_items.scroll.visible.private",\r
-        0\r
-      ],\r
-      [\r
-        "select_items.scroll.visible.public",\r
-        1\r
-      ]\r
-    ],\r
-    "comic_visible_items": [\r
-      [\r
-        "select_items.comic.visible.private",\r
-        0\r
-      ],\r
-      [\r
-        "select_items.comic.visible.public",\r
-        1\r
-      ]\r
-    ],\r
-    "story_visible_items": [\r
-      [\r
-        "select_items.story.visible.private",\r
-        0\r
-      ],\r
-      [\r
-        "select_items.story.visible.public",\r
-        1\r
-      ]\r
-    ],\r
-    "sheet_visible_items": [\r
-      [\r
-        "select_items.sheet.visible.private",\r
-        0\r
-      ],\r
-      [\r
-        "select_items.sheet.visible.public",\r
-        1\r
-      ]\r
-    ],\r
-    "panel_visible_items": [\r
-      [\r
-        "select_items.panel.visible.private",\r
-        0\r
-      ],\r
-      [\r
-        "select_items.panel.visible.public",\r
-        1\r
-      ]\r
-    ],\r
-    "ground_picture_repeat_items": [\r
-      [\r
-        "select_items.ground_pictures.repeat.repeat",\r
-        0\r
-      ],\r
-      [\r
-        "select_items.ground_pictures.repeat.repeat-x",\r
-        1\r
-      ],\r
-      [\r
-        "select_items.ground_pictures.repeat.repeat-y",\r
-        2\r
-      ],\r
-      [\r
-        "select_items.ground_pictures.repeat.no-repeat",\r
-        3\r
-      ]\r
-    ],\r
-    "ground_color_orientation_items": [\r
-      [\r
-        "select_items.ground_color.orientation.horizontal",\r
-        0\r
-      ],\r
-      [\r
-        "select_items.ground_color.orientation.vertical",\r
-        1\r
-      ]\r
-    ],\r
-    "speech_font_size_items": [\r
-      [\r
-        "select_items.speeches.font_size.ultra_small",\r
-        0.2\r
-      ],\r
-      [\r
-        "select_items.speeches.font_size.very_small",\r
-        0.4\r
-      ],\r
-      [\r
-        "select_items.speeches.font_size.small",\r
-        0.6\r
-      ],\r
-      [\r
-        "select_items.speeches.font_size.semi_small",\r
-        0.8\r
-      ],\r
-      [\r
-        "select_items.speeches.font_size.normal",\r
-        1\r
-      ],\r
-      [\r
-        "select_items.speeches.font_size.semi_large",\r
-        1.5\r
-      ],\r
-      [\r
-        "select_items.speeches.font_size.large",\r
-        2\r
-      ],\r
-      [\r
-        "select_items.speeches.font_size.very_large",\r
-        3.5\r
-      ],\r
-      [\r
-        "select_items.speeches.font_size.ultra_large",\r
-        5\r
-      ]\r
-    ],\r
-    "speech_text_align_items": [\r
-      [\r
-        "select_items.speeches.text_align.none",\r
-        0\r
-      ],\r
-      [\r
-        "select_items.speeches.text_align.left",\r
-        1\r
-      ],\r
-      [\r
-        "select_items.speeches.text_align.right",\r
-        2\r
-      ],\r
-      [\r
-        "select_items.speeches.text_align.center",\r
-        3\r
-      ]\r
-    ]\r
-  },\r
-  "locals": {\r
-    "profilers": {\r
-      "scroll": {\r
-        "lists": {\r
-          "scroll_panels.by_scroll": {\r
-            "model_name": "scroll_panel",\r
-            "list_name": "by_scroll"\r
-          },\r
-          "panels.by_scroll": {\r
-            "model_name": "panel",\r
-            "list_name": "by_scroll"\r
+    "PanelPicture": "panel_picture",\r
+    "panel_picture": {\r
+      "class_name": "PanelPicture",\r
+      "table_name": "panel_pictures",\r
+      "associations": {\r
+        "belongs_to": {\r
+          "panel": {\r
+            "id_column": "panel_id"\r
           }\r
         },\r
-        "columns": [\r
-          "id",\r
-          "title",\r
-          "description",\r
-          "visible",\r
-          "author_id",\r
-          "created_at",\r
-          "updated_at"\r
-        ],\r
-        "associations": {\r
-          "belongs_to": [\r
-            "author"\r
-          ],\r
-          "has_many": [\r
-            "scroll_panels.by_scroll",\r
-            "panels.by_scroll"\r
-          ]\r
-        }\r
-      },\r
-      "scroll_panel": {\r
-        "lists": {},\r
-        "columns": [\r
-          "id",\r
-          "scroll_id",\r
-          "panel_id",\r
-          "t",\r
-          "author_id",\r
-          "created_at",\r
-          "updated_at"\r
-        ],\r
-        "associations": {\r
-          "belongs_to": [\r
-            "scroll",\r
-            "panel"\r
-          ],\r
-          "has_many": []\r
-        }\r
+        "has_many": {}\r
       },\r
-      "comic": {\r
-        "lists": {\r
-          "stories.by_comic": {\r
-            "model_name": "story",\r
-            "list_name": "by_comic"\r
+      "attributes": {\r
+        "id": {\r
+          "type": "number",\r
+          "primary_key": 1,\r
+          "rules": {\r
+            "number": true\r
           }\r
         },\r
-        "columns": [\r
-          "id",\r
-          "title",\r
-          "description",\r
-          "visible",\r
-          "author_id",\r
-          "created_at",\r
-          "updated_at"\r
-        ],\r
-        "associations": {\r
-          "belongs_to": [\r
-            "author"\r
-          ],\r
-          "has_many": [\r
-            "stories.by_comic"\r
-          ]\r
+        "panel_id": {\r
+          "type": "number",\r
+          "rules": {\r
+            "number": true\r
+          }\r
+        },\r
+        "picture_id": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true\r
+          }\r
+        },\r
+        "caption": {\r
+          "type": "text",\r
+          "rules": {}\r
+        },\r
+        "x": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true\r
+          }\r
+        },\r
+        "y": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true\r
+          }\r
+        },\r
+        "width": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true\r
+          }\r
+        },\r
+        "height": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true\r
+          }\r
+        },\r
+        "link": {\r
+          "type": "text",\r
+          "rules": {\r
+            "url": true\r
+          }\r
+        },\r
+        "z": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true,\r
+            "min": 1\r
+          }\r
+        },\r
+        "t": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true,\r
+            "min": 0\r
+          }\r
+        },\r
+        "created_at": {\r
+          "type": "datetime"\r
+        },\r
+        "updated_at": {\r
+          "type": "datetime"\r
         }\r
-      },\r
-      "story": {\r
-        "lists": {\r
-          "story_sheets.by_story": {\r
-            "model_name": "story_sheet",\r
-            "list_name": "by_story"\r
-          },\r
-          "sheets.by_story": {\r
-            "model_name": "sheet",\r
-            "list_name": "by_sheet"\r
+      }\r
+    },\r
+    "SpeechBalloon": "speech_balloon",\r
+    "speech_balloon": {\r
+      "class_name": "SpeechBalloon",\r
+      "table_name": "speech_balloons",\r
+      "extend": "classname",\r
+      "associations": {\r
+        "belongs_to": {\r
+          "panel": {\r
+            "id_column": "panel_id"\r
           }\r
         },\r
-        "columns": [\r
-          "id",\r
-          "comic_id",\r
-          "title",\r
-          "description",\r
-          "t",\r
-          "visible",\r
-          "created_at",\r
-          "updated_at"\r
-        ],\r
-        "associations": {\r
-          "belongs_to": [\r
-            "comic"\r
-          ],\r
-          "has_many": [\r
-            "story_sheets.by_story",\r
-            "sheets.by_story"\r
-          ]\r
+        "has_many": {},\r
+        "has_one": {\r
+          "balloon": {\r
+            "foreign_key": "speech_balloon_id",\r
+            "list_method": "list_by_speech_balloon"\r
+          },\r
+          "speech": {\r
+            "foreign_key": "speech_balloon_id",\r
+            "list_method": "list_by_speech_balloon"\r
+          }\r
         }\r
       },\r
-      "story_sheet": {\r
-        "lists": {},\r
-        "columns": [\r
-          "id",\r
-          "story_id",\r
-          "sheet_id",\r
-          "t",\r
-          "author_id",\r
-          "created_at",\r
-          "updated_at"\r
-        ],\r
-        "associations": {\r
-          "belongs_to": [\r
-            "story",\r
-            "sheet"\r
-          ],\r
-          "has_many": []\r
-        }\r
-      },\r
-      "sheet": {\r
-        "lists": {\r
-          "story_sheets.by_sheet": {\r
-            "model_name": "story_sheet",\r
-            "list_name": "by_sheet"\r
-          },\r
-          "stories.by_sheet": {\r
-            "model_name": "story",\r
-            "list_name": "by_sheet"\r
-          },\r
-          "sheet_panels.by_sheet": {\r
-            "model_name": "sheet_panel",\r
-            "list_name": "by_sheet"\r
-          },\r
-          "panels.by_sheet": {\r
-            "model_name": "panel",\r
-            "list_name": "by_sheet"\r
+      "attributes": {\r
+        "id": {\r
+          "type": "number",\r
+          "primary_key": 1,\r
+          "rules": {\r
+            "number": true\r
           }\r
         },\r
-        "columns": [\r
-          "id",\r
-          "caption",\r
-          "width",\r
-          "height",\r
-          "visible",\r
-          "author_id",\r
-          "created_at",\r
-          "updated_at"\r
-        ],\r
-        "associations": {\r
-          "belongs_to": [\r
-            "author"\r
-          ],\r
-          "has_many": [\r
-            "story_sheets.by_sheet",\r
-            "stories.by_sheet",\r
-            "sheet_panels.by_sheet",\r
-            "panels.by_sheet"\r
-          ]\r
+        "panel_id": {\r
+          "type": "number",\r
+          "rules": {\r
+            "number": true\r
+          }\r
+        },\r
+        "speech_balloon_template_id": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true\r
+          }\r
+        },\r
+        "classname": {\r
+          "type": "text",\r
+          "rules": {\r
+            "required": true\r
+          }\r
+        },\r
+        "z": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true,\r
+            "min": 1\r
+          }\r
+        },\r
+        "t": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true,\r
+            "min": 0\r
+          }\r
+        },\r
+        "settings": {\r
+          "type": "text",\r
+          "rules": {}\r
+        },\r
+        "caption": {\r
+          "type": "text",\r
+          "rules": {}\r
+        },\r
+        "created_at": {\r
+          "type": "datetime"\r
+        },\r
+        "updated_at": {\r
+          "type": "datetime"\r
         }\r
       },\r
-      "sheet_panel": {\r
-        "lists": {},\r
-        "columns": [\r
-          "id",\r
-          "sheet_id",\r
-          "panel_id",\r
-          "x",\r
-          "y",\r
-          "z",\r
-          "t",\r
-          "author_id",\r
-          "created_at",\r
-          "updated_at"\r
-        ],\r
-        "associations": {\r
-          "belongs_to": [\r
-            "sheet",\r
-            "panel"\r
-          ],\r
-          "has_many": []\r
+      "select": {\r
+        "method": "list",\r
+        "caption": {\r
+          "type": "method",\r
+          "name": "plain_scenario"\r
         }\r
-      },\r
-      "panel": {\r
-        "lists": {\r
-          "scroll_panels.by_panel": {\r
-            "model_name": "scroll_panel",\r
-            "list_name": "by_panel"\r
-          },\r
-          "scrolls.by_panel": {\r
-            "model_name": "scroll",\r
-            "list_name": "by_panel"\r
-          },\r
-          "sheet_panels.by_panel": {\r
-            "model_name": "sheet_panel",\r
-            "list_name": "by_panel"\r
-          },\r
-          "sheets.by_panel": {\r
-            "model_name": "sheet",\r
-            "list_name": "by_panel"\r
-          },\r
-          "panel_pictures.by_panel": {\r
-            "model_name": "panel_picture",\r
-            "list_name": "by_panel"\r
-          },\r
-          "speech_balloons.by_panel": {\r
-            "model_name": "speech_balloon",\r
-            "list_name": "by_panel"\r
-          },\r
-          "ground_pictures.by_panel": {\r
-            "model_name": "ground_picture",\r
-            "list_name": "by_panel"\r
+      }\r
+    },\r
+    "Balloon": "balloon",\r
+    "balloon": {\r
+      "class_name": "Balloon",\r
+      "table_name": "balloons",\r
+      "associations": {\r
+        "belongs_to": {\r
+          "speech_balloon": {\r
+            "id_column": "speech_balloon_id"\r
           },\r
-          "ground_colors.by_panel": {\r
-            "model_name": "ground_color",\r
-            "list_name": "by_panel"\r
+          "system_picture": {\r
+            "id_column": "system_picture_id"\r
           }\r
         },\r
-        "columns": [\r
-          "id",\r
-          "width",\r
-          "height",\r
-          "border",\r
-          "caption",\r
-          "publish",\r
-          "author_id",\r
-          "created_at",\r
-          "updated_at"\r
-        ],\r
-        "associations": {\r
-          "belongs_to": [\r
-            "author"\r
-          ],\r
-          "has_many": [\r
-            "scroll_panels.by_panel",\r
-            "scrolls.by_panel",\r
-            "sheet_panels.by_panel",\r
-            "sheets.by_panel",\r
-            "panel_pictures.by_panel",\r
-            "speech_balloons.by_panel",\r
-            "ground_pictures.by_panel",\r
-            "ground_colors.by_panel"\r
-          ]\r
-        }\r
+        "has_many": {}\r
       },\r
-      "panel_picture": {\r
-        "lists": {\r
-          "scroll_panels.by_scroll": {\r
-            "model_name": "scroll_panel",\r
-            "list_name": "by_scroll"\r
-          },\r
-          "panels.by_scroll": {\r
-            "model_name": "panel",\r
-            "list_name": "by_scroll"\r
+      "attributes": {\r
+        "id": {\r
+          "type": "number",\r
+          "primary_key": 1,\r
+          "rules": {\r
+            "number": true\r
           }\r
         },\r
-        "columns": [\r
-          "id",\r
-          "panel_id",\r
-          "picture_id",\r
-          "caption",\r
-          "x",\r
-          "y",\r
-          "width",\r
-          "height",\r
-          "link",\r
-          "z",\r
-          "t",\r
-          "created_at",\r
-          "updated_at"\r
-        ],\r
-        "associations": {\r
-          "belongs_to": [\r
-            "panel"\r
-          ],\r
-          "has_many": []\r
-        }\r
-      },\r
-      "speech_balloon": {\r
-        "lists": {\r
-          "scroll_panels.by_scroll": {\r
-            "model_name": "scroll_panel",\r
-            "list_name": "by_scroll"\r
-          },\r
-          "panels.by_scroll": {\r
-            "model_name": "panel",\r
-            "list_name": "by_scroll"\r
+        "speech_balloon_id": {\r
+          "type": "number",\r
+          "rules": {\r
+            "number": true\r
           }\r
         },\r
-        "columns": [\r
-          "id",\r
-          "panel_id",\r
-          "speech_balloon_template_id",\r
-          "classname",\r
-          "z",\r
-          "t",\r
-          "settings",\r
-          "caption",\r
-          "created_at",\r
-          "updated_at"\r
-        ],\r
-        "associations": {\r
-          "belongs_to": [\r
-            "panel"\r
-          ],\r
-          "has_many": [],\r
-          "has_one": [\r
-            "balloon",\r
-            "speech"\r
-          ]\r
-        }\r
-      },\r
-      "speech": {\r
-        "lists": {\r
-          "scroll_panels.by_scroll": {\r
-            "model_name": "scroll_panel",\r
-            "list_name": "by_scroll"\r
-          },\r
-          "panels.by_scroll": {\r
-            "model_name": "panel",\r
-            "list_name": "by_scroll"\r
+        "system_picture_id": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true\r
           }\r
         },\r
-        "columns": [\r
-          "id",\r
-          "speech_balloon_id",\r
-          "writing_format_id",\r
-          "content",\r
-          "font_size",\r
-          "text_align",\r
-          "fore_color",\r
-          "x",\r
-          "y",\r
-          "width",\r
-          "height",\r
-          "quotes",\r
-          "settings",\r
-          "created_at",\r
-          "updated_at"\r
-        ],\r
-        "associations": {\r
-          "belongs_to": [\r
-            "speech_balloon",\r
-            "writing_format"\r
-          ],\r
-          "has_many": []\r
+        "x": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true\r
+          }\r
+        },\r
+        "y": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true\r
+          }\r
+        },\r
+        "width": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true,\r
+            "min": 1\r
+          }\r
+        },\r
+        "height": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true,\r
+            "min": 1\r
+          }\r
+        },\r
+        "r": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true\r
+          }\r
+        },\r
+        "settings": {\r
+          "type": "text",\r
+          "rules": {}\r
+        },\r
+        "created_at": {\r
+          "type": "datetime"\r
+        },\r
+        "updated_at": {\r
+          "type": "datetime"\r
         }\r
-      },\r
-      "balloon": {\r
-        "lists": {\r
-          "scroll_panels.by_scroll": {\r
-            "model_name": "scroll_panel",\r
-            "list_name": "by_scroll"\r
+      }\r
+    },\r
+    "Speech": "speech",\r
+    "speech": {\r
+      "class_name": "Speech",\r
+      "table_name": "speeches",\r
+      "associations": {\r
+        "belongs_to": {\r
+          "speech_balloon": {\r
+            "id_column": "speech_balloon_id"\r
           },\r
-          "panels.by_scroll": {\r
-            "model_name": "panel",\r
-            "list_name": "by_scroll"\r
+          "writing_format": {\r
+            "id_column": "writing_format_id"\r
           }\r
         },\r
-        "columns": [\r
-          "id",\r
-          "speech_balloon_id",\r
-          "system_picture_id",\r
-          "x",\r
-          "y",\r
-          "width",\r
-          "height",\r
-          "r",\r
-          "settings",\r
-          "created_at",\r
-          "updated_at"\r
-        ],\r
-        "associations": {\r
-          "belongs_to": [\r
-            "speech_balloon",\r
-            "system_picture"\r
-          ],\r
-          "has_many": []\r
-        }\r
+        "has_many": {}\r
       },\r
-      "ground_picture": {\r
-        "lists": {\r
-          "scroll_panels.by_scroll": {\r
-            "model_name": "scroll_panel",\r
-            "list_name": "by_scroll"\r
+      "attributes": {\r
+        "id": {\r
+          "type": "number",\r
+          "primary_key": 1,\r
+          "rules": {\r
+            "number": true\r
+          }\r
+        },\r
+        "speech_balloon_id": {\r
+          "type": "number",\r
+          "rules": {\r
+            "number": true\r
+          }\r
+        },\r
+        "writing_format_id": {\r
+          "type": "number",\r
+          "source": {\r
+            "type": "model",\r
+            "model": "writing_format",\r
+            "method": "enable_list",\r
+            "caption": "caption"\r
           },\r
-          "panels.by_scroll": {\r
-            "model_name": "panel",\r
-            "list_name": "by_scroll"\r
+          "rules": {\r
+            "required": true,\r
+            "number": true\r
           }\r
         },\r
-        "columns": [\r
-          "id",\r
-          "panel_id",\r
-          "picture_id",\r
-          "caption",\r
-          "repeat",\r
-          "x",\r
-          "y",\r
-          "z",\r
-          "t",\r
-          "created_at",\r
-          "updated_at"\r
-        ],\r
-        "associations": {\r
-          "belongs_to": [\r
-            "panel"\r
-          ],\r
-          "has_many": []\r
-        }\r
-      },\r
-      "ground_color": {\r
-        "lists": {\r
-          "scroll_panels.by_scroll": {\r
-            "model_name": "scroll_panel",\r
-            "list_name": "by_scroll"\r
+        "content": {\r
+          "type": "text",\r
+          "rules": {}\r
+        },\r
+        "font_size": {\r
+          "type": "float",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true,\r
+            "min": 0\r
           },\r
-          "panels.by_scroll": {\r
-            "model_name": "panel",\r
-            "list_name": "by_scroll"\r
+          "source": {\r
+            "type": "magic_number",\r
+            "key": "speech_font_size_items"\r
           }\r
         },\r
-        "columns": [\r
-          "id",\r
-          "panel_id",\r
-          "caption",\r
-          "code",\r
-          "orientation",\r
-          "xy",\r
-          "wh",\r
-          "z",\r
-          "t",\r
-          "created_at",\r
-          "updated_at"\r
-        ],\r
-        "associations": {\r
-          "belongs_to": [\r
-            "panel"\r
-          ],\r
-          "has_many": []\r
-        }\r
-      },\r
-      "original_picture": {\r
-        "lists": {\r
-          "scroll_panels.by_scroll": {\r
-            "model_name": "scroll_panel",\r
-            "list_name": "by_scroll"\r
+        "text_align": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true,\r
+            "range": [\r
+              0,\r
+              3\r
+            ]\r
           },\r
-          "panels.by_scroll": {\r
-            "model_name": "panel",\r
-            "list_name": "by_scroll"\r
+          "source": {\r
+            "type": "magic_number",\r
+            "key": "speech_text_align_items"\r
           }\r
         },\r
-        "columns": [\r
-          "id",\r
-          "ext",\r
-          "width",\r
-          "height",\r
-          "filesize",\r
-          "artist_id",\r
-          "md5",\r
-          "uploaded_at",\r
-          "published_at",\r
-          "stopped_at",\r
-          "created_at",\r
-          "updated_at"\r
-        ],\r
-        "associations": {\r
-          "belongs_to": [\r
-            "artist"\r
-          ],\r
-          "has_many": [\r
-            "pictures"\r
-          ],\r
-          "has_one": [\r
-            "resource_picture"\r
-          ]\r
-        }\r
-      },\r
-      "picture": {\r
-        "lists": {\r
-          "scroll_panels.by_scroll": {\r
-            "model_name": "scroll_panel",\r
-            "list_name": "by_scroll"\r
-          },\r
-          "panels.by_scroll": {\r
-            "model_name": "panel",\r
-            "list_name": "by_scroll"\r
+        "fore_color": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true,\r
+            "range": [\r
+              0,\r
+              16777215\r
+            ]\r
           }\r
         },\r
-        "columns": [\r
-          "id",\r
-          "original_picture_id",\r
-          "revision",\r
-          "ext",\r
-          "width",\r
-          "height",\r
-          "filesize",\r
-          "artist_id",\r
-          "license_id",\r
-          "md5",\r
-          "artist_name",\r
-          "credit",\r
-          "settings",\r
-          "classname",\r
-          "created_at",\r
-          "updated_at"\r
-        ],\r
-        "associations": {\r
-          "belongs_to": [\r
-            "license",\r
-            "artist"\r
-          ],\r
-          "has_many": [],\r
-          "has_one": []\r
-        }\r
-      },\r
-      "resource_picture": {\r
-        "lists": {\r
-          "scroll_panels.by_scroll": {\r
-            "model_name": "scroll_panel",\r
-            "list_name": "by_scroll"\r
-          },\r
-          "panels.by_scroll": {\r
-            "model_name": "panel",\r
-            "list_name": "by_scroll"\r
+        "x": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true\r
           }\r
         },\r
-        "columns": [\r
-          "id",\r
-          "original_picture_id",\r
-          "revision",\r
-          "ext",\r
-          "width",\r
-          "height",\r
-          "filesize",\r
-          "artist_id",\r
-          "license_id",\r
-          "md5",\r
-          "artist_name",\r
-          "credit",\r
-          "settings",\r
-          "picture_id",\r
-          "classname",\r
-          "created_at",\r
-          "updated_at"\r
-        ],\r
-        "associations": {\r
-          "belongs_to": [\r
-            "license",\r
-            "artist"\r
-          ],\r
-          "has_many": [],\r
-          "has_one": []\r
-        }\r
-      },\r
-      "speech_balloon_template": {\r
-        "lists": {\r
-          "scroll_panels.by_scroll": {\r
-            "model_name": "scroll_panel",\r
-            "list_name": "by_scroll"\r
-          },\r
-          "panels.by_scroll": {\r
-            "model_name": "panel",\r
-            "list_name": "by_scroll"\r
+        "y": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true\r
           }\r
         },\r
-        "columns": [\r
-          "id",\r
-          "name",\r
-          "classname",\r
-          "caption",\r
-          "t",\r
-          "system_picture_id",\r
-          "settings",\r
-          "created_at",\r
-          "updated_at"\r
-        ],\r
-        "associations": {\r
-          "belongs_to": [\r
-            "system_picture"\r
-          ],\r
-          "has_many": [\r
-            "speech_balloons",\r
-            "panels"\r
-          ],\r
-          "has_one": []\r
-        }\r
-      },\r
-      "writing_format": {\r
-        "lists": {\r
-          "scroll_panels.by_scroll": {\r
-            "model_name": "scroll_panel",\r
-            "list_name": "by_scroll"\r
-          },\r
-          "panels.by_scroll": {\r
-            "model_name": "panel",\r
-            "list_name": "by_scroll"\r
+        "width": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true,\r
+            "min": 1\r
           }\r
         },\r
-        "columns": [\r
-          "id",\r
-          "name",\r
-          "classname",\r
-          "caption",\r
-          "system_picture_id",\r
-          "settings",\r
-          "created_at",\r
-          "updated_at"\r
-        ],\r
-        "associations": {\r
-          "belongs_to": [\r
-            "system_picture"\r
-          ],\r
-          "has_many": [\r
-            "speeches"\r
-          ],\r
-          "has_one": []\r
-        }\r
-      },\r
-      "license_group": {\r
-        "lists": {\r
-          "scroll_panels.by_scroll": {\r
-            "model_name": "scroll_panel",\r
-            "list_name": "by_scroll"\r
-          },\r
-          "panels.by_scroll": {\r
-            "model_name": "panel",\r
-            "list_name": "by_scroll"\r
+        "height": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true,\r
+            "min": 1\r
           }\r
         },\r
-        "columns": [\r
-          "id",\r
-          "name",\r
-          "classname",\r
-          "caption",\r
-          "url",\r
-          "created_at",\r
-          "updated_at"\r
-        ],\r
-        "associations": {\r
-          "belongs_to": [],\r
-          "has_many": [\r
-            "licenses"\r
-          ],\r
-          "has_one": []\r
+        "quotes": {\r
+          "type": "text",\r
+          "rules": {}\r
+        },\r
+        "settings": {\r
+          "type": "text",\r
+          "rules": {}\r
+        },\r
+        "created_at": {\r
+          "type": "datetime"\r
+        },\r
+        "updated_at": {\r
+          "type": "datetime"\r
         }\r
+      }\r
+    },\r
+    "GroundPicture": "ground_picture",\r
+    "ground_picture": {\r
+      "class_name": "GroundPicture",\r
+      "table_name": "ground_pictures",\r
+      "associations": {\r
+        "belongs_to": {\r
+          "panel": {\r
+            "id_column": "panel_id"\r
+          }\r
+        },\r
+        "has_many": {}\r
       },\r
-      "license": {\r
-        "lists": {\r
-          "scroll_panels.by_scroll": {\r
-            "model_name": "scroll_panel",\r
-            "list_name": "by_scroll"\r
-          },\r
-          "panels.by_scroll": {\r
-            "model_name": "panel",\r
-            "list_name": "by_scroll"\r
+      "attributes": {\r
+        "id": {\r
+          "type": "number",\r
+          "primary_key": 1,\r
+          "rules": {\r
+            "number": true\r
           }\r
         },\r
-        "columns": [\r
-          "id",\r
-          "license_group_id",\r
-          "name",\r
-          "caption",\r
-          "system_picture_id",\r
-          "url",\r
-          "settings",\r
-          "credit_pictures",\r
-          "created_at",\r
-          "updated_at"\r
-        ],\r
-        "associations": {\r
-          "belongs_to": [\r
-            "license_group",\r
-            "system_picture"\r
-          ],\r
-          "has_many": [\r
-            "resource_pictures"\r
-          ],\r
-          "has_one": []\r
-        }\r
-      },\r
-      "author": {\r
-        "lists": {\r
-          "scroll_panels.by_scroll": {\r
-            "model_name": "scroll_panel",\r
-            "list_name": "by_scroll"\r
-          },\r
-          "panels.by_scroll": {\r
-            "model_name": "panel",\r
-            "list_name": "by_scroll"\r
+        "panel_id": {\r
+          "type": "number",\r
+          "rules": {\r
+            "number": true\r
           }\r
         },\r
-        "columns": [\r
-          "id",\r
-          "name",\r
-          "user_id",\r
-          "created_at",\r
-          "updated_at"\r
-        ],\r
-        "associations": {\r
-          "belongs_to": [],\r
-          "has_many": [\r
-            "scrolls",\r
-            "comics",\r
-            "stories",\r
-            "sheets",\r
-            "panels"\r
-          ],\r
-          "has_one": []\r
-        }\r
-      },\r
-      "artist": {\r
-        "lists": {\r
-          "scroll_panels.by_scroll": {\r
-            "model_name": "scroll_panel",\r
-            "list_name": "by_scroll"\r
-          },\r
-          "panels.by_scroll": {\r
-            "model_name": "panel",\r
-            "list_name": "by_scroll"\r
+        "picture_id": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true\r
           }\r
         },\r
-        "columns": [\r
-          "id",\r
-          "name",\r
-          "author_id",\r
-          "created_at",\r
-          "updated_at"\r
-        ],\r
-        "associations": {\r
-          "belongs_to": [],\r
-          "has_many": [\r
-            "resource_pictures"\r
-          ],\r
-          "has_one": []\r
-        }\r
-      },\r
-      "system_picture": {\r
-        "lists": {\r
-          "scroll_panels.by_scroll": {\r
-            "model_name": "scroll_panel",\r
-            "list_name": "by_scroll"\r
+        "caption": {\r
+          "type": "text",\r
+          "rules": {}\r
+        },\r
+        "repeat": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true,\r
+            "range": [\r
+              0,\r
+              3\r
+            ]\r
           },\r
-          "panels.by_scroll": {\r
-            "model_name": "panel",\r
-            "list_name": "by_scroll"\r
+          "source": {\r
+            "type": "magic_number",\r
+            "key": "ground_picture_repeat_items"\r
           }\r
         },\r
-        "columns": [\r
-          "id",\r
-          "ext",\r
-          "width",\r
-          "height",\r
-          "filesize",\r
-          "md5",\r
-          "created_at",\r
-          "updated_at"\r
-        ],\r
-        "associations": {\r
-          "belongs_to": [],\r
-          "has_many": [],\r
-          "has_one": []\r
-        }\r
-      }\r
-    },\r
-    "filers": {\r
-      "scroll": {\r
-        "symbol": {\r
-          "type": "image",\r
-          "name": "/assets/item.png"\r
-        },\r
-        "caption": {\r
-          "type": "column",\r
-          "name": "title",\r
-          "link": {\r
-            "type": "action",\r
-            "name": "play"\r
+        "x": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true\r
           }\r
         },\r
-        "summary": {\r
-          "type": "template",\r
-          "name": "summary"\r
+        "y": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true\r
+          }\r
         },\r
-        "edit": {\r
-          "type": "default"\r
-        }\r
-      },\r
-      "scroll_panel": {\r
-        "symbol": {\r
-          "type": "image",\r
-          "name": "/assets/item.png",\r
-          "link": {\r
-            "type": "none"\r
+        "z": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true,\r
+            "min": 1\r
           }\r
         },\r
-        "caption": {\r
-          "type": "none"\r
+        "t": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true,\r
+            "min": 0\r
+          }\r
         },\r
-        "summary": {\r
-          "type": "template",\r
-          "name": "summary"\r
+        "created_at": {\r
+          "type": "datetime"\r
         },\r
-        "edit": {\r
-          "type": "none"\r
+        "updated_at": {\r
+          "type": "datetime"\r
         }\r
-      },\r
-      "comic": {\r
-        "symbol": {\r
-          "type": "image",\r
-          "name": "/assets/item.png"\r
-        },\r
-        "caption": {\r
-          "type": "column",\r
-          "name": "title"\r
-        },\r
-        "summary": {\r
-          "type": "template",\r
-          "name": "summary"\r
+      }\r
+    },\r
+    "GroundColor": "ground_color",\r
+    "ground_color": {\r
+      "class_name": "GroundColor",\r
+      "table_name": "ground_colors",\r
+      "associations": {\r
+        "belongs_to": {\r
+          "panel": {\r
+            "id_column": "panel_id"\r
+          }\r
         },\r
-        "edit": {\r
-          "type": "default"\r
-        }\r
+        "has_many": {}\r
       },\r
-      "story": {\r
-        "symbol": {\r
-          "type": "image",\r
-          "name": "/assets/item.png"\r
-        },\r
-        "caption": {\r
-          "type": "method",\r
-          "name": "title_with_t",\r
-          "link": {\r
-            "type": "action",\r
-            "name": "play"\r
+      "attributes": {\r
+        "id": {\r
+          "type": "number",\r
+          "primary_key": 1,\r
+          "rules": {\r
+            "number": true\r
           }\r
         },\r
-        "summary": {\r
-          "type": "template",\r
-          "name": "summary"\r
-        },\r
-        "edit": {\r
-          "type": "default"\r
-        }\r
-      },\r
-      "story_sheet": {\r
-        "symbol": {\r
-          "type": "image",\r
-          "name": "/assets/item.png",\r
-          "link": {\r
-            "type": "none"\r
+        "panel_id": {\r
+          "type": "number",\r
+          "rules": {\r
+            "number": true\r
           }\r
         },\r
         "caption": {\r
-          "type": "none"\r
+          "type": "text",\r
+          "rules": {}\r
         },\r
-        "summary": {\r
-          "type": "template",\r
-          "name": "summary"\r
+        "code": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true,\r
+            "range": [\r
+              0,\r
+              16777215\r
+            ]\r
+          }\r
         },\r
-        "edit": {\r
-          "type": "none"\r
-        }\r
-      },\r
-      "sheet": {\r
-        "symbol": {\r
-          "type": "image",\r
-          "name": "/assets/item.png"\r
+        "orientation": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true,\r
+            "range": [\r
+              0,\r
+              1\r
+            ]\r
+          },\r
+          "source": {\r
+            "type": "magic_number",\r
+            "key": "ground_color_orientation_items"\r
+          }\r
         },\r
-        "caption": {\r
-          "type": "column",\r
-          "name": "caption",\r
-          "link": {\r
-            "type": "action",\r
-            "name": "play"\r
+        "xy": {\r
+          "type": "number",\r
+          "rules": {\r
+            "number": true\r
           }\r
         },\r
-        "summary": {\r
-          "type": "template",\r
-          "name": "summary"\r
+        "wh": {\r
+          "type": "number",\r
+          "rules": {\r
+            "number": true\r
+          }\r
         },\r
-        "edit": {\r
-          "type": "default"\r
-        }\r
-      },\r
-      "sheet_panel": {\r
-        "symbol": {\r
-          "type": "image",\r
-          "name": "/assets/item.png",\r
-          "link": {\r
-            "type": "none"\r
+        "z": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true,\r
+            "min": 1\r
           }\r
         },\r
-        "caption": {\r
-          "type": "none"\r
+        "t": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true,\r
+            "min": 0\r
+          }\r
         },\r
-        "summary": {\r
-          "type": "template",\r
-          "name": "summary"\r
+        "created_at": {\r
+          "type": "datetime"\r
         },\r
-        "edit": {\r
-          "type": "none"\r
+        "updated_at": {\r
+          "type": "datetime"\r
         }\r
-      },\r
-      "panel": {\r
-        "symbol": {\r
-          "type": "image",\r
-          "name": "/assets/item.png"\r
-        },\r
-        "caption": {\r
-          "type": "method",\r
-          "name": "plain_scenario",\r
-          "link": {\r
-            "type": "none"\r
+      }\r
+    },\r
+    "OriginalPicture": "original_picture",\r
+    "original_picture": {\r
+      "class_name": "OriginalPicture",\r
+      "table_name": "original_pictures",\r
+      "associations": {\r
+        "belongs_to": {\r
+          "artist": {\r
+            "id_column": "artist_id"\r
           }\r
         },\r
-        "summary": {\r
-          "type": "template",\r
-          "name": "summary"\r
+        "has_many": {\r
+          "pictures": {\r
+            "foreign_key": "original_picture_id",\r
+            "list_method": "list_by_original_picture"\r
+          }\r
         },\r
-        "edit": {\r
-          "type": "default"\r
+        "has_one": {\r
+          "resource_picture": {\r
+            "foreign_key": "original_picture_id",\r
+            "list_method": "list_by_original_picture"\r
+          }\r
         }\r
       },\r
-      "panel_picture": {\r
-        "symbol": {\r
-          "type": "picture",\r
-          "name": "symbol_option"\r
-        },\r
-        "caption": {\r
-          "type": "column",\r
-          "name": "caption"\r
+      "attributes": {\r
+        "id": {\r
+          "type": "number",\r
+          "primary_key": 1,\r
+          "rules": {\r
+            "number": true\r
+          }\r
         },\r
-        "summary": {\r
-          "type": "template",\r
-          "name": "summary"\r
+        "ext": {\r
+          "type": "text",\r
+          "rules": {\r
+            "required": true\r
+          }\r
         },\r
-        "edit": {\r
-          "type": "none"\r
-        }\r
-      },\r
-      "speech_balloon": {\r
-        "symbol": {\r
-          "type": "picture",\r
-          "name": "symbol_option"\r
+        "width": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true\r
+          }\r
         },\r
-        "caption": {\r
-          "type": "method",\r
-          "name": "plain_scenario",\r
-          "link": {\r
-            "type": "none"\r
+        "height": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true\r
           }\r
         },\r
-        "summary": {\r
-          "type": "template",\r
-          "name": "summary"\r
+        "filesize": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true\r
+          }\r
         },\r
-        "edit": {\r
-          "type": "none"\r
-        }\r
-      },\r
-      "speech": {\r
-        "symbol": {\r
-          "type": "picture",\r
-          "name": "symbol_option"\r
+        "artist_id": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true\r
+          }\r
         },\r
-        "caption": {\r
-          "type": "column",\r
-          "name": "content",\r
-          "link": {\r
-            "type": "none"\r
+        "md5": {\r
+          "type": "text",\r
+          "rules": {\r
+            "required": true\r
           }\r
         },\r
-        "summary": {\r
-          "type": "template",\r
-          "name": "summary"\r
+        "uploaded_at": {\r
+          "type": "datetime"\r
         },\r
-        "edit": {\r
-          "type": "none"\r
-        }\r
-      },\r
-      "balloon": {\r
-        "symbol": {\r
-          "type": "picture",\r
-          "name": "symbol_option"\r
+        "published_at": {\r
+          "type": "datetime"\r
         },\r
-        "caption": {\r
-          "type": "none"\r
+        "stopped_at": {\r
+          "type": "datetime"\r
         },\r
-        "summary": {\r
-          "type": "template",\r
-          "name": "summary"\r
+        "created_at": {\r
+          "type": "datetime"\r
         },\r
-        "edit": {\r
-          "type": "none"\r
+        "updated_at": {\r
+          "type": "datetime"\r
         }\r
+      }\r
+    },\r
+    "Picture": "picture",\r
+    "picture": {\r
+      "class_name": "Picture",\r
+      "table_name": "pictures",\r
+      "associations": {\r
+        "belongs_to": {\r
+          "license": {\r
+            "id_column": "license_id"\r
+          },\r
+          "artist": {\r
+            "id_column": "artist_id"\r
+          }\r
+        },\r
+        "has_many": {},\r
+        "has_one": {}\r
       },\r
-      "ground_picture": {\r
-        "symbol": {\r
-          "type": "picture",\r
-          "name": "symbol_option"\r
+      "attributes": {\r
+        "id": {\r
+          "type": "number",\r
+          "primary_key": 1,\r
+          "rules": {\r
+            "number": true\r
+          }\r
         },\r
-        "caption": {\r
-          "type": "column",\r
-          "name": "caption"\r
+        "original_picture_id": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true\r
+          }\r
         },\r
-        "summary": {\r
-          "type": "template",\r
-          "name": "summary"\r
+        "revision": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true\r
+          }\r
         },\r
-        "edit": {\r
-          "type": "none"\r
-        }\r
-      },\r
-      "ground_color": {\r
-        "symbol": {\r
-          "type": "template",\r
-          "name": "symbol"\r
+        "ext": {\r
+          "type": "text",\r
+          "rules": {\r
+            "required": true\r
+          }\r
         },\r
-        "caption": {\r
-          "type": "column",\r
-          "name": "caption"\r
+        "width": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true\r
+          }\r
         },\r
-        "summary": {\r
-          "type": "template",\r
-          "name": "summary"\r
+        "height": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true\r
+          }\r
         },\r
-        "edit": {\r
-          "type": "none"\r
-        }\r
-      },\r
-      "original_picture": {\r
-        "symbol": {\r
-          "type": "picture",\r
-          "name": "symbol_option"\r
+        "filesize": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true\r
+          }\r
         },\r
-        "caption": {\r
-          "type": "method",\r
-          "name": "revision",\r
-          "link": {\r
-            "type": "action",\r
-            "name": "history"\r
+        "artist_id": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true\r
           }\r
         },\r
-        "summary": {\r
-          "type": "template",\r
-          "name": "summary"\r
+        "license_id": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true\r
+          }\r
         },\r
-        "edit": {\r
-          "type": "template",\r
-          "name": "publish"\r
-        }\r
-      },\r
-      "picture": {\r
-        "symbol": {\r
-          "type": "picture",\r
-          "name": "symbol_option"\r
+        "md5": {\r
+          "type": "text",\r
+          "rules": {\r
+            "required": true\r
+          }\r
         },\r
-        "caption": {\r
-          "type": "column",\r
-          "name": "revision"\r
+        "artist_name": {\r
+          "type": "text",\r
+          "rules": {\r
+            "required": true\r
+          }\r
         },\r
-        "summary": {\r
-          "type": "template",\r
-          "name": "summary"\r
+        "credit": {\r
+          "type": "text",\r
+          "rules": {}\r
         },\r
-        "edit": {\r
-          "type": "none"\r
-        }\r
-      },\r
-      "resource_picture": {\r
-        "symbol": {\r
-          "type": "picture",\r
-          "name": "symbol_option"\r
+        "settings": {\r
+          "type": "text",\r
+          "rules": {}\r
         },\r
-        "caption": {\r
-          "type": "none"\r
+        "classname": {\r
+          "type": "text",\r
+          "rules": {\r
+            "required": true\r
+          }\r
         },\r
-        "summary": {\r
-          "type": "template",\r
-          "name": "summary"\r
+        "created_at": {\r
+          "type": "datetime"\r
         },\r
-        "edit": {\r
-          "type": "none"\r
+        "updated_at": {\r
+          "type": "datetime"\r
         }\r
-      },\r
-      "speech_balloon_template": {\r
-        "symbol": {\r
-          "type": "picture",\r
-          "name": "symbol_option"\r
+      }\r
+    },\r
+    "ResourcePicture": "resource_picture",\r
+    "resource_picture": {\r
+      "class_name": "ResourcePicture",\r
+      "table_name": "resource_pictures",\r
+      "associations": {\r
+        "belongs_to": {\r
+          "original_picture": {\r
+            "id_column": "original_picture_id"\r
+          },\r
+          "license": {\r
+            "id_column": "license_id"\r
+          },\r
+          "artist": {\r
+            "id_column": "artist_id"\r
+          }\r
         },\r
-        "caption": {\r
-          "type": "column",\r
-          "name": "caption"\r
+        "has_many": {},\r
+        "has_one": {}\r
+      },\r
+      "attributes": {\r
+        "id": {\r
+          "type": "number",\r
+          "primary_key": 1,\r
+          "rules": {\r
+            "number": true\r
+          }\r
         },\r
-        "summary": {\r
-          "type": "none"\r
+        "original_picture_id": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true\r
+          }\r
         },\r
-        "edit": {\r
-          "type": "none"\r
-        }\r
-      },\r
-      "writing_format": {\r
-        "symbol": {\r
-          "type": "image",\r
-          "name": "/assets/item.png"\r
+        "revision": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true\r
+          }\r
         },\r
-        "caption": {\r
-          "type": "column",\r
-          "name": "caption"\r
+        "ext": {\r
+          "type": "text",\r
+          "rules": {\r
+            "required": true\r
+          }\r
         },\r
-        "summary": {\r
-          "type": "none"\r
+        "width": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true\r
+          }\r
         },\r
-        "edit": {\r
-          "type": "none"\r
-        }\r
-      },\r
-      "license_group": {\r
-        "symbol": {\r
-          "type": "image",\r
-          "name": "/assets/item.png"\r
+        "height": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true\r
+          }\r
         },\r
-        "caption": {\r
-          "type": "column",\r
-          "name": "caption",\r
-          "link": {\r
-            "type": "url_column",\r
-            "name": "url"\r
+        "filesize": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true\r
           }\r
         },\r
-        "summary": {\r
-          "type": "none"\r
+        "artist_id": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true\r
+          }\r
         },\r
-        "edit": {\r
-          "type": "none"\r
-        }\r
-      },\r
-      "license": {\r
-        "symbol": {\r
-          "type": "image",\r
-          "name": "/assets/item.png"\r
+        "license_id": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true\r
+          }\r
         },\r
-        "caption": {\r
-          "type": "method",\r
-          "name": "caption_with_group",\r
-          "link": {\r
-            "type": "url_column",\r
-            "name": "url"\r
+        "md5": {\r
+          "type": "text",\r
+          "rules": {\r
+            "required": true\r
           }\r
         },\r
-        "summary": {\r
-          "type": "template",\r
-          "name": "summary"\r
+        "artist_name": {\r
+          "type": "text",\r
+          "rules": {\r
+            "required": true\r
+          }\r
         },\r
-        "edit": {\r
-          "type": "none"\r
+        "credit": {\r
+          "type": "text",\r
+          "rules": {}\r
+        },\r
+        "settings": {\r
+          "type": "text",\r
+          "rules": {}\r
+        },\r
+        "picture_id": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true\r
+          }\r
+        },\r
+        "classname": {\r
+          "type": "text",\r
+          "rules": {\r
+            "required": true\r
+          }\r
+        },\r
+        "created_at": {\r
+          "type": "datetime"\r
+        },\r
+        "updated_at": {\r
+          "type": "datetime"\r
         }\r
+      }\r
+    },\r
+    "SpeechBalloonTemplate": "speech_balloon_template",\r
+    "speech_balloon_template": {\r
+      "class_name": "SpeechBalloonTemplate",\r
+      "table_name": "speech_balloon_templates",\r
+      "associations": {\r
+        "belongs_to": {\r
+          "system_picture": {\r
+            "id_column": "system_picture_id"\r
+          }\r
+        },\r
+        "has_many": {\r
+          "speech_balloons": {\r
+            "foreign_key": "speech_balloon_template_id",\r
+            "list_method": "list_by_speech_balloon_template"\r
+          },\r
+          "panels": {\r
+            "through": "speech_balloons",\r
+            "foreign_key": "speech_balloon_template_id",\r
+            "list_method": "list_by_speech_balloon_template"\r
+          }\r
+        },\r
+        "has_one": {}\r
       },\r
-      "author": {\r
-        "symbol": {\r
-          "type": "image",\r
-          "name": "/assets/item.png"\r
+      "attributes": {\r
+        "id": {\r
+          "type": "number",\r
+          "primary_key": 1,\r
+          "rules": {\r
+            "number": true\r
+          }\r
+        },\r
+        "name": {\r
+          "type": "text",\r
+          "rules": {\r
+            "required": true\r
+          }\r
+        },\r
+        "classname": {\r
+          "type": "text",\r
+          "rules": {\r
+            "required": true\r
+          }\r
         },\r
         "caption": {\r
-          "type": "column",\r
-          "name": "name"\r
+          "type": "text",\r
+          "rules": {\r
+            "required": true\r
+          }\r
         },\r
-        "summary": {\r
-          "type": "template",\r
-          "name": "summary"\r
+        "t": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true,\r
+            "min": 0\r
+          }\r
         },\r
-        "edit": {\r
-          "type": "account"\r
+        "system_picture_id": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true\r
+          }\r
+        },\r
+        "settings": {\r
+          "type": "text",\r
+          "rules": {\r
+            "required": true\r
+          }\r
+        },\r
+        "created_at": {\r
+          "type": "datetime"\r
+        },\r
+        "updated_at": {\r
+          "type": "datetime"\r
         }\r
       },\r
-      "artist": {\r
-        "symbol": {\r
-          "type": "image",\r
-          "name": "/assets/item.png"\r
-        },\r
+      "select": {\r
+        "method": "enable_list",\r
         "caption": {\r
           "type": "column",\r
-          "name": "name"\r
+          "name": "caption"\r
+        }\r
+      }\r
+    },\r
+    "WritingFormat": "writing_format",\r
+    "writing_format": {\r
+      "class_name": "WritingFormat",\r
+      "table_name": "writing_formats",\r
+      "associations": {\r
+        "belongs_to": {\r
+          "system_picture": {\r
+            "id_column": "system_picture_id"\r
+          }\r
         },\r
-        "summary": {\r
-          "type": "template",\r
-          "name": "summary"\r
+        "has_many": {\r
+          "speeches": {\r
+            "foreign_key": "writing_format_id",\r
+            "list_method": "list_by_writing_format"\r
+          }\r
         },\r
-        "edit": {\r
-          "type": "account"\r
-        }\r
+        "has_one": {}\r
       },\r
-      "system_picture": {\r
-        "symbol": {\r
-          "type": "picture",\r
-          "name": "symbol_option"\r
+      "attributes": {\r
+        "id": {\r
+          "type": "number",\r
+          "primary_key": 1,\r
+          "rules": {\r
+            "number": true\r
+          }\r
+        },\r
+        "name": {\r
+          "type": "text",\r
+          "rules": {\r
+            "required": true\r
+          }\r
+        },\r
+        "classname": {\r
+          "type": "text",\r
+          "rules": {\r
+            "required": true\r
+          }\r
         },\r
         "caption": {\r
-          "type": "none"\r
+          "type": "text",\r
+          "rules": {\r
+            "required": true\r
+          }\r
         },\r
-        "summary": {\r
-          "type": "none"\r
+        "system_picture_id": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true\r
+          }\r
         },\r
-        "edit": {\r
-          "type": "none"\r
+        "settings": {\r
+          "type": "text",\r
+          "rules": {\r
+            "required": true\r
+          }\r
+        },\r
+        "created_at": {\r
+          "type": "datetime"\r
+        },\r
+        "updated_at": {\r
+          "type": "datetime"\r
+        }\r
+      },\r
+      "select": {\r
+        "method": "enable_list",\r
+        "caption": {\r
+          "type": "column",\r
+          "name": "caption"\r
         }\r
       }\r
     },\r
-    "elements": [\r
-      {\r
-        "name": "panel_picture",\r
-        "path_name": "panel_pictures",\r
-        "parts": []\r
-      },\r
-      {\r
-        "name": "speech_balloon",\r
-        "path_name": "circle_speech_balloon/speech_balloons",\r
-        "parts": [\r
-          "balloon",\r
-          "speech"\r
-        ]\r
-      },\r
-      {\r
-        "name": "ground_picture",\r
-        "path_name": "ground_pictures",\r
-        "parts": []\r
+    "LicenseGroup": "license_group",\r
+    "license_group": {\r
+      "class_name": "LicenseGroup",\r
+      "table_name": "license_groups",\r
+      "associations": {\r
+        "belongs_to": {},\r
+        "has_many": {\r
+          "licenses": {\r
+            "foreign_key": "license_group_id",\r
+            "list_method": "list_by_license_group"\r
+          }\r
+        },\r
+        "has_one": {}\r
       },\r
-      {\r
-        "name": "ground_color",\r
-        "path_name": "ground_colors",\r
-        "parts": []\r
-      }\r
-    ],\r
-    "forms": {\r
-      "Panel": "panel",\r
-      "panel": {\r
-        "attributes": {\r
-          "caption": {\r
-            "column": "caption",\r
-            "type": "text",\r
-            "label": {},\r
-            "options": {\r
-              "row_break": true\r
-            }\r
-          },\r
-          "width": {\r
-            "column": "width",\r
-            "type": "number",\r
-            "label": {},\r
-            "options": {\r
-              "size": 5\r
-            }\r
-          },\r
-          "height": {\r
-            "column": "height",\r
-            "type": "number",\r
-            "label": {},\r
-            "options": {\r
-              "size": 5,\r
-              "row_break": true\r
-            }\r
-          },\r
-          "border": {\r
-            "column": "border",\r
-            "type": "number",\r
-            "label": {},\r
-            "options": {\r
-              "size": 5\r
-            }\r
-          },\r
-          "publish": {\r
-            "column": "publish",\r
-            "type": "select",\r
-            "label": {},\r
-            "options": {\r
-              "source": "magic_number",\r
-              "key": "comic_visible_items",\r
-              "size": 5,\r
-              "row_break": true\r
-            }\r
-          },\r
-          "id": {\r
-            "column": "id",\r
-            "type": "hidden",\r
-            "label": {\r
-              "type": "hidden"\r
-            },\r
-            "options": {}\r
-          },\r
-          "author_id": {\r
-            "column": "author_id",\r
-            "type": "hidden",\r
-            "label": {\r
-              "type": "hidden"\r
-            },\r
-            "options": {}\r
+      "attributes": {\r
+        "id": {\r
+          "type": "number",\r
+          "primary_key": 1,\r
+          "rules": {\r
+            "number": true\r
           }\r
         },\r
-        "fields": [\r
-          "caption",\r
-          "width",\r
-          "height",\r
-          "border",\r
-          "publish",\r
-          "id",\r
-          "author_id"\r
-        ]\r
+        "name": {\r
+          "type": "text",\r
+          "rules": {\r
+            "required": true\r
+          }\r
+        },\r
+        "classname": {\r
+          "type": "text",\r
+          "rules": {\r
+            "required": true\r
+          }\r
+        },\r
+        "caption": {\r
+          "type": "text",\r
+          "rules": {\r
+            "required": true\r
+          }\r
+        },\r
+        "url": {\r
+          "type": "text",\r
+          "rules": {\r
+            "required": true\r
+          }\r
+        },\r
+        "created_at": {\r
+          "type": "datetime"\r
+        },\r
+        "updated_at": {\r
+          "type": "datetime"\r
+        }\r
       },\r
-      "PanelPicture": "panel_picture",\r
-      "panel_picture": {\r
-        "attributes": {\r
-          "caption": {\r
-            "column": "caption",\r
-            "type": "text",\r
-            "label": {},\r
-            "options": {\r
-              "row_break": true\r
-            }\r
-          },\r
-          "x": {\r
-            "column": "x",\r
-            "type": "number",\r
-            "label": {},\r
-            "options": {\r
-              "size": 5\r
-            }\r
+      "select": {\r
+        "method": "list",\r
+        "caption": {\r
+          "type": "column",\r
+          "name": "caption"\r
+        }\r
+      }\r
+    },\r
+    "License": "license",\r
+    "license": {\r
+      "class_name": "License",\r
+      "table_name": "licenses",\r
+      "associations": {\r
+        "belongs_to": {\r
+          "license_group": {\r
+            "id_column": "license_group_id"\r
           },\r
-          "y": {\r
-            "column": "y",\r
-            "type": "number",\r
-            "label": {},\r
-            "options": {\r
-              "size": 5,\r
-              "row_break": true\r
-            }\r
+          "system_picture": {\r
+            "id_column": "system_picture_id"\r
+          }\r
+        },\r
+        "has_many": {\r
+          "resource_pictures": {\r
+            "foreign_key": "license_id",\r
+            "list_method": "list_by_license"\r
+          }\r
+        },\r
+        "has_one": {}\r
+      },\r
+      "attributes": {\r
+        "id": {\r
+          "type": "number",\r
+          "primary_key": 1,\r
+          "rules": {\r
+            "number": true\r
+          }\r
+        },\r
+        "license_group_id": {\r
+          "type": "number",\r
+          "rules": {\r
+            "number": true\r
+          }\r
+        },\r
+        "name": {\r
+          "type": "text",\r
+          "rules": {\r
+            "required": true\r
+          }\r
+        },\r
+        "caption": {\r
+          "type": "text",\r
+          "rules": {\r
+            "required": true\r
+          }\r
+        },\r
+        "system_picture_id": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true\r
+          }\r
+        },\r
+        "url": {\r
+          "type": "text",\r
+          "rules": {\r
+            "required": true\r
+          }\r
+        },\r
+        "settings": {\r
+          "type": "text",\r
+          "rules": {}\r
+        },\r
+        "credit_pictures": {\r
+          "type": "text",\r
+          "rules": {}\r
+        },\r
+        "created_at": {\r
+          "type": "datetime"\r
+        },\r
+        "updated_at": {\r
+          "type": "datetime"\r
+        }\r
+      }\r
+    },\r
+    "Author": "author",\r
+    "author": {\r
+      "class_name": "Author",\r
+      "table_name": "authors",\r
+      "associations": {\r
+        "belongs_to": {},\r
+        "has_many": {\r
+          "scrolls": {\r
+            "foreign_key": "author_id",\r
+            "list_method": "list_by_author"\r
           },\r
-          "width": {\r
-            "column": "width",\r
-            "type": "number",\r
-            "label": {},\r
-            "options": {\r
-              "size": 5,\r
-              "row_break": true\r
-            },\r
-            "helpers": {\r
-              "size": {\r
-                "path": "panels/size_helper",\r
-                "options": {\r
-                  "class": "panel_picture_width_tool"\r
-                }\r
-              }\r
-            }\r
+          "comics": {\r
+            "foreign_key": "author_id",\r
+            "list_method": "list_by_author"\r
           },\r
-          "height": {\r
-            "column": "height",\r
-            "type": "number",\r
-            "label": {},\r
-            "options": {\r
-              "size": 5,\r
-              "row_break": true\r
-            },\r
-            "helpers": {\r
-              "size": {\r
-                "path": "panels/size_helper",\r
-                "options": {\r
-                  "class": "panel_picture_height_tool"\r
-                }\r
-              }\r
-            }\r
+          "stories": {\r
+            "foreign_key": "author_id",\r
+            "list_method": "list_by_author"\r
           },\r
-          "link": {\r
-            "column": "link",\r
-            "type": "text",\r
-            "label": {},\r
-            "options": {\r
-              "row_break": true\r
-            }\r
+          "sheets": {\r
+            "foreign_key": "author_id",\r
+            "list_method": "list_by_author"\r
           },\r
-          "id": {\r
-            "column": "id",\r
-            "type": "hidden",\r
-            "label": {\r
-              "type": "hidden"\r
-            },\r
-            "options": {}\r
-          },\r
-          "panel_id": {\r
-            "column": "panel_id",\r
-            "type": "hidden",\r
-            "label": {\r
-              "type": "hidden"\r
-            },\r
-            "options": {}\r
-          },\r
-          "picture_id": {\r
-            "column": "picture_id",\r
-            "type": "hidden",\r
-            "label": {},\r
-            "helpers": {\r
-              "popup": {\r
-                "path": "panels/popup_helper",\r
-                "source": "pictures",\r
-                "options": {}\r
-              }\r
-            },\r
-            "options": {}\r
-          },\r
-          "z": {\r
-            "column": "z",\r
-            "type": "hidden",\r
-            "label": {\r
-              "type": "hidden"\r
-            },\r
-            "options": {}\r
-          },\r
-          "t": {\r
-            "column": "t",\r
-            "type": "hidden",\r
-            "label": {\r
-              "type": "hidden"\r
-            },\r
-            "options": {}\r
+          "panels": {\r
+            "foreign_key": "author_id",\r
+            "list_method": "list_by_author"\r
           }\r
         },\r
-        "fields": [\r
-          "caption",\r
-          "x",\r
-          "y",\r
-          "width",\r
-          "height",\r
-          "link",\r
-          "id",\r
-          "panel_id",\r
-          "picture_id",\r
-          "z",\r
-          "t"\r
-        ]\r
+        "has_one": {}\r
       },\r
-      "speech_balloon": {\r
-        "attributes": {\r
-          "speech_balloon.id": {\r
-            "column": "id",\r
-            "type": "hidden",\r
-            "label": {\r
-              "type": "hidden"\r
-            },\r
-            "options": {}\r
-          },\r
-          "speech_balloon.panel_id": {\r
-            "column": "panel_id",\r
-            "type": "hidden",\r
-            "label": {\r
-              "type": "hidden"\r
-            },\r
-            "options": {}\r
-          },\r
-          "speech_balloon.speech_balloon_template_id": {\r
-            "column": "speech_balloon_template_id",\r
-            "type": "hidden",\r
-            "label": {\r
-              "type": "hidden"\r
-            },\r
-            "options": {}\r
-          },\r
-          "speech_balloon.caption": {\r
-            "column": "caption",\r
-            "type": "text",\r
-            "label": {},\r
-            "options": {\r
-              "row_break": true\r
-            }\r
-          },\r
-          "speech_balloon.z": {\r
-            "column": "z",\r
-            "type": "hidden",\r
-            "label": {\r
-              "type": "hidden"\r
-            },\r
-            "options": {}\r
-          },\r
-          "speech_balloon.t": {\r
-            "column": "t",\r
-            "type": "hidden",\r
-            "label": {\r
-              "type": "hidden"\r
-            },\r
-            "options": {}\r
-          },\r
-          "speech_balloon.classname": {\r
-            "column": "classname",\r
-            "type": "hidden",\r
-            "label": {\r
-              "type": "hidden"\r
-            },\r
-            "options": {}\r
-          },\r
-          "speech_balloon.settings": {\r
-            "column": "settings",\r
-            "type": "hidden",\r
-            "label": {\r
-              "type": "hidden"\r
-            },\r
-            "options": {}\r
-          },\r
-          "balloon.id": {\r
-            "model": "balloon",\r
-            "part": "balloon",\r
-            "column": "id",\r
-            "type": "hidden",\r
-            "label": {\r
-              "type": "hidden"\r
-            },\r
-            "options": {}\r
-          },\r
-          "balloon.speech_balloon_id": {\r
-            "model": "balloon",\r
-            "part": "balloon",\r
-            "column": "speech_balloon_id",\r
-            "type": "hidden",\r
-            "label": {\r
-              "type": "hidden"\r
-            },\r
-            "options": {}\r
+      "attributes": {\r
+        "id": {\r
+          "type": "number",\r
+          "primary_key": 1,\r
+          "rules": {\r
+            "number": true\r
+          }\r
+        },\r
+        "name": {\r
+          "type": "text",\r
+          "rules": {\r
+            "required": true\r
+          }\r
+        },\r
+        "user_id": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true\r
+          }\r
+        },\r
+        "created_at": {\r
+          "type": "datetime"\r
+        },\r
+        "updated_at": {\r
+          "type": "datetime"\r
+        }\r
+      },\r
+      "select": {\r
+        "method": "list",\r
+        "caption": {\r
+          "type": "column",\r
+          "name": "name"\r
+        }\r
+      }\r
+    },\r
+    "Artist": "artist",\r
+    "artist": {\r
+      "class_name": "Artist",\r
+      "table_name": "artists",\r
+      "associations": {\r
+        "belongs_to": {},\r
+        "has_many": {\r
+          "resource_pictures": {\r
+            "foreign_key": "artist_id",\r
+            "list_method": "list_by_artist"\r
+          }\r
+        },\r
+        "has_one": {}\r
+      },\r
+      "attributes": {\r
+        "id": {\r
+          "type": "number",\r
+          "primary_key": 1,\r
+          "rules": {\r
+            "number": true\r
+          }\r
+        },\r
+        "name": {\r
+          "type": "text",\r
+          "rules": {\r
+            "required": true\r
+          }\r
+        },\r
+        "author_id": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true\r
+          }\r
+        },\r
+        "created_at": {\r
+          "type": "datetime"\r
+        },\r
+        "updated_at": {\r
+          "type": "datetime"\r
+        }\r
+      },\r
+      "select": {\r
+        "method": "list",\r
+        "caption": {\r
+          "type": "column",\r
+          "name": "name"\r
+        }\r
+      }\r
+    },\r
+    "SystemPicture": "system_picture",\r
+    "system_picture": {\r
+      "class_name": "SystemPicture",\r
+      "table_name": "system_pictures",\r
+      "associations": {\r
+        "belongs_to": {},\r
+        "has_many": {\r
+          "balloons": {\r
+            "foreign_key": "system_picture_id",\r
+            "list_method": "list_by_system_picture"\r
           },\r
-          "balloon.system_picture_id": {\r
-            "model": "balloon",\r
-            "part": "balloon",\r
-            "column": "system_picture_id",\r
-            "type": "hidden",\r
-            "label": {\r
-              "type": "hidden"\r
-            },\r
-            "options": {}\r
+          "balloon_templates": {\r
+            "foreign_key": "system_picture_id",\r
+            "list_method": "list_by_system_picture"\r
           },\r
-          "balloon.r": {\r
-            "model": "balloon",\r
-            "part": "balloon",\r
-            "column": "r",\r
-            "type": "number",\r
-            "label": {},\r
-            "options": {\r
-              "size": 5,\r
-              "row_break": true\r
-            },\r
-            "helpers": {\r
-              "tail_angle": {\r
-                "path": "panels/tail_angle_helper",\r
-                "options": {}\r
-              }\r
-            }\r
-          },\r
-          "balloon.x": {\r
-            "model": "balloon",\r
-            "part": "balloon",\r
-            "column": "x",\r
-            "type": "number",\r
-            "label": {},\r
-            "options": {\r
-              "size": 5\r
-            }\r
-          },\r
-          "balloon.y": {\r
-            "model": "balloon",\r
-            "part": "balloon",\r
-            "column": "y",\r
-            "type": "number",\r
-            "label": {},\r
-            "options": {\r
-              "size": 5,\r
-              "row_break": true\r
-            }\r
-          },\r
-          "balloon.width": {\r
-            "model": "balloon",\r
-            "part": "balloon",\r
-            "column": "width",\r
-            "type": "number",\r
-            "label": {},\r
-            "options": {\r
-              "size": 5\r
-            }\r
-          },\r
-          "balloon.height": {\r
-            "model": "balloon",\r
-            "part": "balloon",\r
-            "column": "height",\r
-            "type": "number",\r
-            "label": {},\r
-            "options": {\r
-              "size": 5,\r
-              "row_break": true\r
-            }\r
-          },\r
-          "balloon.settings": {\r
-            "model": "balloon",\r
-            "part": "balloon",\r
-            "column": "settings",\r
-            "type": "hidden",\r
-            "label": {\r
-              "type": "hidden"\r
-            },\r
-            "options": {}\r
-          },\r
-          "speech.id": {\r
-            "model": "speech",\r
-            "part": "speech",\r
-            "column": "id",\r
-            "type": "hidden",\r
-            "label": {\r
-              "type": "hidden"\r
-            },\r
-            "options": {}\r
-          },\r
-          "speech.speech_balloon_id": {\r
-            "model": "speech",\r
-            "part": "speech",\r
-            "column": "speech_balloon_id",\r
-            "type": "hidden",\r
-            "label": {\r
-              "type": "hidden"\r
-            },\r
-            "options": {}\r
-          },\r
-          "speech.x": {\r
-            "model": "speech",\r
-            "part": "speech",\r
-            "column": "x",\r
-            "type": "hidden",\r
-            "label": {\r
-              "type": "hidden"\r
-            },\r
-            "options": {}\r
-          },\r
-          "speech.y": {\r
-            "model": "speech",\r
-            "part": "speech",\r
-            "column": "y",\r
-            "type": "hidden",\r
-            "label": {\r
-              "type": "hidden"\r
-            },\r
-            "options": {}\r
-          },\r
-          "speech.width": {\r
-            "model": "speech",\r
-            "part": "speech",\r
-            "column": "width",\r
-            "type": "hidden",\r
-            "label": {\r
-              "type": "hidden"\r
-            },\r
-            "options": {}\r
-          },\r
-          "speech.height": {\r
-            "model": "speech",\r
-            "part": "speech",\r
-            "column": "height",\r
-            "type": "hidden",\r
-            "label": {\r
-              "type": "hidden"\r
-            },\r
-            "options": {}\r
-          },\r
-          "speech.writing_format_id": {\r
-            "model": "speech",\r
-            "part": "speech",\r
-            "column": "writing_format_id",\r
-            "type": "select",\r
-            "label": {},\r
-            "options": {\r
-              "source": "model",\r
-              "model": "writing_format",\r
-              "method": "enable_list",\r
-              "caption": "caption"\r
-            }\r
-          },\r
-          "speech.font_size": {\r
-            "model": "speech",\r
-            "part": "speech",\r
-            "column": "font_size",\r
-            "type": "select",\r
-            "label": {},\r
-            "options": {\r
-              "source": "magic_number",\r
-              "key": "speech_font_size_items",\r
-              "row_break": true\r
-            }\r
-          },\r
-          "speech.text_align": {\r
-            "model": "speech",\r
-            "part": "speech",\r
-            "column": "text_align",\r
-            "type": "select",\r
-            "label": {},\r
-            "options": {\r
-              "source": "magic_number",\r
-              "key": "speech_text_align_items"\r
-            }\r
-          },\r
-          "speech.quotes": {\r
-            "model": "speech",\r
-            "part": "speech",\r
-            "column": "quotes",\r
-            "type": "text",\r
-            "label": {},\r
-            "options": {\r
-              "size": 5\r
-            }\r
-          },\r
-          "speech.content": {\r
-            "model": "speech",\r
-            "part": "speech",\r
-            "column": "content",\r
-            "type": "text_area",\r
-            "label": {\r
-              "row_break": true\r
-            },\r
-            "options": {\r
-              "size": "45x5"\r
-            }\r
-          },\r
-          "speech.fore_color": {\r
-            "model": "speech",\r
-            "part": "speech",\r
-            "column": "fore_color",\r
-            "type": "hidden",\r
-            "label": {\r
-              "row_break": true\r
-            },\r
-            "options": {},\r
-            "helpers": {\r
-              "color": {\r
-                "path": "panels/color_helper",\r
-                "options": {},\r
-                "wrapper": "speech-fore_color-wrap"\r
-              }\r
-            }\r
-          },\r
-          "speech.settings": {\r
-            "model": "speech",\r
-            "part": "speech",\r
-            "column": "settings",\r
-            "type": "hidden",\r
-            "label": {\r
-              "type": "hidden"\r
-            },\r
-            "options": {}\r
+          "licenses": {\r
+            "foreign_key": "system_picture_id",\r
+            "list_method": "list_by_system_picture"\r
           }\r
-        }\r
-      },\r
-      "CircleSpeechBalloon": "circle_speech_balloon",\r
-      "circle_speech_balloon": {\r
-        "base": "speech_balloon",\r
-        "attributes": {},\r
-        "fields": [\r
-          "speech_balloon.caption",\r
-          "balloon.r",\r
-          "balloon.x",\r
-          "balloon.y",\r
-          "balloon.width",\r
-          "balloon.height",\r
-          "balloon.id",\r
-          "balloon.speech_balloon_id",\r
-          "balloon.system_picture_id",\r
-          "balloon.settings",\r
-          "speech.writing_format_id",\r
-          "speech.font_size",\r
-          "speech.text_align",\r
-          "speech.quotes",\r
-          "speech.content",\r
-          "speech.fore_color",\r
-          "speech.id",\r
-          "speech.speech_balloon_id",\r
-          "speech.x",\r
-          "speech.y",\r
-          "speech.width",\r
-          "speech.height",\r
-          "speech.settings",\r
-          "speech_balloon.id",\r
-          "speech_balloon.panel_id",\r
-          "speech_balloon.speech_balloon_template_id",\r
-          "speech_balloon.classname",\r
-          "speech_balloon.z",\r
-          "speech_balloon.t",\r
-          "speech_balloon.settings"\r
-        ]\r
+        },\r
+        "has_one": {}\r
       },\r
-      "PlainSpeechBalloon": "plain_speech_balloon",\r
-      "plain_speech_balloon": {\r
-        "base": "speech_balloon",\r
-        "attributes": {\r
-          "balloon.r": {\r
-            "model": "balloon",\r
-            "part": "balloon",\r
-            "column": "r",\r
-            "type": "hidden",\r
-            "label": {\r
-              "type": "hidden"\r
-            },\r
-            "options": {}\r
+      "attributes": {\r
+        "id": {\r
+          "type": "number",\r
+          "primary_key": 1,\r
+          "rules": {\r
+            "number": true\r
           }\r
         },\r
-        "fields": [\r
-          "speech_balloon.caption",\r
-          "balloon.r",\r
-          "balloon.x",\r
-          "balloon.y",\r
-          "balloon.width",\r
-          "balloon.height",\r
-          "balloon.id",\r
-          "balloon.speech_balloon_id",\r
-          "balloon.system_picture_id",\r
-          "balloon.settings",\r
-          "speech.writing_format_id",\r
-          "speech.font_size",\r
-          "speech.text_align",\r
-          "speech.quotes",\r
-          "speech.content",\r
-          "speech.fore_color",\r
-          "speech.id",\r
-          "speech.speech_balloon_id",\r
-          "speech.x",\r
-          "speech.y",\r
-          "speech.width",\r
-          "speech.height",\r
-          "speech.settings",\r
-          "speech_balloon.id",\r
-          "speech_balloon.panel_id",\r
-          "speech_balloon.speech_balloon_template_id",\r
-          "speech_balloon.classname",\r
-          "speech_balloon.z",\r
-          "speech_balloon.t",\r
-          "speech_balloon.settings"\r
-        ]\r
-      },\r
-      "SquareSpeechBalloon": "square_speech_balloon",\r
-      "square_speech_balloon": {\r
-        "base": "speech_balloon",\r
-        "attributes": {\r
-          "balloon.r": {\r
-            "model": "balloon",\r
-            "part": "balloon",\r
-            "column": "r",\r
-            "type": "hidden",\r
-            "label": {\r
-              "type": "hidden"\r
-            },\r
-            "options": {}\r
+        "ext": {\r
+          "type": "text",\r
+          "rules": {\r
+            "required": true\r
           }\r
         },\r
-        "fields": [\r
-          "speech_balloon.caption",\r
-          "balloon.r",\r
-          "balloon.x",\r
-          "balloon.y",\r
-          "balloon.width",\r
-          "balloon.height",\r
-          "balloon.id",\r
-          "balloon.speech_balloon_id",\r
-          "balloon.system_picture_id",\r
-          "balloon.settings",\r
-          "speech.writing_format_id",\r
-          "speech.font_size",\r
-          "speech.text_align",\r
-          "speech.quotes",\r
-          "speech.content",\r
-          "speech.fore_color",\r
-          "speech.id",\r
-          "speech.speech_balloon_id",\r
-          "speech.x",\r
-          "speech.y",\r
-          "speech.width",\r
-          "speech.height",\r
-          "speech.settings",\r
-          "speech_balloon.id",\r
-          "speech_balloon.panel_id",\r
-          "speech_balloon.speech_balloon_template_id",\r
-          "speech_balloon.classname",\r
-          "speech_balloon.z",\r
-          "speech_balloon.t",\r
-          "speech_balloon.settings"\r
-        ]\r
-      },\r
-      "GroundPicture": "ground_picture",\r
-      "ground_picture": {\r
-        "attributes": {\r
-          "id": {\r
-            "column": "id",\r
-            "type": "hidden",\r
-            "label": {\r
-              "type": "hidden"\r
-            },\r
-            "options": {}\r
-          },\r
-          "panel_id": {\r
-            "column": "panel_id",\r
-            "type": "hidden",\r
-            "label": {\r
-              "type": "hidden"\r
-            },\r
-            "options": {}\r
-          },\r
-          "picture_id": {\r
-            "column": "picture_id",\r
-            "type": "hidden",\r
-            "label": {\r
-              "type": "hidden"\r
-            },\r
-            "options": {}\r
-          },\r
-          "caption": {\r
-            "column": "caption",\r
-            "type": "text",\r
-            "label": {},\r
-            "options": {\r
-              "row_break": true\r
-            }\r
-          },\r
-          "repeat": {\r
-            "column": "repeat",\r
-            "type": "select",\r
-            "label": {},\r
-            "options": {\r
-              "source": "magic_number",\r
-              "key": "ground_picture_repeat_items",\r
-              "row_break": true\r
-            }\r
-          },\r
-          "x": {\r
-            "column": "x",\r
-            "type": "number",\r
-            "label": {},\r
-            "options": {\r
-              "size": 5\r
-            }\r
-          },\r
-          "y": {\r
-            "column": "y",\r
-            "type": "number",\r
-            "label": {},\r
-            "options": {\r
-              "size": 5,\r
-              "row_break": true\r
-            }\r
-          },\r
-          "z": {\r
-            "column": "z",\r
-            "type": "hidden",\r
-            "label": {\r
-              "type": "hidden"\r
-            },\r
-            "options": {}\r
-          },\r
-          "t": {\r
-            "column": "t",\r
-            "type": "hidden",\r
-            "label": {\r
-              "type": "hidden"\r
-            },\r
-            "options": {}\r
+        "width": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true\r
           }\r
         },\r
-        "fields": [\r
-          "caption",\r
-          "repeat",\r
-          "x",\r
-          "y",\r
-          "z",\r
-          "t",\r
-          "id",\r
-          "panel_id",\r
-          "picture_id"\r
-        ]\r
-      },\r
-      "GroundColor": "ground_color",\r
-      "ground_color": {\r
-        "attributes": {\r
-          "id": {\r
-            "column": "id",\r
-            "type": "hidden",\r
-            "label": {\r
-              "type": "hidden"\r
-            },\r
-            "options": {}\r
-          },\r
-          "panel_id": {\r
-            "column": "panel_id",\r
-            "type": "hidden",\r
-            "label": {\r
-              "type": "hidden"\r
-            },\r
-            "options": {}\r
-          },\r
-          "caption": {\r
-            "column": "caption",\r
-            "type": "text",\r
-            "label": {},\r
-            "options": {\r
-              "row_break": true\r
-            }\r
-          },\r
-          "code": {\r
-            "column": "code",\r
-            "type": "hidden",\r
-            "label": {\r
-              "row_break": true\r
-            },\r
-            "options": {\r
-              "row_break": true\r
-            },\r
-            "helpers": {\r
-              "color": {\r
-                "path": "panels/color_helper",\r
-                "options": {},\r
-                "wrapper": "ground_color-code-wrap"\r
-              }\r
-            }\r
-          },\r
-          "orientation": {\r
-            "column": "orientation",\r
-            "type": "select",\r
-            "label": {},\r
-            "options": {\r
-              "source": "magic_number",\r
-              "key": "ground_color_orientation_items",\r
-              "row_break": true\r
-            }\r
-          },\r
-          "xy": {\r
-            "column": "xy",\r
-            "type": "number",\r
-            "label": {},\r
-            "options": {\r
-              "size": 5\r
-            }\r
-          },\r
-          "wh": {\r
-            "column": "wh",\r
-            "type": "number",\r
-            "label": {},\r
-            "options": {\r
-              "size": 5,\r
-              "row_break": true\r
-            }\r
-          },\r
-          "z": {\r
-            "column": "z",\r
-            "type": "hidden",\r
-            "label": {\r
-              "type": "hidden"\r
-            },\r
-            "options": {}\r
-          },\r
-          "t": {\r
-            "column": "t",\r
-            "type": "hidden",\r
-            "label": {\r
-              "type": "hidden"\r
-            },\r
-            "options": {}\r
-          }\r
-        },\r
-        "fields": [\r
-          "id",\r
-          "panel_id",\r
-          "caption",\r
-          "code",\r
-          "orientation",\r
-          "xy",\r
-          "wh",\r
-          "z",\r
-          "t"\r
-        ]\r
-      }\r
-    }\r
-  },\r
-  "locales": {\r
-    "ja": {}\r
-  },\r
-  "models": {\r
-    "Scroll": "scroll",\r
-    "scroll": {\r
-      "class_name": "Scroll",\r
-      "table_name": "scrolls",\r
-      "associations": {\r
-        "belongs_to": {\r
-          "author": {\r
-            "id_column": "author_id"\r
-          }\r
-        },\r
-        "has_many": {\r
-          "scroll_panels": {\r
-            "foreign_key": "scroll_id",\r
-            "model": "scroll_panel"\r
-          },\r
-          "panels": {\r
-            "through": "scroll_panel",\r
-            "foreign_key": "scroll_id",\r
-            "model": "panel"\r
-          }\r
-        }\r
-      },\r
-      "attributes": {\r
-        "id": {\r
+        "height": {\r
           "type": "number",\r
-          "primary_key": 1,\r
           "rules": {\r
+            "required": true,\r
             "number": true\r
           }\r
         },\r
-        "title": {\r
-          "type": "text",\r
-          "rules": {\r
-            "required": true\r
-          }\r
-        },\r
-        "description": {\r
-          "type": "text",\r
-          "rules": {}\r
-        },\r
-        "visible": {\r
+        "filesize": {\r
           "type": "number",\r
           "rules": {\r
             "required": true,\r
             "number": true\r
-          },\r
-          "source": {\r
-            "type": "magic_number",\r
-            "key": "scroll_visible_items"\r
           }\r
         },\r
-        "author_id": {\r
-          "type": "number",\r
+        "md5": {\r
+          "type": "text",\r
           "rules": {\r
-            "required": true,\r
-            "number": true\r
+            "required": true\r
           }\r
         },\r
         "created_at": {\r
         "updated_at": {\r
           "type": "datetime"\r
         }\r
-      },\r
-      "select": {\r
-        "list": {\r
-          "name": "public"\r
+      }\r
+    }\r
+  },\r
+  "lists": {\r
+    "scroll": {\r
+      "default_page_size": 25,\r
+      "max_page_size": 100,\r
+      "lists": {\r
+        "public_list": {\r
+          "type": "public"\r
         },\r
-        "caption": {\r
-          "type": "column",\r
-          "name": "title"\r
+        "private_list": {\r
+          "type": "private"\r
+        },\r
+        "scroll_panels": {\r
+          "type": "has_many",\r
+          "association_name": "scroll_panels"\r
+        },\r
+        "panels": {\r
+          "type": "has_many",\r
+          "association_name": "panels"\r
+        },\r
+        "by_author": {\r
+          "type": "filter",\r
+          "from": "author",\r
+          "filter_key": "author_id"\r
+        },\r
+        "by_panel": {\r
+          "type": "through_filter",\r
+          "from": "panel",\r
+          "through": "scroll_panels",\r
+          "filter_key": "panel_id"\r
         }\r
       }\r
     },\r
-    "ScrollPanel": "scroll_panel",\r
     "scroll_panel": {\r
-      "class_name": "ScrollPanel",\r
-      "table_name": "scroll_panels",\r
-      "associations": {\r
-        "belongs_to": {\r
-          "panel": {\r
-            "id_column": "panel_id"\r
-          },\r
-          "scroll": {\r
-            "id_column": "scroll_id"\r
-          }\r
-        },\r
-        "has_many": {}\r
-      },\r
-      "attributes": {\r
-        "id": {\r
-          "type": "number",\r
-          "primary_key": 1,\r
-          "rules": {\r
-            "number": true\r
-          }\r
+      "default_page_size": 20,\r
+      "lists": {\r
+        "public_list": {\r
+          "type": "public"\r
         },\r
-        "scroll_id": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true\r
-          }\r
+        "private_list": {\r
+          "type": "private"\r
         },\r
-        "panel_id": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true\r
-          }\r
+        "by_scroll": {\r
+          "type": "filter",\r
+          "from": "scroll",\r
+          "filter_key": "scroll_id"\r
         },\r
-        "t": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true,\r
-            "min": 0\r
-          }\r
+        "by_panel": {\r
+          "type": "filter",\r
+          "from": "panel",\r
+          "filter_key": "panel_id"\r
+        }\r
+      }\r
+    },\r
+    "comic": {\r
+      "default_page_size": 20,\r
+      "lists": {\r
+        "public_list": {\r
+          "type": "public"\r
         },\r
-        "author_id": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true\r
-          }\r
+        "private_list": {\r
+          "type": "private"\r
         },\r
-        "created_at": {\r
-          "type": "datetime"\r
+        "stories": {\r
+          "type": "has_many",\r
+          "association_name": "stories"\r
         },\r
-        "updated_at": {\r
-          "type": "datetime"\r
+        "by_author": {\r
+          "type": "filter",\r
+          "from": "author",\r
+          "filter_key": "author_id"\r
         }\r
       }\r
     },\r
-    "Comic": "comic",\r
-    "comic": {\r
-      "class_name": "Comic",\r
-      "table_name": "comics",\r
-      "associations": {\r
-        "belongs_to": {\r
-          "author": {\r
-            "id_column": "author_id"\r
-          }\r
+    "story": {\r
+      "default_page_size": 20,\r
+      "lists": {\r
+        "public_list": {\r
+          "type": "public"\r
         },\r
-        "has_many": {\r
-          "stories": {\r
-            "foreign_key": "comic_id",\r
-            "model": "story"\r
-          }\r
+        "private_list": {\r
+          "type": "private"\r
         },\r
-        "has_many_through": {}\r
-      },\r
-      "attributes": {\r
-        "id": {\r
-          "type": "number",\r
-          "primary_key": 1,\r
-          "rules": {\r
-            "number": true\r
-          }\r
+        "story_sheets": {\r
+          "type": "has_many",\r
+          "association_name": "story_sheets"\r
         },\r
-        "title": {\r
-          "type": "text",\r
-          "rules": {\r
-            "required": true\r
-          }\r
+        "sheets": {\r
+          "type": "has_many",\r
+          "association_name": "sheets"\r
         },\r
-        "description": {\r
-          "type": "text",\r
-          "rules": {}\r
+        "by_comic": {\r
+          "type": "filter",\r
+          "from": "comic",\r
+          "filter_key": "comic_id"\r
         },\r
-        "visible": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true\r
-          },\r
-          "source": {\r
-            "type": "magic_number",\r
-            "key": "comic_visible_items"\r
-          }\r
+        "by_sheet": {\r
+          "type": "through_filter",\r
+          "from": "sheet",\r
+          "through": "sheet_panels",\r
+          "filter_key": "sheet_id"\r
         },\r
-        "author_id": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true\r
-          }\r
+        "by_author": {\r
+          "type": "element_filter",\r
+          "from": "author",\r
+          "filter_key": "author_id"\r
+        }\r
+      }\r
+    },\r
+    "story_sheet": {\r
+      "default_page_size": 20,\r
+      "lists": {\r
+        "public_list": {\r
+          "type": "public"\r
         },\r
-        "created_at": {\r
-          "type": "datetime"\r
+        "private_list": {\r
+          "type": "private"\r
         },\r
-        "updated_at": {\r
-          "type": "datetime"\r
-        }\r
-      },\r
-      "select": {\r
-        "method": "list",\r
-        "caption": {\r
-          "type": "column",\r
-          "name": "title"\r
+        "by_story": {\r
+          "type": "filter",\r
+          "from": "story",\r
+          "filter_key": "story_id"\r
+        },\r
+        "by_sheet": {\r
+          "type": "filter",\r
+          "from": "sheet",\r
+          "filter_key": "sheet_id"\r
         }\r
       }\r
     },\r
-    "Story": "story",\r
-    "story": {\r
-      "class_name": "Story",\r
-      "table_name": "stories",\r
-      "associations": {\r
-        "belongs_to": {\r
-          "comic": {\r
-            "id_column": "comic_id"\r
-          }\r
+    "sheet": {\r
+      "default_page_size": 20,\r
+      "lists": {\r
+        "public_list": {\r
+          "type": "public"\r
         },\r
-        "has_many": {\r
-          "story_sheets": {\r
-            "foreign_key": "story_id",\r
-            "list_method": "list_by_story"\r
-          },\r
-          "sheets": {\r
-            "through": "story_sheets",\r
-            "foreign_key": "story_id",\r
-            "list_method": "list_by_story"\r
-          }\r
-        }\r
-      },\r
-      "attributes": {\r
-        "id": {\r
-          "type": "number",\r
-          "primary_key": 1,\r
-          "rules": {\r
-            "number": true\r
-          }\r
+        "private_list": {\r
+          "type": "private"\r
         },\r
-        "comic_id": {\r
-          "type": "number",\r
-          "rules": {\r
-            "number": true\r
-          }\r
+        "story_sheets": {\r
+          "type": "has_many",\r
+          "association_name": "story_sheets"\r
         },\r
-        "title": {\r
-          "type": "text",\r
-          "rules": {}\r
+        "stories": {\r
+          "type": "has_many",\r
+          "association_name": "stories"\r
         },\r
-        "description": {\r
-          "type": "text",\r
-          "rules": {}\r
+        "sheet_panels": {\r
+          "type": "has_many",\r
+          "association_name": "sheet_panels"\r
         },\r
-        "t": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true,\r
-            "min": 0\r
-          }\r
+        "panels": {\r
+          "type": "has_many",\r
+          "association_name": "panels"\r
         },\r
-        "visible": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true\r
-          },\r
-          "source": {\r
-            "type": "magic_number",\r
-            "key": "story_visible_items"\r
-          }\r
+        "by_story": {\r
+          "type": "through_filter",\r
+          "from": "story",\r
+          "through": "story_sheets",\r
+          "filter_key": "story_id"\r
         },\r
-        "created_at": {\r
-          "type": "datetime"\r
+        "by_panel": {\r
+          "type": "through_filter",\r
+          "from": "panel",\r
+          "through": "sheet_panels",\r
+          "filter_key": "panel_id"\r
         },\r
-        "updated_at": {\r
-          "type": "datetime"\r
+        "by_author": {\r
+          "type": "filter",\r
+          "from": "author",\r
+          "filter_key": "author_id"\r
         }\r
-      },\r
-      "select": {\r
-        "method": "list",\r
-        "caption": {\r
-          "type": "method",\r
-          "name": "title_with_t"\r
+      }\r
+    },\r
+    "sheet_panel": {\r
+      "default_page_size": 20,\r
+      "lists": {\r
+        "public_list": {\r
+          "type": "public"\r
+        },\r
+        "private_list": {\r
+          "type": "private"\r
+        },\r
+        "by_sheet": {\r
+          "type": "filter",\r
+          "association_name": "sheet_panels",\r
+          "from": "sheet",\r
+          "filter_key": "sheet_id"\r
+        },\r
+        "by_panel": {\r
+          "type": "filter",\r
+          "from": "panel",\r
+          "filter_key": "panel_id"\r
         }\r
       }\r
     },\r
-    "StorySheet": "story_sheet",\r
-    "story_sheet": {\r
-      "class_name": "StorySheet",\r
-      "table_name": "story_sheets",\r
-      "associations": {\r
-        "belongs_to": {\r
-          "story": {\r
-            "id_column": "story_id"\r
-          },\r
-          "sheet": {\r
-            "id_column": "sheet_id"\r
-          }\r
+    "panel": {\r
+      "default_page_size": 20,\r
+      "lists": {\r
+        "public_list": {\r
+          "type": "public"\r
         },\r
-        "has_many": {}\r
-      },\r
-      "attributes": {\r
-        "id": {\r
-          "type": "number",\r
-          "primary_key": 1,\r
-          "rules": {\r
-            "number": true\r
-          }\r
+        "scroll_panels": {\r
+          "type": "has_many",\r
+          "association_name": "scroll_panels"\r
         },\r
-        "story_id": {\r
-          "type": "number",\r
-          "rules": {\r
-            "number": true\r
-          }\r
+        "scrolls": {\r
+          "type": "has_many",\r
+          "association_name": "scrolls"\r
         },\r
-        "sheet_id": {\r
-          "type": "number",\r
-          "rules": {\r
-            "number": true\r
-          }\r
+        "sheet_panels": {\r
+          "type": "has_many",\r
+          "association_name": "sheet_panels"\r
         },\r
-        "t": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true,\r
-            "min": 0\r
-          }\r
+        "sheets": {\r
+          "type": "has_many",\r
+          "association_name": "sheets"\r
         },\r
-        "author_id": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true\r
-          }\r
+        "panel_pictures": {\r
+          "type": "has_many",\r
+          "association_name": "panel_pictures"\r
         },\r
-        "created_at": {\r
-          "type": "datetime"\r
+        "speech_balloons": {\r
+          "type": "has_many",\r
+          "association_name": "speech_balloons"\r
         },\r
-        "updated_at": {\r
-          "type": "datetime"\r
-        }\r
-      }\r
-    },\r
-    "Sheet": "sheet",\r
-    "sheet": {\r
-      "class_name": "Sheet",\r
-      "table_name": "sheets",\r
-      "associations": {\r
-        "belongs_to": {\r
-          "author": {\r
-            "id_column": "author_id"\r
-          }\r
+        "ground_pictures": {\r
+          "type": "has_many",\r
+          "association_name": "ground_pictures"\r
         },\r
-        "has_many": {\r
-          "story_sheets": {\r
-            "foreign_key": "story_id",\r
-            "list_method": "list_by_sheet"\r
-          },\r
-          "stories": {\r
-            "through": "story_sheets",\r
-            "foreign_key": "sheet_id",\r
-            "list_method": "list_by_sheet"\r
-          },\r
-          "sheet_panels": {\r
-            "foreign_key": "sheet_id",\r
-            "list_method": "list_by_sheet"\r
-          },\r
-          "panels": {\r
-            "through": "sheet_panels",\r
-            "foreign_key": "sheet_id",\r
-            "list_method": "list_by_sheet"\r
-          }\r
-        }\r
-      },\r
-      "attributes": {\r
-        "id": {\r
-          "type": "number",\r
-          "primary_key": 1,\r
-          "rules": {\r
-            "number": true\r
-          }\r
-        },\r
-        "caption": {\r
-          "type": "text",\r
-          "rules": {}\r
+        "ground_colors": {\r
+          "type": "has_many",\r
+          "association_name": "ground_colors"\r
         },\r
-        "width": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true\r
-          }\r
+        "by_scroll": {\r
+          "type": "through_filter",\r
+          "from": "scroll",\r
+          "through": "scroll_panels",\r
+          "filter_key": "scroll_id"\r
         },\r
-        "height": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true\r
-          }\r
+        "by_sheet": {\r
+          "type": "through_filter",\r
+          "from": "sheet",\r
+          "through": "sheet_panels",\r
+          "filter_key": "sheet_id"\r
         },\r
-        "visible": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true\r
-          },\r
-          "source": {\r
-            "type": "magic_number",\r
-            "key": "sheet_visible_items"\r
-          }\r
+        "by_author": {\r
+          "type": "filter",\r
+          "from": "author",\r
+          "filter_key": "author_id"\r
         },\r
-        "author_id": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true\r
-          }\r
+        "by_speech_balloon_template": {\r
+          "type": "through_filter",\r
+          "from": "speech_balloon_template",\r
+          "through": "speech_balloons",\r
+          "filter_key": "speech_balloon_template_id"\r
+        }\r
+      }\r
+    },\r
+    "panel_picture": {\r
+      "default_page_size": 20,\r
+      "lists": {\r
+        "public_list": {\r
+          "type": "public"\r
         },\r
-        "created_at": {\r
-          "type": "datetime"\r
+        "by_panel": {\r
+          "type": "filter",\r
+          "from": "panel",\r
+          "filter_key": "panel_id"\r
         },\r
-        "updated_at": {\r
-          "type": "datetime"\r
-        }\r
-      },\r
-      "select": {\r
-        "method": "list",\r
-        "caption": {\r
-          "type": "column",\r
-          "name": "caption"\r
+        "by_author": {\r
+          "type": "element_filter",\r
+          "from": "author",\r
+          "filter_key": "author_id"\r
         }\r
       }\r
     },\r
-    "SheetPanel": "sheet_panel",\r
-    "sheet_panel": {\r
-      "class_name": "SheetPanel",\r
-      "table_name": "sheet_panels",\r
-      "associations": {\r
-        "belongs_to": {\r
-          "sheet": {\r
-            "id_column": "sheet_id"\r
-          },\r
-          "panel": {\r
-            "id_column": "panel_id"\r
-          }\r
+    "speech_balloon": {\r
+      "default_page_size": 20,\r
+      "lists": {\r
+        "public_list": {\r
+          "type": "public"\r
         },\r
-        "has_many": {}\r
-      },\r
-      "attributes": {\r
-        "id": {\r
-          "type": "number",\r
-          "primary_key": 1,\r
-          "rules": {\r
-            "number": true\r
-          }\r
+        "by_panel": {\r
+          "type": "filter",\r
+          "from": "panel",\r
+          "filter_key": "panel_id"\r
         },\r
-        "sheet_id": {\r
-          "type": "number",\r
-          "rules": {\r
-            "number": true\r
-          }\r
+        "by_speech_balloon_template": {\r
+          "type": "filter",\r
+          "from": "speech_balloon_template",\r
+          "filter_key": "speech_balloon_template_id"\r
         },\r
-        "panel_id": {\r
-          "type": "number",\r
-          "rules": {\r
-            "number": true\r
-          }\r
+        "by_author": {\r
+          "type": "element_filter",\r
+          "from": "author",\r
+          "filter_key": "author_id"\r
+        }\r
+      }\r
+    },\r
+    "speech": {\r
+      "default_page_size": 20,\r
+      "lists": {\r
+        "public_list": {\r
+          "type": "public"\r
         },\r
-        "x": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true\r
-          }\r
+        "by_writing_format": {\r
+          "type": "filter",\r
+          "from": "writing_format",\r
+          "filter_key": "writing_format_id"\r
+        }\r
+      }\r
+    },\r
+    "balloon": {\r
+      "default_page_size": 20,\r
+      "lists": {\r
+        "public_list": {\r
+          "type": "public"\r
+        }\r
+      }\r
+    },\r
+    "ground_picture": {\r
+      "default_page_size": 20,\r
+      "lists": {\r
+        "public_list": {\r
+          "type": "public"\r
         },\r
-        "y": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true\r
-          }\r
+        "by_panel": {\r
+          "type": "filter",\r
+          "from": "panel",\r
+          "filter_key": "panel_id"\r
         },\r
-        "z": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true,\r
-            "min": 1\r
-          }\r
+        "by_author": {\r
+          "type": "element_filter",\r
+          "from": "author",\r
+          "filter_key": "author_id"\r
+        }\r
+      }\r
+    },\r
+    "ground_color": {\r
+      "default_page_size": 20,\r
+      "lists": {\r
+        "public_list": {\r
+          "type": "public"\r
         },\r
-        "t": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true,\r
-            "min": 0\r
-          }\r
+        "by_panel": {\r
+          "type": "filter",\r
+          "from": "panel",\r
+          "filter_key": "panel_id"\r
         },\r
-        "author_id": {\r
-          "type": "number",\r
-          "rules": {\r
-            "number": true\r
-          }\r
+        "by_author": {\r
+          "type": "element_filter",\r
+          "from": "author",\r
+          "filter_key": "author_id"\r
+        }\r
+      }\r
+    },\r
+    "original_picture": {\r
+      "default_page_size": 20,\r
+      "lists": {\r
+        "private_list": {\r
+          "type": "private"\r
+        }\r
+      }\r
+    },\r
+    "picture": {},\r
+    "resource_picture": {\r
+      "default_page_size": 20,\r
+      "lists": {\r
+        "public_list": {\r
+          "type": "public"\r
         },\r
-        "created_at": {\r
-          "type": "datetime"\r
+        "by_license": {\r
+          "type": "filter",\r
+          "from": "license",\r
+          "filter_key": "license_id"\r
         },\r
-        "updated_at": {\r
-          "type": "datetime"\r
+        "by_artist": {\r
+          "type": "filter",\r
+          "from": "artist",\r
+          "filter_key": "artist_id"\r
         }\r
       }\r
     },\r
-    "Panel": "panel",\r
-    "panel": {\r
-      "class_name": "Panel",\r
-      "table_name": "panels",\r
-      "associations": {\r
-        "belongs_to": {\r
-          "author": {\r
-            "id_column": "author_id"\r
-          }\r
-        },\r
-        "has_many": {\r
-          "scroll_panels": {\r
-            "foreign_key": "panel_id",\r
-            "list_method": "list_by_panel"\r
-          },\r
-          "scrolls": {\r
-            "through": "scroll_panels",\r
-            "foreign_key": "panel_id",\r
-            "list_method": "list_by_panel"\r
-          },\r
-          "sheet_panels": {\r
-            "foreign_key": "panel_id",\r
-            "list_method": "list_by_panel"\r
-          },\r
-          "sheets": {\r
-            "through": "sheet_panels",\r
-            "foreign_key": "panel_id",\r
-            "list_method": "list_by_panel"\r
-          },\r
-          "panel_pictures": {\r
-            "foreign_key": "panel_id",\r
-            "list_method": "list_by_panel"\r
-          },\r
-          "speech_balloons": {\r
-            "foreign_key": "panel_id",\r
-            "list_method": "list_by_panel"\r
-          },\r
-          "ground_pictures": {\r
-            "foreign_key": "panel_id",\r
-            "list_method": "list_by_panel"\r
-          },\r
-          "ground_colors": {\r
-            "foreign_key": "panel_id",\r
-            "list_method": "list_by_panel"\r
-          }\r
-        }\r
-      },\r
-      "attributes": {\r
-        "id": {\r
-          "type": "number",\r
-          "primary_key": 1,\r
-          "rules": {\r
-            "number": true\r
-          }\r
-        },\r
-        "width": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true,\r
-            "min": 1\r
-          }\r
-        },\r
-        "height": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true,\r
-            "min": 1\r
-          }\r
-        },\r
-        "border": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true,\r
-            "min": 0\r
-          }\r
-        },\r
-        "caption": {\r
-          "type": "text",\r
-          "rules": {}\r
+    "speech_balloon_template": {\r
+      "default_page_size": 20,\r
+      "lists": {\r
+        "public_list": {\r
+          "type": "public"\r
         },\r
-        "publish": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true\r
-          },\r
-          "source": {\r
-            "type": "magic_number",\r
-            "key": "panel_visible_items"\r
-          }\r
+        "speech_balloons": {\r
+          "type": "has_many",\r
+          "association_name": "speech_balloons"\r
         },\r
-        "author_id": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true\r
-          }\r
+        "panels": {\r
+          "type": "has_many",\r
+          "association_name": "panels"\r
+        }\r
+      }\r
+    },\r
+    "writing_format": {\r
+      "default_page_size": 20,\r
+      "lists": {\r
+        "public_list": {\r
+          "type": "public"\r
         },\r
-        "created_at": {\r
-          "type": "datetime"\r
+        "speeches": {\r
+          "type": "has_many",\r
+          "association_name": "speeches"\r
         },\r
-        "updated_at": {\r
-          "type": "datetime"\r
-        }\r
-      },\r
-      "select": {\r
-        "method": "list",\r
-        "caption": {\r
-          "type": "method",\r
-          "name": "plain_scenario"\r
+        "by_system_picture": {\r
+          "type": "filter",\r
+          "from": "system_picture",\r
+          "filter_key": "system_picture_id"\r
         }\r
       }\r
     },\r
-    "PanelPicture": "panel_picture",\r
-    "panel_picture": {\r
-      "class_name": "PanelPicture",\r
-      "table_name": "panel_pictures",\r
-      "associations": {\r
-        "belongs_to": {\r
-          "panel": {\r
-            "id_column": "panel_id"\r
-          }\r
+    "license_group": {\r
+      "default_page_size": 20,\r
+      "lists": {\r
+        "public_list": {\r
+          "type": "public"\r
         },\r
-        "has_many": {}\r
-      },\r
-      "attributes": {\r
-        "id": {\r
-          "type": "number",\r
-          "primary_key": 1,\r
-          "rules": {\r
-            "number": true\r
-          }\r
+        "licenses": {\r
+          "type": "has_many",\r
+          "association_name": "licenses"\r
+        }\r
+      }\r
+    },\r
+    "license": {\r
+      "default_page_size": 20,\r
+      "lists": {\r
+        "public_list": {\r
+          "type": "public"\r
         },\r
-        "panel_id": {\r
-          "type": "number",\r
-          "rules": {\r
-            "number": true\r
-          }\r
+        "resource_pictures": {\r
+          "type": "has_many",\r
+          "association_name": "resource_pictures"\r
         },\r
-        "picture_id": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true\r
-          }\r
+        "by_license_group": {\r
+          "type": "filter",\r
+          "from": "license_group",\r
+          "filter_key": "license_group_id"\r
         },\r
-        "caption": {\r
-          "type": "text",\r
-          "rules": {}\r
+        "by_system_picture": {\r
+          "type": "filter",\r
+          "from": "system_picture",\r
+          "filter_key": "system_picture_id"\r
+        }\r
+      }\r
+    },\r
+    "author": {\r
+      "default_page_size": 20,\r
+      "lists": {\r
+        "public_list": {\r
+          "type": "public"\r
         },\r
-        "x": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true\r
-          }\r
+        "scrolls": {\r
+          "type": "has_many",\r
+          "association_name": "scrolls"\r
         },\r
-        "y": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true\r
-          }\r
+        "comics": {\r
+          "type": "has_many",\r
+          "association_name": "comics"\r
         },\r
-        "width": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true\r
-          }\r
+        "stories": {\r
+          "type": "has_many",\r
+          "association_name": "stories"\r
         },\r
-        "height": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true\r
-          }\r
+        "sheets": {\r
+          "type": "has_many",\r
+          "association_name": "sheets"\r
         },\r
-        "link": {\r
-          "type": "text",\r
-          "rules": {\r
-            "url": true\r
-          }\r
+        "panels": {\r
+          "type": "has_many",\r
+          "association_name": "panels"\r
         },\r
-        "z": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true,\r
-            "min": 1\r
-          }\r
+        "panel_pictures": {\r
+          "type": "has_many",\r
+          "association_name": "panel_pictures"\r
         },\r
-        "t": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true,\r
-            "min": 0\r
-          }\r
+        "speech_balloons": {\r
+          "type": "has_many",\r
+          "association_name": "speech_balloons"\r
         },\r
-        "created_at": {\r
-          "type": "datetime"\r
+        "ground_pictures": {\r
+          "type": "has_many",\r
+          "association_name": "ground_pictures"\r
         },\r
-        "updated_at": {\r
-          "type": "datetime"\r
+        "ground_colors": {\r
+          "type": "has_many",\r
+          "association_name": "ground_colors"\r
         }\r
       }\r
     },\r
-    "SpeechBalloon": "speech_balloon",\r
-    "speech_balloon": {\r
-      "class_name": "SpeechBalloon",\r
-      "table_name": "speech_balloons",\r
-      "extend": "classname",\r
-      "associations": {\r
-        "belongs_to": {\r
-          "panel": {\r
-            "id_column": "panel_id"\r
-          }\r
+    "artist": {\r
+      "default_page_size": 20,\r
+      "lists": {\r
+        "public_list": {\r
+          "type": "public"\r
         },\r
-        "has_many": {},\r
-        "has_one": {\r
-          "balloon": {\r
-            "foreign_key": "speech_balloon_id",\r
-            "list_method": "list_by_speech_balloon"\r
-          },\r
-          "speech": {\r
-            "foreign_key": "speech_balloon_id",\r
-            "list_method": "list_by_speech_balloon"\r
-          }\r
+        "resource_pictures": {\r
+          "type": "has_many",\r
+          "association_name": "resource_pictures"\r
         }\r
-      },\r
-      "attributes": {\r
-        "id": {\r
-          "type": "number",\r
-          "primary_key": 1,\r
-          "rules": {\r
-            "number": true\r
-          }\r
-        },\r
-        "panel_id": {\r
-          "type": "number",\r
-          "rules": {\r
-            "number": true\r
-          }\r
-        },\r
-        "speech_balloon_template_id": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true\r
-          }\r
-        },\r
-        "classname": {\r
-          "type": "text",\r
-          "rules": {\r
-            "required": true\r
-          }\r
-        },\r
-        "z": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true,\r
-            "min": 1\r
-          }\r
-        },\r
-        "t": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true,\r
-            "min": 0\r
-          }\r
-        },\r
-        "settings": {\r
-          "type": "text",\r
-          "rules": {}\r
-        },\r
-        "caption": {\r
-          "type": "text",\r
-          "rules": {}\r
-        },\r
-        "created_at": {\r
-          "type": "datetime"\r
-        },\r
-        "updated_at": {\r
-          "type": "datetime"\r
+      }\r
+    },\r
+    "system_picture": {\r
+      "default_page_size": 20,\r
+      "lists": {\r
+        "public_list": {\r
+          "type": "public"\r
         }\r
+      }\r
+    }\r
+  },\r
+  "system_resources": {\r
+    "engine_resources": {\r
+      "license_groups": {\r
+        "PettanrCreativeCommonsV30Licenses": "pettanr_creative_commons_v30_licenses",\r
+        "PettanrPettanCommonsV01Licenses": "pettanr_pettan_commons_v01_licenses",\r
+        "PettanrPettanProtectedV01Licenses": "pettanr_pettan_protected_v01_licenses",\r
+        "PettanrPettanPublicV01Licenses": "pettanr_pettan_public_v01_licenses",\r
+        "PettanrPublicDomainV01Licenses": "pettanr_public_domain_v01_licenses",\r
+        "PettanrUnknownV01Licenses": "pettanr_unknown_v01_licenses"\r
       },\r
-      "select": {\r
-        "method": "list",\r
-        "caption": {\r
-          "type": "method",\r
-          "name": "plain_scenario"\r
-        }\r
+      "speech_balloon_templates": {\r
+        "CircleSpeechBalloon": "circle_speech_balloon",\r
+        "PlainSpeechBalloon": "plain_speech_balloon",\r
+        "SquareSpeechBalloon": "square_speech_balloon"\r
+      },\r
+      "writing_formats": {\r
+        "SimpleFormat": "pettanr_simple_format"\r
       }\r
     },\r
-    "Balloon": "balloon",\r
-    "balloon": {\r
-      "class_name": "Balloon",\r
-      "table_name": "balloons",\r
-      "associations": {\r
-        "belongs_to": {\r
-          "speech_balloon": {\r
-            "id_column": "speech_balloon_id"\r
-          },\r
-          "system_picture": {\r
-            "id_column": "system_picture_id"\r
-          }\r
-        },\r
-        "has_many": {}\r
+    "elements": {\r
+      "PanelPicture": "panel_pictures",\r
+      "SpeechBalloon": "speech_balloons",\r
+      "GroundPicture": "ground_pictures",\r
+      "GroundColor": "ground_colors"\r
+    }\r
+  },\r
+  "magic_numbers": {\r
+    "run_mode": 1,\r
+    "thumbnail_width": 64,\r
+    "thumbnail_height": 64,\r
+    "profile": {\r
+      "users": {\r
+        "caption": "ペンギン王国",\r
+        "url": "http://localhost:3001/",\r
+        "description": "ペンギン王国はペンギン素材を豊富に用意したペンギンマニアのサイトです。"\r
       },\r
-      "attributes": {\r
-        "id": {\r
-          "type": "number",\r
-          "primary_key": 1,\r
-          "rules": {\r
-            "number": true\r
-          }\r
-        },\r
-        "speech_balloon_id": {\r
-          "type": "number",\r
-          "rules": {\r
-            "number": true\r
-          }\r
-        },\r
-        "system_picture_id": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true\r
-          }\r
-        },\r
-        "x": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true\r
-          }\r
-        },\r
-        "y": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true\r
-          }\r
-        },\r
-        "width": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true,\r
-            "min": 1\r
-          }\r
-        },\r
-        "height": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true,\r
-            "min": 1\r
-          }\r
-        },\r
-        "r": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true\r
-          }\r
-        },\r
-        "settings": {\r
-          "type": "text",\r
-          "rules": {}\r
-        },\r
-        "created_at": {\r
-          "type": "datetime"\r
-        },\r
-        "updated_at": {\r
-          "type": "datetime"\r
-        }\r
+      "admins": {\r
+        "caption": "site name for admin",\r
+        "url": "http://your.site.url/admins/",\r
+        "description": "admin register"\r
+      },\r
+      "demand_users": {\r
+        "caption": "provider name",\r
+        "url": "http://your.site.url/demanders/",\r
+        "description": "provider description"\r
       }\r
     },\r
-    "Speech": "speech",\r
-    "speech": {\r
-      "class_name": "Speech",\r
-      "table_name": "speeches",\r
-      "associations": {\r
-        "belongs_to": {\r
-          "speech_balloon": {\r
-            "id_column": "speech_balloon_id"\r
-          },\r
-          "writing_format": {\r
-            "id_column": "writing_format_id"\r
-          }\r
-        },\r
-        "has_many": {}\r
-      },\r
-      "attributes": {\r
-        "id": {\r
-          "type": "number",\r
-          "primary_key": 1,\r
-          "rules": {\r
-            "number": true\r
-          }\r
-        },\r
-        "speech_balloon_id": {\r
-          "type": "number",\r
-          "rules": {\r
-            "number": true\r
-          }\r
-        },\r
-        "writing_format_id": {\r
-          "type": "number",\r
-          "source": {\r
-            "type": "model",\r
-            "model": "writing_format",\r
-            "method": "enable_list",\r
-            "caption": "caption"\r
-          },\r
-          "rules": {\r
-            "required": true,\r
-            "number": true\r
-          }\r
-        },\r
-        "content": {\r
-          "type": "text",\r
-          "rules": {}\r
-        },\r
-        "font_size": {\r
-          "type": "float",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true,\r
-            "min": 0\r
-          },\r
-          "source": {\r
-            "type": "magic_number",\r
-            "key": "speech_font_size_items"\r
-          }\r
-        },\r
-        "text_align": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true,\r
-            "range": [\r
-              0,\r
-              3\r
-            ]\r
+    "provider_sources": [\r
+      "http://sourceforge.jp/projects/pettanr/wiki/ProviderSource/attach/provider_source.json"\r
+    ]\r
+  },\r
+  "select_items": {\r
+    "provider_status_status_items": [\r
+      [\r
+        "select_items.provider_status.status.waiting",\r
+        0\r
+      ],\r
+      [\r
+        "select_items.provider_status.status.receiving",\r
+        1\r
+      ]\r
+    ],\r
+    "demander_status_status_items": [\r
+      [\r
+        "select_items.demander_status.status.waiting",\r
+        0\r
+      ],\r
+      [\r
+        "select_items.demander_status.status.rejected",\r
+        1\r
+      ],\r
+      [\r
+        "select_items.demander_status.status.requesting",\r
+        2\r
+      ],\r
+      [\r
+        "select_items.demander_status.status.approved",\r
+        3\r
+      ]\r
+    ],\r
+    "scroll_visible_items": [\r
+      [\r
+        "select_items.scroll.visible.private",\r
+        0\r
+      ],\r
+      [\r
+        "select_items.scroll.visible.public",\r
+        1\r
+      ]\r
+    ],\r
+    "comic_visible_items": [\r
+      [\r
+        "select_items.comic.visible.private",\r
+        0\r
+      ],\r
+      [\r
+        "select_items.comic.visible.public",\r
+        1\r
+      ]\r
+    ],\r
+    "story_visible_items": [\r
+      [\r
+        "select_items.story.visible.private",\r
+        0\r
+      ],\r
+      [\r
+        "select_items.story.visible.public",\r
+        1\r
+      ]\r
+    ],\r
+    "sheet_visible_items": [\r
+      [\r
+        "select_items.sheet.visible.private",\r
+        0\r
+      ],\r
+      [\r
+        "select_items.sheet.visible.public",\r
+        1\r
+      ]\r
+    ],\r
+    "panel_visible_items": [\r
+      [\r
+        "select_items.panel.visible.private",\r
+        0\r
+      ],\r
+      [\r
+        "select_items.panel.visible.public",\r
+        1\r
+      ]\r
+    ],\r
+    "ground_picture_repeat_items": [\r
+      [\r
+        "select_items.ground_pictures.repeat.repeat",\r
+        0\r
+      ],\r
+      [\r
+        "select_items.ground_pictures.repeat.repeat-x",\r
+        1\r
+      ],\r
+      [\r
+        "select_items.ground_pictures.repeat.repeat-y",\r
+        2\r
+      ],\r
+      [\r
+        "select_items.ground_pictures.repeat.no-repeat",\r
+        3\r
+      ]\r
+    ],\r
+    "ground_color_orientation_items": [\r
+      [\r
+        "select_items.ground_color.orientation.horizontal",\r
+        0\r
+      ],\r
+      [\r
+        "select_items.ground_color.orientation.vertical",\r
+        1\r
+      ]\r
+    ],\r
+    "speech_font_size_items": [\r
+      [\r
+        "select_items.speeches.font_size.ultra_small",\r
+        0.2\r
+      ],\r
+      [\r
+        "select_items.speeches.font_size.very_small",\r
+        0.4\r
+      ],\r
+      [\r
+        "select_items.speeches.font_size.small",\r
+        0.6\r
+      ],\r
+      [\r
+        "select_items.speeches.font_size.semi_small",\r
+        0.8\r
+      ],\r
+      [\r
+        "select_items.speeches.font_size.normal",\r
+        1\r
+      ],\r
+      [\r
+        "select_items.speeches.font_size.semi_large",\r
+        1.5\r
+      ],\r
+      [\r
+        "select_items.speeches.font_size.large",\r
+        2\r
+      ],\r
+      [\r
+        "select_items.speeches.font_size.very_large",\r
+        3.5\r
+      ],\r
+      [\r
+        "select_items.speeches.font_size.ultra_large",\r
+        5\r
+      ]\r
+    ],\r
+    "speech_text_align_items": [\r
+      [\r
+        "select_items.speeches.text_align.none",\r
+        0\r
+      ],\r
+      [\r
+        "select_items.speeches.text_align.left",\r
+        1\r
+      ],\r
+      [\r
+        "select_items.speeches.text_align.right",\r
+        2\r
+      ],\r
+      [\r
+        "select_items.speeches.text_align.center",\r
+        3\r
+      ]\r
+    ]\r
+  },\r
+  "locals": {\r
+    "profilers": {\r
+      "scroll": {\r
+        "lists": {\r
+          "scroll_panels.by_scroll": {\r
+            "model_name": "scroll_panel",\r
+            "list_name": "by_scroll"\r
           },\r
-          "source": {\r
-            "type": "magic_number",\r
-            "key": "speech_text_align_items"\r
-          }\r
-        },\r
-        "fore_color": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true,\r
-            "range": [\r
-              0,\r
-              16777215\r
-            ]\r
-          }\r
-        },\r
-        "x": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true\r
-          }\r
-        },\r
-        "y": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true\r
+          "panels.by_scroll": {\r
+            "model_name": "panel",\r
+            "list_name": "by_scroll"\r
           }\r
         },\r
-        "width": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true,\r
-            "min": 1\r
+        "columns": [\r
+          "id",\r
+          "title",\r
+          "description",\r
+          "visible",\r
+          "author_id",\r
+          "created_at",\r
+          "updated_at"\r
+        ],\r
+        "associations": {\r
+          "belongs_to": [\r
+            "author"\r
+          ],\r
+          "has_many": [\r
+            "scroll_panels.by_scroll",\r
+            "panels.by_scroll"\r
+          ]\r
+        }\r
+      },\r
+      "scroll_panel": {\r
+        "lists": {},\r
+        "columns": [\r
+          "id",\r
+          "scroll_id",\r
+          "panel_id",\r
+          "t",\r
+          "author_id",\r
+          "created_at",\r
+          "updated_at"\r
+        ],\r
+        "associations": {\r
+          "belongs_to": [\r
+            "scroll",\r
+            "panel"\r
+          ],\r
+          "has_many": []\r
+        }\r
+      },\r
+      "comic": {\r
+        "lists": {\r
+          "stories.by_comic": {\r
+            "model_name": "story",\r
+            "list_name": "by_comic"\r
           }\r
         },\r
-        "height": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true,\r
-            "min": 1\r
-          }\r
-        },\r
-        "quotes": {\r
-          "type": "text",\r
-          "rules": {}\r
-        },\r
-        "settings": {\r
-          "type": "text",\r
-          "rules": {}\r
-        },\r
-        "created_at": {\r
-          "type": "datetime"\r
-        },\r
-        "updated_at": {\r
-          "type": "datetime"\r
+        "columns": [\r
+          "id",\r
+          "title",\r
+          "description",\r
+          "visible",\r
+          "author_id",\r
+          "created_at",\r
+          "updated_at"\r
+        ],\r
+        "associations": {\r
+          "belongs_to": [\r
+            "author"\r
+          ],\r
+          "has_many": [\r
+            "stories.by_comic"\r
+          ]\r
         }\r
-      }\r
-    },\r
-    "GroundPicture": "ground_picture",\r
-    "ground_picture": {\r
-      "class_name": "GroundPicture",\r
-      "table_name": "ground_pictures",\r
-      "associations": {\r
-        "belongs_to": {\r
-          "panel": {\r
-            "id_column": "panel_id"\r
-          }\r
-        },\r
-        "has_many": {}\r
       },\r
-      "attributes": {\r
-        "id": {\r
-          "type": "number",\r
-          "primary_key": 1,\r
-          "rules": {\r
-            "number": true\r
-          }\r
-        },\r
-        "panel_id": {\r
-          "type": "number",\r
-          "rules": {\r
-            "number": true\r
-          }\r
-        },\r
-        "picture_id": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true\r
-          }\r
-        },\r
-        "caption": {\r
-          "type": "text",\r
-          "rules": {}\r
-        },\r
-        "repeat": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true,\r
-            "range": [\r
-              0,\r
-              3\r
-            ]\r
+      "story": {\r
+        "lists": {\r
+          "story_sheets.by_story": {\r
+            "model_name": "story_sheet",\r
+            "list_name": "by_story"\r
           },\r
-          "source": {\r
-            "type": "magic_number",\r
-            "key": "ground_picture_repeat_items"\r
-          }\r
-        },\r
-        "x": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true\r
-          }\r
-        },\r
-        "y": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true\r
-          }\r
-        },\r
-        "z": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true,\r
-            "min": 1\r
-          }\r
-        },\r
-        "t": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true,\r
-            "min": 0\r
+          "sheets.by_story": {\r
+            "model_name": "sheet",\r
+            "list_name": "by_sheet"\r
           }\r
         },\r
-        "created_at": {\r
-          "type": "datetime"\r
-        },\r
-        "updated_at": {\r
-          "type": "datetime"\r
+        "columns": [\r
+          "id",\r
+          "comic_id",\r
+          "title",\r
+          "description",\r
+          "t",\r
+          "visible",\r
+          "created_at",\r
+          "updated_at"\r
+        ],\r
+        "associations": {\r
+          "belongs_to": [\r
+            "comic"\r
+          ],\r
+          "has_many": [\r
+            "story_sheets.by_story",\r
+            "sheets.by_story"\r
+          ]\r
         }\r
-      }\r
-    },\r
-    "GroundColor": "ground_color",\r
-    "ground_color": {\r
-      "class_name": "GroundColor",\r
-      "table_name": "ground_colors",\r
-      "associations": {\r
-        "belongs_to": {\r
-          "panel": {\r
-            "id_column": "panel_id"\r
-          }\r
-        },\r
-        "has_many": {}\r
       },\r
-      "attributes": {\r
-        "id": {\r
-          "type": "number",\r
-          "primary_key": 1,\r
-          "rules": {\r
-            "number": true\r
-          }\r
-        },\r
-        "panel_id": {\r
-          "type": "number",\r
-          "rules": {\r
-            "number": true\r
-          }\r
-        },\r
-        "caption": {\r
-          "type": "text",\r
-          "rules": {}\r
-        },\r
-        "code": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true,\r
-            "range": [\r
-              0,\r
-              16777215\r
-            ]\r
-          }\r
-        },\r
-        "orientation": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true,\r
-            "range": [\r
-              0,\r
-              1\r
-            ]\r
+      "story_sheet": {\r
+        "lists": {},\r
+        "columns": [\r
+          "id",\r
+          "story_id",\r
+          "sheet_id",\r
+          "t",\r
+          "author_id",\r
+          "created_at",\r
+          "updated_at"\r
+        ],\r
+        "associations": {\r
+          "belongs_to": [\r
+            "story",\r
+            "sheet"\r
+          ],\r
+          "has_many": []\r
+        }\r
+      },\r
+      "sheet": {\r
+        "lists": {\r
+          "story_sheets.by_sheet": {\r
+            "model_name": "story_sheet",\r
+            "list_name": "by_sheet"\r
           },\r
-          "source": {\r
-            "type": "magic_number",\r
-            "key": "ground_color_orientation_items"\r
-          }\r
-        },\r
-        "xy": {\r
-          "type": "number",\r
-          "rules": {\r
-            "number": true\r
-          }\r
-        },\r
-        "wh": {\r
-          "type": "number",\r
-          "rules": {\r
-            "number": true\r
+          "stories.by_sheet": {\r
+            "model_name": "story",\r
+            "list_name": "by_sheet"\r
+          },\r
+          "sheet_panels.by_sheet": {\r
+            "model_name": "sheet_panel",\r
+            "list_name": "by_sheet"\r
+          },\r
+          "panels.by_sheet": {\r
+            "model_name": "panel",\r
+            "list_name": "by_sheet"\r
           }\r
         },\r
-        "z": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true,\r
-            "min": 1\r
-          }\r
-        },\r
-        "t": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true,\r
-            "min": 0\r
-          }\r
-        },\r
-        "created_at": {\r
-          "type": "datetime"\r
-        },\r
-        "updated_at": {\r
-          "type": "datetime"\r
-        }\r
-      }\r
-    },\r
-    "OriginalPicture": "original_picture",\r
-    "original_picture": {\r
-      "class_name": "OriginalPicture",\r
-      "table_name": "original_pictures",\r
-      "associations": {\r
-        "belongs_to": {\r
-          "artist": {\r
-            "id_column": "artist_id"\r
-          }\r
-        },\r
-        "has_many": {\r
-          "pictures": {\r
-            "foreign_key": "original_picture_id",\r
-            "list_method": "list_by_original_picture"\r
-          }\r
-        },\r
-        "has_one": {\r
-          "resource_picture": {\r
-            "foreign_key": "original_picture_id",\r
-            "list_method": "list_by_original_picture"\r
-          }\r
+        "columns": [\r
+          "id",\r
+          "caption",\r
+          "width",\r
+          "height",\r
+          "visible",\r
+          "author_id",\r
+          "created_at",\r
+          "updated_at"\r
+        ],\r
+        "associations": {\r
+          "belongs_to": [\r
+            "author"\r
+          ],\r
+          "has_many": [\r
+            "story_sheets.by_sheet",\r
+            "stories.by_sheet",\r
+            "sheet_panels.by_sheet",\r
+            "panels.by_sheet"\r
+          ]\r
         }\r
       },\r
-      "attributes": {\r
-        "id": {\r
-          "type": "number",\r
-          "primary_key": 1,\r
-          "rules": {\r
-            "number": true\r
-          }\r
-        },\r
-        "ext": {\r
-          "type": "text",\r
-          "rules": {\r
-            "required": true\r
-          }\r
-        },\r
-        "width": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true\r
-          }\r
-        },\r
-        "height": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true\r
-          }\r
-        },\r
-        "filesize": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true\r
-          }\r
-        },\r
-        "artist_id": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true\r
-          }\r
-        },\r
-        "md5": {\r
-          "type": "text",\r
-          "rules": {\r
-            "required": true\r
-          }\r
-        },\r
-        "uploaded_at": {\r
-          "type": "datetime"\r
-        },\r
-        "published_at": {\r
-          "type": "datetime"\r
-        },\r
-        "stopped_at": {\r
-          "type": "datetime"\r
-        },\r
-        "created_at": {\r
-          "type": "datetime"\r
-        },\r
-        "updated_at": {\r
-          "type": "datetime"\r
+      "sheet_panel": {\r
+        "lists": {},\r
+        "columns": [\r
+          "id",\r
+          "sheet_id",\r
+          "panel_id",\r
+          "x",\r
+          "y",\r
+          "z",\r
+          "t",\r
+          "author_id",\r
+          "created_at",\r
+          "updated_at"\r
+        ],\r
+        "associations": {\r
+          "belongs_to": [\r
+            "sheet",\r
+            "panel"\r
+          ],\r
+          "has_many": []\r
         }\r
-      }\r
-    },\r
-    "Picture": "picture",\r
-    "picture": {\r
-      "class_name": "Picture",\r
-      "table_name": "pictures",\r
-      "associations": {\r
-        "belongs_to": {\r
-          "license": {\r
-            "id_column": "license_id"\r
+      },\r
+      "panel": {\r
+        "lists": {\r
+          "scroll_panels.by_panel": {\r
+            "model_name": "scroll_panel",\r
+            "list_name": "by_panel"\r
           },\r
-          "artist": {\r
-            "id_column": "artist_id"\r
+          "scrolls.by_panel": {\r
+            "model_name": "scroll",\r
+            "list_name": "by_panel"\r
+          },\r
+          "sheet_panels.by_panel": {\r
+            "model_name": "sheet_panel",\r
+            "list_name": "by_panel"\r
+          },\r
+          "sheets.by_panel": {\r
+            "model_name": "sheet",\r
+            "list_name": "by_panel"\r
+          },\r
+          "panel_pictures.by_panel": {\r
+            "model_name": "panel_picture",\r
+            "list_name": "by_panel"\r
+          },\r
+          "speech_balloons.by_panel": {\r
+            "model_name": "speech_balloon",\r
+            "list_name": "by_panel"\r
+          },\r
+          "ground_pictures.by_panel": {\r
+            "model_name": "ground_picture",\r
+            "list_name": "by_panel"\r
+          },\r
+          "ground_colors.by_panel": {\r
+            "model_name": "ground_color",\r
+            "list_name": "by_panel"\r
           }\r
         },\r
-        "has_many": {},\r
-        "has_one": {}\r
+        "columns": [\r
+          "id",\r
+          "width",\r
+          "height",\r
+          "border",\r
+          "caption",\r
+          "publish",\r
+          "author_id",\r
+          "created_at",\r
+          "updated_at"\r
+        ],\r
+        "associations": {\r
+          "belongs_to": [\r
+            "author"\r
+          ],\r
+          "has_many": [\r
+            "scroll_panels.by_panel",\r
+            "scrolls.by_panel",\r
+            "sheet_panels.by_panel",\r
+            "sheets.by_panel",\r
+            "panel_pictures.by_panel",\r
+            "speech_balloons.by_panel",\r
+            "ground_pictures.by_panel",\r
+            "ground_colors.by_panel"\r
+          ]\r
+        }\r
       },\r
-      "attributes": {\r
-        "id": {\r
-          "type": "number",\r
-          "primary_key": 1,\r
-          "rules": {\r
-            "number": true\r
-          }\r
-        },\r
-        "original_picture_id": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true\r
+      "panel_picture": {\r
+        "lists": {},\r
+        "columns": [\r
+          "id",\r
+          "panel_id",\r
+          "picture_id",\r
+          "caption",\r
+          "x",\r
+          "y",\r
+          "width",\r
+          "height",\r
+          "link",\r
+          "z",\r
+          "t",\r
+          "created_at",\r
+          "updated_at"\r
+        ],\r
+        "associations": {\r
+          "belongs_to": [\r
+            "panel"\r
+          ],\r
+          "has_many": []\r
+        }\r
+      },\r
+      "speech_balloon": {\r
+        "lists": {\r
+          "balloon.by_speech_balloon": {\r
+            "model_name": "balloon",\r
+            "list_name": "by_speech_balloon"\r
+          },\r
+          "speech.by_speech_balloon": {\r
+            "model_name": "panel",\r
+            "list_name": "by_speech_balloon"\r
           }\r
         },\r
-        "revision": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true\r
-          }\r
-        },\r
-        "ext": {\r
-          "type": "text",\r
-          "rules": {\r
-            "required": true\r
-          }\r
-        },\r
-        "width": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true\r
-          }\r
-        },\r
-        "height": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true\r
+        "columns": [\r
+          "id",\r
+          "panel_id",\r
+          "speech_balloon_template_id",\r
+          "classname",\r
+          "z",\r
+          "t",\r
+          "settings",\r
+          "caption",\r
+          "created_at",\r
+          "updated_at"\r
+        ],\r
+        "associations": {\r
+          "belongs_to": [\r
+            "panel"\r
+          ],\r
+          "has_many": [],\r
+          "has_one": [\r
+            "balloon.by_speech_balloon",\r
+            "speech.by_speech_balloon"\r
+          ]\r
+        }\r
+      },\r
+      "speech": {\r
+        "lists": {},\r
+        "columns": [\r
+          "id",\r
+          "speech_balloon_id",\r
+          "writing_format_id",\r
+          "content",\r
+          "font_size",\r
+          "text_align",\r
+          "fore_color",\r
+          "x",\r
+          "y",\r
+          "width",\r
+          "height",\r
+          "quotes",\r
+          "settings",\r
+          "created_at",\r
+          "updated_at"\r
+        ],\r
+        "associations": {\r
+          "belongs_to": [\r
+            "speech_balloon",\r
+            "writing_format"\r
+          ],\r
+          "has_many": []\r
+        }\r
+      },\r
+      "balloon": {\r
+        "lists": {},\r
+        "columns": [\r
+          "id",\r
+          "speech_balloon_id",\r
+          "system_picture_id",\r
+          "x",\r
+          "y",\r
+          "width",\r
+          "height",\r
+          "r",\r
+          "settings",\r
+          "created_at",\r
+          "updated_at"\r
+        ],\r
+        "associations": {\r
+          "belongs_to": [\r
+            "speech_balloon",\r
+            "system_picture"\r
+          ],\r
+          "has_many": []\r
+        }\r
+      },\r
+      "ground_picture": {\r
+        "lists": {},\r
+        "columns": [\r
+          "id",\r
+          "panel_id",\r
+          "picture_id",\r
+          "caption",\r
+          "repeat",\r
+          "x",\r
+          "y",\r
+          "z",\r
+          "t",\r
+          "created_at",\r
+          "updated_at"\r
+        ],\r
+        "associations": {\r
+          "belongs_to": [\r
+            "panel"\r
+          ],\r
+          "has_many": []\r
+        }\r
+      },\r
+      "ground_color": {\r
+        "lists": {},\r
+        "columns": [\r
+          "id",\r
+          "panel_id",\r
+          "caption",\r
+          "code",\r
+          "orientation",\r
+          "xy",\r
+          "wh",\r
+          "z",\r
+          "t",\r
+          "created_at",\r
+          "updated_at"\r
+        ],\r
+        "associations": {\r
+          "belongs_to": [\r
+            "panel"\r
+          ],\r
+          "has_many": []\r
+        }\r
+      },\r
+      "original_picture": {\r
+        "lists": {},\r
+        "columns": [\r
+          "id",\r
+          "ext",\r
+          "width",\r
+          "height",\r
+          "filesize",\r
+          "artist_id",\r
+          "md5",\r
+          "uploaded_at",\r
+          "published_at",\r
+          "stopped_at",\r
+          "created_at",\r
+          "updated_at"\r
+        ],\r
+        "associations": {\r
+          "belongs_to": [\r
+            "artist"\r
+          ],\r
+          "has_many": [],\r
+          "has_one": [\r
+            "resource_picture"\r
+          ]\r
+        }\r
+      },\r
+      "picture": {\r
+        "lists": {},\r
+        "columns": [\r
+          "id",\r
+          "original_picture_id",\r
+          "revision",\r
+          "ext",\r
+          "width",\r
+          "height",\r
+          "filesize",\r
+          "artist_id",\r
+          "license_id",\r
+          "md5",\r
+          "artist_name",\r
+          "credit",\r
+          "settings",\r
+          "classname",\r
+          "created_at",\r
+          "updated_at"\r
+        ],\r
+        "associations": {\r
+          "belongs_to": [\r
+            "license",\r
+            "artist"\r
+          ],\r
+          "has_many": [],\r
+          "has_one": []\r
+        }\r
+      },\r
+      "resource_picture": {\r
+        "lists": {},\r
+        "columns": [\r
+          "id",\r
+          "original_picture_id",\r
+          "revision",\r
+          "ext",\r
+          "width",\r
+          "height",\r
+          "filesize",\r
+          "artist_id",\r
+          "license_id",\r
+          "md5",\r
+          "artist_name",\r
+          "credit",\r
+          "settings",\r
+          "picture_id",\r
+          "classname",\r
+          "created_at",\r
+          "updated_at"\r
+        ],\r
+        "associations": {\r
+          "belongs_to": [\r
+            "original_picture",\r
+            "license",\r
+            "artist"\r
+          ],\r
+          "has_many": [],\r
+          "has_one": []\r
+        }\r
+      },\r
+      "speech_balloon_template": {\r
+        "lists": {\r
+          "speech_balloons.by_speech_balloon_template": {\r
+            "model_name": "speech_balloon",\r
+            "list_name": "by_speech_balloon_template"\r
+          },\r
+          "panels.by_speech_balloon_template": {\r
+            "model_name": "panel",\r
+            "list_name": "by_speech_balloon_template"\r
           }\r
         },\r
-        "filesize": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true\r
+        "columns": [\r
+          "id",\r
+          "name",\r
+          "classname",\r
+          "caption",\r
+          "t",\r
+          "system_picture_id",\r
+          "settings",\r
+          "created_at",\r
+          "updated_at"\r
+        ],\r
+        "associations": {\r
+          "belongs_to": [\r
+            "system_picture"\r
+          ],\r
+          "has_many": [\r
+            "speech_balloons.by_speech_balloon_template",\r
+            "panels.by_speech_balloon_template"\r
+          ],\r
+          "has_one": []\r
+        }\r
+      },\r
+      "writing_format": {\r
+        "lists": {\r
+          "speeches.by_writing_format": {\r
+            "model_name": "speech",\r
+            "list_name": "by_writing_format"\r
           }\r
         },\r
-        "artist_id": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true\r
+        "columns": [\r
+          "id",\r
+          "name",\r
+          "classname",\r
+          "caption",\r
+          "system_picture_id",\r
+          "settings",\r
+          "created_at",\r
+          "updated_at"\r
+        ],\r
+        "associations": {\r
+          "belongs_to": [\r
+            "system_picture"\r
+          ],\r
+          "has_many": [\r
+            "speeches.by_writing_format"\r
+          ],\r
+          "has_one": []\r
+        }\r
+      },\r
+      "license_group": {\r
+        "lists": {\r
+          "licenses.by_license_group": {\r
+            "model_name": "license",\r
+            "list_name": "by_license_group"\r
           }\r
         },\r
-        "license_id": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true\r
+        "columns": [\r
+          "id",\r
+          "name",\r
+          "classname",\r
+          "caption",\r
+          "url",\r
+          "created_at",\r
+          "updated_at"\r
+        ],\r
+        "associations": {\r
+          "belongs_to": [],\r
+          "has_many": [\r
+            "licenses.by_license_group"\r
+          ],\r
+          "has_one": []\r
+        }\r
+      },\r
+      "license": {\r
+        "lists": {\r
+          "resource_pictures.by_license": {\r
+            "model_name": "resource_picture",\r
+            "list_name": "by_license"\r
           }\r
         },\r
-        "md5": {\r
-          "type": "text",\r
-          "rules": {\r
-            "required": true\r
+        "columns": [\r
+          "id",\r
+          "license_group_id",\r
+          "name",\r
+          "caption",\r
+          "system_picture_id",\r
+          "url",\r
+          "settings",\r
+          "credit_pictures",\r
+          "created_at",\r
+          "updated_at"\r
+        ],\r
+        "associations": {\r
+          "belongs_to": [\r
+            "license_group",\r
+            "system_picture"\r
+          ],\r
+          "has_many": [\r
+            "resource_pictures.by_license"\r
+          ],\r
+          "has_one": []\r
+        }\r
+      },\r
+      "author": {\r
+        "lists": {\r
+          "scrolls.by_author": {\r
+            "model_name": "scroll",\r
+            "list_name": "by_author"\r
+          },\r
+          "comics.by_author": {\r
+            "model_name": "comic",\r
+            "list_name": "by_author"\r
+          },\r
+          "stories.by_author": {\r
+            "model_name": "story",\r
+            "list_name": "by_author"\r
+          },\r
+          "panels.by_author": {\r
+            "model_name": "panel",\r
+            "list_name": "by_author"\r
+          },\r
+          "panel_pictures.by_author": {\r
+            "model_name": "panel_picture",\r
+            "list_name": "by_author"\r
+          },\r
+          "speech_balloons.by_author": {\r
+            "model_name": "speech_balloon",\r
+            "list_name": "by_author"\r
+          },\r
+          "ground_pictures.by_author": {\r
+            "model_name": "ground_picture",\r
+            "list_name": "by_author"\r
+          },\r
+          "ground_colors.by_author": {\r
+            "model_name": "ground_color",\r
+            "list_name": "by_author"\r
           }\r
         },\r
-        "artist_name": {\r
-          "type": "text",\r
-          "rules": {\r
-            "required": true\r
+        "columns": [\r
+          "id",\r
+          "name",\r
+          "user_id",\r
+          "created_at",\r
+          "updated_at"\r
+        ],\r
+        "associations": {\r
+          "belongs_to": [],\r
+          "has_many": [\r
+            "scrolls.by_author",\r
+            "comics.by_author",\r
+            "scrolls.by_author",\r
+            "stories.by_author",\r
+            "panels.by_author",\r
+            "panel_pictures.by_author",\r
+            "speech_balloons.by_author",\r
+            "ground_pictures.by_author",\r
+            "ground_colors.by_author"\r
+          ],\r
+          "has_one": []\r
+        }\r
+      },\r
+      "artist": {\r
+        "lists": {\r
+          "resource_pictures.by_artist": {\r
+            "model_name": "resource_picture",\r
+            "list_name": "by_artist"\r
           }\r
         },\r
-        "credit": {\r
-          "type": "text",\r
-          "rules": {}\r
-        },\r
-        "settings": {\r
-          "type": "text",\r
-          "rules": {}\r
-        },\r
-        "classname": {\r
-          "type": "text",\r
-          "rules": {\r
-            "required": true\r
+        "columns": [\r
+          "id",\r
+          "name",\r
+          "author_id",\r
+          "created_at",\r
+          "updated_at"\r
+        ],\r
+        "associations": {\r
+          "belongs_to": [],\r
+          "has_many": [\r
+            "resource_pictures.by_artist"\r
+          ],\r
+          "has_one": []\r
+        }\r
+      },\r
+      "system_picture": {\r
+        "lists": {\r
+          "speech_balloon_templates.by_system_picture": {\r
+            "model_name": "speech_balloon_template",\r
+            "list_name": "by_system_picture"\r
+          },\r
+          "licenses.by_system_picture": {\r
+            "model_name": "license",\r
+            "list_name": "by_system_picture"\r
           }\r
         },\r
-        "created_at": {\r
-          "type": "datetime"\r
-        },\r
-        "updated_at": {\r
-          "type": "datetime"\r
+        "columns": [\r
+          "id",\r
+          "ext",\r
+          "width",\r
+          "height",\r
+          "filesize",\r
+          "md5",\r
+          "created_at",\r
+          "updated_at"\r
+        ],\r
+        "associations": {\r
+          "belongs_to": [],\r
+          "has_many": [\r
+            "speech_balloon_templates.by_system_picture",\r
+            "licenses.by_system_picture"\r
+          ],\r
+          "has_one": []\r
         }\r
       }\r
     },\r
-    "ResourcePicture": "resource_picture",\r
-    "resource_picture": {\r
-      "class_name": "ResourcePicture",\r
-      "table_name": "resource_pictures",\r
-      "associations": {\r
-        "belongs_to": {\r
-          "license": {\r
-            "id_column": "license_id"\r
-          },\r
-          "artist": {\r
-            "id_column": "artist_id"\r
-          }\r
+    "filers": {\r
+      "scroll": {\r
+        "symbol": {\r
+          "type": "image",\r
+          "name": "/assets/item.png"\r
         },\r
-        "has_many": {},\r
-        "has_one": {}\r
-      },\r
-      "attributes": {\r
-        "id": {\r
-          "type": "number",\r
-          "primary_key": 1,\r
-          "rules": {\r
-            "number": true\r
+        "caption": {\r
+          "type": "column",\r
+          "name": "title",\r
+          "link": {\r
+            "type": "action",\r
+            "name": "play"\r
           }\r
         },\r
-        "original_picture_id": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true\r
-          }\r
+        "summary": {\r
+          "type": "template",\r
+          "name": "summary"\r
         },\r
-        "revision": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true\r
+        "edit": {\r
+          "type": "default"\r
+        }\r
+      },\r
+      "scroll_panel": {\r
+        "symbol": {\r
+          "type": "image",\r
+          "name": "/assets/item.png",\r
+          "link": {\r
+            "type": "none"\r
           }\r
         },\r
-        "ext": {\r
-          "type": "text",\r
-          "rules": {\r
-            "required": true\r
-          }\r
+        "caption": {\r
+          "type": "none"\r
         },\r
-        "width": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true\r
-          }\r
+        "summary": {\r
+          "type": "template",\r
+          "name": "summary"\r
         },\r
-        "height": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true\r
-          }\r
+        "edit": {\r
+          "type": "none"\r
+        }\r
+      },\r
+      "comic": {\r
+        "symbol": {\r
+          "type": "image",\r
+          "name": "/assets/item.png"\r
         },\r
-        "filesize": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true\r
-          }\r
+        "caption": {\r
+          "type": "column",\r
+          "name": "title"\r
         },\r
-        "artist_id": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true\r
-          }\r
+        "summary": {\r
+          "type": "template",\r
+          "name": "summary"\r
         },\r
-        "license_id": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true\r
-          }\r
+        "edit": {\r
+          "type": "default"\r
+        }\r
+      },\r
+      "story": {\r
+        "symbol": {\r
+          "type": "image",\r
+          "name": "/assets/item.png"\r
         },\r
-        "md5": {\r
-          "type": "text",\r
-          "rules": {\r
-            "required": true\r
+        "caption": {\r
+          "type": "method",\r
+          "name": "title_with_t",\r
+          "link": {\r
+            "type": "action",\r
+            "name": "play"\r
           }\r
         },\r
-        "artist_name": {\r
-          "type": "text",\r
-          "rules": {\r
-            "required": true\r
+        "summary": {\r
+          "type": "template",\r
+          "name": "summary"\r
+        },\r
+        "edit": {\r
+          "type": "default"\r
+        }\r
+      },\r
+      "story_sheet": {\r
+        "symbol": {\r
+          "type": "image",\r
+          "name": "/assets/item.png",\r
+          "link": {\r
+            "type": "none"\r
           }\r
         },\r
-        "credit": {\r
-          "type": "text",\r
-          "rules": {}\r
+        "caption": {\r
+          "type": "none"\r
         },\r
-        "settings": {\r
-          "type": "text",\r
-          "rules": {}\r
+        "summary": {\r
+          "type": "template",\r
+          "name": "summary"\r
         },\r
-        "picture_id": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true\r
-          }\r
+        "edit": {\r
+          "type": "none"\r
+        }\r
+      },\r
+      "sheet": {\r
+        "symbol": {\r
+          "type": "image",\r
+          "name": "/assets/item.png"\r
         },\r
-        "classname": {\r
-          "type": "text",\r
-          "rules": {\r
-            "required": true\r
+        "caption": {\r
+          "type": "column",\r
+          "name": "caption",\r
+          "link": {\r
+            "type": "action",\r
+            "name": "play"\r
           }\r
         },\r
-        "created_at": {\r
-          "type": "datetime"\r
+        "summary": {\r
+          "type": "template",\r
+          "name": "summary"\r
         },\r
-        "updated_at": {\r
-          "type": "datetime"\r
+        "edit": {\r
+          "type": "default"\r
         }\r
-      }\r
-    },\r
-    "SpeechBalloonTemplate": "speech_balloon_template",\r
-    "speech_balloon_template": {\r
-      "class_name": "SpeechBalloonTemplate",\r
-      "table_name": "speech_balloon_templates",\r
-      "associations": {\r
-        "belongs_to": {\r
-          "system_picture": {\r
-            "id_column": "system_picture_id"\r
+      },\r
+      "sheet_panel": {\r
+        "symbol": {\r
+          "type": "image",\r
+          "name": "/assets/item.png",\r
+          "link": {\r
+            "type": "none"\r
           }\r
         },\r
-        "has_many": {\r
-          "speech_balloons": {\r
-            "foreign_key": "speech_balloon_template_id",\r
-            "list_method": "list_by_speech_balloon_template"\r
-          },\r
-          "panels": {\r
-            "through": "speech_balloons",\r
-            "foreign_key": "speech_balloon_template_id",\r
-            "list_method": "list_by_speech_balloon_template"\r
-          }\r
+        "caption": {\r
+          "type": "none"\r
         },\r
-        "has_one": {}\r
+        "summary": {\r
+          "type": "template",\r
+          "name": "summary"\r
+        },\r
+        "edit": {\r
+          "type": "none"\r
+        }\r
       },\r
-      "attributes": {\r
-        "id": {\r
-          "type": "number",\r
-          "primary_key": 1,\r
-          "rules": {\r
-            "number": true\r
-          }\r
+      "panel": {\r
+        "symbol": {\r
+          "type": "image",\r
+          "name": "/assets/item.png"\r
         },\r
-        "name": {\r
-          "type": "text",\r
-          "rules": {\r
-            "required": true\r
+        "caption": {\r
+          "type": "method",\r
+          "name": "plain_scenario",\r
+          "link": {\r
+            "type": "none"\r
           }\r
         },\r
-        "classname": {\r
-          "type": "text",\r
-          "rules": {\r
-            "required": true\r
-          }\r
+        "summary": {\r
+          "type": "template",\r
+          "name": "summary"\r
+        },\r
+        "edit": {\r
+          "type": "default"\r
+        }\r
+      },\r
+      "panel_picture": {\r
+        "symbol": {\r
+          "type": "picture",\r
+          "name": "symbol_option"\r
         },\r
         "caption": {\r
-          "type": "text",\r
-          "rules": {\r
-            "required": true\r
-          }\r
+          "type": "column",\r
+          "name": "caption"\r
         },\r
-        "t": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true,\r
-            "min": 0\r
-          }\r
+        "summary": {\r
+          "type": "template",\r
+          "name": "summary"\r
         },\r
-        "system_picture_id": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true\r
-          }\r
+        "edit": {\r
+          "type": "none"\r
+        }\r
+      },\r
+      "speech_balloon": {\r
+        "symbol": {\r
+          "type": "picture",\r
+          "name": "symbol_option"\r
         },\r
-        "settings": {\r
-          "type": "text",\r
-          "rules": {\r
-            "required": true\r
+        "caption": {\r
+          "type": "method",\r
+          "name": "plain_scenario",\r
+          "link": {\r
+            "type": "none"\r
           }\r
         },\r
-        "created_at": {\r
-          "type": "datetime"\r
+        "summary": {\r
+          "type": "template",\r
+          "name": "summary"\r
         },\r
-        "updated_at": {\r
-          "type": "datetime"\r
+        "edit": {\r
+          "type": "none"\r
         }\r
       },\r
-      "select": {\r
-        "method": "enable_list",\r
+      "speech": {\r
+        "symbol": {\r
+          "type": "picture",\r
+          "name": "symbol_option"\r
+        },\r
         "caption": {\r
           "type": "column",\r
-          "name": "caption"\r
-        }\r
-      }\r
-    },\r
-    "WritingFormat": "writing_format",\r
-    "writing_format": {\r
-      "class_name": "WritingFormat",\r
-      "table_name": "writing_formats",\r
-      "associations": {\r
-        "belongs_to": {\r
-          "system_picture": {\r
-            "id_column": "system_picture_id"\r
+          "name": "content",\r
+          "link": {\r
+            "type": "none"\r
           }\r
         },\r
-        "has_many": {\r
-          "speeches": {\r
-            "foreign_key": "writing_format_id",\r
-            "list_method": "list_by_writing_format"\r
-          }\r
+        "summary": {\r
+          "type": "template",\r
+          "name": "summary"\r
         },\r
-        "has_one": {}\r
+        "edit": {\r
+          "type": "none"\r
+        }\r
       },\r
-      "attributes": {\r
-        "id": {\r
-          "type": "number",\r
-          "primary_key": 1,\r
-          "rules": {\r
-            "number": true\r
-          }\r
-        },\r
-        "name": {\r
-          "type": "text",\r
-          "rules": {\r
-            "required": true\r
-          }\r
-        },\r
-        "classname": {\r
-          "type": "text",\r
-          "rules": {\r
-            "required": true\r
-          }\r
+      "balloon": {\r
+        "symbol": {\r
+          "type": "picture",\r
+          "name": "symbol_option"\r
         },\r
         "caption": {\r
-          "type": "text",\r
-          "rules": {\r
-            "required": true\r
-          }\r
+          "type": "none"\r
         },\r
-        "system_picture_id": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true\r
-          }\r
+        "summary": {\r
+          "type": "template",\r
+          "name": "summary"\r
         },\r
-        "settings": {\r
-          "type": "text",\r
-          "rules": {\r
-            "required": true\r
-          }\r
+        "edit": {\r
+          "type": "none"\r
+        }\r
+      },\r
+      "ground_picture": {\r
+        "symbol": {\r
+          "type": "picture",\r
+          "name": "symbol_option"\r
         },\r
-        "created_at": {\r
-          "type": "datetime"\r
+        "caption": {\r
+          "type": "column",\r
+          "name": "caption"\r
         },\r
-        "updated_at": {\r
-          "type": "datetime"\r
+        "summary": {\r
+          "type": "template",\r
+          "name": "summary"\r
+        },\r
+        "edit": {\r
+          "type": "none"\r
         }\r
       },\r
-      "select": {\r
-        "method": "enable_list",\r
+      "ground_color": {\r
+        "symbol": {\r
+          "type": "template",\r
+          "name": "symbol"\r
+        },\r
         "caption": {\r
           "type": "column",\r
           "name": "caption"\r
-        }\r
-      }\r
-    },\r
-    "LicenseGroup": "license_group",\r
-    "license_group": {\r
-      "class_name": "LicenseGroup",\r
-      "table_name": "license_groups",\r
-      "associations": {\r
-        "belongs_to": {},\r
-        "has_many": {\r
-          "licenses": {\r
-            "foreign_key": "license_group_id",\r
-            "list_method": "list_by_license_group"\r
-          }\r
         },\r
-        "has_one": {}\r
+        "summary": {\r
+          "type": "template",\r
+          "name": "summary"\r
+        },\r
+        "edit": {\r
+          "type": "none"\r
+        }\r
       },\r
-      "attributes": {\r
-        "id": {\r
-          "type": "number",\r
-          "primary_key": 1,\r
-          "rules": {\r
-            "number": true\r
-          }\r
+      "original_picture": {\r
+        "symbol": {\r
+          "type": "picture",\r
+          "name": "symbol_option"\r
         },\r
-        "name": {\r
-          "type": "text",\r
-          "rules": {\r
-            "required": true\r
+        "caption": {\r
+          "type": "method",\r
+          "name": "revision",\r
+          "link": {\r
+            "type": "action",\r
+            "name": "history"\r
           }\r
         },\r
-        "classname": {\r
-          "type": "text",\r
-          "rules": {\r
-            "required": true\r
-          }\r
+        "summary": {\r
+          "type": "template",\r
+          "name": "summary"\r
+        },\r
+        "edit": {\r
+          "type": "template",\r
+          "name": "publish"\r
+        }\r
+      },\r
+      "picture": {\r
+        "symbol": {\r
+          "type": "picture",\r
+          "name": "symbol_option"\r
         },\r
         "caption": {\r
-          "type": "text",\r
-          "rules": {\r
-            "required": true\r
-          }\r
+          "type": "column",\r
+          "name": "revision"\r
         },\r
-        "url": {\r
-          "type": "text",\r
-          "rules": {\r
-            "required": true\r
-          }\r
+        "summary": {\r
+          "type": "template",\r
+          "name": "summary"\r
         },\r
-        "created_at": {\r
-          "type": "datetime"\r
+        "edit": {\r
+          "type": "none"\r
+        }\r
+      },\r
+      "resource_picture": {\r
+        "symbol": {\r
+          "type": "picture",\r
+          "name": "symbol_option"\r
         },\r
-        "updated_at": {\r
-          "type": "datetime"\r
+        "caption": {\r
+          "type": "none"\r
+        },\r
+        "summary": {\r
+          "type": "template",\r
+          "name": "summary"\r
+        },\r
+        "edit": {\r
+          "type": "none"\r
         }\r
       },\r
-      "select": {\r
-        "method": "list",\r
+      "speech_balloon_template": {\r
+        "symbol": {\r
+          "type": "picture",\r
+          "name": "symbol_option"\r
+        },\r
         "caption": {\r
           "type": "column",\r
           "name": "caption"\r
-        }\r
-      }\r
-    },\r
-    "License": "license",\r
-    "license": {\r
-      "class_name": "License",\r
-      "table_name": "licenses",\r
-      "associations": {\r
-        "belongs_to": {\r
-          "license_group": {\r
-            "id_column": "license_group_id"\r
-          },\r
-          "system_picture": {\r
-            "id_column": "system_picture_id"\r
-          }\r
         },\r
-        "has_many": {\r
-          "resource_pictures": {\r
-            "foreign_key": "license_id",\r
-            "list_method": "list_by_license"\r
-          }\r
+        "summary": {\r
+          "type": "none"\r
         },\r
-        "has_one": {}\r
+        "edit": {\r
+          "type": "none"\r
+        }\r
       },\r
-      "attributes": {\r
-        "id": {\r
-          "type": "number",\r
-          "primary_key": 1,\r
-          "rules": {\r
-            "number": true\r
-          }\r
+      "writing_format": {\r
+        "symbol": {\r
+          "type": "image",\r
+          "name": "/assets/item.png"\r
         },\r
-        "license_group_id": {\r
-          "type": "number",\r
-          "rules": {\r
-            "number": true\r
-          }\r
+        "caption": {\r
+          "type": "column",\r
+          "name": "caption"\r
         },\r
-        "name": {\r
-          "type": "text",\r
-          "rules": {\r
-            "required": true\r
-          }\r
+        "summary": {\r
+          "type": "none"\r
+        },\r
+        "edit": {\r
+          "type": "none"\r
+        }\r
+      },\r
+      "license_group": {\r
+        "symbol": {\r
+          "type": "image",\r
+          "name": "/assets/item.png"\r
         },\r
         "caption": {\r
-          "type": "text",\r
-          "rules": {\r
-            "required": true\r
+          "type": "column",\r
+          "name": "caption",\r
+          "link": {\r
+            "type": "url_column",\r
+            "name": "url"\r
           }\r
         },\r
-        "system_picture_id": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true\r
-          }\r
+        "summary": {\r
+          "type": "none"\r
         },\r
-        "url": {\r
-          "type": "text",\r
-          "rules": {\r
-            "required": true\r
+        "edit": {\r
+          "type": "none"\r
+        }\r
+      },\r
+      "license": {\r
+        "symbol": {\r
+          "type": "image",\r
+          "name": "/assets/item.png"\r
+        },\r
+        "caption": {\r
+          "type": "method",\r
+          "name": "caption_with_group",\r
+          "link": {\r
+            "type": "url_column",\r
+            "name": "url"\r
           }\r
         },\r
-        "settings": {\r
-          "type": "text",\r
-          "rules": {}\r
+        "summary": {\r
+          "type": "template",\r
+          "name": "summary"\r
         },\r
-        "credit_pictures": {\r
-          "type": "text",\r
-          "rules": {}\r
+        "edit": {\r
+          "type": "none"\r
+        }\r
+      },\r
+      "author": {\r
+        "symbol": {\r
+          "type": "image",\r
+          "name": "/assets/item.png"\r
         },\r
-        "created_at": {\r
-          "type": "datetime"\r
+        "caption": {\r
+          "type": "column",\r
+          "name": "name"\r
         },\r
-        "updated_at": {\r
-          "type": "datetime"\r
+        "summary": {\r
+          "type": "template",\r
+          "name": "summary"\r
+        },\r
+        "edit": {\r
+          "type": "account"\r
+        }\r
+      },\r
+      "artist": {\r
+        "symbol": {\r
+          "type": "image",\r
+          "name": "/assets/item.png"\r
+        },\r
+        "caption": {\r
+          "type": "column",\r
+          "name": "name"\r
+        },\r
+        "summary": {\r
+          "type": "template",\r
+          "name": "summary"\r
+        },\r
+        "edit": {\r
+          "type": "account"\r
+        }\r
+      },\r
+      "system_picture": {\r
+        "symbol": {\r
+          "type": "picture",\r
+          "name": "symbol_option"\r
+        },\r
+        "caption": {\r
+          "type": "none"\r
+        },\r
+        "summary": {\r
+          "type": "none"\r
+        },\r
+        "edit": {\r
+          "type": "none"\r
         }\r
       }\r
     },\r
-    "Author": "author",\r
-    "author": {\r
-      "class_name": "Author",\r
-      "table_name": "authors",\r
-      "associations": {\r
-        "belongs_to": {},\r
-        "has_many": {\r
-          "scrolls": {\r
-            "foreign_key": "author_id",\r
-            "list_method": "list_by_author"\r
+    "elements": [\r
+      {\r
+        "name": "panel_picture",\r
+        "path_name": "panel_pictures",\r
+        "parts": []\r
+      },\r
+      {\r
+        "name": "speech_balloon",\r
+        "path_name": "circle_speech_balloon/speech_balloons",\r
+        "parts": [\r
+          "balloon",\r
+          "speech"\r
+        ]\r
+      },\r
+      {\r
+        "name": "ground_picture",\r
+        "path_name": "ground_pictures",\r
+        "parts": []\r
+      },\r
+      {\r
+        "name": "ground_color",\r
+        "path_name": "ground_colors",\r
+        "parts": []\r
+      }\r
+    ],\r
+    "forms": {\r
+      "Panel": "panel",\r
+      "panel": {\r
+        "attributes": {\r
+          "caption": {\r
+            "column": "caption",\r
+            "type": "text",\r
+            "label": {},\r
+            "options": {\r
+              "row_break": true\r
+            }\r
+          },\r
+          "width": {\r
+            "column": "width",\r
+            "type": "number",\r
+            "label": {},\r
+            "options": {\r
+              "size": 5\r
+            }\r
+          },\r
+          "height": {\r
+            "column": "height",\r
+            "type": "number",\r
+            "label": {},\r
+            "options": {\r
+              "size": 5,\r
+              "row_break": true\r
+            }\r
+          },\r
+          "border": {\r
+            "column": "border",\r
+            "type": "number",\r
+            "label": {},\r
+            "options": {\r
+              "size": 5\r
+            }\r
+          },\r
+          "publish": {\r
+            "column": "publish",\r
+            "type": "select",\r
+            "label": {},\r
+            "options": {\r
+              "source": "magic_number",\r
+              "key": "comic_visible_items",\r
+              "size": 5,\r
+              "row_break": true\r
+            }\r
+          },\r
+          "id": {\r
+            "column": "id",\r
+            "type": "hidden",\r
+            "label": {\r
+              "type": "hidden"\r
+            },\r
+            "options": {}\r
+          },\r
+          "author_id": {\r
+            "column": "author_id",\r
+            "type": "hidden",\r
+            "label": {\r
+              "type": "hidden"\r
+            },\r
+            "options": {}\r
+          }\r
+        },\r
+        "fields": [\r
+          "caption",\r
+          "width",\r
+          "height",\r
+          "border",\r
+          "publish",\r
+          "id",\r
+          "author_id"\r
+        ]\r
+      },\r
+      "PanelPicture": "panel_picture",\r
+      "panel_picture": {\r
+        "attributes": {\r
+          "caption": {\r
+            "column": "caption",\r
+            "type": "text",\r
+            "label": {},\r
+            "options": {\r
+              "row_break": true\r
+            }\r
+          },\r
+          "x": {\r
+            "column": "x",\r
+            "type": "number",\r
+            "label": {},\r
+            "options": {\r
+              "size": 5\r
+            }\r
+          },\r
+          "y": {\r
+            "column": "y",\r
+            "type": "number",\r
+            "label": {},\r
+            "options": {\r
+              "size": 5,\r
+              "row_break": true\r
+            }\r
+          },\r
+          "width": {\r
+            "column": "width",\r
+            "type": "number",\r
+            "label": {},\r
+            "options": {\r
+              "size": 5,\r
+              "row_break": true\r
+            },\r
+            "helpers": {\r
+              "size": {\r
+                "path": "panels/size_helper",\r
+                "options": {\r
+                  "class": "panel_picture_width_tool"\r
+                }\r
+              }\r
+            }\r
+          },\r
+          "height": {\r
+            "column": "height",\r
+            "type": "number",\r
+            "label": {},\r
+            "options": {\r
+              "size": 5,\r
+              "row_break": true\r
+            },\r
+            "helpers": {\r
+              "size": {\r
+                "path": "panels/size_helper",\r
+                "options": {\r
+                  "class": "panel_picture_height_tool"\r
+                }\r
+              }\r
+            }\r
+          },\r
+          "link": {\r
+            "column": "link",\r
+            "type": "text",\r
+            "label": {},\r
+            "options": {\r
+              "row_break": true\r
+            }\r
+          },\r
+          "id": {\r
+            "column": "id",\r
+            "type": "hidden",\r
+            "label": {\r
+              "type": "hidden"\r
+            },\r
+            "options": {}\r
+          },\r
+          "panel_id": {\r
+            "column": "panel_id",\r
+            "type": "hidden",\r
+            "label": {\r
+              "type": "hidden"\r
+            },\r
+            "options": {}\r
+          },\r
+          "picture_id": {\r
+            "column": "picture_id",\r
+            "type": "hidden",\r
+            "label": {},\r
+            "helpers": {\r
+              "popup": {\r
+                "path": "panels/popup_helper",\r
+                "source": "pictures",\r
+                "options": {}\r
+              }\r
+            },\r
+            "options": {}\r
+          },\r
+          "z": {\r
+            "column": "z",\r
+            "type": "hidden",\r
+            "label": {\r
+              "type": "hidden"\r
+            },\r
+            "options": {}\r
+          },\r
+          "t": {\r
+            "column": "t",\r
+            "type": "hidden",\r
+            "label": {\r
+              "type": "hidden"\r
+            },\r
+            "options": {}\r
+          }\r
+        },\r
+        "fields": [\r
+          "caption",\r
+          "x",\r
+          "y",\r
+          "width",\r
+          "height",\r
+          "link",\r
+          "id",\r
+          "panel_id",\r
+          "picture_id",\r
+          "z",\r
+          "t"\r
+        ]\r
+      },\r
+      "speech_balloon": {\r
+        "attributes": {\r
+          "speech_balloon.id": {\r
+            "column": "id",\r
+            "type": "hidden",\r
+            "label": {\r
+              "type": "hidden"\r
+            },\r
+            "options": {}\r
+          },\r
+          "speech_balloon.panel_id": {\r
+            "column": "panel_id",\r
+            "type": "hidden",\r
+            "label": {\r
+              "type": "hidden"\r
+            },\r
+            "options": {}\r
+          },\r
+          "speech_balloon.speech_balloon_template_id": {\r
+            "column": "speech_balloon_template_id",\r
+            "type": "hidden",\r
+            "label": {\r
+              "type": "hidden"\r
+            },\r
+            "options": {}\r
+          },\r
+          "speech_balloon.caption": {\r
+            "column": "caption",\r
+            "type": "text",\r
+            "label": {},\r
+            "options": {\r
+              "row_break": true\r
+            }\r
+          },\r
+          "speech_balloon.z": {\r
+            "column": "z",\r
+            "type": "hidden",\r
+            "label": {\r
+              "type": "hidden"\r
+            },\r
+            "options": {}\r
+          },\r
+          "speech_balloon.t": {\r
+            "column": "t",\r
+            "type": "hidden",\r
+            "label": {\r
+              "type": "hidden"\r
+            },\r
+            "options": {}\r
+          },\r
+          "speech_balloon.classname": {\r
+            "column": "classname",\r
+            "type": "hidden",\r
+            "label": {\r
+              "type": "hidden"\r
+            },\r
+            "options": {}\r
+          },\r
+          "speech_balloon.settings": {\r
+            "column": "settings",\r
+            "type": "hidden",\r
+            "label": {\r
+              "type": "hidden"\r
+            },\r
+            "options": {}\r
+          },\r
+          "balloon.id": {\r
+            "model": "balloon",\r
+            "part": "balloon",\r
+            "column": "id",\r
+            "type": "hidden",\r
+            "label": {\r
+              "type": "hidden"\r
+            },\r
+            "options": {}\r
+          },\r
+          "balloon.speech_balloon_id": {\r
+            "model": "balloon",\r
+            "part": "balloon",\r
+            "column": "speech_balloon_id",\r
+            "type": "hidden",\r
+            "label": {\r
+              "type": "hidden"\r
+            },\r
+            "options": {}\r
+          },\r
+          "balloon.system_picture_id": {\r
+            "model": "balloon",\r
+            "part": "balloon",\r
+            "column": "system_picture_id",\r
+            "type": "hidden",\r
+            "label": {\r
+              "type": "hidden"\r
+            },\r
+            "options": {}\r
+          },\r
+          "balloon.r": {\r
+            "model": "balloon",\r
+            "part": "balloon",\r
+            "column": "r",\r
+            "type": "number",\r
+            "label": {},\r
+            "options": {\r
+              "size": 5,\r
+              "row_break": true\r
+            },\r
+            "helpers": {\r
+              "tail_angle": {\r
+                "path": "panels/tail_angle_helper",\r
+                "options": {}\r
+              }\r
+            }\r
+          },\r
+          "balloon.x": {\r
+            "model": "balloon",\r
+            "part": "balloon",\r
+            "column": "x",\r
+            "type": "number",\r
+            "label": {},\r
+            "options": {\r
+              "size": 5\r
+            }\r
+          },\r
+          "balloon.y": {\r
+            "model": "balloon",\r
+            "part": "balloon",\r
+            "column": "y",\r
+            "type": "number",\r
+            "label": {},\r
+            "options": {\r
+              "size": 5,\r
+              "row_break": true\r
+            }\r
+          },\r
+          "balloon.width": {\r
+            "model": "balloon",\r
+            "part": "balloon",\r
+            "column": "width",\r
+            "type": "number",\r
+            "label": {},\r
+            "options": {\r
+              "size": 5\r
+            }\r
+          },\r
+          "balloon.height": {\r
+            "model": "balloon",\r
+            "part": "balloon",\r
+            "column": "height",\r
+            "type": "number",\r
+            "label": {},\r
+            "options": {\r
+              "size": 5,\r
+              "row_break": true\r
+            }\r
+          },\r
+          "balloon.settings": {\r
+            "model": "balloon",\r
+            "part": "balloon",\r
+            "column": "settings",\r
+            "type": "hidden",\r
+            "label": {\r
+              "type": "hidden"\r
+            },\r
+            "options": {}\r
+          },\r
+          "speech.id": {\r
+            "model": "speech",\r
+            "part": "speech",\r
+            "column": "id",\r
+            "type": "hidden",\r
+            "label": {\r
+              "type": "hidden"\r
+            },\r
+            "options": {}\r
+          },\r
+          "speech.speech_balloon_id": {\r
+            "model": "speech",\r
+            "part": "speech",\r
+            "column": "speech_balloon_id",\r
+            "type": "hidden",\r
+            "label": {\r
+              "type": "hidden"\r
+            },\r
+            "options": {}\r
+          },\r
+          "speech.x": {\r
+            "model": "speech",\r
+            "part": "speech",\r
+            "column": "x",\r
+            "type": "hidden",\r
+            "label": {\r
+              "type": "hidden"\r
+            },\r
+            "options": {}\r
+          },\r
+          "speech.y": {\r
+            "model": "speech",\r
+            "part": "speech",\r
+            "column": "y",\r
+            "type": "hidden",\r
+            "label": {\r
+              "type": "hidden"\r
+            },\r
+            "options": {}\r
+          },\r
+          "speech.width": {\r
+            "model": "speech",\r
+            "part": "speech",\r
+            "column": "width",\r
+            "type": "hidden",\r
+            "label": {\r
+              "type": "hidden"\r
+            },\r
+            "options": {}\r
+          },\r
+          "speech.height": {\r
+            "model": "speech",\r
+            "part": "speech",\r
+            "column": "height",\r
+            "type": "hidden",\r
+            "label": {\r
+              "type": "hidden"\r
+            },\r
+            "options": {}\r
+          },\r
+          "speech.writing_format_id": {\r
+            "model": "speech",\r
+            "part": "speech",\r
+            "column": "writing_format_id",\r
+            "type": "select",\r
+            "label": {},\r
+            "options": {\r
+              "source": "model",\r
+              "model": "writing_format",\r
+              "method": "enable_list",\r
+              "caption": "caption"\r
+            }\r
+          },\r
+          "speech.font_size": {\r
+            "model": "speech",\r
+            "part": "speech",\r
+            "column": "font_size",\r
+            "type": "select",\r
+            "label": {},\r
+            "options": {\r
+              "source": "magic_number",\r
+              "key": "speech_font_size_items",\r
+              "row_break": true\r
+            }\r
+          },\r
+          "speech.text_align": {\r
+            "model": "speech",\r
+            "part": "speech",\r
+            "column": "text_align",\r
+            "type": "select",\r
+            "label": {},\r
+            "options": {\r
+              "source": "magic_number",\r
+              "key": "speech_text_align_items"\r
+            }\r
           },\r
-          "comics": {\r
-            "foreign_key": "author_id",\r
-            "list_method": "list_by_author"\r
+          "speech.quotes": {\r
+            "model": "speech",\r
+            "part": "speech",\r
+            "column": "quotes",\r
+            "type": "text",\r
+            "label": {},\r
+            "options": {\r
+              "size": 5\r
+            }\r
           },\r
-          "stories": {\r
-            "foreign_key": "author_id",\r
-            "list_method": "list_by_author"\r
+          "speech.content": {\r
+            "model": "speech",\r
+            "part": "speech",\r
+            "column": "content",\r
+            "type": "text_area",\r
+            "label": {\r
+              "row_break": true\r
+            },\r
+            "options": {\r
+              "size": "45x5"\r
+            }\r
           },\r
-          "sheets": {\r
-            "foreign_key": "author_id",\r
-            "list_method": "list_by_author"\r
+          "speech.fore_color": {\r
+            "model": "speech",\r
+            "part": "speech",\r
+            "column": "fore_color",\r
+            "type": "hidden",\r
+            "label": {\r
+              "row_break": true\r
+            },\r
+            "options": {},\r
+            "helpers": {\r
+              "color": {\r
+                "path": "panels/color_helper",\r
+                "options": {},\r
+                "wrapper": "speech-fore_color-wrap"\r
+              }\r
+            }\r
           },\r
-          "panels": {\r
-            "foreign_key": "author_id",\r
-            "list_method": "list_by_author"\r
-          }\r
-        },\r
-        "has_one": {}\r
-      },\r
-      "attributes": {\r
-        "id": {\r
-          "type": "number",\r
-          "primary_key": 1,\r
-          "rules": {\r
-            "number": true\r
-          }\r
-        },\r
-        "name": {\r
-          "type": "text",\r
-          "rules": {\r
-            "required": true\r
-          }\r
-        },\r
-        "user_id": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true\r
-          }\r
-        },\r
-        "created_at": {\r
-          "type": "datetime"\r
-        },\r
-        "updated_at": {\r
-          "type": "datetime"\r
-        }\r
-      },\r
-      "select": {\r
-        "method": "list",\r
-        "caption": {\r
-          "type": "column",\r
-          "name": "name"\r
-        }\r
-      }\r
-    },\r
-    "Artist": "artist",\r
-    "artist": {\r
-      "class_name": "Artist",\r
-      "table_name": "artists",\r
-      "associations": {\r
-        "belongs_to": {},\r
-        "has_many": {\r
-          "resource_pictures": {\r
-            "foreign_key": "artist_id",\r
-            "list_method": "list_by_artist"\r
-          }\r
-        },\r
-        "has_one": {}\r
-      },\r
-      "attributes": {\r
-        "id": {\r
-          "type": "number",\r
-          "primary_key": 1,\r
-          "rules": {\r
-            "number": true\r
-          }\r
-        },\r
-        "name": {\r
-          "type": "text",\r
-          "rules": {\r
-            "required": true\r
-          }\r
-        },\r
-        "author_id": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true\r
+          "speech.settings": {\r
+            "model": "speech",\r
+            "part": "speech",\r
+            "column": "settings",\r
+            "type": "hidden",\r
+            "label": {\r
+              "type": "hidden"\r
+            },\r
+            "options": {}\r
           }\r
-        },\r
-        "created_at": {\r
-          "type": "datetime"\r
-        },\r
-        "updated_at": {\r
-          "type": "datetime"\r
         }\r
       },\r
-      "select": {\r
-        "method": "list",\r
-        "caption": {\r
-          "type": "column",\r
-          "name": "name"\r
-        }\r
-      }\r
-    },\r
-    "SystemPicture": "system_picture",\r
-    "system_picture": {\r
-      "class_name": "SystemPicture",\r
-      "table_name": "system_pictures",\r
-      "associations": {\r
-        "belongs_to": {},\r
-        "has_many": {},\r
-        "has_one": {}\r
+      "CircleSpeechBalloon": "circle_speech_balloon",\r
+      "circle_speech_balloon": {\r
+        "base": "speech_balloon",\r
+        "attributes": {},\r
+        "fields": [\r
+          "speech_balloon.caption",\r
+          "balloon.r",\r
+          "balloon.x",\r
+          "balloon.y",\r
+          "balloon.width",\r
+          "balloon.height",\r
+          "balloon.id",\r
+          "balloon.speech_balloon_id",\r
+          "balloon.system_picture_id",\r
+          "balloon.settings",\r
+          "speech.writing_format_id",\r
+          "speech.font_size",\r
+          "speech.text_align",\r
+          "speech.quotes",\r
+          "speech.content",\r
+          "speech.fore_color",\r
+          "speech.id",\r
+          "speech.speech_balloon_id",\r
+          "speech.x",\r
+          "speech.y",\r
+          "speech.width",\r
+          "speech.height",\r
+          "speech.settings",\r
+          "speech_balloon.id",\r
+          "speech_balloon.panel_id",\r
+          "speech_balloon.speech_balloon_template_id",\r
+          "speech_balloon.classname",\r
+          "speech_balloon.z",\r
+          "speech_balloon.t",\r
+          "speech_balloon.settings"\r
+        ]\r
       },\r
-      "attributes": {\r
-        "id": {\r
-          "type": "number",\r
-          "primary_key": 1,\r
-          "rules": {\r
-            "number": true\r
-          }\r
-        },\r
-        "ext": {\r
-          "type": "text",\r
-          "rules": {\r
-            "required": true\r
-          }\r
-        },\r
-        "width": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true\r
+      "PlainSpeechBalloon": "plain_speech_balloon",\r
+      "plain_speech_balloon": {\r
+        "base": "speech_balloon",\r
+        "attributes": {\r
+          "balloon.r": {\r
+            "model": "balloon",\r
+            "part": "balloon",\r
+            "column": "r",\r
+            "type": "hidden",\r
+            "label": {\r
+              "type": "hidden"\r
+            },\r
+            "options": {}\r
           }\r
         },\r
-        "height": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true\r
+        "fields": [\r
+          "speech_balloon.caption",\r
+          "balloon.r",\r
+          "balloon.x",\r
+          "balloon.y",\r
+          "balloon.width",\r
+          "balloon.height",\r
+          "balloon.id",\r
+          "balloon.speech_balloon_id",\r
+          "balloon.system_picture_id",\r
+          "balloon.settings",\r
+          "speech.writing_format_id",\r
+          "speech.font_size",\r
+          "speech.text_align",\r
+          "speech.quotes",\r
+          "speech.content",\r
+          "speech.fore_color",\r
+          "speech.id",\r
+          "speech.speech_balloon_id",\r
+          "speech.x",\r
+          "speech.y",\r
+          "speech.width",\r
+          "speech.height",\r
+          "speech.settings",\r
+          "speech_balloon.id",\r
+          "speech_balloon.panel_id",\r
+          "speech_balloon.speech_balloon_template_id",\r
+          "speech_balloon.classname",\r
+          "speech_balloon.z",\r
+          "speech_balloon.t",\r
+          "speech_balloon.settings"\r
+        ]\r
+      },\r
+      "SquareSpeechBalloon": "square_speech_balloon",\r
+      "square_speech_balloon": {\r
+        "base": "speech_balloon",\r
+        "attributes": {\r
+          "balloon.r": {\r
+            "model": "balloon",\r
+            "part": "balloon",\r
+            "column": "r",\r
+            "type": "hidden",\r
+            "label": {\r
+              "type": "hidden"\r
+            },\r
+            "options": {}\r
           }\r
         },\r
-        "filesize": {\r
-          "type": "number",\r
-          "rules": {\r
-            "required": true,\r
-            "number": true\r
+        "fields": [\r
+          "speech_balloon.caption",\r
+          "balloon.r",\r
+          "balloon.x",\r
+          "balloon.y",\r
+          "balloon.width",\r
+          "balloon.height",\r
+          "balloon.id",\r
+          "balloon.speech_balloon_id",\r
+          "balloon.system_picture_id",\r
+          "balloon.settings",\r
+          "speech.writing_format_id",\r
+          "speech.font_size",\r
+          "speech.text_align",\r
+          "speech.quotes",\r
+          "speech.content",\r
+          "speech.fore_color",\r
+          "speech.id",\r
+          "speech.speech_balloon_id",\r
+          "speech.x",\r
+          "speech.y",\r
+          "speech.width",\r
+          "speech.height",\r
+          "speech.settings",\r
+          "speech_balloon.id",\r
+          "speech_balloon.panel_id",\r
+          "speech_balloon.speech_balloon_template_id",\r
+          "speech_balloon.classname",\r
+          "speech_balloon.z",\r
+          "speech_balloon.t",\r
+          "speech_balloon.settings"\r
+        ]\r
+      },\r
+      "GroundPicture": "ground_picture",\r
+      "ground_picture": {\r
+        "attributes": {\r
+          "id": {\r
+            "column": "id",\r
+            "type": "hidden",\r
+            "label": {\r
+              "type": "hidden"\r
+            },\r
+            "options": {}\r
+          },\r
+          "panel_id": {\r
+            "column": "panel_id",\r
+            "type": "hidden",\r
+            "label": {\r
+              "type": "hidden"\r
+            },\r
+            "options": {}\r
+          },\r
+          "picture_id": {\r
+            "column": "picture_id",\r
+            "type": "hidden",\r
+            "label": {\r
+              "type": "hidden"\r
+            },\r
+            "options": {}\r
+          },\r
+          "caption": {\r
+            "column": "caption",\r
+            "type": "text",\r
+            "label": {},\r
+            "options": {\r
+              "row_break": true\r
+            }\r
+          },\r
+          "repeat": {\r
+            "column": "repeat",\r
+            "type": "select",\r
+            "label": {},\r
+            "options": {\r
+              "source": "magic_number",\r
+              "key": "ground_picture_repeat_items",\r
+              "row_break": true\r
+            }\r
+          },\r
+          "x": {\r
+            "column": "x",\r
+            "type": "number",\r
+            "label": {},\r
+            "options": {\r
+              "size": 5\r
+            }\r
+          },\r
+          "y": {\r
+            "column": "y",\r
+            "type": "number",\r
+            "label": {},\r
+            "options": {\r
+              "size": 5,\r
+              "row_break": true\r
+            }\r
+          },\r
+          "z": {\r
+            "column": "z",\r
+            "type": "hidden",\r
+            "label": {\r
+              "type": "hidden"\r
+            },\r
+            "options": {}\r
+          },\r
+          "t": {\r
+            "column": "t",\r
+            "type": "hidden",\r
+            "label": {\r
+              "type": "hidden"\r
+            },\r
+            "options": {}\r
           }\r
         },\r
-        "md5": {\r
-          "type": "text",\r
-          "rules": {\r
-            "required": true\r
+        "fields": [\r
+          "caption",\r
+          "repeat",\r
+          "x",\r
+          "y",\r
+          "z",\r
+          "t",\r
+          "id",\r
+          "panel_id",\r
+          "picture_id"\r
+        ]\r
+      },\r
+      "GroundColor": "ground_color",\r
+      "ground_color": {\r
+        "attributes": {\r
+          "id": {\r
+            "column": "id",\r
+            "type": "hidden",\r
+            "label": {\r
+              "type": "hidden"\r
+            },\r
+            "options": {}\r
+          },\r
+          "panel_id": {\r
+            "column": "panel_id",\r
+            "type": "hidden",\r
+            "label": {\r
+              "type": "hidden"\r
+            },\r
+            "options": {}\r
+          },\r
+          "caption": {\r
+            "column": "caption",\r
+            "type": "text",\r
+            "label": {},\r
+            "options": {\r
+              "row_break": true\r
+            }\r
+          },\r
+          "code": {\r
+            "column": "code",\r
+            "type": "hidden",\r
+            "label": {\r
+              "row_break": true\r
+            },\r
+            "options": {\r
+              "row_break": true\r
+            },\r
+            "helpers": {\r
+              "color": {\r
+                "path": "panels/color_helper",\r
+                "options": {},\r
+                "wrapper": "ground_color-code-wrap"\r
+              }\r
+            }\r
+          },\r
+          "orientation": {\r
+            "column": "orientation",\r
+            "type": "select",\r
+            "label": {},\r
+            "options": {\r
+              "source": "magic_number",\r
+              "key": "ground_color_orientation_items",\r
+              "row_break": true\r
+            }\r
+          },\r
+          "xy": {\r
+            "column": "xy",\r
+            "type": "number",\r
+            "label": {},\r
+            "options": {\r
+              "size": 5\r
+            }\r
+          },\r
+          "wh": {\r
+            "column": "wh",\r
+            "type": "number",\r
+            "label": {},\r
+            "options": {\r
+              "size": 5,\r
+              "row_break": true\r
+            }\r
+          },\r
+          "z": {\r
+            "column": "z",\r
+            "type": "hidden",\r
+            "label": {\r
+              "type": "hidden"\r
+            },\r
+            "options": {}\r
+          },\r
+          "t": {\r
+            "column": "t",\r
+            "type": "hidden",\r
+            "label": {\r
+              "type": "hidden"\r
+            },\r
+            "options": {}\r
           }\r
         },\r
-        "created_at": {\r
-          "type": "datetime"\r
-        },\r
-        "updated_at": {\r
-          "type": "datetime"\r
-        }\r
+        "fields": [\r
+          "id",\r
+          "panel_id",\r
+          "caption",\r
+          "code",\r
+          "orientation",\r
+          "xy",\r
+          "wh",\r
+          "z",\r
+          "t"\r
+        ]\r
       }\r
     }\r
   }\r