OSDN Git Service

t#32066:validate_forms
[pettanr/pettanr.git] / app / helpers / application_helper.rb
index bac1cae..a63fee4 100644 (file)
@@ -67,6 +67,69 @@ module ApplicationHelper
     JSON.parse(<<HD
 {
     "models": {
+        "Panel": "panel",
+        "panel": {
+            "class_name": "Panel",
+            "table_name": "panels",
+            "attributes": {
+                "id": {
+                    "type": "number",
+                    "primary_key": 1,
+                    "rules": {
+                        "number": true
+                    }
+                },
+                "width": {
+                    "type": "number",
+                    "rules": {
+                        "required": true,
+                        "number": true,
+                        "min": 1
+                    }
+                },
+                "height": {
+                    "type": "number",
+                    "rules": {
+                        "required": true,
+                        "number": true,
+                        "min": 1
+                    }
+                },
+                "border": {
+                    "type": "number",
+                    "rules": {
+                        "required": true,
+                        "number": true,
+                        "min": 0
+                    }
+                },
+                "caption": {
+                    "type": "text",
+                    "rules": {
+                    }
+                },
+                "publish": {
+                    "type": "number",
+                    "rules": {
+                        "required": true,
+                        "number": true
+                    }
+                },
+                "author_id": {
+                    "type": "number",
+                    "rules": {
+                        "required": true,
+                        "number": true
+                    }
+                },
+                "created_at": {
+                    "type": "datetime"
+                },
+                "updated_at": {
+                    "type": "datetime"
+                }
+            }
+        },
         "PanelPicture": "panel_picture",
         "panel_picture": {
             "class_name": "PanelPicture",
@@ -74,37 +137,77 @@ module ApplicationHelper
             "attributes": {
                 "id": {
                     "type": "number",
-                    "primary_key": 1
+                    "primary_key": 1,
+                    "rules": {
+                        "number": true
+                    }
                 },
                 "panel_id": {
-                    "type": "number"
+                    "type": "number",
+                    "rules": {
+                        "number": true
+                    }
                 },
                 "picture_id": {
-                    "type": "number"
+                    "type": "number",
+                    "rules": {
+                        "required": true,
+                        "number": true
+                    }
                 },
                 "caption": {
-                    "type": "text"
+                    "type": "text",
+                    "rules": {}
                 },
                 "x": {
-                    "type": "number"
+                    "type": "number",
+                    "rules": {
+                        "required": true,
+                        "number": true
+                    }
                 },
                 "y": {
-                    "type": "number"
+                    "type": "number",
+                    "rules": {
+                        "required": true,
+                        "number": true
+                    }
                 },
                 "width": {
-                    "type": "number"
+                    "type": "number",
+                    "rules": {
+                        "required": true,
+                        "number": true
+                    }
                 },
                 "height": {
-                    "type": "number"
+                    "type": "number",
+                    "rules": {
+                        "required": true,
+                        "number": true
+                    }
                 },
                 "link": {
-                    "type": "text"
+                    "type": "text",
+                    "rules": {
+                        "url": true
+                    }
                 },
                 "z": {
-                    "type": "number"
+                    "type": "number",
+                    "rules": {
+                        "required": true,
+                        "number": true,
+                        "min": 1
+                    }
                 },
                 "t": {
-                    "type": "number"
+                    "type": "number",
+                    "rules": {
+                        "required": true,
+                        "number": true,
+                        "min": 0
+                    }
                 },
                 "created_at": {
                     "type": "datetime"
@@ -122,28 +225,53 @@ module ApplicationHelper
             "attributes": {
                 "id": {
                     "type": "number",
-                    "primary_key": 1
+                    "primary_key": 1,
+                    "rules": {
+                        "number": true
+                    }
                 },
                 "panel_id": {
-                    "type": "number"
+                    "type": "number",
+                    "rules": {
+                        "number": true
+                    }
                 },
                 "speech_balloon_template_id": {
-                    "type": "number"
+                    "type": "number",
+                    "rules": {
+                        "required": true,
+                        "number": true
+                    }
                 },
                 "classname": {
-                    "type": "text"
+                    "type": "text",
+                    "rules": {
+                        "required": true
+                    }
                 },
                 "z": {
-                    "type": "number"
+                    "type": "number",
+                    "rules": {
+                        "required": true,
+                        "number": true,
+                        "min": 1
+                    }
                 },
                 "t": {
-                    "type": "number"
+                    "type": "number",
+                    "rules": {
+                        "required": true,
+                        "number": true,
+                        "min": 0
+                    }
                 },
                 "settings": {
-                    "type": "text"
+                    "type": "text",
+                    "rules": {}
                 },
                 "caption": {
-                    "type": "text"
+                    "type": "text",
+                    "rules": {}
                 },
                 "created_at": {
                     "type": "datetime"
@@ -160,31 +288,64 @@ module ApplicationHelper
             "attributes": {
                 "id": {
                     "type": "number",
-                    "primary_key": 1
+                    "primary_key": 1,
+                    "rules": {
+                        "number": true
+                    }
                 },
                 "speech_balloon_id": {
-                    "type": "number"
+                    "type": "number",
+                    "rules": {
+                        "number": true
+                    }
                 },
                 "system_picture_id": {
-                    "type": "number"
+                    "type": "number",
+                    "rules": {
+                        "required": true,
+                        "number": true
+                    }
                 },
                 "x": {
-                    "type": "number"
+                    "type": "number",
+                    "rules": {
+                        "required": true,
+                        "number": true
+                    }
                 },
                 "y": {
-                    "type": "number"
+                    "type": "number",
+                    "rules": {
+                        "required": true,
+                        "number": true
+                    }
                 },
                 "width": {
-                    "type": "number"
+                    "type": "number",
+                    "rules": {
+                        "required": true,
+                        "number": true,
+                        "min": 1
+                    }
                 },
                 "height": {
-                    "type": "number"
+                    "type": "number",
+                    "rules": {
+                        "required": true,
+                        "number": true,
+                        "min": 1
+                    }
                 },
                 "r": {
-                    "type": "number"
+                    "type": "number",
+                    "rules": {
+                        "required": true,
+                        "number": true
+                    }
                 },
                 "settings": {
-                    "type": "text"
+                    "type": "text",
+                    "rules": {}
                 },
                 "created_at": {
                     "type": "datetime"
@@ -201,43 +362,95 @@ module ApplicationHelper
             "attributes": {
                 "id": {
                     "type": "number",
-                    "primary_key": 1
+                    "primary_key": 1,
+                    "rules": {
+                        "number": true
+                    }
                 },
                 "speech_balloon_id": {
-                    "type": "number"
+                    "type": "number",
+                    "rules": {
+                        "number": true
+                    }
                 },
                 "writing_format_id": {
-                    "type": "number"
+                    "type": "number",
+                    "rules": {
+                        "required": true,
+                        "number": true
+                    }
                 },
                 "content": {
-                    "type": "text"
+                    "type": "text",
+                    "rules": {}
                 },
                 "font_size": {
-                    "type": "float"
+                    "type": "float",
+                    "rules": {
+                        "required": true,
+                        "number": true,
+                        "min": 0
+                    }
                 },
                 "text_align": {
-                    "type": "number"
+                    "type": "number",
+                    "rules": {
+                        "required": true,
+                        "number": true,
+                        "range": [
+                            0,
+                            3
+                        ]
+                    }
                 },
                 "fore_color": {
-                    "type": "number"
+                    "type": "number",
+                    "rules": {
+                        "required": true,
+                        "number": true,
+                        "range": [
+                            0,
+                            16777215
+                        ]
+                    }
                 },
                 "x": {
-                    "type": "number"
+                    "type": "number",
+                    "rules": {
+                        "required": true,
+                        "number": true
+                    }
                 },
                 "y": {
-                    "type": "number"
+                    "type": "number",
+                    "rules": {
+                        "required": true,
+                        "number": true
+                    }
                 },
                 "width": {
-                    "type": "number"
+                    "type": "number",
+                    "rules": {
+                        "required": true,
+                        "number": true,
+                        "min": 1
+                    }
                 },
                 "height": {
-                    "type": "number"
+                    "type": "number",
+                    "rules": {
+                        "required": true,
+                        "number": true,
+                        "min": 1
+                    }
                 },
                 "quotes": {
-                    "type": "text"
+                    "type": "text",
+                    "rules": {}
                 },
                 "settings": {
-                    "type": "text"
+                    "type": "text",
+                    "rules": {}
                 },
                 "created_at": {
                     "type": "datetime"
@@ -254,31 +467,68 @@ module ApplicationHelper
             "attributes": {
                 "id": {
                     "type": "number",
-                    "primary_key": 1
+                    "primary_key": 1,
+                    "rules": {
+                        "number": true
+                    }
                 },
                 "panel_id": {
-                    "type": "number"
+                    "type": "number",
+                    "rules": {
+                        "number": true
+                    }
                 },
                 "picture_id": {
-                    "type": "number"
+                    "type": "number",
+                    "rules": {
+                        "required": true,
+                        "number": true
+                    }
                 },
                 "caption": {
-                    "type": "text"
+                    "type": "text",
+                    "rules": {}
                 },
                 "repeat": {
-                    "type": "number"
+                    "type": "number",
+                    "rules": {
+                        "required": true,
+                        "number": true,
+                        "range": [
+                            0,
+                            3
+                        ]
+                    }
                 },
                 "x": {
-                    "type": "number"
+                    "type": "number",
+                    "rules": {
+                        "required": true,
+                        "number": true
+                    }
                 },
                 "y": {
-                    "type": "number"
+                    "type": "number",
+                    "rules": {
+                        "required": true,
+                        "number": true
+                    }
                 },
                 "z": {
-                    "type": "number"
+                    "type": "number",
+                    "rules": {
+                        "required": true,
+                        "number": true,
+                        "min": 1
+                    }
                 },
                 "t": {
-                    "type": "number"
+                    "type": "number",
+                    "rules": {
+                        "required": true,
+                        "number": true,
+                        "min": 0
+                    }
                 },
                 "created_at": {
                     "type": "datetime"
@@ -295,22 +545,47 @@ module ApplicationHelper
             "attributes": {
                 "id": {
                     "type": "number",
-                    "primary_key": 1
+                    "primary_key": 1,
+                    "rules": {
+                        "number": true
+                    }
                 },
                 "panel_id": {
-                    "type": "number"
+                    "type": "number",
+                    "rules": {
+                        "number": true
+                    }
                 },
                 "caption": {
-                    "type": "text"
+                    "type": "text",
+                    "rules": {}
                 },
                 "code": {
-                    "type": "number"
+                    "type": "number",
+                    "rules": {
+                        "required": true,
+                        "number": true,
+                        "range": [
+                            0,
+                            16777215
+                        ]
+                    }
                 },
                 "z": {
-                    "type": "number"
+                    "type": "number",
+                    "rules": {
+                        "required": true,
+                        "number": true,
+                        "min": 1
+                    }
                 },
                 "t": {
-                    "type": "number"
+                    "type": "number",
+                    "rules": {
+                        "required": true,
+                        "number": true,
+                        "min": 0
+                    }
                 },
                 "created_at": {
                     "type": "datetime"
@@ -327,22 +602,41 @@ module ApplicationHelper
             "attributes": {
                 "id": {
                     "type": "number",
-                    "primary_key": 1
+                    "primary_key": 1,
+                    "rules": {
+                        "number": true
+                    }
                 },
                 "name": {
-                    "type": "text"
+                    "type": "text",
+                    "rules": {
+                        "required": true
+                    }
                 },
                 "classname": {
-                    "type": "text"
+                    "type": "text",
+                    "rules": {
+                        "required": true
+                    }
                 },
                 "caption": {
-                    "type": "text"
+                    "type": "text",
+                    "rules": {
+                        "required": true
+                    }
                 },
                 "system_picture_id": {
-                    "type": "number"
+                    "type": "number",
+                    "rules": {
+                        "required": true,
+                        "number": true
+                    }
                 },
                 "settings": {
-                    "type": "text"
+                    "type": "text",
+                    "rules": {
+                        "required": true
+                    }
                 },
                 "created_at": {
                     "type": "datetime"
@@ -379,35 +673,112 @@ module ApplicationHelper
         }
     ],
     "forms": {
+        "Panel": "panel",
+        "panel": {
+            "attributes": {
+                "caption": {
+                    "column": "caption",
+                    "type": "text",
+                    "label": {},
+                    "options": {
+                        "row_break": true
+                    }
+                },
+                "width": {
+                    "column": "width",
+                    "type": "number",
+                    "label": {},
+                    "options": {
+                        "size": 5
+                    }
+                },
+                "height": {
+                    "column": "height",
+                    "type": "number",
+                    "label": {},
+                    "options": {
+                        "size": 5,
+                        "row_break": true
+                    }
+                },
+                "border": {
+                    "column": "border",
+                    "type": "number",
+                    "label": {},
+                    "options": {
+                        "size": 5
+                    }
+                },
+                "publish": {
+                    "column": "publish",
+                    "type": "select",
+                    "label": {},
+                    "options": {
+                        "source": "magic_number",
+                        "key": "comic_visible_items",
+                        "size": 5,
+                        "row_break": true
+                    }
+                },
+                "id": {
+                    "column": "id",
+                    "type": "hidden",
+                    "label": {
+                        "type": "hidden"
+                    },
+                    "options": {}
+                },
+                "author_id": {
+                    "column": "author_id",
+                    "type": "hidden",
+                    "label": {
+                        "type": "hidden"
+                    },
+                    "options": {}
+                }
+            },
+            "fields": [
+                "caption",
+                "width",
+                "height",
+                "border",
+                "publish",
+                "id",
+                "author_id"
+            ]
+        },
         "PanelPicture": "panel_picture",
         "panel_picture": {
-            "fields": [
-                {
+            "attributes": {
+                "caption": {
                     "column": "caption",
                     "type": "text",
+                    "label": {},
                     "options": {
-                        "label_break": false,
                         "row_break": true
                     }
                 },
-                {
+                "x": {
                     "column": "x",
                     "type": "number",
+                    "label": {},
                     "options": {
                         "size": 5
                     }
                 },
-                {
+                "y": {
                     "column": "y",
                     "type": "number",
+                    "label": {},
                     "options": {
                         "size": 5,
                         "row_break": true
                     }
                 },
-                {
+                "width": {
                     "column": "width",
                     "type": "number",
+                    "label": {},
                     "options": {
                         "size": 5,
                         "row_break": true
@@ -421,9 +792,10 @@ module ApplicationHelper
                         }
                     }
                 },
-                {
+                "height": {
                     "column": "height",
                     "type": "number",
+                    "label": {},
                     "options": {
                         "size": 5,
                         "row_break": true
@@ -437,560 +809,300 @@ module ApplicationHelper
                         }
                     }
                 },
-                {
+                "link": {
                     "column": "link",
                     "type": "text",
+                    "label": {},
                     "options": {
                         "row_break": true
                     }
                 },
-                {
+                "id": {
                     "column": "id",
                     "type": "hidden",
+                    "label": {
+                        "type": "hidden"
+                    },
                     "options": {}
                 },
-                {
+                "panel_id": {
                     "column": "panel_id",
                     "type": "hidden",
+                    "label": {
+                        "type": "hidden"
+                    },
                     "options": {}
                 },
-                {
+                "picture_id": {
                     "column": "picture_id",
                     "type": "hidden",
+                    "label": {
+                        "type": "hidden"
+                    },
                     "options": {}
                 },
-                {
+                "z": {
                     "column": "z",
                     "type": "hidden",
+                    "label": {
+                        "type": "hidden"
+                    },
                     "options": {}
                 },
-                {
+                "t": {
                     "column": "t",
                     "type": "hidden",
+                    "label": {
+                        "type": "hidden"
+                    },
                     "options": {}
                 }
+            },
+            "fields": [
+                "caption",
+                "x",
+                "y",
+                "width",
+                "height",
+                "link",
+                "id",
+                "panel_id",
+                "picture_id",
+                "z",
+                "t"
             ]
         },
-        "CircleSpeechBalloon": "circle_speech_balloon",
-        "circle_speech_balloon": {
-            "base": "speech_balloon",
-            "fields": [
-                {
+        "speech_balloon": {
+            "attributes": {
+                "speech_balloon.id": {
+                    "column": "id",
+                    "type": "hidden",
+                    "label": {
+                        "type": "hidden"
+                    },
+                    "options": {}
+                },
+                "speech_balloon.panel_id": {
+                    "column": "panel_id",
+                    "type": "hidden",
+                    "label": {
+                        "type": "hidden"
+                    },
+                    "options": {}
+                },
+                "speech_balloon.speech_balloon_template_id": {
+                    "column": "speech_balloon_template_id",
+                    "type": "hidden",
+                    "label": {
+                        "type": "hidden"
+                    },
+                    "options": {}
+                },
+                "speech_balloon.caption": {
                     "column": "caption",
                     "type": "text",
+                    "label": {},
                     "options": {
                         "row_break": true
                     }
                 },
-                {
-                    "part": "balloon",
-                    "column": "r",
-                    "type": "number",
-                    "options": {
-                        "size": 5,
-                        "row_break": true
+                "speech_balloon.z": {
+                    "column": "z",
+                    "type": "hidden",
+                    "label": {
+                        "type": "hidden"
                     },
-                    "helpers": {
-                        "tail_angle": {
-                            "path": "panels/tail_angle_helper",
-                            "options": {}
-                        }
-                    }
+                    "options": {}
                 },
-                {
-                    "part": "balloon",
-                    "column": "x",
-                    "type": "number",
-                    "options": {
-                        "size": 5
-                    }
+                "speech_balloon.t": {
+                    "column": "t",
+                    "type": "hidden",
+                    "label": {
+                        "type": "hidden"
+                    },
+                    "options": {}
                 },
-                {
-                    "part": "balloon",
-                    "column": "y",
-                    "type": "number",
-                    "options": {
-                        "size": 5,
-                        "row_break": true
-                    }
-                },
-                {
-                    "part": "balloon",
-                    "column": "width",
-                    "type": "number",
-                    "options": {
-                        "size": 5
-                    }
+                "speech_balloon.classname": {
+                    "column": "classname",
+                    "type": "hidden",
+                    "label": {
+                        "type": "hidden"
+                    },
+                    "options": {}
                 },
-                {
-                    "part": "balloon",
-                    "column": "height",
-                    "type": "number",
-                    "options": {
-                        "size": 5,
-                        "row_break": true
-                    }
+                "speech_balloon.settings": {
+                    "column": "settings",
+                    "type": "hidden",
+                    "label": {
+                        "type": "hidden"
+                    },
+                    "options": {}
                 },
-                {
+                "balloon.id": {
+                    "model": "balloon",
                     "part": "balloon",
                     "column": "id",
                     "type": "hidden",
+                    "label": {
+                        "type": "hidden"
+                    },
                     "options": {}
                 },
-                {
+                "balloon.speech_balloon_id": {
+                    "model": "balloon",
                     "part": "balloon",
                     "column": "speech_balloon_id",
                     "type": "hidden",
+                    "label": {
+                        "type": "hidden"
+                    },
                     "options": {}
                 },
-                {
+                "balloon.system_picture_id": {
+                    "model": "balloon",
                     "part": "balloon",
                     "column": "system_picture_id",
                     "type": "hidden",
+                    "label": {
+                        "type": "hidden"
+                    },
                     "options": {}
                 },
-                {
+                "balloon.r": {
+                    "model": "balloon",
                     "part": "balloon",
-                    "column": "settings",
-                    "type": "hidden",
-                    "options": {}
-                },
-                {
-                    "part": "speech",
-                    "column": "writing_format_id",
-                    "type": "select",
-                    "options": {
-                        "source": "model",
-                        "model": "writing_format",
-                        "method": "enable_list",
-                        "caption": "caption"
-                    }
-                },
-                {
-                    "part": "speech",
-                    "column": "font_size",
-                    "type": "select",
+                    "column": "r",
+                    "type": "number",
+                    "label": {},
                     "options": {
-                        "source": "magic_number",
-                        "key": "speech_font_size_items",
+                        "size": 5,
                         "row_break": true
-                    }
-                },
-                {
-                    "part": "speech",
-                    "column": "text_align",
-                    "type": "select",
-                    "options": {
-                        "source": "magic_number",
-                        "key": "speech_text_align_items"
-                    }
-                },
-                {
-                    "part": "speech",
-                    "column": "quotes",
-                    "type": "text",
-                    "options": {
-                        "size": 5
-                    }
-                },
-                {
-                    "part": "speech",
-                    "column": "content",
-                    "type": "text_area",
-                    "options": {
-                        "label_break": true,
-                        "size": "45x5"
-                    }
-                },
-                {
-                    "part": "speech",
-                    "column": "fore_color",
-                    "type": "hidden",
-                    "options": {
-                        "label_break": true
                     },
                     "helpers": {
-                        "color": {
-                            "path": "panels/color_helper",
-                            "options": {},
-                            "wrapper": "speech-fore_color-wrap"
+                        "tail_angle": {
+                            "path": "panels/tail_angle_helper",
+                            "options": {}
                         }
                     }
                 },
-                {
-                    "part": "speech",
-                    "column": "id",
-                    "type": "hidden",
-                    "options": {}
-                },
-                {
-                    "part": "speech",
-                    "column": "speech_balloon_id",
-                    "type": "hidden",
-                    "options": {}
-                },
-                {
-                    "part": "speech",
-                    "column": "x",
-                    "type": "hidden",
-                    "options": {}
-                },
-                {
-                    "part": "speech",
-                    "column": "y",
-                    "type": "hidden",
-                    "options": {}
-                },
-                {
-                    "part": "speech",
-                    "column": "width",
-                    "type": "hidden",
-                    "options": {}
-                },
-                {
-                    "part": "speech",
-                    "column": "height",
-                    "type": "hidden",
-                    "options": {}
-                },
-                {
-                    "part": "speech",
-                    "column": "settings",
-                    "type": "hidden",
-                    "options": {}
-                },
-                {
-                    "column": "id",
-                    "type": "hidden",
-                    "options": {}
-                },
-                {
-                    "column": "panel_id",
-                    "type": "hidden",
-                    "options": {}
-                },
-                {
-                    "column": "speech_balloon_template_id",
-                    "type": "hidden",
-                    "options": {}
-                },
-                {
-                    "column": "classname",
-                    "type": "hidden",
-                    "options": {}
-                },
-                {
-                    "column": "z",
-                    "type": "hidden",
-                    "options": {}
-                },
-                {
-                    "column": "t",
-                    "type": "hidden",
-                    "options": {}
-                },
-                {
-                    "column": "settings",
-                    "type": "hidden",
-                    "options": {}
-                }
-            ]
-        },
-        "PlainSpeechBalloon": "plain_speech_balloon",
-        "plain_speech_balloon": {
-            "base": "speech_balloon",
-            "fields": [
-                {
-                    "column": "caption",
-                    "type": "text",
-                    "options": {
-                        "row_break": true
-                    }
-                },
-                {
-                    "part": "balloon",
-                    "column": "r",
-                    "type": "hidden",
-                    "options": {}
-                },
-                {
+                "balloon.x": {
+                    "model": "balloon",
                     "part": "balloon",
                     "column": "x",
                     "type": "number",
+                    "label": {},
                     "options": {
                         "size": 5
                     }
                 },
-                {
+                "balloon.y": {
+                    "model": "balloon",
                     "part": "balloon",
                     "column": "y",
                     "type": "number",
+                    "label": {},
                     "options": {
                         "size": 5,
                         "row_break": true
                     }
                 },
-                {
+                "balloon.width": {
+                    "model": "balloon",
                     "part": "balloon",
                     "column": "width",
                     "type": "number",
+                    "label": {},
                     "options": {
                         "size": 5
                     }
                 },
-                {
+                "balloon.height": {
+                    "model": "balloon",
                     "part": "balloon",
                     "column": "height",
                     "type": "number",
+                    "label": {},
                     "options": {
                         "size": 5,
                         "row_break": true
                     }
                 },
-                {
-                    "part": "balloon",
-                    "column": "id",
-                    "type": "hidden",
-                    "options": {}
-                },
-                {
-                    "part": "balloon",
-                    "column": "speech_balloon_id",
-                    "type": "hidden",
-                    "options": {}
-                },
-                {
-                    "part": "balloon",
-                    "column": "system_picture_id",
-                    "type": "hidden",
-                    "options": {}
-                },
-                {
+                "balloon.settings": {
+                    "model": "balloon",
                     "part": "balloon",
                     "column": "settings",
                     "type": "hidden",
-                    "options": {}
-                },
-                {
-                    "part": "speech",
-                    "column": "writing_format_id",
-                    "type": "select",
-                    "options": {
-                        "source": "model",
-                        "model": "writing_format",
-                        "method": "enable_list",
-                        "caption": "caption"
-                    }
-                },
-                {
-                    "part": "speech",
-                    "column": "font_size",
-                    "type": "select",
-                    "options": {
-                        "source": "magic_number",
-                        "key": "speech_font_size_items",
-                        "row_break": true
-                    }
-                },
-                {
-                    "part": "speech",
-                    "column": "text_align",
-                    "type": "select",
-                    "options": {
-                        "source": "magic_number",
-                        "key": "speech_text_align_items"
-                    }
-                },
-                {
-                    "part": "speech",
-                    "column": "quotes",
-                    "type": "text",
-                    "options": {
-                        "size": 5
-                    }
-                },
-                {
-                    "part": "speech",
-                    "column": "content",
-                    "type": "text_area",
-                    "options": {
-                        "label_break": true,
-                        "size": "45x5"
-                    }
-                },
-                {
-                    "part": "speech",
-                    "column": "fore_color",
-                    "type": "hidden",
-                    "options": {
-                        "label_break": true
+                    "label": {
+                        "type": "hidden"
                     },
-                    "helpers": {
-                        "color": {
-                            "path": "panels/color_helper",
-                            "options": {},
-                            "wrapper": "speech-fore_color-wrap"
-                        }
-                    }
+                    "options": {}
                 },
-                {
+                "speech.id": {
+                    "model": "speech",
                     "part": "speech",
                     "column": "id",
                     "type": "hidden",
+                    "label": {
+                        "type": "hidden"
+                    },
                     "options": {}
                 },
-                {
+                "speech.speech_balloon_id": {
+                    "model": "speech",
                     "part": "speech",
                     "column": "speech_balloon_id",
                     "type": "hidden",
+                    "label": {
+                        "type": "hidden"
+                    },
                     "options": {}
                 },
-                {
+                "speech.x": {
+                    "model": "speech",
                     "part": "speech",
                     "column": "x",
                     "type": "hidden",
+                    "label": {
+                        "type": "hidden"
+                    },
                     "options": {}
                 },
-                {
+                "speech.y": {
+                    "model": "speech",
                     "part": "speech",
                     "column": "y",
                     "type": "hidden",
+                    "label": {
+                        "type": "hidden"
+                    },
                     "options": {}
                 },
-                {
+                "speech.width": {
+                    "model": "speech",
                     "part": "speech",
                     "column": "width",
                     "type": "hidden",
+                    "label": {
+                        "type": "hidden"
+                    },
                     "options": {}
                 },
-                {
-                    "part": "speech",
-                    "column": "height",
-                    "type": "hidden",
-                    "options": {}
-                },
-                {
+                "speech.height": {
+                    "model": "speech",
                     "part": "speech",
-                    "column": "settings",
-                    "type": "hidden",
-                    "options": {}
-                },
-                {
-                    "column": "id",
-                    "type": "hidden",
-                    "options": {}
-                },
-                {
-                    "column": "panel_id",
-                    "type": "hidden",
-                    "options": {}
-                },
-                {
-                    "column": "speech_balloon_template_id",
-                    "type": "hidden",
-                    "options": {}
-                },
-                {
-                    "column": "classname",
-                    "type": "hidden",
-                    "options": {}
-                },
-                {
-                    "column": "z",
-                    "type": "hidden",
-                    "options": {}
-                },
-                {
-                    "column": "t",
-                    "type": "hidden",
-                    "options": {}
-                },
-                {
-                    "column": "settings",
-                    "type": "hidden",
-                    "options": {}
-                }
-            ]
-        },
-        "SquareSpeechBalloon": "square_speech_balloon",
-        "square_speech_balloon": {
-            "base": "speech_balloon",
-            "fields": [
-                {
-                    "column": "caption",
-                    "type": "text",
-                    "options": {
-                        "row_break": true
-                    }
-                },
-                {
-                    "part": "balloon",
-                    "column": "r",
-                    "type": "hidden",
-                    "options": {}
-                },
-                {
-                    "part": "balloon",
-                    "column": "x",
-                    "type": "number",
-                    "options": {
-                        "size": 5
-                    }
-                },
-                {
-                    "part": "balloon",
-                    "column": "y",
-                    "type": "number",
-                    "options": {
-                        "size": 5,
-                        "row_break": true
-                    }
-                },
-                {
-                    "part": "balloon",
-                    "column": "width",
-                    "type": "number",
-                    "options": {
-                        "size": 5
-                    }
-                },
-                {
-                    "part": "balloon",
                     "column": "height",
-                    "type": "number",
-                    "options": {
-                        "size": 5,
-                        "row_break": true
-                    }
-                },
-                {
-                    "part": "balloon",
-                    "column": "id",
-                    "type": "hidden",
-                    "options": {}
-                },
-                {
-                    "part": "balloon",
-                    "column": "speech_balloon_id",
-                    "type": "hidden",
-                    "options": {}
-                },
-                {
-                    "part": "balloon",
-                    "column": "system_picture_id",
-                    "type": "hidden",
-                    "options": {}
-                },
-                {
-                    "part": "balloon",
-                    "column": "settings",
                     "type": "hidden",
+                    "label": {
+                        "type": "hidden"
+                    },
                     "options": {}
                 },
-                {
+                "speech.writing_format_id": {
+                    "model": "speech",
                     "part": "speech",
                     "column": "writing_format_id",
                     "type": "select",
+                    "label": {},
                     "options": {
                         "source": "model",
                         "model": "writing_format",
@@ -998,49 +1110,60 @@ module ApplicationHelper
                         "caption": "caption"
                     }
                 },
-                {
+                "speech.font_size": {
+                    "model": "speech",
                     "part": "speech",
                     "column": "font_size",
                     "type": "select",
+                    "label": {},
                     "options": {
                         "source": "magic_number",
                         "key": "speech_font_size_items",
                         "row_break": true
                     }
                 },
-                {
+                "speech.text_align": {
+                    "model": "speech",
                     "part": "speech",
                     "column": "text_align",
                     "type": "select",
+                    "label": {},
                     "options": {
                         "source": "magic_number",
                         "key": "speech_text_align_items"
                     }
                 },
-                {
+                "speech.quotes": {
+                    "model": "speech",
                     "part": "speech",
                     "column": "quotes",
                     "type": "text",
+                    "label": {},
                     "options": {
                         "size": 5
                     }
                 },
-                {
+                "speech.content": {
+                    "model": "speech",
                     "part": "speech",
                     "column": "content",
                     "type": "text_area",
+                    "label": {
+                        "row_break": true
+                    },
                     "options": {
-                        "label_break": true,
                         "size": "45x5"
                     }
                 },
-                {
+                "speech.fore_color": {
+                    "model": "speech",
                     "part": "speech",
                     "column": "fore_color",
                     "type": "hidden",
-                    "options": {
-                        "label_break": true
+                    "label": {
+                        "row_break": true
                     },
+                    "options": {},
                     "helpers": {
                         "color": {
                             "path": "panels/color_helper",
@@ -1049,161 +1172,276 @@ module ApplicationHelper
                         }
                     }
                 },
-                {
-                    "part": "speech",
-                    "column": "id",
-                    "type": "hidden",
-                    "options": {}
-                },
-                {
-                    "part": "speech",
-                    "column": "speech_balloon_id",
-                    "type": "hidden",
-                    "options": {}
-                },
-                {
+                "speech.settings": {
+                    "model": "speech",
                     "part": "speech",
-                    "column": "x",
-                    "type": "hidden",
-                    "options": {}
-                },
-                {
-                    "part": "speech",
-                    "column": "y",
-                    "type": "hidden",
-                    "options": {}
-                },
-                {
-                    "part": "speech",
-                    "column": "width",
+                    "column": "settings",
                     "type": "hidden",
+                    "label": {
+                        "type": "hidden"
+                    },
                     "options": {}
-                },
-                {
-                    "part": "speech",
-                    "column": "height",
+                }
+            }
+        },
+        "CircleSpeechBalloon": "circle_speech_balloon",
+        "circle_speech_balloon": {
+            "base": "speech_balloon",
+            "attributes": {},
+            "fields": [
+                "speech_balloon.caption",
+                "balloon.r",
+                "balloon.x",
+                "balloon.y",
+                "balloon.width",
+                "balloon.height",
+                "balloon.id",
+                "balloon.speech_balloon_id",
+                "balloon.system_picture_id",
+                "balloon.settings",
+                "speech.writing_format_id",
+                "speech.font_size",
+                "speech.text_align",
+                "speech.quotes",
+                "speech.content",
+                "speech.fore_color",
+                "speech.id",
+                "speech.speech_balloon_id",
+                "speech.x",
+                "speech.y",
+                "speech.width",
+                "speech.height",
+                "speech.settings",
+                "speech_balloon.id",
+                "speech_balloon.panel_id",
+                "speech_balloon.speech_balloon_template_id",
+                "speech_balloon.classname",
+                "speech_balloon.z",
+                "speech_balloon.t",
+                "speech_balloon.settings"
+            ]
+        },
+        "PlainSpeechBalloon": "plain_speech_balloon",
+        "plain_speech_balloon": {
+            "base": "speech_balloon",
+            "attributes": {
+                "balloon.r": {
+                    "model": "balloon",
+                    "part": "balloon",
+                    "column": "r",
                     "type": "hidden",
+                    "label": {
+                        "type": "hidden"
+                    },
                     "options": {}
-                },
-                {
-                    "part": "speech",
-                    "column": "settings",
+                }
+            },
+            "fields": [
+                "speech_balloon.caption",
+                "balloon.r",
+                "balloon.x",
+                "balloon.y",
+                "balloon.width",
+                "balloon.height",
+                "balloon.id",
+                "balloon.speech_balloon_id",
+                "balloon.system_picture_id",
+                "balloon.settings",
+                "speech.writing_format_id",
+                "speech.font_size",
+                "speech.text_align",
+                "speech.quotes",
+                "speech.content",
+                "speech.fore_color",
+                "speech.id",
+                "speech.speech_balloon_id",
+                "speech.x",
+                "speech.y",
+                "speech.width",
+                "speech.height",
+                "speech.settings",
+                "speech_balloon.id",
+                "speech_balloon.panel_id",
+                "speech_balloon.speech_balloon_template_id",
+                "speech_balloon.classname",
+                "speech_balloon.z",
+                "speech_balloon.t",
+                "speech_balloon.settings"
+            ]
+        },
+        "SquareSpeechBalloon": "square_speech_balloon",
+        "square_speech_balloon": {
+            "base": "speech_balloon",
+            "attributes": {
+                "balloon.r": {
+                    "model": "balloon",
+                    "part": "balloon",
+                    "column": "r",
                     "type": "hidden",
+                    "label": {
+                        "type": "hidden"
+                    },
                     "options": {}
-                },
-                {
+                }
+            },
+            "fields": [
+                "speech_balloon.caption",
+                "balloon.r",
+                "balloon.x",
+                "balloon.y",
+                "balloon.width",
+                "balloon.height",
+                "balloon.id",
+                "balloon.speech_balloon_id",
+                "balloon.system_picture_id",
+                "balloon.settings",
+                "speech.writing_format_id",
+                "speech.font_size",
+                "speech.text_align",
+                "speech.quotes",
+                "speech.content",
+                "speech.fore_color",
+                "speech.id",
+                "speech.speech_balloon_id",
+                "speech.x",
+                "speech.y",
+                "speech.width",
+                "speech.height",
+                "speech.settings",
+                "speech_balloon.id",
+                "speech_balloon.panel_id",
+                "speech_balloon.speech_balloon_template_id",
+                "speech_balloon.classname",
+                "speech_balloon.z",
+                "speech_balloon.t",
+                "speech_balloon.settings"
+            ]
+        },
+        "GroundPicture": "ground_picture",
+        "ground_picture": {
+            "attributes": {
+                "id": {
                     "column": "id",
                     "type": "hidden",
+                    "label": {
+                        "type": "hidden"
+                    },
                     "options": {}
                 },
-                {
+                "panel_id": {
                     "column": "panel_id",
                     "type": "hidden",
+                    "label": {
+                        "type": "hidden"
+                    },
                     "options": {}
                 },
-                {
-                    "column": "speech_balloon_template_id",
-                    "type": "hidden",
-                    "options": {}
-                },
-                {
-                    "column": "classname",
-                    "type": "hidden",
-                    "options": {}
-                },
-                {
-                    "column": "z",
-                    "type": "hidden",
-                    "options": {}
-                },
-                {
-                    "column": "t",
+                "picture_id": {
+                    "column": "picture_id",
                     "type": "hidden",
+                    "label": {
+                        "type": "hidden"
+                    },
                     "options": {}
                 },
-                {
-                    "column": "settings",
-                    "type": "hidden",
-                    "options": {}
-                }
-            ]
-        },
-        "GroundPicture": "ground_picture",
-        "ground_picture": {
-            "fields": [
-                {
+                "caption": {
                     "column": "caption",
                     "type": "text",
+                    "label": {},
                     "options": {
                         "row_break": true
                     }
                 },
-                {
+                "repeat": {
                     "column": "repeat",
                     "type": "select",
+                    "label": {},
                     "options": {
                         "source": "magic_number",
                         "key": "ground_picture_repeat_items",
                         "row_break": true
                     }
                 },
-                {
+                "x": {
                     "column": "x",
                     "type": "number",
+                    "label": {},
                     "options": {
                         "size": 5
                     }
                 },
-                {
+                "y": {
                     "column": "y",
                     "type": "number",
+                    "label": {},
                     "options": {
                         "size": 5,
                         "row_break": true
                     }
                 },
-                {
+                "z": {
                     "column": "z",
                     "type": "hidden",
+                    "label": {
+                        "type": "hidden"
+                    },
                     "options": {}
                 },
-                {
+                "t": {
                     "column": "t",
                     "type": "hidden",
+                    "label": {
+                        "type": "hidden"
+                    },
                     "options": {}
-                },
-                {
+                }
+            },
+            "fields": [
+                "caption",
+                "repeat",
+                "x",
+                "y",
+                "z",
+                "t",
+                "id",
+                "panel_id",
+                "picture_id"
+            ]
+        },
+        "GroundColor": "ground_color",
+        "ground_color": {
+            "attributes": {
+                "id": {
                     "column": "id",
                     "type": "hidden",
+                    "label": {
+                        "type": "hidden"
+                    },
                     "options": {}
                 },
-                {
+                "panel_id": {
                     "column": "panel_id",
                     "type": "hidden",
+                    "label": {
+                        "type": "hidden"
+                    },
                     "options": {}
                 },
-                {
-                    "column": "picture_id",
-                    "type": "hidden",
-                    "options": {}
-                }
-            ]
-        },
-        "GroundColor": "ground_color",
-        "ground_color": {
-            "fields": [
-                {
+                "caption": {
                     "column": "caption",
                     "type": "text",
+                    "label": {},
                     "options": {
                         "row_break": true
                     }
                 },
-                {
+                "code": {
                     "column": "code",
                     "type": "hidden",
+                    "label": {
+                        "row_break": true
+                    },
                     "options": {
-                        "label_break": true,
                         "row_break": true
                     },
                     "helpers": {
@@ -1214,26 +1452,30 @@ module ApplicationHelper
                         }
                     }
                 },
-                {
+                "z": {
                     "column": "z",
                     "type": "hidden",
+                    "label": {
+                        "type": "hidden"
+                    },
                     "options": {}
                 },
-                {
+                "t": {
                     "column": "t",
                     "type": "hidden",
-                    "options": {}
-                },
-                {
-                    "column": "id",
-                    "type": "hidden",
-                    "options": {}
-                },
-                {
-                    "column": "panel_id",
-                    "type": "hidden",
+                    "label": {
+                        "type": "hidden"
+                    },
                     "options": {}
                 }
+            },
+            "fields": [
+                "id",
+                "panel_id",
+                "caption",
+                "code",
+                "z",
+                "t"
             ]
         }
     },