From: yasushiito Date: Tue, 11 Feb 2014 23:44:10 +0000 (+0900) Subject: fix form X-Git-Url: http://git.osdn.net/view?p=pettanr%2Fpettanr.git;a=commitdiff_plain;h=623fb328302e8daec437b33f9511cdb491cbc203 fix form --- diff --git a/app/assets/javascripts/manifest/work/controllers.js.coffee.erb b/app/assets/javascripts/manifest/work/controllers.js.coffee.erb index 013fe6ca..3eaf78c2 100644 --- a/app/assets/javascripts/manifest/work/controllers.js.coffee.erb +++ b/app/assets/javascripts/manifest/work/controllers.js.coffee.erb @@ -36,6 +36,9 @@ count_by_panel: { type: 'count', }, + new: { + type: 'new', + }, }, }, scroll_panels: { diff --git a/app/assets/javascripts/manifest/work/forms.js.coffee.erb b/app/assets/javascripts/manifest/work/forms.js.coffee.erb index 435ba737..52793ee8 100644 --- a/app/assets/javascripts/manifest/work/forms.js.coffee.erb +++ b/app/assets/javascripts/manifest/work/forms.js.coffee.erb @@ -23,6 +23,76 @@ ] @forms = { base: { + scroll: { + fields: { + title: { + args: { + column: 'title', + label: { + }, + tag: { + type: 'text', + }, + row_break: true, + }, + }, + description: { + args: { + column: 'description', + label: { + }, + tag: { + type: 'text_area', + args: { + options: { + size: 5, + }, + }, + }, + }, + }, + visible: { + args: { + column: 'visible', + label: { + }, + tag: { + type: 'select', + }, + row_break: true, + }, + }, + id: { + args: { + column: 'id', + label: { + type: 'none', + }, + tag: { + type: 'hidden', + }, + }, + }, + author_id: { + args: { + column: 'author_id', + label: { + type: 'none', + }, + tag: { + type: 'hidden', + }, + }, + }, + }, + field_names: [ + 'title', + 'description', + 'visible', + 'id', + 'author_id', + ] + }, panel: { fields: { caption: { @@ -44,7 +114,9 @@ tag: { type: 'number', args: { - size: 5, + options: { + size: 5, + }, }, }, }, @@ -57,7 +129,9 @@ tag: { type: 'number', args: { - size: 5, + options: { + size: 5, + }, }, }, row_break: true, @@ -71,7 +145,9 @@ tag: { type: 'number', args: { - size: 5, + options: { + size: 5, + }, }, }, }, @@ -141,7 +217,9 @@ tag: { type: 'number', args: { - size: 5, + options: { + size: 5, + }, }, }, }, @@ -154,7 +232,9 @@ tag: { type: 'number', args: { - size: 5, + options: { + size: 5, + }, }, }, row_break: true, @@ -168,7 +248,9 @@ tag: { type: 'number', args: { - size: 5, + options: { + size: 5, + }, }, }, helpers: { @@ -191,7 +273,9 @@ tag: { type: 'number', args: { - size: 5, + options: { + size: 5, + }, }, }, helpers: { @@ -438,7 +522,9 @@ tag: { type: 'number', args: { - size: 5, + options: { + size: 5, + }, }, }, helpers: { @@ -463,7 +549,9 @@ tag: { type: 'number', args: { - size: 5, + options: { + size: 5, + }, }, }, }, @@ -479,7 +567,9 @@ tag: { type: 'number', args: { - size: 5, + options: { + size: 5, + }, }, }, row_break: true, @@ -496,7 +586,9 @@ tag: { type: 'number', args: { - size: 5, + options: { + size: 5, + }, }, }, }, @@ -512,7 +604,9 @@ tag: { type: 'number', args: { - size: 5, + options: { + size: 5, + }, }, }, row_break: true, @@ -667,7 +761,9 @@ tag: { type: 'text', args: { - size: 5, + options: { + size: 5, + }, }, }, }, @@ -684,7 +780,9 @@ tag: { type: 'text_area', args: { - size: '45x5', + options: { + size: '45x5', + }, }, }, }, @@ -797,7 +895,9 @@ tag: { type: 'number', args: { - size: 5, + options: { + size: 5, + }, }, }, }, @@ -810,7 +910,9 @@ tag: { type: 'number', args: { - size: 5, + options: { + size: 5, + }, }, }, row_break: true, @@ -926,7 +1028,9 @@ tag: { type: 'number', args: { - size: 5, + options: { + size: 5, + }, }, }, }, @@ -939,7 +1043,9 @@ tag: { type: 'number', args: { - size: 5, + options: { + size: 5, + }, } }, row_break: true, diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 48481d6b..fed89b0f 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -108,13 +108,18 @@ class ApplicationController < ActionController::Base Manifest.manifest.profiler_managers[self.model.item_name] end + def set_model + @my_controller = Manifest.manifest.controllers[params[:controller].to_s] + @my_action = @my_controller.actions[params[:action].to_s] + @my_model = Manifest.manifest.models[@my_action.item_name] + @my_model_class = @my_model.classify + end + def set_list - my_controller = Manifest.manifest.controllers[params[:controller].to_s] - my_action = my_controller.actions[params[:action].to_s] - my_model = Manifest.manifest.models[my_action.item_name] - my_model_list = my_model.lists[my_action.list_name] - my_list = Manifest.manifest.lists[my_action.item_name] - @list = my_list[my_action.list_name] + set_model + @my_model_list = @my_model.lists[@my_action.list_name] + @my_list = Manifest.manifest.lists[@my_action.item_name] + @list = @my_list[@my_action.list_name] end def filer_list @@ -134,6 +139,22 @@ class ApplicationController < ActionController::Base end end + def form_new + set_model + @item = @my_model_class.new + @item.supply_default + respond_to do |format| + format.html { + @form = Manifest::View::Form.new @item.item_name, @item, true, @operators + render @form.template_name, :locals => { + :form => @form + } + } + format.js + format.json { render json: @item.to_json(@my_model_class.show_json_opt) } + end + end + def list_count set_list j = {:count => @list.count(@operators, {:id => params[:id]})} diff --git a/app/controllers/scrolls_controller.rb b/app/controllers/scrolls_controller.rb index 8e271c57..33bb1f62 100644 --- a/app/controllers/scrolls_controller.rb +++ b/app/controllers/scrolls_controller.rb @@ -73,13 +73,7 @@ class ScrollsController < ApplicationController end def new - @scroll = Scroll.new - @scroll.supply_default - respond_to do |format| - format.html - format.js - format.json { render json: @scroll.to_json(Scroll.show_json_opt) } - end + form_new end def edit diff --git a/app/models/artist.rb b/app/models/artist.rb index 38061332..04a6edf6 100644 --- a/app/models/artist.rb +++ b/app/models/artist.rb @@ -1,4 +1,4 @@ -class Artist < Pettanr::Owner +class Artist < Peta::Owner belongs_to :user has_many :original_pictures has_many :pictures diff --git a/app/models/author.rb b/app/models/author.rb index 2ea53681..e571bc3c 100644 --- a/app/models/author.rb +++ b/app/models/author.rb @@ -1,4 +1,4 @@ -class Author < Pettanr::Owner +class Author < Peta::Owner belongs_to :user has_many :scrolls has_many :comics diff --git a/app/models/balloon.rb b/app/models/balloon.rb index 7f50e806..ad9bbe45 100644 --- a/app/models/balloon.rb +++ b/app/models/balloon.rb @@ -1,5 +1,5 @@ -class Balloon < Pettanr::Content - include ElementPart +class Balloon < Peta::Content + include Peta::ElementPart belongs_to :speech_balloon belongs_to :system_picture diff --git a/app/models/comic.rb b/app/models/comic.rb index 40bfeb80..9664ded9 100644 --- a/app/models/comic.rb +++ b/app/models/comic.rb @@ -1,5 +1,5 @@ #コミック -class Comic < Pettanr::Content +class Comic < Peta::Content has_many :stories, :order => 't' belongs_to :author diff --git a/app/models/ground_color.rb b/app/models/ground_color.rb index ea59cc4d..85f0dc20 100644 --- a/app/models/ground_color.rb +++ b/app/models/ground_color.rb @@ -1,5 +1,5 @@ -class GroundColor < Pettanr::Content - include Element +class GroundColor < Peta::Content + include Peta::Element include ElementInspire belongs_to :panel belongs_to :color diff --git a/app/models/ground_picture.rb b/app/models/ground_picture.rb index 0959c612..f356aa28 100644 --- a/app/models/ground_picture.rb +++ b/app/models/ground_picture.rb @@ -1,5 +1,5 @@ -class GroundPicture < Pettanr::Content - include Element +class GroundPicture < Peta::Content + include Peta::Element include ElementInspire belongs_to :panel belongs_to :picture diff --git a/app/models/license.rb b/app/models/license.rb index ffb4b3ba..fc264af2 100644 --- a/app/models/license.rb +++ b/app/models/license.rb @@ -1,5 +1,5 @@ # -class License < Pettanr::Item +class License < Peta::Item belongs_to :license_group belongs_to :system_picture has_many :resource_pictures diff --git a/app/models/license_group.rb b/app/models/license_group.rb index 42402ed9..34c66ab4 100644 --- a/app/models/license_group.rb +++ b/app/models/license_group.rb @@ -1,5 +1,5 @@ #ライセンスグループ -class LicenseGroup < Pettanr::Item +class LicenseGroup < Peta::Item has_many :licenses validates :name, :presence => true, :length => {:maximum => 50}, :uniqueness => true diff --git a/app/models/original_picture.rb b/app/models/original_picture.rb index f29212cc..32156279 100644 --- a/app/models/original_picture.rb +++ b/app/models/original_picture.rb @@ -1,4 +1,4 @@ -class OriginalPicture < Pettanr::Content +class OriginalPicture < Peta::Content belongs_to :artist belongs_to :original_picture_license_group has_one :resource_picture diff --git a/app/models/panel.rb b/app/models/panel.rb index 137b2c0f..28029edf 100644 --- a/app/models/panel.rb +++ b/app/models/panel.rb @@ -1,5 +1,5 @@ #コマ -class Panel < Pettanr::Content +class Panel < Peta::Content belongs_to :author has_many :scroll_panels has_many :sheet_panels diff --git a/app/models/panel_picture.rb b/app/models/panel_picture.rb index e74806cf..0e05933c 100644 --- a/app/models/panel_picture.rb +++ b/app/models/panel_picture.rb @@ -1,5 +1,5 @@ -class PanelPicture < Pettanr::Content - include Element +class PanelPicture < Peta::Content + include Peta::Element include ElementInspire belongs_to :panel belongs_to :picture diff --git a/app/models/picture.rb b/app/models/picture.rb index 89b95fb2..255d932a 100644 --- a/app/models/picture.rb +++ b/app/models/picture.rb @@ -1,5 +1,5 @@ #実素材 -class Picture < Pettanr::Content +class Picture < Peta::Content belongs_to :original_picture belongs_to :license belongs_to :artist diff --git a/app/models/resource_picture.rb b/app/models/resource_picture.rb index 34c3a402..fe6812dd 100644 --- a/app/models/resource_picture.rb +++ b/app/models/resource_picture.rb @@ -1,5 +1,5 @@ #素材 -class ResourcePicture < Pettanr::Content +class ResourcePicture < Peta::Content belongs_to :artist belongs_to :license belongs_to :picture diff --git a/app/models/scroll.rb b/app/models/scroll.rb index 395a84f4..ab8e6585 100644 --- a/app/models/scroll.rb +++ b/app/models/scroll.rb @@ -1,4 +1,4 @@ -class Scroll < Pettanr::Content +class Scroll < Peta::Content has_many :scroll_panels belongs_to :author @@ -52,6 +52,11 @@ class Scroll < Pettanr::Content {:include => {:scroll_panels => {:include => {:panel => {}}}, :author => {}}} end + def tag_attributes column = nil, opt = {} + { + } + end + def self.visible_count Scroll.count 'visible > 0' end diff --git a/app/models/scroll_panel.rb b/app/models/scroll_panel.rb index 9ff9fc24..78e1cb6a 100644 --- a/app/models/scroll_panel.rb +++ b/app/models/scroll_panel.rb @@ -1,4 +1,4 @@ -class ScrollPanel < Pettanr::Content +class ScrollPanel < Peta::Content belongs_to :author belongs_to :panel belongs_to :scroll diff --git a/app/models/sheet.rb b/app/models/sheet.rb index 3161dab7..269dd210 100644 --- a/app/models/sheet.rb +++ b/app/models/sheet.rb @@ -1,4 +1,4 @@ -class Sheet < Pettanr::Content +class Sheet < Peta::Content has_many :sheet_panels has_many :story_sheets belongs_to :author diff --git a/app/models/sheet_panel.rb b/app/models/sheet_panel.rb index b3abfe68..66373fae 100644 --- a/app/models/sheet_panel.rb +++ b/app/models/sheet_panel.rb @@ -1,4 +1,4 @@ -class SheetPanel < Pettanr::Content +class SheetPanel < Peta::Content belongs_to :author belongs_to :panel belongs_to :sheet diff --git a/app/models/speech.rb b/app/models/speech.rb index 82e99c4d..c6d0cf86 100644 --- a/app/models/speech.rb +++ b/app/models/speech.rb @@ -1,5 +1,5 @@ -class Speech < Pettanr::Content - include ElementPart +class Speech < Peta::Content + include Peta::ElementPart belongs_to :speech_balloon belongs_to :writing_format diff --git a/app/models/speech_balloon.rb b/app/models/speech_balloon.rb index a46b02df..dde1ed1b 100644 --- a/app/models/speech_balloon.rb +++ b/app/models/speech_balloon.rb @@ -1,5 +1,5 @@ -class SpeechBalloon < Pettanr::Content - include Element +class SpeechBalloon < Peta::Content + include Peta::Element include ElementInspire has_one :balloon, :dependent => :destroy has_one :speech, :dependent => :destroy diff --git a/app/models/speech_balloon_template.rb b/app/models/speech_balloon_template.rb index e04ef29f..65d4908a 100644 --- a/app/models/speech_balloon_template.rb +++ b/app/models/speech_balloon_template.rb @@ -1,5 +1,5 @@ #フキダシテンプレート -class SpeechBalloonTemplate < Pettanr::Item +class SpeechBalloonTemplate < Peta::Item has_many :speech_balloons belongs_to :system_picture diff --git a/app/models/story.rb b/app/models/story.rb index 899ff125..a3894f29 100644 --- a/app/models/story.rb +++ b/app/models/story.rb @@ -1,5 +1,5 @@ #ストーリー -class Story < Pettanr::Content +class Story < Peta::Content has_many :story_sheets belongs_to :comic diff --git a/app/models/story_sheet.rb b/app/models/story_sheet.rb index 65be87ab..f6e877ce 100644 --- a/app/models/story_sheet.rb +++ b/app/models/story_sheet.rb @@ -1,4 +1,4 @@ -class StorySheet < Pettanr::Content +class StorySheet < Peta::Content belongs_to :author belongs_to :story belongs_to :sheet diff --git a/app/models/system_picture.rb b/app/models/system_picture.rb index b89e595b..19226a5c 100644 --- a/app/models/system_picture.rb +++ b/app/models/system_picture.rb @@ -1,4 +1,4 @@ -class SystemPicture < Pettanr::Item +class SystemPicture < Peta::Item has_many :balloons has_many :speech_balloon_templates has_many :licenses diff --git a/app/models/writing_format.rb b/app/models/writing_format.rb index 5dc12c16..97965f68 100644 --- a/app/models/writing_format.rb +++ b/app/models/writing_format.rb @@ -1,4 +1,4 @@ -class WritingFormat < Pettanr::Item +class WritingFormat < Peta::Item has_many :speeches belongs_to :system_picture diff --git a/app/views/scrolls/new.html.erb b/app/views/scrolls/new.html.erb index 2b0b2ef6..e69de29b 100644 --- a/app/views/scrolls/new.html.erb +++ b/app/views/scrolls/new.html.erb @@ -1,5 +0,0 @@ -

<%= t('.title') %>

- -<%= render 'form' %> - -<%= link_to t('link.back'), scrolls_path %> diff --git a/app/views/templates/r/form/_fields.html.erb b/app/views/templates/r/form/_fields.html.erb new file mode 100644 index 00000000..15b510e6 --- /dev/null +++ b/app/views/templates/r/form/_fields.html.erb @@ -0,0 +1,5 @@ +
+ <% form.each_field do |field_name, field| %> + <%= render field.template_name, :field => field %> + <% end %> +
diff --git a/app/views/templates/r/form/_form.html.erb b/app/views/templates/r/form/_form.html.erb index fb8ca182..6a97d601 100644 --- a/app/views/templates/r/form/_form.html.erb +++ b/app/views/templates/r/form/_form.html.erb @@ -1,6 +1,3 @@ -<%= form_for(form.element, :html => form.element.tag_attributes('form', 'data-form-name' => form.name)) do |f| %> - <% form.each_field do |field| %> - <%= render field.template_name, :field => field %> - <%= render field.row_break.template_name, :row_break => field.row_break %> - <% end %> +<%= form_for(form.item, :html => form.item.tag_attributes('form', 'data-form-name' => form.form_name)) do |f| %> + <%= render form.fields_template_name, :form => form %> <% end %> diff --git a/app/views/templates/r/form/_field.html.erb b/app/views/templates/r/form/field/_element.html.erb similarity index 81% rename from app/views/templates/r/form/_field.html.erb rename to app/views/templates/r/form/field/_element.html.erb index 6e64bbce..16503cd9 100644 --- a/app/views/templates/r/form/_field.html.erb +++ b/app/views/templates/r/form/field/_element.html.erb @@ -5,3 +5,4 @@ <%= render helper.template_name, :helper => helper %> <% end %> +<%= render field.row_break_template_name, :field => field %> diff --git a/app/views/templates/r/form/form.html.erb b/app/views/templates/r/form/form.html.erb new file mode 100644 index 00000000..4757c000 --- /dev/null +++ b/app/views/templates/r/form/form.html.erb @@ -0,0 +1 @@ +<%= render form.template_name, :form => form %> diff --git a/app/views/templates/r/form/label/_default.html.erb b/app/views/templates/r/form/label/_default.html.erb index 04d7b269..4732c28d 100644 --- a/app/views/templates/r/form/label/_default.html.erb +++ b/app/views/templates/r/form/label/_default.html.erb @@ -1,6 +1,4 @@ diff --git a/app/views/templates/r/form/label_row_break/_break.html.erb b/app/views/templates/r/form/label_row_break/_break.html.erb new file mode 100644 index 00000000..b6ac048f --- /dev/null +++ b/app/views/templates/r/form/label_row_break/_break.html.erb @@ -0,0 +1 @@ +
diff --git a/app/views/templates/r/form/label_row_break/_no_break.html.erb b/app/views/templates/r/form/label_row_break/_no_break.html.erb new file mode 100644 index 00000000..e69de29b diff --git a/app/views/templates/r/form/row_break/_break.html.erb b/app/views/templates/r/form/row_break/_break.html.erb new file mode 100644 index 00000000..b6ac048f --- /dev/null +++ b/app/views/templates/r/form/row_break/_break.html.erb @@ -0,0 +1 @@ +
diff --git a/app/views/templates/r/form/row_break/_no_break.html.erb b/app/views/templates/r/form/row_break/_no_break.html.erb new file mode 100644 index 00000000..e69de29b diff --git a/app/views/templates/r/form/tag/_text.html.erb b/app/views/templates/r/form/tag/_text.html.erb new file mode 100644 index 00000000..7622d7e9 --- /dev/null +++ b/app/views/templates/r/form/tag/_text.html.erb @@ -0,0 +1 @@ +<%= text_field_tag tag.form_field_name, tag.value, tag.field_tag_attributes %> diff --git a/config/environment.rb b/config/environment.rb index eade9807..3797f80e 100644 --- a/config/environment.rb +++ b/config/environment.rb @@ -10,11 +10,7 @@ require 'ar_helper' require 'operator' require 'import_result' require 'common' -require 'item' -require 'owner' -require 'content' -require 'element' -require 'element_part' +require 'peta' # Initialize the rails application Pettanr::Application.initialize! require_dependency 'manifest' diff --git a/config/environments/development.rb b/config/environments/development.rb index ce877c66..4b6668dd 100644 --- a/config/environments/development.rb +++ b/config/environments/development.rb @@ -3,6 +3,7 @@ Pettanr::Application.configure do ActiveSupport::Dependencies.autoload_paths << File::join( Rails.root, 'lib') ActiveSupport::Dependencies.explicitly_unloadable_constants << 'Editor' ActiveSupport::Dependencies.explicitly_unloadable_constants << 'Manifest' + ActiveSupport::Dependencies.explicitly_unloadable_constants << 'Peta' # Settings specified here will take precedence over those in config/application.rb # In the development environment your application's code is reloaded on diff --git a/lib/content.rb b/lib/content.rb deleted file mode 100644 index 45e0aaf0..00000000 --- a/lib/content.rb +++ /dev/null @@ -1,57 +0,0 @@ -class Pettanr::Content < Pettanr::Item - self.abstract_class = true - # ClassMethods - - def self.owner_model - nil - end - - def self.owner_type - :author - end - - def self.content? - true - end - - def self.operator operators - case self.owner_type - when :author - operators.author - when :artist - operators.artist - else - nil - end - end - - def self.owner_column - self.owner_type.to_s + '_id' - end - - def self.edit content_id, operators - content = self.find content_id, self.show_opt - raise ActiveRecord::Forbidden unless content.own?(operators) - content - end - - #InstanceMethods - - def owner_model - self.class.owner_model ? self.__send__(self.class.owner_model.item_name) : self - end - - def visible? operators - super - return true if owner_model.own?(operators) - true - end - - def own? operators - operator = self.class.operator operators - return false unless operator - owner_model.attributes[self.class.owner_column] == operator.id - end - -end - diff --git a/lib/element.rb b/lib/element.rb deleted file mode 100644 index 3cfa688a..00000000 --- a/lib/element.rb +++ /dev/null @@ -1,191 +0,0 @@ -module Element - def self.included(base) - base.extend(ClassMethods) - base.__send__ :include, InstanceMethods - end - - module ClassMethods - def colum_structures - raise - end - - def list_opt_for_panel - {} - end - - def show_opt_for_panel - {} - end - - def json_opt_for_panel - {} - end - - def path_name with_engine = false - self.to_s.tableize - end - - end - - module InstanceMethods - private - - public - - def has_picture? - false - end - - def has_part? - false - end - - def parts - @parts ||= [] - end - - def has_helper? column_name - self.class.colum_structures[column_name] and self.class.colum_structures[column_name][:helper] - end - - def element_name - self.class.to_s.underscore - end - - def extend_column - nil - end - - def extend_element_name - self.extend_column ? self.attributes[extend_column] : self.element_name - end - - def find_configurations hash, key - if hash[key].is_a? String - self.find_configurations hash, hash[key] - else - return hash[key] - end - end - - def element_index - @element_index ||= self.t - end - - def parent - @parent ||= self.panel - end - - def parent= content - @parent = content - end - - def new_index - @new_index - end - - def new_index= v - @new_index = v - end - - def new_panel - @new_panel - end - - def new_panel= v - @new_panel = v - end - - def get_panel - self.panel || @new_panel - end - - def tag_id c = nil - 'panel' + self.tag_panel_id + self.tag_element_type + self.tag_element_id + c.to_s - end - - def field_tag_id f - self.tag_id + f.to_s - end - - def tag_panel_id - self.get_panel.new_record? ? '0' : self.get_panel.id.to_s - end - - def tag_element_id - self.new_record? ? '0' : self.id.to_s - end - - def tag_element_type - raise - end - - def tag_new_index - self.new_index.to_s - end - - def path_name with_engine = false - self.class.path_name(with_engine) - end - - def form_template with_engine = false - self.path_name(with_engine) + '/form' - end - - def scenario_template with_engine = false - self.path_name(with_engine) + '/scenario' - end - - def element_face_template with_engine = false - self.path_name(with_engine) + '/element_face' - end - - def form_helper_template(colum_name) - self.class.colum_structures[colum_name][:helper] - end - - def tag_attributes column = nil, opt = {} - { - :id => self.field_tag_id(column), :panel_id => self.tag_panel_id, - :element_id => self.tag_element_id, :element_type => self.tag_element_type - }.merge(opt) - end - - def field_tag_attributes column, no_attr, opt = {} - self.tag_attributes(column).merge( - {:column => column, :new_index => self.tag_new_index, :no_attr => no_attr} - ).merge(opt) - end - - #render element by body - def any_tag_attributes name = nil, opt = {} - r = self.tag_attributes(name) - r.merge!( - {:new_index => self.tag_new_index} - ) if self.new_index - r.merge(opt) - end - - def select_tag_attributes(selected, column, no_attr) - [ - :last, :first, - {:html => {:selected => selected}}, - self.field_tag_attributes(column, no_attr) - ] - end - - def tag_attr column = nil, opt = {} - self.tag_attributes(column, opt).to_attr - end - - def field_tag_attr column, no_attr, opt = {} - self.field_tag_attributes(column, no_attr, opt).to_attr - end - - def any_tag_attr name = nil, opt = {} - self.any_tag_attributes(name, opt).to_attr - end - - end -end - diff --git a/lib/element_part.rb b/lib/element_part.rb deleted file mode 100644 index 0a1a69f1..00000000 --- a/lib/element_part.rb +++ /dev/null @@ -1,153 +0,0 @@ -module ElementPart - def self.included(base) - base.extend(ClassMethods) - base.__send__ :include, InstanceMethods - end - - module ClassMethods - def colum_structures - raise - end - - def list_opt_for_panel - {} - end - - def show_opt_for_panel - {} - end - - def json_opt_for_panel - {} - end - - def path_name with_engine = false - self.to_s.tableize - end - - end - - module InstanceMethods - private - - public - - def has_picture? - false - end - - def has_helper? column_name - self.class.colum_structures[column_name] and self.class.colum_structures[column_name][:helper] - end - - def new_parent - @new_parent - end - - def new_parent= v - @new_parent = v - end - - def get_parent - raise - end - - def get_panel_id - if self.get_parent == nil or self.get_parent.panel == nil or self.get_parent.panel.new_record? - 0 - else - self.get_parent.panel.id - end - end - - def tag_id c = nil - 'panel' + self.tag_panel_id + self.tag_element_type + self.tag_element_id + self.tag_element_part_type + self.tag_element_part_id + c.to_s - end - - def field_tag_id f - self.tag_id + f.to_s - end - - def tag_panel_id - self.get_panel_id.to_s - end - - def tag_element_id - r = if self.get_parent == nil or self.get_parent.new_record? - 0 - else - self.get_parent.id - end - r.to_s - end - - def tag_element_type - self.get_parent.tag_element_type - end - - def tag_element_part_id - self.new_record? ? '0' : self.id.to_s - end - - def tag_element_part_type - 'speech' - end - - def tag_new_index - if self.get_parent == nil - nil - else - self.get_parent.tag_new_index - end - end - - def form_helper_template(colum_name) - self.class.colum_structures[colum_name][:helper] - end - - def tag_attributes column = nil, opt = {} - { - :id => self.field_tag_id(column), :panel_id => self.tag_panel_id, - :element_id => self.tag_element_id, :element_type => self.tag_element_type, - :element_part_id => self.tag_element_part_id, :element_part_type => self.tag_element_part_type - }.merge(opt) - end - - def field_tag_attributes column, no_attr, opt = {} - self.tag_attributes(column).merge( - {:column => column, :new_index => self.tag_new_index, :no_attr => no_attr} - ).merge(opt) - end - - #render element by body - def any_tag_attributes name = nil, opt = {} - r = self.tag_attributes(name) - r.merge!( - {:new_index => self.tag_new_index} - ) if self.new_index - r.merge(opt) - end - - def select_tag_attributes(selected, column, no_attr) - [ - :last, :first, - {:html => {:selected => selected}}, - self.field_tag_attributes(column, no_attr) - ] - end - - def tag_attr column = nil, opt = {} - self.tag_attributes(column, opt).to_attr - end - - def field_tag_attr column, no_attr, opt = {} - self.field_tag_attributes(column, no_attr, opt).to_attr - end - - def any_tag_attr name = nil, opt = {} - self.any_tag_attributes(name, opt).to_attr - end - - end -end - diff --git a/lib/item.rb b/lib/item.rb deleted file mode 100644 index d4b77c70..00000000 --- a/lib/item.rb +++ /dev/null @@ -1,187 +0,0 @@ -class Pettanr::Item < ActiveRecord::Base - self.abstract_class = true - # ClassMethods - # class_name - # table_name - - before_validation :valid_encode - - def self.singular - self.to_s - end - - def self.plural - self.singular.pluralize - end - - def self.item_name - self.singular.underscore - end - - def self.item? - true - end - - def self.content? - false - end - - def self.path_name with_engine = false - self.plural.underscore - end - - def self.valid_encode_columns - [] - end - - def self.visible_count_options - nil - end - - def self.list_where - '' - end - - def self.list_order - '' - end - - def self.list_opt - {} - end - - def self.list_json_opt - {} - end - - def self.show item_id, operators - opt = {} - opt.merge!(self.show_opt) - item = self.find(item_id, opt) - raise ActiveRecord::Forbidden unless item.visible?(operators) - item - end - - def self.show_opt - {} - end - - def self.show_json_opt - {} - end - - def self.visible_count - self.count self.visible_count_options - end - - def self.visible_count_options - [] - end - - #InstanceMethods - - def item_name - self.class.item_name - end - - def model_name - self.item_name - end - - def extend_column - nil - end - - def extend_item_name - self.extend_column ? self.attributes[self.extend_column] : self.item_name - end - - def form_name - self.extend_item_name - end - - def valid_encode - self.class.valid_encode_columns.each do |a| - next if attributes[a] == nil - raise Pettanr::BadRequest unless attributes[a].valid_encoding? - end - end - - def supply_default - end - - def overwrite - end - - def visible? operators - if Manifest.manifest.magic_numbers['run_mode'] == 0 - return false unless operators.guest? - else - return false unless operators.resource_reader? - end - true - end - - def dom_id_item - self.new_record? ? '0' : self.id.to_s - end - - def tag_item_id c = nil - self.item_name + self.item_id + c.to_s - end - - def dom_id_item_field field_name - self.tag_item_id + field_name.to_s - end - - def path_name with_engine = false - self.class.path_name(with_engine) - end - - def form_template with_engine = false - self.path_name(with_engine) + '/form' - end - - def tag_item_attributes column = nil, opt = {} - { - :id => self.field_tag_id(column), :panel_id => self.tag_panel_id, - :element_id => self.tag_element_id, :element_type => self.tag_element_type - }.merge(opt) - end - - def field_tag_attributes column, no_attr, opt = {} - self.tag_attributes(column).merge( - {:column => column, :new_index => self.tag_new_index, :no_attr => no_attr} - ).merge(opt) - end - - #render element by body - def any_tag_attributes name = nil, opt = {} - r = self.tag_attributes(name) - r.merge!( - {:new_index => self.tag_new_index} - ) if self.new_index - r.merge(opt) - end - - def select_tag_attributes(selected, column, no_attr) - [ - :last, :first, - {:html => {:selected => selected}}, - self.field_tag_attributes(column, no_attr) - ] - end - - def tag_attr column = nil, opt = {} - self.tag_attributes(column, opt).to_attr - end - - def field_tag_attr column, no_attr, opt = {} - self.field_tag_attributes(column, no_attr, opt).to_attr - end - - def any_tag_attr name = nil, opt = {} - self.any_tag_attributes(name, opt).to_attr - end - -end diff --git a/lib/manifest/controller/action.rb b/lib/manifest/controller/action.rb index 9814ee41..9fcdf3c9 100644 --- a/lib/manifest/controller/action.rb +++ b/lib/manifest/controller/action.rb @@ -2,12 +2,13 @@ require_dependency "manifest/controller/action/base" require_dependency "manifest/controller/action/list" require_dependency "manifest/controller/action/show" require_dependency "manifest/controller/action/count" +require_dependency "manifest/controller/action/new" module Manifest module ControllerModule class ActionFactory include ActionModule @@types = { - 'list' => ActionList, 'show' => ActionShow, 'count' => ActionCount + 'list' => ActionList, 'show' => ActionShow, 'count' => ActionCount, 'new' => ActionNew } def self.factory controller, action_name, my_manifest my_manifest['type'] ||= 'list' diff --git a/lib/manifest/controller/action/new.rb b/lib/manifest/controller/action/new.rb new file mode 100644 index 00000000..17bffd59 --- /dev/null +++ b/lib/manifest/controller/action/new.rb @@ -0,0 +1,18 @@ +module Manifest + module ControllerModule + module ActionModule + class ActionNew < Base + + def set_default + super + end + + def init + super + end + + end + + end + end +end diff --git a/lib/manifest/form.rb b/lib/manifest/form.rb index f3e24ad9..48d40d0e 100644 --- a/lib/manifest/form.rb +++ b/lib/manifest/form.rb @@ -45,6 +45,12 @@ module Manifest @field_names = @form_manifest['field_names'] end + def each_field + @field_names.each do |field_name| + yield field_name, @fields[field_name] + end + end + end class ExtendForm < Form diff --git a/lib/manifest/form/field/field.rb b/lib/manifest/form/field/field.rb index 6101bc34..10d682de 100644 --- a/lib/manifest/form/field/field.rb +++ b/lib/manifest/form/field/field.rb @@ -6,7 +6,7 @@ module Manifest class Field include FieldModule attr :form, :field_name, :field_manifest, :type, - :model_name, :column_name, :label, :tag, :helper, :row_break + :model_name, :column_name, :label, :tag, :helpers, :row_break def initialize form, field_name, field_manifest @form = form @@ -28,7 +28,7 @@ module Manifest end @field_manifest['args']['label'] ||= {} @field_manifest['args']['tag'] ||= {} - @field_manifest['args']['helper'] ||= {} + @field_manifest['args']['helpers'] ||= {} @field_manifest['args']['row_break'] ||= true end @@ -39,7 +39,10 @@ module Manifest @column_name = @args['column_name'] @label = LabelFactory.factory(self, @args['label']) @tag = TagFactory.factory(self, @args['tag']) - @helper = HelperFactory.factory(self, @args['helper']) + @helpers = {} + @args['helpers'].each {|helper_name, helper_manifest| + @helpers[helper_name] = HelperFactory.factory(self, helper_name, helper_manifest) + } @row_break = @args['row_break'] end @@ -60,7 +63,7 @@ module Manifest attr :part def set_default - super + super @field_manifest['model_name'] ||= '' @field_manifest['column_name'] ||= '' @field_manifest['part'] ||= '' diff --git a/lib/manifest/form/field/helper.rb b/lib/manifest/form/field/helper.rb index d7255d96..09b78b23 100644 --- a/lib/manifest/form/field/helper.rb +++ b/lib/manifest/form/field/helper.rb @@ -5,14 +5,14 @@ module Manifest class HelperFactory include HelperModule @@types = { - 'default' => Default, 'none' => None + 'size' => Size, 'tail_angle' => TailAngle, 'color' => Color, 'popup' => Popup } - def self.factory field, my_manifest + def self.factory field, helper_name, my_manifest type = my_manifest['type'] || 'none' - raise "undefined type for forms > #{field.form_name} > fields > #{field.field_name} > helper\n" unless type + raise "undefined type for forms > #{field.form_name} > fields > #{field.field_name} > helpers > #{helper_name}\n" unless type my_class = @@types[type] - raise "undefined class for forms > #{field.form_name} > fields > #{field.field_name} > helper > #{type}\n" unless my_class - my_class.new(field, my_manifest) + raise "undefined class for forms > #{field.form_name} > fields > #{field.field_name} > helpers > #{helper_name} > #{type}\n" unless my_class + my_class.new(field, helper_name, my_manifest) end end diff --git a/lib/manifest/form/field/helper/helper.rb b/lib/manifest/form/field/helper/helper.rb index a9bcc3a8..700eaee5 100644 --- a/lib/manifest/form/field/helper/helper.rb +++ b/lib/manifest/form/field/helper/helper.rb @@ -5,8 +5,9 @@ module Manifest class Base attr :field, :helper_manifest, :type - def initialize field, helper_manifest + def initialize field, helper_name, helper_manifest @field = field + @helper_name = helper_name @helper_manifest = helper_manifest self.set_default self.init @@ -31,10 +32,16 @@ module Manifest end - class Default < Base + class Size < Base end - class None < Base + class TailAngle < Base + end + + class Color < Base + end + + class Popup < Base end end diff --git a/lib/manifest/form/field/label/label.rb b/lib/manifest/form/field/label/label.rb index 0d5b594a..f94a3539 100644 --- a/lib/manifest/form/field/label/label.rb +++ b/lib/manifest/form/field/label/label.rb @@ -3,7 +3,8 @@ module Manifest module FieldModule module LabelModule class Base - attr :field, :label_manifest, :type + attr :field, :label_manifest, :type, + :row_break def initialize field, label_manifest @field = field @@ -14,11 +15,13 @@ module Manifest def set_default @label_manifest['args'] ||= {} + @label_manifest['args']['row_break'] ||= false end def init @type = @label_manifest['type'] @args = @label_manifest['args'] + @row_break = @args['row_break'] end def form_name @@ -29,6 +32,14 @@ module Manifest @field.field_name end + def model_name + @field.field_manifest.model_name + end + + def column_name + @field.field_manifest.column_name + end + end class Default < Base diff --git a/lib/manifest/form/field/tag/base.rb b/lib/manifest/form/field/tag/base.rb index 02eabfaf..c457315c 100644 --- a/lib/manifest/form/field/tag/base.rb +++ b/lib/manifest/form/field/tag/base.rb @@ -4,7 +4,7 @@ module Manifest module TagModule class Base attr :field, :tag_manifest, :type, - :size + :options def initialize field, tag_manifest @field = field @@ -15,12 +15,13 @@ module Manifest def set_default @tag_manifest['args'] ||= {} + @tag_manifest['args']['options'] ||= {} end def init @type = @tag_manifest['type'] @args = @tag_manifest['args'] - @size = @args['size'] + @options = @args['options'] end def form_name diff --git a/lib/manifest/local/view/filer/body/file_body/file_item/none.rb b/lib/manifest/local/view/filer/body/file_body/file_item/none.rb deleted file mode 100644 index 7e222e4c..00000000 --- a/lib/manifest/local/view/filer/body/file_body/file_item/none.rb +++ /dev/null @@ -1,51 +0,0 @@ -module Manifest - module View - module FilerModule - module BodyModule - module FileBodyModule - module FileItemModule - class None - attr :file_body - def initialize file_body - @file_body = file_body - end - - def filer - @file_body.filer - end - - def manifest - self.filer.manifest - end - - def item_name - self.filer.item_name - end - - def model - self.filer.model - end - - def items - self.filer.items - end - - def template_dir - self.filer.template_dir + 'item_column/' - end - - def template_file_name - "none" - end - - def template_name - self.template_dir + self.template_file_name - end - - end - end - end - end - end - end -end diff --git a/lib/manifest/local/view/filer/body/file_body/file_item/show.rb b/lib/manifest/local/view/filer/body/file_body/file_item/show.rb deleted file mode 100644 index ebce0868..00000000 --- a/lib/manifest/local/view/filer/body/file_body/file_item/show.rb +++ /dev/null @@ -1,53 +0,0 @@ -module Manifest - module View - module FilerModule - module BodyModule - module FileBodyModule - module FileItemModule - class Show - attr :file_body, :column_name, :renderer - def initialize file_body, column_name, renderer - @file_body = file_body - @column_name = column_name - @renderer = renderer - end - - def filer - @file_body.filer - end - - def manifest - self.filer.manifest - end - - def item_name - self.filer.item_name - end - - def model - self.filer.model - end - - def items - self.filer.items - end - - def template_dir - self.filer.template_dir + 'item_column/' - end - - def template_file_name - "show" - end - - def template_name - self.template_dir + self.template_file_name - end - - end - end - end - end - end - end -end diff --git a/lib/manifest/local/view/form.rb b/lib/manifest/local/view/form.rb index 721180d6..b42ec5cd 100644 --- a/lib/manifest/local/view/form.rb +++ b/lib/manifest/local/view/form.rb @@ -1,41 +1,43 @@ require_dependency "manifest/local/view/form/field" module Manifest - module ViewModule - module FormModule - class FormView - attr :filer_manifest, :item_name, :manifest, :filer_conf, - :fields, :label, :helper, :row_break - def initialize form_manager, item, operators, mounted - @form_manifest = form_manifest - @fields = @items.map {|item| - FieldView.new self, @filer_manifest - } + module View + class Form + include FormModule + attr :form_name, :item, :mounted, :operators, :template_dir, + :fields + def initialize form_name, item, mounted, operators + @form_name = form_name + @item = item + @mounted = mounted + @operators = operators + @manifest = Manifest.manifest.forms[@form_name] + @template_dir = 'templates/r/form/' + @fields = {} + @manifest.each_field do |field_name, field_manifest| + @fields[field_name] = Field.new self, field_name, field_manifest end - - def render view + end + + def each_field + @manifest.each_field do |field_name, field_manifest| + yield field_name, @fields[field_name] end - end - end - - class Form - include FormModule - def self.manager forms - form_views = {} - forms.each {|form_name, form_manifest| - form_views[form_name] = self.new(form_name, form_manifest) - } - form_views + + def template_file_name + "form" end - attr :form_name, :form_manifest - def initialize form_name, form_manifest - @form_name = form_name - @form_manifest = form_manifest + def template_name + self.template_dir + self.template_file_name + end + + def fields_template_name + self.template_dir + 'fields' end - def open element, operators, mounted - FormView.new @form_manifest, item, operators, mounted + def image_dir + '/images/' end end diff --git a/lib/manifest/local/view/form/field.rb b/lib/manifest/local/view/form/field.rb index aa3a5c44..3ed9408f 100644 --- a/lib/manifest/local/view/form/field.rb +++ b/lib/manifest/local/view/form/field.rb @@ -1,18 +1,64 @@ +require_dependency "manifest/local/view/form/field/label" +require_dependency "manifest/local/view/form/field/tag" +require_dependency "manifest/local/view/form/field/helper" module Manifest - module ViewModule + module View module FormModule - class FieldView - attr :filer_manifest, :item_name, :manifest, :filer_conf, - :label, :tag, :helpers, :row_break - def initialize form_manager, item, operators, mounted - @form_manifest = form_manifest - @label = LabelView - @tag = TagView - @helpers = HelperView - @row_break = View - end - - def render view + class Field + include FieldModule + attr :form, :field_name, :field_manifest, + :label, :tag, :helpers, :options + def initialize form, field_name, field_manifest + @form = form + @field_name = field_name + @field_manifest = field_manifest + @label = LabelFactory.factory self, @field_manifest.label.label_manifest + @tag = TagFactory.factory self, @field_manifest.tag.tag_manifest + @helpers = {} + @field_manifest.helpers.each {|helper_name, helper_manifest| + @helpers[helper_name] = HelperFactory.factory self, helper_manifest.helper_manifest + } + @options = {'data-model' => @field_manifest.model_name} + end + + def item + @form.item + end + + def value + self.item.attributes[@field_manifest.column_name] + end + + def form_name + @form.form_name + end + + def template_dir + @form.template_dir + 'field/' + end + + def template_file_name + @field_manifest.type + end + + def template_name + self.template_dir + self.template_file_name + end + + def row_break_template_dir + @form.template_dir + 'row_break/' + end + + def row_break_template_file_name + if @field_manifest.row_break + 'break' + else + 'no_break' + end + end + + def row_break_template_name + self.row_break_template_dir + self.row_break_template_file_name end end diff --git a/lib/manifest/local/view/form/field/label.rb b/lib/manifest/local/view/form/field/label.rb index e69de29b..040b4c79 100644 --- a/lib/manifest/local/view/form/field/label.rb +++ b/lib/manifest/local/view/form/field/label.rb @@ -0,0 +1,24 @@ +require_dependency "manifest/local/view/form/field/label/label" +module Manifest + module View + module FormModule + module FieldModule + class LabelFactory + include LabelModule + @@types = { + 'default' => Default, 'none' => None + } + def self.factory field, my_manifest + my_manifest['type'] ||= 'default' + type = my_manifest['type'] + my_class = @@types[type] + raise "undefined class for local view forms > #{field.form_name} > fields > #{field.field_name} > label > #{type}\n" unless my_class + my_class.new(field, my_manifest) + end + + end + + end + end + end +end diff --git a/lib/manifest/local/view/form/field/label/label.rb b/lib/manifest/local/view/form/field/label/label.rb index 1e7381a9..2793352d 100644 --- a/lib/manifest/local/view/form/field/label/label.rb +++ b/lib/manifest/local/view/form/field/label/label.rb @@ -1,41 +1,93 @@ module Manifest - module FormModule - module FieldModule - module LabelModule - class Base - attr :field, :label_manifest - - def initialize field, label_manifest - @field = field - @label_manifest = label_manifest - self.set_default - self.init - end - - def set_default - @label_manifest['args'] ||= {} + module View + module FormModule + module FieldModule + module LabelModule + class Base + attr :field, :label_manifest + + def initialize field, label_manifest + @field = field + @label_manifest = label_manifest + end + + def form + @field.form + end + + def manifest + self.form.manifest + end + + def form_name + self.form.form_name + end + + def model + self.form.model + end + + def item + self.form.item + end + + def model_name + @label_manifest.model_name + end + + def column_name + @label_manifest.column_name + end + + def template_dir + self.form.template_dir + 'label/' + end + + def template_file_name + raise "undefined template_file_name\n" + end + + def template_name + self.template_dir + self.template_file_name + end + + def label_row_break_template_dir + self.form.template_dir + 'label_row_break/' + end + + def label_row_break_template_file_name + if @label_manifest.row_break + 'break' + else + 'no_break' + end + end + + def label_row_break_template_name + self.label_row_break_template_dir + self.label_row_break_template_file_name + end + end - def init - @args = @label_manifest['args'] + class Default < Base + def template_file_name + 'default' + end + + def label_name + 'activerecord.attributes.' + self.model_name + '.' + self.column_name + end + end - def form_name - @field.form_name + class None < Base + def template_file_name + 'none' + end + end - def field_name - @field.field_name - end - - end - - class Default < Base - end - - class None < Base end - end end end diff --git a/lib/manifest/local/view/form/field/tag.rb b/lib/manifest/local/view/form/field/tag.rb index e69de29b..aa404887 100644 --- a/lib/manifest/local/view/form/field/tag.rb +++ b/lib/manifest/local/view/form/field/tag.rb @@ -0,0 +1,30 @@ +require_dependency "manifest/local/view/form/field/tag/base" +require_dependency "manifest/local/view/form/field/tag/text" +require_dependency "manifest/local/view/form/field/tag/number" +require_dependency "manifest/local/view/form/field/tag/text_area" +require_dependency "manifest/local/view/form/field/tag/select" +require_dependency "manifest/local/view/form/field/tag/hidden" +module Manifest + module View + module FormModule + module FieldModule + class TagFactory + include TagModule + @@types = { + 'text' => TextTag, 'number' => NumberTag, 'text_area' => TextAreaTag, + 'select' => SelectTag, 'hidden' => HiddenTag + } + def self.factory field, my_manifest + my_manifest['type'] ||= 'text' + type = my_manifest['type'] + my_class = @@types[type] + raise "undefined class for local view forms > #{field.form_name} > fields > #{field.field_name} > tag > #{type}\n" unless my_class + my_class.new(field, my_manifest) + end + + end + + end + end + end +end diff --git a/lib/manifest/local/view/form/field/tag/base.rb b/lib/manifest/local/view/form/field/tag/base.rb index ad0f006a..fd434e27 100644 --- a/lib/manifest/local/view/form/field/tag/base.rb +++ b/lib/manifest/local/view/form/field/tag/base.rb @@ -1,52 +1,71 @@ module Manifest - module FormModule - module FieldModule - module TagModule - class Base - attr :field, :tag_manifest, - :size - - def initialize field, tag_manifest - @field = field - @tag_manifest = tag_manifest - self.set_default - self.init - end - - def set_default - @tag_manifest['args'] ||= {} + module View + module FormModule + module FieldModule + module TagModule + class Base + attr :field, :tag_manifest + + def initialize field, tag_manifest + @field = field + @tag_manifest = tag_manifest + end + + def form_field_name + if self.part? + @form.model_name + '[' + self.model_name + '_attributes][' + self.column + ']' + else + @form.model_name + '[' + self.column + ']' end - - def init - @args = @tag_manifest['args'] - @size = @args['size'] + end + + def options + @field.options.merge @tag_manifest.options + end + + def form + @field.form + end + + def manifest + self.form.manifest + end + + def form_name + self.form.form_name + end + + def model + self.form.model + end + + def item + self.form.item + end + + def model_name + @label_manifest.model_name + end + + def column_name + @label_manifest.column_name + end + + def template_dir + self.form.template_dir + 'tag/' + end + + def template_file_name + raise "undefined template_file_name\n" + end + + def template_name + self.template_dir + self.template_file_name + end + end - def form_name - @field.form_name - end - - def field_name - @field.field_name - end - - end - - class TextTag < Base - end - - class NumberTag < Base - end - - class TextAreaTag < Base - end - - class SelectTag < Base - end - - class HiddenTag < Base end - end end end diff --git a/lib/manifest/local/view/form/field/tag/hidden.rb b/lib/manifest/local/view/form/field/tag/hidden.rb index 087c5946..6482ddac 100644 --- a/lib/manifest/local/view/form/field/tag/hidden.rb +++ b/lib/manifest/local/view/form/field/tag/hidden.rb @@ -1,10 +1,12 @@ module Manifest - module FormModule - module FieldModule - module TagModule - class HiddenTag < Base + module View + module FormModule + module FieldModule + module TagModule + class HiddenTag < Base + end + end - end end end diff --git a/lib/manifest/local/view/form/field/tag/number.rb b/lib/manifest/local/view/form/field/tag/number.rb index 1dac3d4f..c7873300 100644 --- a/lib/manifest/local/view/form/field/tag/number.rb +++ b/lib/manifest/local/view/form/field/tag/number.rb @@ -1,10 +1,12 @@ module Manifest - module FormModule - module FieldModule - module TagModule - class NumberTag < Base + module View + module FormModule + module FieldModule + module TagModule + class NumberTag < Base + end + end - end end end diff --git a/lib/manifest/local/view/form/field/tag/select.rb b/lib/manifest/local/view/form/field/tag/select.rb index 0a20eec0..477df6a5 100644 --- a/lib/manifest/local/view/form/field/tag/select.rb +++ b/lib/manifest/local/view/form/field/tag/select.rb @@ -1,10 +1,12 @@ module Manifest - module FormModule - module FieldModule - module TagModule - class SelectTag < Base + module View + module FormModule + module FieldModule + module TagModule + class SelectTag < Base + end + end - end end end diff --git a/lib/manifest/local/view/form/field/tag/text.rb b/lib/manifest/local/view/form/field/tag/text.rb index 24188fb1..f6d8678d 100644 --- a/lib/manifest/local/view/form/field/tag/text.rb +++ b/lib/manifest/local/view/form/field/tag/text.rb @@ -1,10 +1,12 @@ module Manifest - module FormModule - module FieldModule - module TagModule - class TextTag < Base + module View + module FormModule + module FieldModule + module TagModule + class TextTag < Base + end + end - end end end diff --git a/lib/manifest/local/view/form/field/tag/text_area.rb b/lib/manifest/local/view/form/field/tag/text_area.rb index 0dae2124..ee5a8332 100644 --- a/lib/manifest/local/view/form/field/tag/text_area.rb +++ b/lib/manifest/local/view/form/field/tag/text_area.rb @@ -1,10 +1,12 @@ module Manifest - module FormModule - module FieldModule - module TagModule - class TextAreaTag < Base + module View + module FormModule + module FieldModule + module TagModule + class TextAreaTag < Base + end + end - end end end diff --git a/lib/manifest/model.rb b/lib/manifest/model.rb index 087f7919..c2eb4c50 100644 --- a/lib/manifest/model.rb +++ b/lib/manifest/model.rb @@ -44,6 +44,10 @@ module Manifest } end + def classify + ::Manifest.item_name_to_model @model_name + end + end end diff --git a/lib/owner.rb b/lib/owner.rb deleted file mode 100644 index 0d232d5e..00000000 --- a/lib/owner.rb +++ /dev/null @@ -1,23 +0,0 @@ -class Pettanr::Owner < Pettanr::Item - self.abstract_class = true - # ClassMethods - - def self.edit owner_id, operators - owner = self.find owner_id, self.show_opt - raise ActiveRecord::Forbidden unless owner.own?(operators) - owner - end - - #InstanceMethods - - def overwrite operators - self.user_id = operators.user.id - end - - def own? operators - return false unless operators.user - self.user_id == operators.user.id - end - -end - diff --git a/lib/peta.rb b/lib/peta.rb new file mode 100644 index 00000000..28842948 --- /dev/null +++ b/lib/peta.rb @@ -0,0 +1,7 @@ +module Peta +end +require_dependency 'peta/item' +require_dependency 'peta/owner' +require_dependency 'peta/content' +require_dependency 'peta/element' +require_dependency 'peta/element_part' diff --git a/lib/peta/content.rb b/lib/peta/content.rb new file mode 100644 index 00000000..6b59afc7 --- /dev/null +++ b/lib/peta/content.rb @@ -0,0 +1,59 @@ +module Peta + class Content < Item + self.abstract_class = true + # ClassMethods + + def self.owner_model + nil + end + + def self.owner_type + :author + end + + def self.content? + true + end + + def self.operator operators + case self.owner_type + when :author + operators.author + when :artist + operators.artist + else + nil + end + end + + def self.owner_column + self.owner_type.to_s + '_id' + end + + def self.edit content_id, operators + content = self.find content_id, self.show_opt + raise ActiveRecord::Forbidden unless content.own?(operators) + content + end + + #InstanceMethods + + def owner_model + self.class.owner_model ? self.__send__(self.class.owner_model.item_name) : self + end + + def visible? operators + super + return true if owner_model.own?(operators) + true + end + + def own? operators + operator = self.class.operator operators + return false unless operator + owner_model.attributes[self.class.owner_column] == operator.id + end + + end +end + diff --git a/lib/peta/element.rb b/lib/peta/element.rb new file mode 100644 index 00000000..8346bffa --- /dev/null +++ b/lib/peta/element.rb @@ -0,0 +1,193 @@ +module Peta + module Element + def self.included(base) + base.extend(ClassMethods) + base.__send__ :include, InstanceMethods + end + + module ClassMethods + def colum_structures + raise + end + + def list_opt_for_panel + {} + end + + def show_opt_for_panel + {} + end + + def json_opt_for_panel + {} + end + + def path_name with_engine = false + self.to_s.tableize + end + + end + + module InstanceMethods + private + + public + + def has_picture? + false + end + + def has_part? + false + end + + def parts + @parts ||= [] + end + + def has_helper? column_name + self.class.colum_structures[column_name] and self.class.colum_structures[column_name][:helper] + end + + def element_name + self.class.to_s.underscore + end + + def extend_column + nil + end + + def extend_element_name + self.extend_column ? self.attributes[extend_column] : self.element_name + end + + def find_configurations hash, key + if hash[key].is_a? String + self.find_configurations hash, hash[key] + else + return hash[key] + end + end + + def element_index + @element_index ||= self.t + end + + def parent + @parent ||= self.panel + end + + def parent= content + @parent = content + end + + def new_index + @new_index + end + + def new_index= v + @new_index = v + end + + def new_panel + @new_panel + end + + def new_panel= v + @new_panel = v + end + + def get_panel + self.panel || @new_panel + end + + def tag_id c = nil + 'panel' + self.tag_panel_id + self.tag_element_type + self.tag_element_id + c.to_s + end + + def field_tag_id f + self.tag_id + f.to_s + end + + def tag_panel_id + self.get_panel.new_record? ? '0' : self.get_panel.id.to_s + end + + def tag_element_id + self.new_record? ? '0' : self.id.to_s + end + + def tag_element_type + raise + end + + def tag_new_index + self.new_index.to_s + end + + def path_name with_engine = false + self.class.path_name(with_engine) + end + + def form_template with_engine = false + self.path_name(with_engine) + '/form' + end + + def scenario_template with_engine = false + self.path_name(with_engine) + '/scenario' + end + + def element_face_template with_engine = false + self.path_name(with_engine) + '/element_face' + end + + def form_helper_template(colum_name) + self.class.colum_structures[colum_name][:helper] + end + + def tag_attributes column = nil, opt = {} + { + :id => self.field_tag_id(column), :panel_id => self.tag_panel_id, + :element_id => self.tag_element_id, :element_type => self.tag_element_type + }.merge(opt) + end + + def field_tag_attributes column, no_attr, opt = {} + self.tag_attributes(column).merge( + {:column => column, :new_index => self.tag_new_index, :no_attr => no_attr} + ).merge(opt) + end + + #render element by body + def any_tag_attributes name = nil, opt = {} + r = self.tag_attributes(name) + r.merge!( + {:new_index => self.tag_new_index} + ) if self.new_index + r.merge(opt) + end + + def select_tag_attributes(selected, column, no_attr) + [ + :last, :first, + {:html => {:selected => selected}}, + self.field_tag_attributes(column, no_attr) + ] + end + + def tag_attr column = nil, opt = {} + self.tag_attributes(column, opt).to_attr + end + + def field_tag_attr column, no_attr, opt = {} + self.field_tag_attributes(column, no_attr, opt).to_attr + end + + def any_tag_attr name = nil, opt = {} + self.any_tag_attributes(name, opt).to_attr + end + + end + end +end + diff --git a/lib/peta/element_part.rb b/lib/peta/element_part.rb new file mode 100644 index 00000000..26ef2bc3 --- /dev/null +++ b/lib/peta/element_part.rb @@ -0,0 +1,155 @@ +module Peta + module ElementPart + def self.included(base) + base.extend(ClassMethods) + base.__send__ :include, InstanceMethods + end + + module ClassMethods + def colum_structures + raise + end + + def list_opt_for_panel + {} + end + + def show_opt_for_panel + {} + end + + def json_opt_for_panel + {} + end + + def path_name with_engine = false + self.to_s.tableize + end + + end + + module InstanceMethods + private + + public + + def has_picture? + false + end + + def has_helper? column_name + self.class.colum_structures[column_name] and self.class.colum_structures[column_name][:helper] + end + + def new_parent + @new_parent + end + + def new_parent= v + @new_parent = v + end + + def get_parent + raise + end + + def get_panel_id + if self.get_parent == nil or self.get_parent.panel == nil or self.get_parent.panel.new_record? + 0 + else + self.get_parent.panel.id + end + end + + def tag_id c = nil + 'panel' + self.tag_panel_id + self.tag_element_type + self.tag_element_id + self.tag_element_part_type + self.tag_element_part_id + c.to_s + end + + def field_tag_id f + self.tag_id + f.to_s + end + + def tag_panel_id + self.get_panel_id.to_s + end + + def tag_element_id + r = if self.get_parent == nil or self.get_parent.new_record? + 0 + else + self.get_parent.id + end + r.to_s + end + + def tag_element_type + self.get_parent.tag_element_type + end + + def tag_element_part_id + self.new_record? ? '0' : self.id.to_s + end + + def tag_element_part_type + 'speech' + end + + def tag_new_index + if self.get_parent == nil + nil + else + self.get_parent.tag_new_index + end + end + + def form_helper_template(colum_name) + self.class.colum_structures[colum_name][:helper] + end + + def tag_attributes column = nil, opt = {} + { + :id => self.field_tag_id(column), :panel_id => self.tag_panel_id, + :element_id => self.tag_element_id, :element_type => self.tag_element_type, + :element_part_id => self.tag_element_part_id, :element_part_type => self.tag_element_part_type + }.merge(opt) + end + + def field_tag_attributes column, no_attr, opt = {} + self.tag_attributes(column).merge( + {:column => column, :new_index => self.tag_new_index, :no_attr => no_attr} + ).merge(opt) + end + + #render element by body + def any_tag_attributes name = nil, opt = {} + r = self.tag_attributes(name) + r.merge!( + {:new_index => self.tag_new_index} + ) if self.new_index + r.merge(opt) + end + + def select_tag_attributes(selected, column, no_attr) + [ + :last, :first, + {:html => {:selected => selected}}, + self.field_tag_attributes(column, no_attr) + ] + end + + def tag_attr column = nil, opt = {} + self.tag_attributes(column, opt).to_attr + end + + def field_tag_attr column, no_attr, opt = {} + self.field_tag_attributes(column, no_attr, opt).to_attr + end + + def any_tag_attr name = nil, opt = {} + self.any_tag_attributes(name, opt).to_attr + end + + end + end +end + diff --git a/lib/peta/item.rb b/lib/peta/item.rb new file mode 100644 index 00000000..265ec670 --- /dev/null +++ b/lib/peta/item.rb @@ -0,0 +1,189 @@ +module Peta + class Item < ActiveRecord::Base + self.abstract_class = true + # ClassMethods + # class_name + # table_name + + before_validation :valid_encode + + def self.singular + self.to_s + end + + def self.plural + self.singular.pluralize + end + + def self.item_name + self.singular.underscore + end + + def self.item? + true + end + + def self.content? + false + end + + def self.path_name with_engine = false + self.plural.underscore + end + + def self.valid_encode_columns + [] + end + + def self.visible_count_options + nil + end + + def self.list_where + '' + end + + def self.list_order + '' + end + + def self.list_opt + {} + end + + def self.list_json_opt + {} + end + + def self.show item_id, operators + opt = {} + opt.merge!(self.show_opt) + item = self.find(item_id, opt) + raise ActiveRecord::Forbidden unless item.visible?(operators) + item + end + + def self.show_opt + {} + end + + def self.show_json_opt + {} + end + + def self.visible_count + self.count self.visible_count_options + end + + def self.visible_count_options + [] + end + + #InstanceMethods + + def item_name + self.class.item_name + end + + def model_name + self.item_name + end + + def extend_column + nil + end + + def extend_item_name + self.extend_column ? self.attributes[self.extend_column] : self.item_name + end + + def form_name + self.extend_item_name + end + + def valid_encode + self.class.valid_encode_columns.each do |a| + next if attributes[a] == nil + raise Pettanr::BadRequest unless attributes[a].valid_encoding? + end + end + + def supply_default + end + + def overwrite + end + + def visible? operators + if Manifest.manifest.magic_numbers['run_mode'] == 0 + return false unless operators.guest? + else + return false unless operators.resource_reader? + end + true + end + + def dom_id_item + self.new_record? ? '0' : self.id.to_s + end + + def tag_item_id c = nil + self.item_name + self.item_id + c.to_s + end + + def dom_id_item_field field_name + self.tag_item_id + field_name.to_s + end + + def path_name with_engine = false + self.class.path_name(with_engine) + end + + def form_template with_engine = false + self.path_name(with_engine) + '/form' + end + + def tag_item_attributes column = nil, opt = {} + { + :id => self.field_tag_id(column), :panel_id => self.tag_panel_id, + :element_id => self.tag_element_id, :element_type => self.tag_element_type + }.merge(opt) + end + + def field_tag_attributes column, no_attr, opt = {} + self.tag_attributes(column).merge( + {:column => column, :new_index => self.tag_new_index, :no_attr => no_attr} + ).merge(opt) + end + + #render element by body + def any_tag_attributes name = nil, opt = {} + r = self.tag_attributes(name) + r.merge!( + {:new_index => self.tag_new_index} + ) if self.new_index + r.merge(opt) + end + + def select_tag_attributes(selected, column, no_attr) + [ + :last, :first, + {:html => {:selected => selected}}, + self.field_tag_attributes(column, no_attr) + ] + end + + def tag_attr column = nil, opt = {} + self.tag_attributes(column, opt).to_attr + end + + def field_tag_attr column, no_attr, opt = {} + self.field_tag_attributes(column, no_attr, opt).to_attr + end + + def any_tag_attr name = nil, opt = {} + self.any_tag_attributes(name, opt).to_attr + end + + end +end diff --git a/lib/peta/owner.rb b/lib/peta/owner.rb new file mode 100644 index 00000000..72c3cd6d --- /dev/null +++ b/lib/peta/owner.rb @@ -0,0 +1,25 @@ +module Peta + class Owner < Item + self.abstract_class = true + # ClassMethods + + def self.edit owner_id, operators + owner = self.find owner_id, self.show_opt + raise ActiveRecord::Forbidden unless owner.own?(operators) + owner + end + + #InstanceMethods + + def overwrite operators + self.user_id = operators.user.id + end + + def own? operators + return false unless operators.user + self.user_id == operators.user.id + end + + end +end + diff --git a/public/manifest.json b/public/manifest.json index 1cafc040..dc6a6a5e 100644 --- a/public/manifest.json +++ b/public/manifest.json @@ -35,6 +35,9 @@ }, "count_by_panel": { "type": "count" + }, + "new": { + "type": "new" } } }, @@ -842,10 +845,20 @@ } }, "by_panel": { - "type": "through_filter" + "type": "through_filter", + "args": { + "filter_item_name": "panel", + "through": "scroll_panels", + "filter_key": "panel_id" + } }, "play": { - "type": "play" + "type": "play", + "args": { + "filter_item_name": "scroll", + "filter_model_name": "scroll_panel", + "filter_key": "scroll_id" + } } } }, @@ -4391,73 +4404,26 @@ "scroll": { "public_list": {}, "private_list": {}, - "by_author": { - "where": "author", - "includes": "author_id" - }, - "by_panel": { - "type": "through_filter", - "args": { - "from": "panel", - "through": "scroll_panels", - "filter_key": "panel_id" - } - }, - "play": { - "type": "play", - "args": { - "model": "scroll_panel", - "filter_key": "scroll_id" - } - } + "by_author": {}, + "by_panel": {}, + "play": {} }, "scroll_panel": { "public_list": {}, "private_list": {}, - "by_scroll": { - "type": "filter", - "args": { - "from": "scroll", - "filter_key": "scroll_id" - } - }, - "by_panel": { - "type": "filter", - "args": { - "from": "panel", - "filter_key": "panel_id" - } - } + "by_scroll": {}, + "by_panel": {} }, "comic": { "public_list": {}, "private_list": {}, - "by_author": { - "type": "filter", - "args": { - "from": "author", - "filter_key": "author_id" - } - } + "by_author": {} }, "story": { "public_list": {}, "private_list": {}, - "by_comic": { - "type": "filter", - "args": { - "from": "comic", - "filter_key": "comic_id" - } - }, - "by_sheet": { - "type": "through_filter", - "args": { - "from": "sheet", - "through": "story_sheets", - "filter_key": "sheet_id" - } - }, + "by_comic": {}, + "by_sheet": {}, "by_author": { "type": "element_filter", "args": { @@ -4474,53 +4440,17 @@ } }, "story_sheet": { - "public_list": { - "type": "public" - }, - "private_list": { - "type": "private" - }, - "by_story": { - "type": "filter", - "args": { - "from": "story", - "filter_key": "story_id" - } - }, - "by_sheet": { - "type": "filter", - "args": { - "from": "sheet", - "filter_key": "sheet_id" - } - } + "public_list": {}, + "private_list": {}, + "by_story": {}, + "by_sheet": {} }, "sheet": { "public_list": {}, "private_list": {}, - "by_story": { - "type": "through_filter", - "args": { - "from": "story", - "through": "story_sheets", - "filter_key": "story_id" - } - }, - "by_panel": { - "type": "through_filter", - "args": { - "from": "panel", - "through": "sheet_panels", - "filter_key": "panel_id" - } - }, - "by_author": { - "type": "filter", - "args": { - "from": "author", - "filter_key": "author_id" - } - }, + "by_story": {}, + "by_panel": {}, + "by_author": {}, "play": { "type": "play", "args": { @@ -4532,48 +4462,15 @@ "sheet_panel": { "public_list": {}, "private_list": {}, - "by_sheet": { - "type": "filter", - "args": { - "association_name": "sheet_panels", - "from": "sheet", - "filter_key": "sheet_id" - } - }, - "by_panel": { - "type": "filter", - "args": { - "from": "panel", - "filter_key": "panel_id" - } - } + "by_sheet": {}, + "by_panel": {} }, "panel": { "public_list": {}, "private_list": {}, - "by_scroll": { - "type": "through_filter", - "args": { - "from": "scroll", - "through": "scroll_panels", - "filter_key": "scroll_id" - } - }, - "by_sheet": { - "type": "through_filter", - "args": { - "from": "sheet", - "through": "sheet_panels", - "filter_key": "sheet_id" - } - }, - "by_author": { - "type": "filter", - "args": { - "from": "author", - "filter_key": "author_id" - } - }, + "by_scroll": {}, + "by_sheet": {}, + "by_author": {}, "by_speech_balloon_template": { "type": "through_filter", "args": { @@ -4586,13 +4483,7 @@ "panel_picture": { "public_list": {}, "private_list": {}, - "by_panel": { - "type": "filter", - "args": { - "from": "panel", - "filter_key": "panel_id" - } - }, + "by_panel": {}, "by_author": { "where": "by_author_where", "includes": "by_author_includes" @@ -4601,13 +4492,7 @@ "speech_balloon": { "public_list": {}, "private_list": {}, - "by_panel": { - "type": "filter", - "args": { - "from": "panel", - "filter_key": "panel_id" - } - }, + "by_panel": {}, "by_speech_balloon_template": { "type": "filter", "args": { @@ -4615,13 +4500,7 @@ "filter_key": "speech_balloon_template_id" } }, - "by_author": { - "type": "element_filter", - "args": { - "from": "author", - "filter_key": "author_id" - } - } + "by_author": {} }, "speech": { "public_list": {}, @@ -4662,9 +4541,7 @@ }, "ground_picture": { "public_list": {}, - "private_list": { - "type": "private" - }, + "private_list": {}, "by_panel": { "type": "filter", "args": { @@ -4712,13 +4589,7 @@ "filter_key": "license_id" } }, - "by_artist": { - "type": "filter", - "args": { - "from": "artist", - "filter_key": "artist_id" - } - } + "by_artist": {} }, "speech_balloon_template": { "public_list": {}, @@ -4731,13 +4602,7 @@ "select_items": { "type": "system_resource" }, - "by_system_picture": { - "type": "filter", - "args": { - "from": "system_picture", - "filter_key": "system_picture_id" - } - } + "by_system_picture": {} }, "license_group": { "public_list": {}, @@ -4747,20 +4612,8 @@ }, "license": { "public_list": {}, - "by_license_group": { - "type": "filter", - "args": { - "from": "license_group", - "filter_key": "license_group_id" - } - }, - "by_system_picture": { - "type": "filter", - "args": { - "from": "system_picture", - "filter_key": "system_picture_id" - } - } + "by_license_group": {}, + "by_system_picture": {} }, "author": { "public_list": {} @@ -4799,6 +4652,73 @@ ], "forms": { "base": { + "scroll": { + "fields": { + "title": { + "args": { + "column": "title", + "label": {}, + "tag": { + "type": "text" + }, + "row_break": true + } + }, + "description": { + "args": { + "column": "description", + "label": {}, + "tag": { + "type": "text_area", + "args": { + "options": { + "size": 5 + } + } + } + } + }, + "visible": { + "args": { + "column": "visible", + "label": {}, + "tag": { + "type": "select" + }, + "row_break": true + } + }, + "id": { + "args": { + "column": "id", + "label": { + "type": "none" + }, + "tag": { + "type": "hidden" + } + } + }, + "author_id": { + "args": { + "column": "author_id", + "label": { + "type": "none" + }, + "tag": { + "type": "hidden" + } + } + } + }, + "field_names": [ + "title", + "description", + "visible", + "id", + "author_id" + ] + }, "panel": { "fields": { "caption": { @@ -4818,7 +4738,9 @@ "tag": { "type": "number", "args": { - "size": 5 + "options": { + "size": 5 + } } } } @@ -4830,7 +4752,9 @@ "tag": { "type": "number", "args": { - "size": 5 + "options": { + "size": 5 + } } }, "row_break": true @@ -4843,7 +4767,9 @@ "tag": { "type": "number", "args": { - "size": 5 + "options": { + "size": 5 + } } } } @@ -4910,7 +4836,9 @@ "tag": { "type": "number", "args": { - "size": 5 + "options": { + "size": 5 + } } } } @@ -4922,7 +4850,9 @@ "tag": { "type": "number", "args": { - "size": 5 + "options": { + "size": 5 + } } }, "row_break": true @@ -4935,7 +4865,9 @@ "tag": { "type": "number", "args": { - "size": 5 + "options": { + "size": 5 + } } }, "helpers": { @@ -4957,7 +4889,9 @@ "tag": { "type": "number", "args": { - "size": 5 + "options": { + "size": 5 + } } }, "helpers": { @@ -5200,7 +5134,9 @@ "tag": { "type": "number", "args": { - "size": 5 + "options": { + "size": 5 + } } }, "helpers": { @@ -5224,7 +5160,9 @@ "tag": { "type": "number", "args": { - "size": 5 + "options": { + "size": 5 + } } } } @@ -5239,7 +5177,9 @@ "tag": { "type": "number", "args": { - "size": 5 + "options": { + "size": 5 + } } }, "row_break": true @@ -5255,7 +5195,9 @@ "tag": { "type": "number", "args": { - "size": 5 + "options": { + "size": 5 + } } } } @@ -5270,7 +5212,9 @@ "tag": { "type": "number", "args": { - "size": 5 + "options": { + "size": 5 + } } }, "row_break": true @@ -5421,7 +5365,9 @@ "tag": { "type": "text", "args": { - "size": 5 + "options": { + "size": 5 + } } } } @@ -5438,7 +5384,9 @@ "tag": { "type": "text_area", "args": { - "size": "45x5" + "options": { + "size": "45x5" + } } } } @@ -5548,7 +5496,9 @@ "tag": { "type": "number", "args": { - "size": 5 + "options": { + "size": 5 + } } } } @@ -5560,7 +5510,9 @@ "tag": { "type": "number", "args": { - "size": 5 + "options": { + "size": 5 + } } }, "row_break": true @@ -5673,7 +5625,9 @@ "tag": { "type": "number", "args": { - "size": 5 + "options": { + "size": 5 + } } } } @@ -5685,7 +5639,9 @@ "tag": { "type": "number", "args": { - "size": 5 + "options": { + "size": 5 + } } }, "row_break": true