OSDN Git Service

temp
authoryasushiito <yas@pen-chan.jp>
Wed, 4 Dec 2013 10:37:21 +0000 (19:37 +0900)
committeryasushiito <yas@pen-chan.jp>
Wed, 4 Dec 2013 10:37:21 +0000 (19:37 +0900)
12 files changed:
app/assets/javascripts/configurations.js.coffee.erb
app/controllers/comics_controller.rb
config/application.rb
lib/content.rb
lib/manifest.rb
lib/manifest/filer.rb
lib/manifest/form.rb [new file with mode: 0644]
lib/manifest/list.rb
lib/manifest/manifest.rb
lib/manifest/model.rb [new file with mode: 0644]
lib/manifest/profiler.rb
public/manifest.json [moved from public/cross.json with 50% similarity]

index 7ab40ed..dc15ed0 100644 (file)
@@ -1,3 +1,4 @@
+#マニフェスト\r
 @configurations = {\r
   controllers: {\r
     scroll: {\r
     system_picture: {\r
     },\r
   },\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
+  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
+  magic_numbers: {\r
+    run_mode: 1, \r
+    thumbnail_width: 64, \r
+    thumbnail_height: 64, \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
+    provider_sources: [\r
+      'http://sourceforge.jp/projects/pettanr/wiki/ProviderSource/attach/provider_source.json'\r
+    ]\r
+  },\r
   locals: {\r
     profilers: {\r
       scroll: {\r
index 56adc48..aa826f0 100644 (file)
@@ -11,8 +11,9 @@ class ComicsController < ApplicationController
   before_filter :authenticate_admin!, :only => [:list, :browse]
 
   @@model = Comic
-  @@filer_manager = Pettanr::FilerManager.new @@model.item_name, Pettanr.manifest
-  @@profiler_manager = Pettanr::ProfilerManager.new @@model.item_name, Pettanr.manifest
+  @@list_manager = Pettanr.manifest.list_managers[@@model.item_name]
+  @@filer_manager = Pettanr.manifest.list_managers[@@model.item_name]
+  @@profiler_manager = Pettanr.manifest.list_managers[@@model.item_name]
   def index
     set_filer
     @list = @@list_manager.open('public', @page, @page_size, @operators)
index 39f4d58..4b9d94c 100644 (file)
@@ -15,6 +15,7 @@ if defined?(Bundler)
   # If you want your assets lazily compiled in production, use this line
   # Bundler.require(:default, :assets, Rails.env)
 end
+require "manifest"
 
 module Pettanr
   VERSION = '0.6.2'
@@ -89,7 +90,7 @@ config.assets.initialize_on_precompile = false
     end
     
     def self.manifest=(arg)
-      @@manifest = Manifest.new arg
+      @@manifest = Pettanr::Manifest.new arg
     end
     
     def self.manifest
index 9f34832..fe4966e 100644 (file)
@@ -44,8 +44,8 @@ class Pettanr::Content < Pettanr::Item
       self.himlist_where(anyone)
     end
     Kaminari.paginate_array(
-      Array.new(self.where(where_str)
-    ).includes(self.list_opt).count, nil)).page(page).per(page_size)
+      Array.new(self.where(where_str).includes(self.list_opt).count, nil)
+    ).page(page).per(page_size)
   end
   
   def self.edit content_id, operators
index 56c02e2..5bbcc37 100644 (file)
@@ -1,485 +1,7 @@
-
-module Pettanr
-  class Manifest
-    class ModelConf
-      def initialize manifest
-        @conf = conf || {}
-      end
-      
-      def type
-        @conf['type'] || 'default'
-      end
-      
-      def name
-        @conf['name'] || 'edit_template'
-      end
-      
-    end
-    
-    def initialize manifest
-      @manifest = manifest || {}
-    end
-    
-    def models
-    end
-    
-    def profiles
-    end
-    
-  end
-  
-  manifest = Manifest.new JSON.parse(
-    open(Rails.root + 'public/manifest.json').read
-  )
-  
-  module Cross
-    class ModelConf
-      def initialize manifest
-        @conf = conf || {}
-      end
-      
-      def type
-        @conf['type'] || 'default'
-      end
-      
-      def name
-        @conf['name'] || 'edit_template'
-      end
-      
-    end
-    
-    class Profiler
-      class Item
-        def initialize item, attribute_name, attribute_conf
-          @attribute_conf = attribute_conf || {}
-        end
-        
-        def label
-          label = item.class.human_attribute_name(field_name)
-        end
-        
-        def value
-          case field_conf['type']
-          when 'datetime'
-            if item.attributes[field_name]
-              l item.attributes[field_name]
-            else
-              item.attributes[field_name]
-            end
-          else
-            item.attributes[field_name]
-          end
-        end
-        
-        def note
-          if field_conf['source']
-            case field_conf['source']['type']
-            when 'magic_number'
-              t_selected_item(field_conf['source']['key'], item.attributes[field_name])
-            when 'model'
-            else
-            end
-          end
-        end
-        
-      end
-      
-      def initialize item, roles, cross
-        item_name = item.class.to_s.underscore
-        profiler_conf = ProfilerConf.new cross['profiles'][item_name]
-        edit_conf = EditConf.new conf['edit']
-      end
-      
-      def header
-        ender 'system/filer.html', :items => [item], :model => item.class, :roles => roles, :pager => nil 
-      end
-      
-      def each_column
-        profiler_conf['fields'].each do |field_name|
-          yield label, value, note
-        end
-      end
-      
-      def each_belongs_to
-        profiler_conf['fields'].each do |field_name|
-          yield label, value, note
-        end
-      end
-      
-      def each_has_many
-        profiler_conf['fields'].each do |field_name|
-          yield label, value, note
-        end
-      end
-      
-      def each_has_one
-        profiler_conf['fields'].each do |field_name|
-          yield label, value, note
-        end
-      end
-      
-    end
-    
-    class Filer
-      class EditConf
-        def initialize conf
-          @conf = conf || {}
-        end
-        
-        def type
-          @conf['type'] || 'default'
-        end
-        
-        def name
-          @conf['name'] || 'edit_template'
-        end
-        
-      end
-      
-      class Symbol 
-        def initialize symbol_conf
-          @symbol_conf = symbol_conf || {}
-          @link_conf = @symbol_conf['link'] || {'type' => 'action', 'name' => 'show'}
-          @type_conf = @symbol_conf['type'] || 'image'
-          @link_method = self.link_method
-          @tag_method = self.tag_method
-        end
-        
-        def link_method
-          case @link_conf['type']
-          when 'action'
-            case @link_conf['name']
-            when 'show'
-              :link_action_show
-            else
-              :link_action_else
-            end
-          when 'none'
-            :link_none
-          when 'url_column'
-            :link_url_column
-          else
-            :link_else
-          end
-        end
-        
-        def tag_method
-          tag = case @type_conf
-          when 'image'
-            :tag_image
-          when 'picture'
-            :tag_picture
-          when 'template'
-            :tag_template
-          else
-            :tag_else
-          end
-        end
-        
-        def link_action_show view, item
-          view.polymorphic_path(item)
-        end
-        
-        def link_action_else view, item
-          view.polymorphic_path(item, :action => @link_conf['name'])
-        end
-        
-        def link_none view, item
-          ''
-        end
-        
-        def link_url_column view, item
-          item.__send__(@link_conf['name']).to_s
-        end
-        
-        def link_else view, item
-          ''
-        end
-        
-        def tag_image view, item
-          view.tag(:img, :src => @symbol_conf['name'], :width => 64, :height => 64)
-        end
-        
-        def tag_picture view, item
-          view.tag(:img, item.__send__(@symbol_conf['name']))
-        end
-        
-        def tag_template view, item
-          view.render item.path_name + '/' + @symbol_conf['name'], :item => item
-          nil
-        end
-        
-        def tag_else view, item
-          'no.png'
-        end
-        
-        def render view, item
-          link = self.__send__(@link_method, view, item)
-          tag = self.__send__(@tag_method, view, item)
-          unless tag.blank?
-            link_to_unless link.blank?, tag, link
-          end
-        end
-        
-        
-      end
-      
-      class Caption
-        def initialize caption_conf
-          @caption_conf = caption_conf || {}
-          @link_conf = @symbol_conf['link'] || {'type' => 'action', 'name' => 'show'}
-          @type_conf = @symbol_conf['type'] || 'column'
-          @link_method = self.link_method
-          @tag_method = self.tag_method
-        end
-        
-        def link_method
-          case @link_conf['type']
-          when 'action'
-            case @link_conf['name']
-            when 'show'
-              :link_action_show
-            else
-              :link_action_else
-            end
-          when 'none'
-            :link_none
-          when 'url_column'
-            :link_url_column
-          else
-            :link_else
-          end
-        end
-        
-        def tag_method
-          tag = case @type_conf
-          when 'column'
-            :tag_column
-          when 'method'
-            :tag_method
-          else
-            :tag_else
-          end
-        end
-        
-        def link_action_show view, item
-          view.polymorphic_path(item)
-        end
-        
-        def link_action_else view, item
-          view.polymorphic_path(item, :action => @link_conf['name'])
-        end
-        
-        def link_none view, item
-          ''
-        end
-        
-        def link_url_column view, item
-          item.__send__(@link_conf['name']).to_s
-        end
-        
-        def link_else view, item
-          ''
-        end
-        
-        def tag_column view, item
-          item.attributes[caption['name']]
-        end
-        
-        def tag_method view, item
-          item.__send__(caption['name']).to_s
-        end
-        
-        def tag_else view, item
-          'no caption'
-        end
-        
-        def render view, item
-          unless caption_type == 'none'
-            link = self.__send__(@link_method, view, item)
-            tag = self.__send__(@tag_method, view, item)
-            tag = 'no caption' if tag.blank? 
-            unless tag.blank?
-              link_to_unless link.blank?, tag, link
-            end
-          end
-        end
-        
-      end
-      
-      class Summary
-        def initialize summary_conf
-          @summary_conf = summary_conf || {}
-          @type_conf = @summary_conf['type'] || 'none'
-          @type_method = self.type_method
-        end
-        
-        def type_method
-          case @type_conf
-          when 'none'
-            :type_none
-          when 'template'
-            :type_template
-          else
-            :type_none
-          end
-        end
-        
-        def type_none view, item
-          ''
-        end
-        
-        def type_template view, item
-          view.render item.path_name + '/' + @summary_conf['name'], :item => item
-        end
-        
-        def render view, item
-          self.__send__(@type_method, view, item)
-        end
-        
-      end
-      
-      class Icon
-        def initialize icon_conf
-          @icon_conf = icon_conf || {}
-        end
-        
-        def render view, item
-          view.link_to view.icon_tag(item.class.to_s, :object => item, :size => 64), 
-            view.polymorphic_path(item, :format => :prof)
-        end
-        
-      end
-      
-      class Date
-        def initialize date_conf
-          @date_conf = date_conf || {}
-        
-        def render view, item
-          view.distance_of_time_in_words_to_now item.updated_at
-        end
-        
-      end
-      
-      class Edit
-        def initialize edit_conf
-          @edit_conf = edit_conf || {}
-          @type_conf = @edit_conf['type'] || 'default'
-          @type_method = self.type_method
-        end
-        
-        def type_method
-          case @type_conf
-          when 'default'
-            :type_default
-          when 'account'
-            :type_account
-          when 'template'
-            :type_template
-          when 'none'
-            :type_none
-          else
-            :type_none
-          end
-        end
-        
-        def type_default view, item
-          if item.own? roles
-            view.link_to tag(:img, :src => view.asset_path('edit.png'), :width => 32, :height => 32), 
-              view.polymorphic_path(item, :action => :edit)
-            view.link_to tag(:img, :src => view.asset_path('remove.png'), :width => 32, :height => 32), 
-              item, confirm: 'Are you sure?', :method => :delete
-          end
-        end
-        
-        def type_account view, item
-          if item.own? roles
-            view.link_to tag(:img, :src => view.asset_path('edit.png'), :width => 32, :height => 32), 
-              '/home/configure'
-          end
-        end
-        
-        def type_template view, item
-          view.render item.path_name + '/' + @edit_conf['name'], :item => item
-        end
-        
-        def type_none view, item
-          ''
-        end
-        
-        def render view, item
-          self.__send__(@type_method, view, item)
-        end
-        
-      end
-      
-      class FileItem
-        def initialize item, symbol, caption, summary, icon, date, edit
-          edit_conf = EditConf.new conf['edit']
-          @item = item
-          @symbol = symbol
-          @caption = caption
-          @summary = summary
-          @icon = icon
-          @date = date
-          @edit = edit
-        end
-        
-        def symbol view
-          @symbol.render view, item
-        end
-        
-        def caption view
-          @caption.render view, item
-        end
-        
-        def summary view
-          @summary.render view, item
-        end
-        
-        def icon view
-          @icon.render view, item
-        end
-        
-        def date view
-          @date.render view, item
-        end
-        
-        def edit view
-          @edit.render view, item
-        end
-      
-      end
-      
-      def initialize model, cross
-        @model = model
-        @filer_conf = cross['filers'][@model.item_name] || {}
-        @symbol = Symbol.new @filer_conf['symbol']
-        @caption = Caption.new @filer_conf['caption']
-        @summary = Summary.new @filer_conf['summary']
-        @icon = Icon.new @filer_conf['icon']
-        @date = Date.new @filer_conf['date']
-        @edit = Edit.new @filer_conf['edit']
-      end
-      
-      def list page, page_size
-        @page = @model.page_number params[:page]
-        @page_size = @model.page_size params[:page_size]
-        list_method = 'list' || configurations['models'][@model.to_s.underscore]['select']['method']
-        @items = @model.__send__(list_method, @page, @page_size).map {|item| 
-          FileItem.new item, @symbol, @caption, @summary, @icon, @date, @edit
-        }
-      end
-      
-      def symbol_action_show item, view
-        view.polymorphic_path(item)
-      end
-      
-      def symbol_action_name item, view
-        view.polymorphic_path(item, :action => link['name'])
-      end
-      
-    end
-  end
-end
+require "manifest/manifest"
+require "manifest/model"
+require "manifest/list"
+require "manifest/profiler"
+require "manifest/filer"
+require "manifest/form"
 
index 71d43c7..6417fea 100644 (file)
@@ -6,11 +6,11 @@ module Pettanr
         @symbol_conf = symbol_conf || {}
         @link_conf = @symbol_conf['link'] || {'type' => 'action', 'name' => 'show'}
         @type_conf = @symbol_conf['type'] || 'image'
-        @link_method = self.link_method
-        @tag_method = self.tag_method
+        @link_method_name = self.link_method_name
+        @tag_method_name = self.tag_method_name
       end
       
-      def link_method
+      def link_method_name
         case @link_conf['type']
         when 'action'
           case @link_conf['name']
@@ -28,7 +28,7 @@ module Pettanr
         end
       end
       
-      def tag_method
+      def tag_method_name
         tag = case @type_conf
         when 'image'
           :tag_image
@@ -79,8 +79,8 @@ module Pettanr
       end
       
       def render view, item, operators
-        link = self.__send__(@link_method, view, item)
-        tag = self.__send__(@tag_method, view, item)
+        link = self.__send__(@link_method_name, view, item, operators)
+        tag = self.__send__(@tag_method_name, view, item, operators)
         unless tag.blank?
           link_to_unless link.blank?, tag, link
         end
@@ -92,13 +92,13 @@ module Pettanr
     class Caption
       def initialize caption_conf
         @caption_conf = caption_conf || {}
-        @link_conf = @symbol_conf['link'] || {'type' => 'action', 'name' => 'show'}
-        @type_conf = @symbol_conf['type'] || 'column'
-        @link_method = self.link_method
-        @tag_method = self.tag_method
+        @link_conf = @caption_conf['link'] || {'type' => 'action', 'name' => 'show'}
+        @type_conf = @caption_conf['type'] || 'column'
+        @link_method_name = self.link_method_name
+        @tag_method_name = self.tag_method_name
       end
       
-      def link_method
+      def link_method_name
         case @link_conf['type']
         when 'action'
           case @link_conf['name']
@@ -116,7 +116,7 @@ module Pettanr
         end
       end
       
-      def tag_method
+      def tag_method_name
         tag = case @type_conf
         when 'column'
           :tag_column
@@ -161,8 +161,8 @@ module Pettanr
       
       def render view, item, operators
         unless caption_type == 'none'
-          link = self.__send__(@link_method, view, item)
-          tag = self.__send__(@tag_method, view, item)
+          link = self.__send__(@link_method_name, view, item, operators)
+          tag = self.__send__(@tag_method_name, view, item, operators)
           tag = 'no caption' if tag.blank? 
           unless tag.blank?
             link_to_unless link.blank?, tag, link
@@ -330,16 +330,17 @@ module Pettanr
       end
     end
     
-    def initialize model, manifest
-      @model = model
-      @manifest = manifest
-      @filer_manifest = manifest.filers(@model.item_name)
-      @symbol = Symbol.new @filer_manifest.symbol.conf
-      @caption = Caption.new @filer_manifest.caption.conf
-      @summary = Summary.new @filer_manifest.summary.conf
-      @icon = Icon.new @filer_manifest.icon.conf
-      @date = Date.new @filer_manifest.date.conf
-      @edit = Edit.new @filer_manifest.edit.conf
+    def initialize filer_manifest
+      @filer_manifest = filer_manifest
+      @item_name = @filer_manifest.item_name
+      @manifest = @filer_manifest.manifest
+      @filer_conf = @filer_manifest.conf
+      @symbol = Symbol.new @filer_manifest.symbol
+      @caption = Caption.new @filer_manifest.caption
+      @summary = Summary.new @filer_manifest.summary
+      @icon = Icon.new @filer_manifest.icon
+      @date = Date.new @filer_manifest.date
+      @edit = Edit.new @filer_manifest.edit
     end
     
     def open items, operators
diff --git a/lib/manifest/form.rb b/lib/manifest/form.rb
new file mode 100644 (file)
index 0000000..b143911
--- /dev/null
@@ -0,0 +1,16 @@
+
+module Pettanr
+  class FormManager
+    def initialize form_manifest
+      @form_manifest = form_manifest
+      @item_name = @form_manifest.item_name
+      @manifest = @form_manifest.manifest
+      @form_conf = @form_manifest.conf
+    end
+    
+    def open list_name, page, page_size, operators
+    end
+    
+  end
+end
+
index 886c975..41cf269 100644 (file)
@@ -98,15 +98,15 @@ module Pettanr
     end
     
     @@types = {'public' => PublicList, 'private' => PrivateList, 'has_many' => HasManyList, 'filter' => FilterList}
-    def initialize item_name, manifest
-      @item_name = item_namel
-      @manifest = manifest
-      @list_manifest = manifest.lists(@model.item_name)
+    def initialize list_manifest
+      @list_manifest = list_manifest
+      @item_name = @list_manifest.item_name
+      @manifest = @list_manifest.manifest
       @list_conf = @list_manifest.conf
       @lists = {}
       @list_conf.each {|list_name, conf|
         type = conf['type']
-        @lists[list_name] = @@types[type].new(list_name, conf, manifest) 
+        @lists[list_name] = @@types[type]
       }
     end
     
index c5f247d..b15e428 100644 (file)
@@ -2,7 +2,7 @@
 module Pettanr
   class Manifest
     class Model
-      attr :conf, :attributes, :associations
+      attr :item_name, :conf, :manifest, :attributes, :associations
       def initialize item_name, conf, manifest
         @item_name = item_name
         @conf = conf || {}
@@ -20,7 +20,7 @@ module Pettanr
     end
     
     class List
-      attr :conf
+      attr :item_name, :conf, :manifest
       def initialize item_name, conf, manifest
         @item_name = item_name
         @conf = conf || {}
@@ -29,8 +29,48 @@ module Pettanr
       
     end
     
+    class License
+      attr :conf
+      def initialize manifest
+        @manifest = manifest
+        @conf = @manifest['licenses'] || {}
+      end
+    end
+    
+    class Element
+      attr :conf
+      def initialize manifest
+        @manifest = manifest
+        @conf = @manifest['elements'] || {}
+      end
+    end
+    
+    class SpeechBalloonTemplate
+      attr :conf
+      def initialize manifest
+        @manifest = manifest
+        @conf = @manifest['speech_balloon_templates'] || {}
+      end
+    end
+    
+    class WritingFormat
+      attr :conf
+      def initialize manifest
+        @manifest = manifest
+        @conf = @manifest['writing_formats'] || {}
+      end
+    end
+    
+    class Profile
+      attr :conf
+      def initialize manifest
+        @manifest = manifest
+        @conf = @manifest['profile'] || {}
+      end
+    end
+    
     class Profiler
-      attr :conf, :columns, :belongs_to, :has_many, :has_one
+      attr :item_name, :conf, :manifest, :columns, :belongs_to, :has_many, :has_one
       def initialize item_name, conf, manifest
         @item_name = item_name
         @conf = conf || {}
@@ -45,7 +85,7 @@ module Pettanr
     end
     
     class Filer
-      attr :conf, :icon, :symbol, :caption, :summary, :date, :edit
+      attr :item_name, :conf, :manifest, :icon, :symbol, :caption, :summary, :date, :edit
       def initialize item_name, conf, manifest
         @item_name = item_name
         @conf = conf || {}
@@ -61,7 +101,7 @@ module Pettanr
     end
     
     class Form
-      attr :conf, :icon, :symbol, :caption, :summary, :date, :edit
+      attr :item_name, :conf, :manifest, :icon, :symbol, :caption, :summary, :date, :edit
       def initialize item_name, conf, manifest
         @item_name = item_name
         @conf = conf || {}
@@ -70,27 +110,45 @@ module Pettanr
       
     end
     
+    attr :licenses, :elements, :speech_balloon_templates, :writing_formats, :profile,
+      :model_managers, :list_managers, :profiler_managers, :filer_managers, :form_managers
     def initialize manifest
       @manifest = manifest || {}
       @models = {}
       @lists = {}
+      @licenses = License.new(manifest) 
+      @elements = Element.new(manifest)
+      @speech_balloon_templates = SpeechBalloonTemplate.new(manifest)
+      @writing_formats = WritingFormat.new(manifest)
+      @profile = Profile.new(manifest)
       @profilers = {}
       @filers = {}
       @forms = {}
-      manifest['models'].each {|item_name, model_conf|
+      @model_managers = {}
+      @list_managers = {}
+      @profiler_managers = {}
+      @filer_managers = {}
+      @form_managers = {}
+      (@manifest['models'] || {}).each {|item_name, model_conf|
         @models[item_name] = Model.new(item_name, model_conf, manifest) 
+        @model_managers[item_name] = Pettanr::ModelManager.new @models[item_name]
       }
-      manifest['lists'].each {|item_name, list_manifest|
-        @lists[item_name] = List.new(item_name, list_manifest) 
+      (@manifest['lists'] || {}).each {|item_name, list_conf|
+        @lists[item_name] = List.new(item_name, list_conf, manifest) 
+        @list_managers[item_name] = Pettanr::ListManager.new @lists[item_name]
       }
-      manifest['locals']['profilers'].each {|item_name, profiler_manifest|
-        @profilers[item_name] = Profiler.new item_name, profiler_manifest
+      @locals = @manifest['locals'] || {}
+      (@locals['profilers'] || {}).each {|item_name, profiler_conf|
+        @profilers[item_name] = Profiler.new item_name, profiler_conf, manifest
+        @profiler_managers[item_name] = Pettanr::ProfilerManager.new @profilers[item_name]
       }
-      manifest['locals']['filers'].each {|item_name, filer_manifest|
-        @filers[item_name] = Filer.new item_name, filer_manifest
+      (@locals['filers'] || {}).each {|item_name, filer_conf|
+        @filers[item_name] = Filer.new item_name, filer_conf, manifest
+        @filer_managers[item_name] = Pettanr::FilerManager.new @filers[item_name]
       }
-      manifest['locals']['forms'].each {|item_name, form_manifest|
-        @forms[item_name] = Form.new item_name, form_manifest
+      (@locals['forms'] || {}).each {|item_name, form_conf|
+        @forms[item_name] = Form.new item_name, form_conf, manifest
+        @form_managers[item_name] = Pettanr::FormManager.new @forms[item_name]
       }
     end
     
diff --git a/lib/manifest/model.rb b/lib/manifest/model.rb
new file mode 100644 (file)
index 0000000..c3dbf20
--- /dev/null
@@ -0,0 +1,16 @@
+
+module Pettanr
+  class ModelManager
+    def initialize model_manifest
+      @model_manifest = model_manifest
+      @item_name = @model_manifest.item_name
+      @manifest = @model_manifest.manifest
+      @model_conf = @model_manifest.conf
+    end
+    
+    def open list_name, page, page_size, operators
+    end
+    
+  end
+end
+
index 261c7bf..b17e05f 100644 (file)
@@ -110,13 +110,15 @@ module Pettanr
       
     end
     
-    def initialize item_name, manifest
-      @item_name = item.class.to_s.underscore
-      @profiler_conf = ProfilerConf.new manifest['profiles'][item_name]
+    def initialize profiler_manifest
+      @profiler_manifest = profiler_manifest
+      @item_name = @profiler_manifest.item_name
+      @manifest = profiler_manifest.manifest
+      @profiler_conf = @profiler_manifest.conf
       @associations_conf = @profiler_conf['associations'] || {}
-      @belongs_to = BelongsTo.new @associations_conf['belongs_to']
-      @bhas_many = HasMany.new @associations_conf['has_many']
-      @has_one = HasOne.new @associations_conf['has_one']
+      @belongs_to = BelongsTo.new @profiler_manifest.belongs_to
+      @bhas_many = HasMany.new @profiler_manifest.has_many
+      @has_one = HasOne.new @profiler_manifest.has_one
     end
     
     def open
@@ -128,7 +130,7 @@ module Pettanr
         render 'system/filer.html', :items => [parent], :model => parent.class, :operators => operators, :pager => nil
       end
       @has_many.each(item, operators) do |items, child_model|
-        child_model.filer.list operators, , 1, 3, items
+        #child_model.filer.list operators, , 1, 3, items
         render 'system/filer.html', :items => items, :model => child_model, :operators => operators, :pager => nil
       end
       @has_one.each(item, operators) do |items, child_model|
similarity index 50%
rename from public/cross.json
rename to public/manifest.json
index d636595..12e91e3 100644 (file)
@@ -1,4 +1,14 @@
 {\r
+    "controllers": {\r
+        "scroll": {\r
+            "item_name": "scroll",\r
+            "index": {\r
+                "list": {\r
+                    "list_name": "public"\r
+                }\r
+            }\r
+        }\r
+    },\r
     "models": {\r
         "Scroll": "scroll",\r
         "scroll": {\r
                 "has_many": {\r
                     "scroll_panels": {\r
                         "foreign_key": "scroll_id",\r
-                        "list_method": "list_by_scroll"\r
+                        "model": "scroll_panel"\r
                     },\r
                     "panels": {\r
-                        "through": "scroll_panels",\r
+                        "through": "scroll_panel",\r
                         "foreign_key": "scroll_id",\r
-                        "list_method": "list_by_scroll"\r
+                        "model": "panel"\r
                     }\r
                 }\r
             },\r
@@ -66,7 +76,9 @@
                 }\r
             },\r
             "select": {\r
-                "method": "list",\r
+                "list": {\r
+                    "name": "public"\r
+                },\r
                 "caption": {\r
                     "type": "column",\r
                     "name": "title"\r
                 "updated_at": {\r
                     "type": "datetime"\r
                 }\r
+            },\r
+            "list": {\r
+                "public": {\r
+                    "method": "list"\r
+                },\r
+                "by_panel": {\r
+                    "method": "list_by_panel"\r
+                },\r
+                "by_scroll": {\r
+                    "method": "list_by_scroll"\r
+                }\r
             }\r
         },\r
         "Comic": "comic",\r
             }\r
         }\r
     },\r
-    "profiles": {\r
+    "lists": {\r
         "scroll": {\r
-            "fields": [\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",\r
-                    "panels"\r
-                ]\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_panel": {\r
+                "type": "filter",\r
+                "filter_key": "scroll_id",\r
+                "list": {\r
+                    "method": "filtered_list"\r
+                }\r
             }\r
         },\r
-        "scroll_panel": {\r
-            "fields": [\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
+        "scroll_panel": {},\r
+        "comic": {},\r
+        "story": {},\r
+        "story_sheet": {},\r
+        "sheet": {},\r
+        "sheet_panel": {},\r
+        "panel": {},\r
+        "panel_picture": {},\r
+        "speech_balloon": {},\r
+        "speech": {},\r
+        "balloon": {},\r
+        "ground_picture": {},\r
+        "ground_color": {},\r
+        "original_picture": {},\r
+        "picture": {},\r
+        "resource_picture": {},\r
+        "speech_balloon_template": {},\r
+        "writing_format": {},\r
+        "license_group": {},\r
+        "license": {},\r
+        "author": {},\r
+        "artist": {},\r
+        "system_picture": {}\r
+    },\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
+    "profile": {\r
+        "users": {\r
+            "caption": "\83y\83\93\83M\83\93\89¤\8d\91",\r
+            "url": "http://localhost:3001/",\r
+            "description": "\83y\83\93\83M\83\93\89¤\8d\91\82Í\83y\83\93\83M\83\93\91f\8dÞ\82ð\96L\95x\82É\97p\88Ó\82µ\82½\83y\83\93\83M\83\93\83}\83j\83A\82Ì\83T\83C\83g\82Å\82·\81B"\r
         },\r
-        "comic": {\r
-            "fields": [\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"\r
-                ]\r
-            }\r
+        "admins": {\r
+            "caption": "site name for admin",\r
+            "url": "http://your.site.url/admins/",\r
+            "description": "admin register"\r
         },\r
-        "story": {\r
-            "fields": [\r
-                "id",\r
-                "comic_id",\r
-                "title",\r
-                "description",\r
-                "t",\r
-                "visible",\r
-                "created_at",\r
-                "updated_at"\r
+        "demand_users": {\r
+            "caption": "provider name",\r
+            "url": "http://your.site.url/demanders/",\r
+            "description": "provider description"\r
+        }\r
+    },\r
+    "magic_numbers": {\r
+        "run_mode": 1,\r
+        "thumbnail_width": 64,\r
+        "thumbnail_height": 64,\r
+        "provider_status_status_items": [\r
+            [\r
+                "select_items.provider_status.status.waiting",\r
+                0\r
             ],\r
-            "associations": {\r
-                "belongs_to": [\r
-                    "comic"\r
-                ],\r
-                "has_many": [\r
-                    "story_sheets",\r
-                    "sheets"\r
-                ]\r
-            }\r
-        },\r
-        "story_sheet": {\r
-            "fields": [\r
-                "id",\r
-                "story_id",\r
-                "sheet_id",\r
-                "t",\r
-                "author_id",\r
-                "created_at",\r
-                "updated_at"\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
-            "associations": {\r
-                "belongs_to": [\r
-                    "story",\r
-                    "sheet"\r
-                ],\r
-                "has_many": []\r
-            }\r
-        },\r
-        "sheet": {\r
-            "fields": [\r
-                "id",\r
-                "caption",\r
-                "width",\r
-                "height",\r
-                "visible",\r
-                "author_id",\r
-                "created_at",\r
-                "updated_at"\r
+            [\r
+                "select_items.demander_status.status.rejected",\r
+                1\r
             ],\r
-            "associations": {\r
-                "belongs_to": [\r
-                    "author"\r
-                ],\r
-                "has_many": [\r
-                    "story_sheets",\r
-                    "stories",\r
-                    "sheet_panels",\r
-                    "panels"\r
-                ]\r
-            }\r
-        },\r
-        "sheet_panel": {\r
-            "fields": [\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
+                "select_items.demander_status.status.requesting",\r
+                2\r
             ],\r
-            "associations": {\r
-                "belongs_to": [\r
-                    "sheet",\r
-                    "panel"\r
-                ],\r
-                "has_many": []\r
-            }\r
-        },\r
-        "panel": {\r
-            "fields": [\r
-                "id",\r
-                "width",\r
-                "height",\r
-                "border",\r
-                "caption",\r
-                "publish",\r
-                "author_id",\r
-                "created_at",\r
-                "updated_at"\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
-            "associations": {\r
-                "belongs_to": [\r
-                    "author"\r
-                ],\r
-                "has_many": [\r
-                    "scroll_panels",\r
-                    "scrolls",\r
-                    "sheet_panels",\r
-                    "sheets",\r
-                    "panel_pictures",\r
-                    "speech_balloons",\r
-                    "ground_pictures",\r
-                    "ground_colors"\r
-                ]\r
-            }\r
-        },\r
-        "panel_picture": {\r
-            "fields": [\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
+                "select_items.scroll.visible.public",\r
+                1\r
+            ]\r
+        ],\r
+        "comic_visible_items": [\r
+            [\r
+                "select_items.comic.visible.private",\r
+                0\r
             ],\r
-            "associations": {\r
-                "belongs_to": [\r
-                    "panel"\r
-                ],\r
-                "has_many": []\r
-            }\r
-        },\r
-        "speech_balloon": {\r
-            "fields": [\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
+                "select_items.comic.visible.public",\r
+                1\r
+            ]\r
+        ],\r
+        "story_visible_items": [\r
+            [\r
+                "select_items.story.visible.private",\r
+                0\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
-            "fields": [\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
+                "select_items.story.visible.public",\r
+                1\r
+            ]\r
+        ],\r
+        "sheet_visible_items": [\r
+            [\r
+                "select_items.sheet.visible.private",\r
+                0\r
             ],\r
-            "associations": {\r
-                "belongs_to": [\r
-                    "speech_balloon",\r
-                    "writing_format"\r
-                ],\r
-                "has_many": []\r
-            }\r
-        },\r
-        "balloon": {\r
-            "fields": [\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
+                "select_items.sheet.visible.public",\r
+                1\r
+            ]\r
+        ],\r
+        "panel_visible_items": [\r
+            [\r
+                "select_items.panel.visible.private",\r
+                0\r
             ],\r
-            "associations": {\r
-                "belongs_to": [\r
-                    "speech_balloon",\r
-                    "system_picture"\r
-                ],\r
-                "has_many": []\r
-            }\r
-        },\r
-        "ground_picture": {\r
-            "fields": [\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
+                "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
-            "associations": {\r
-                "belongs_to": [\r
-                    "panel"\r
-                ],\r
-                "has_many": []\r
-            }\r
-        },\r
-        "ground_color": {\r
-            "fields": [\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
+                "select_items.ground_pictures.repeat.repeat-x",\r
+                1\r
             ],\r
-            "associations": {\r
-                "belongs_to": [\r
-                    "panel"\r
-                ],\r
-                "has_many": []\r
-            }\r
-        },\r
-        "original_picture": {\r
-            "fields": [\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
+                "select_items.ground_pictures.repeat.repeat-y",\r
+                2\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
-            "fields": [\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
+                "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
-            "associations": {\r
-                "belongs_to": [\r
-                    "license",\r
-                    "artist"\r
-                ],\r
-                "has_many": [],\r
-                "has_one": []\r
-            }\r
-        },\r
-        "resource_picture": {\r
-            "fields": [\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
+                "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
-            "associations": {\r
-                "belongs_to": [\r
-                    "license",\r
-                    "artist"\r
-                ],\r
-                "has_many": [],\r
-                "has_one": []\r
-            }\r
-        },\r
-        "speech_balloon_template": {\r
-            "fields": [\r
-                "id",\r
-                "name",\r
-                "classname",\r
-                "caption",\r
-                "t",\r
-                "system_picture_id",\r
-                "settings",\r
-                "created_at",\r
-                "updated_at"\r
+            [\r
+                "select_items.speeches.font_size.very_small",\r
+                0.4\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
-            "fields": [\r
-                "id",\r
-                "name",\r
-                "classname",\r
-                "caption",\r
-                "system_picture_id",\r
-                "settings",\r
-                "created_at",\r
-                "updated_at"\r
+            [\r
+                "select_items.speeches.font_size.small",\r
+                0.6\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
-            "fields": [\r
-                "id",\r
-                "name",\r
-                "classname",\r
-                "caption",\r
-                "url",\r
-                "created_at",\r
-                "updated_at"\r
+            [\r
+                "select_items.speeches.font_size.semi_small",\r
+                0.8\r
             ],\r
-            "associations": {\r
-                "belongs_to": [],\r
-                "has_many": [\r
-                    "licenses"\r
-                ],\r
-                "has_one": []\r
-            }\r
-        },\r
-        "license": {\r
-            "fields": [\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
+                "select_items.speeches.font_size.normal",\r
+                1\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
-            "fields": [\r
-                "id",\r
-                "name",\r
-                "user_id",\r
-                "created_at",\r
-                "updated_at"\r
+            [\r
+                "select_items.speeches.font_size.semi_large",\r
+                1.5\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
-            "fields": [\r
-                "id",\r
-                "name",\r
-                "author_id",\r
-                "created_at",\r
-                "updated_at"\r
+            [\r
+                "select_items.speeches.font_size.large",\r
+                2\r
             ],\r
-            "associations": {\r
-                "belongs_to": [],\r
-                "has_many": [\r
-                    "resource_pictures"\r
-                ],\r
-                "has_one": []\r
-            }\r
-        },\r
-        "system_picture": {\r
-            "fields": [\r
-                "id",\r
-                "ext",\r
-                "width",\r
-                "height",\r
-                "filesize",\r
-                "md5",\r
-                "created_at",\r
-                "updated_at"\r
+            [\r
+                "select_items.speeches.font_size.very_large",\r
+                3.5\r
             ],\r
-            "associations": {\r
-                "belongs_to": [],\r
-                "has_many": [],\r
-                "has_one": []\r
-            }\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
+        "provider_sources": [\r
+            "http://sourceforge.jp/projects/pettanr/wiki/ProviderSource/attach/provider_source.json"\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
+    "locals": {\r
+        "profilers": {\r
+            "scroll": {\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",\r
+                        "panels"\r
+                    ]\r
                 }\r
             },\r
-            "summary": {\r
-                "type": "template",\r
-                "name": "summary"\r
+            "scroll_panel": {\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
-            "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
+            "comic": {\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"\r
+                    ]\r
                 }\r
             },\r
-            "caption": {\r
-                "type": "none"\r
+            "story": {\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",\r
+                        "sheets"\r
+                    ]\r
+                }\r
             },\r
-            "summary": {\r
-                "type": "template",\r
-                "name": "summary"\r
+            "story_sheet": {\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
-            "edit": {\r
-                "type": "none"\r
-            }\r
-        },\r
-        "comic": {\r
-            "symbol": {\r
-                "type": "image",\r
-                "name": "/assets/item.png"\r
+            "sheet": {\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",\r
+                        "stories",\r
+                        "sheet_panels",\r
+                        "panels"\r
+                    ]\r
+                }\r
             },\r
-            "caption": {\r
-                "type": "column",\r
-                "name": "title"\r
+            "sheet_panel": {\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
-            "summary": {\r
-                "type": "template",\r
-                "name": "summary"\r
+            "panel": {\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",\r
+                        "scrolls",\r
+                        "sheet_panels",\r
+                        "sheets",\r
+                        "panel_pictures",\r
+                        "speech_balloons",\r
+                        "ground_pictures",\r
+                        "ground_colors"\r
+                    ]\r
+                }\r
             },\r
-            "edit": {\r
-                "type": "default"\r
-            }\r
-        },\r
-        "story": {\r
-            "symbol": {\r
-                "type": "image",\r
-                "name": "/assets/item.png"\r
+            "panel_picture": {\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
-            "caption": {\r
-                "type": "method",\r
-                "name": "title_with_t",\r
-                "link": {\r
-                    "type": "action",\r
-                    "name": "play"\r
+            "speech_balloon": {\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
-            "summary": {\r
-                "type": "template",\r
-                "name": "summary"\r
+            "speech": {\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
-            "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
+            "balloon": {\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
-            "caption": {\r
-                "type": "none"\r
+            "ground_picture": {\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
-            "summary": {\r
-                "type": "template",\r
-                "name": "summary"\r
+            "ground_color": {\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
-            "edit": {\r
-                "type": "none"\r
-            }\r
-        },\r
-        "sheet": {\r
-            "symbol": {\r
-                "type": "image",\r
-                "name": "/assets/item.png"\r
+            "original_picture": {\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
-            "caption": {\r
-                "type": "column",\r
-                "name": "caption",\r
-                "link": {\r
-                    "type": "action",\r
-                    "name": "play"\r
+            "picture": {\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
-            "summary": {\r
-                "type": "template",\r
-                "name": "summary"\r
+            "resource_picture": {\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
-            "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
+            "speech_balloon_template": {\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
-            "caption": {\r
-                "type": "none"\r
+            "writing_format": {\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
-            "summary": {\r
-                "type": "template",\r
-                "name": "summary"\r
+            "license_group": {\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
+                }\r
             },\r
-            "edit": {\r
-                "type": "none"\r
-            }\r
-        },\r
-        "panel": {\r
-            "symbol": {\r
-                "type": "image",\r
-                "name": "/assets/item.png"\r
+            "license": {\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
-            "caption": {\r
-                "type": "method",\r
-                "name": "plain_scenario",\r
-                "link": {\r
-                    "type": "none"\r
+            "author": {\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
-            "summary": {\r
-                "type": "template",\r
-                "name": "summary"\r
+            "artist": {\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
-            "edit": {\r
-                "type": "default"\r
+            "system_picture": {\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
-        "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
+        "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
+                    }\r
+                },\r
+                "summary": {\r
+                    "type": "template",\r
+                    "name": "summary"\r
+                },\r
+                "edit": {\r
+                    "type": "default"\r
+                }\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
+            "scroll_panel": {\r
+                "symbol": {\r
+                    "type": "image",\r
+                    "name": "/assets/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
-            "summary": {\r
-                "type": "template",\r
-                "name": "summary"\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
+                "edit": {\r
+                    "type": "default"\r
+                }\r
             },\r
-            "edit": {\r
-                "type": "none"\r
-            }\r
-        },\r
-        "speech": {\r
-            "symbol": {\r
-                "type": "picture",\r
-                "name": "symbol_option"\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
+                    }\r
+                },\r
+                "summary": {\r
+                    "type": "template",\r
+                    "name": "summary"\r
+                },\r
+                "edit": {\r
+                    "type": "default"\r
+                }\r
             },\r
-            "caption": {\r
-                "type": "column",\r
-                "name": "content",\r
-                "link": {\r
+            "story_sheet": {\r
+                "symbol": {\r
+                    "type": "image",\r
+                    "name": "/assets/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
-            "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
+            "sheet": {\r
+                "symbol": {\r
+                    "type": "image",\r
+                    "name": "/assets/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
-            "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": "/assets/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": "/assets/item.png"\r
-            },\r
-            "caption": {\r
-                "type": "column",\r
-                "name": "caption",\r
-                "link": {\r
-                    "type": "url_column",\r
-                    "name": "url"\r
+            "sheet_panel": {\r
+                "symbol": {\r
+                    "type": "image",\r
+                    "name": "/assets/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
-            "summary": {\r
-                "type": "none"\r
-            },\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
+            "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
+                "summary": {\r
+                    "type": "template",\r
+                    "name": "summary"\r
+                },\r
+                "edit": {\r
+                    "type": "default"\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": "/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
-        "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
+            "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
-            "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": [\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
+            "speech_balloon": {\r
+                "symbol": {\r
+                    "type": "picture",\r
+                    "name": "symbol_option"\r
+                },\r
                 "caption": {\r
-                    "column": "caption",\r
-                    "type": "text",\r
-                    "label": {},\r
-                    "options": {\r
-                        "row_break": true\r
+                    "type": "method",\r
+                    "name": "plain_scenario",\r
+                    "link": {\r
+                        "type": "none"\r
                     }\r
                 },\r
-                "width": {\r
-                    "column": "width",\r
-                    "type": "number",\r
-                    "label": {},\r
-                    "options": {\r
-                        "size": 5\r
-                    }\r
+                "summary": {\r
+                    "type": "template",\r
+                    "name": "summary"\r
                 },\r
-                "height": {\r
-                    "column": "height",\r
-                    "type": "number",\r
-                    "label": {},\r
-                    "options": {\r
-                        "size": 5,\r
-                        "row_break": true\r
-                    }\r
+                "edit": {\r
+                    "type": "none"\r
+                }\r
+            },\r
+            "speech": {\r
+                "symbol": {\r
+                    "type": "picture",\r
+                    "name": "symbol_option"\r
                 },\r
-                "border": {\r
-                    "column": "border",\r
-                    "type": "number",\r
-                    "label": {},\r
-                    "options": {\r
-                        "size": 5\r
+                "caption": {\r
+                    "type": "column",\r
+                    "name": "content",\r
+                    "link": {\r
+                        "type": "none"\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
+                "summary": {\r
+                    "type": "template",\r
+                    "name": "summary"\r
                 },\r
-                "id": {\r
-                    "column": "id",\r
-                    "type": "hidden",\r
-                    "label": {\r
-                        "type": "hidden"\r
-                    },\r
-                    "options": {}\r
+                "edit": {\r
+                    "type": "none"\r
+                }\r
+            },\r
+            "balloon": {\r
+                "symbol": {\r
+                    "type": "picture",\r
+                    "name": "symbol_option"\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
+                    "type": "none"\r
                 },\r
-                "x": {\r
-                    "column": "x",\r
-                    "type": "number",\r
-                    "label": {},\r
-                    "options": {\r
-                        "size": 5\r
-                    }\r
+                "summary": {\r
+                    "type": "template",\r
+                    "name": "summary"\r
                 },\r
-                "y": {\r
-                    "column": "y",\r
-                    "type": "number",\r
-                    "label": {},\r
-                    "options": {\r
-                        "size": 5,\r
-                        "row_break": true\r
-                    }\r
+                "edit": {\r
+                    "type": "none"\r
+                }\r
+            },\r
+            "ground_picture": {\r
+                "symbol": {\r
+                    "type": "picture",\r
+                    "name": "symbol_option"\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
+                "caption": {\r
+                    "type": "column",\r
+                    "name": "caption"\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
+                "summary": {\r
+                    "type": "template",\r
+                    "name": "summary"\r
                 },\r
-                "link": {\r
-                    "column": "link",\r
-                    "type": "text",\r
-                    "label": {},\r
-                    "options": {\r
-                        "row_break": true\r
-                    }\r
+                "edit": {\r
+                    "type": "none"\r
+                }\r
+            },\r
+            "ground_color": {\r
+                "symbol": {\r
+                    "type": "template",\r
+                    "name": "symbol"\r
                 },\r
-                "id": {\r
-                    "column": "id",\r
-                    "type": "hidden",\r
-                    "label": {\r
-                        "type": "hidden"\r
-                    },\r
-                    "options": {}\r
+                "caption": {\r
+                    "type": "column",\r
+                    "name": "caption"\r
                 },\r
-                "panel_id": {\r
-                    "column": "panel_id",\r
-                    "type": "hidden",\r
-                    "label": {\r
-                        "type": "hidden"\r
-                    },\r
-                    "options": {}\r
+                "summary": {\r
+                    "type": "template",\r
+                    "name": "summary"\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
+                "edit": {\r
+                    "type": "none"\r
+                }\r
+            },\r
+            "original_picture": {\r
+                "symbol": {\r
+                    "type": "picture",\r
+                    "name": "symbol_option"\r
                 },\r
-                "z": {\r
-                    "column": "z",\r
-                    "type": "hidden",\r
-                    "label": {\r
-                        "type": "hidden"\r
-                    },\r
-                    "options": {}\r
+                "caption": {\r
+                    "type": "method",\r
+                    "name": "revision",\r
+                    "link": {\r
+                        "type": "action",\r
+                        "name": "history"\r
+                    }\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
+                "summary": {\r
+                    "type": "template",\r
+                    "name": "summary"\r
                 },\r
-                "speech_balloon.panel_id": {\r
-                    "column": "panel_id",\r
-                    "type": "hidden",\r
-                    "label": {\r
-                        "type": "hidden"\r
-                    },\r
-                    "options": {}\r
+                "edit": {\r
+                    "type": "template",\r
+                    "name": "publish"\r
+                }\r
+            },\r
+            "picture": {\r
+                "symbol": {\r
+                    "type": "picture",\r
+                    "name": "symbol_option"\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
+                "caption": {\r
+                    "type": "column",\r
+                    "name": "revision"\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
+                "summary": {\r
+                    "type": "template",\r
+                    "name": "summary"\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
+                "edit": {\r
+                    "type": "none"\r
+                }\r
+            },\r
+            "resource_picture": {\r
+                "symbol": {\r
+                    "type": "picture",\r
+                    "name": "symbol_option"\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
+                "caption": {\r
+                    "type": "none"\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
+                "summary": {\r
+                    "type": "template",\r
+                    "name": "summary"\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
+                "edit": {\r
+                    "type": "none"\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
-        "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
-            "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
-            "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
+            "speech_balloon_template": {\r
+                "symbol": {\r
+                    "type": "picture",\r
+                    "name": "symbol_option"\r
                 },\r
-                "panel_id": {\r
-                    "column": "panel_id",\r
-                    "type": "hidden",\r
-                    "label": {\r
-                        "type": "hidden"\r
-                    },\r
-                    "options": {}\r
+                "caption": {\r
+                    "type": "column",\r
+                    "name": "caption"\r
                 },\r
-                "picture_id": {\r
-                    "column": "picture_id",\r
-                    "type": "hidden",\r
-                    "label": {\r
-                        "type": "hidden"\r
-                    },\r
-                    "options": {}\r
+                "summary": {\r
+                    "type": "none"\r
+                },\r
+                "edit": {\r
+                    "type": "none"\r
+                }\r
+            },\r
+            "writing_format": {\r
+                "symbol": {\r
+                    "type": "image",\r
+                    "name": "/assets/item.png"\r
                 },\r
                 "caption": {\r
-                    "column": "caption",\r
-                    "type": "text",\r
-                    "label": {},\r
-                    "options": {\r
-                        "row_break": true\r
-                    }\r
+                    "type": "column",\r
+                    "name": "caption"\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
+                "summary": {\r
+                    "type": "none"\r
                 },\r
-                "x": {\r
-                    "column": "x",\r
-                    "type": "number",\r
-                    "label": {},\r
-                    "options": {\r
-                        "size": 5\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": "column",\r
+                    "name": "caption",\r
+                    "link": {\r
+                        "type": "url_column",\r
+                        "name": "url"\r
                     }\r
                 },\r
-                "y": {\r
-                    "column": "y",\r
-                    "type": "number",\r
-                    "label": {},\r
-                    "options": {\r
-                        "size": 5,\r
-                        "row_break": true\r
+                "summary": {\r
+                    "type": "none"\r
+                },\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
-                "z": {\r
-                    "column": "z",\r
-                    "type": "hidden",\r
-                    "label": {\r
-                        "type": "hidden"\r
-                    },\r
-                    "options": {}\r
+                "summary": {\r
+                    "type": "template",\r
+                    "name": "summary"\r
                 },\r
-                "t": {\r
-                    "column": "t",\r
-                    "type": "hidden",\r
-                    "label": {\r
-                        "type": "hidden"\r
-                    },\r
-                    "options": {}\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
+                "edit": {\r
+                    "type": "none"\r
+                }\r
+            },\r
+            "author": {\r
+                "symbol": {\r
+                    "type": "image",\r
+                    "name": "/assets/item.png"\r
                 },\r
-                "panel_id": {\r
-                    "column": "panel_id",\r
-                    "type": "hidden",\r
-                    "label": {\r
-                        "type": "hidden"\r
-                    },\r
-                    "options": {}\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": "/assets/item.png"\r
                 },\r
                 "caption": {\r
-                    "column": "caption",\r
-                    "type": "text",\r
-                    "label": {},\r
-                    "options": {\r
-                        "row_break": true\r
-                    }\r
+                    "type": "column",\r
+                    "name": "name"\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
+                "summary": {\r
+                    "type": "template",\r
+                    "name": "summary"\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
+                "edit": {\r
+                    "type": "account"\r
+                }\r
+            },\r
+            "system_picture": {\r
+                "symbol": {\r
+                    "type": "picture",\r
+                    "name": "symbol_option"\r
                 },\r
-                "xy": {\r
-                    "column": "xy",\r
-                    "type": "number",\r
-                    "label": {},\r
-                    "options": {\r
-                        "size": 5\r
-                    }\r
+                "caption": {\r
+                    "type": "none"\r
                 },\r
-                "wh": {\r
-                    "column": "wh",\r
-                    "type": "number",\r
-                    "label": {},\r
-                    "options": {\r
-                        "size": 5,\r
-                        "row_break": true\r
-                    }\r
+                "summary": {\r
+                    "type": "none"\r
                 },\r
-                "z": {\r
-                    "column": "z",\r
-                    "type": "hidden",\r
-                    "label": {\r
-                        "type": "hidden"\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": [\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
-                    "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
+                    "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
+                    "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
+                    }\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
+            "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
+                "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
+                "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
+                "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
-}\r
+}
\ No newline at end of file