count_by_panel: {\r
type: 'count',\r
},\r
+ new: {\r
+ type: 'new',\r
+ },\r
},\r
},\r
scroll_panels: {\r
]\r
@forms = {\r
base: {\r
+ scroll: {\r
+ fields: {\r
+ title: {\r
+ args: {\r
+ column: 'title',\r
+ label: {\r
+ },\r
+ tag: {\r
+ type: 'text',\r
+ },\r
+ row_break: true,\r
+ },\r
+ },\r
+ description: {\r
+ args: {\r
+ column: 'description',\r
+ label: {\r
+ },\r
+ tag: {\r
+ type: 'text_area',\r
+ args: {\r
+ options: {\r
+ size: 5, \r
+ },\r
+ },\r
+ },\r
+ },\r
+ },\r
+ visible: {\r
+ args: {\r
+ column: 'visible',\r
+ label: {\r
+ },\r
+ tag: {\r
+ type: 'select',\r
+ },\r
+ row_break: true,\r
+ },\r
+ },\r
+ id: {\r
+ args: {\r
+ column: 'id',\r
+ label: {\r
+ type: 'none',\r
+ },\r
+ tag: {\r
+ type: 'hidden',\r
+ },\r
+ },\r
+ },\r
+ author_id: {\r
+ args: {\r
+ column: 'author_id',\r
+ label: {\r
+ type: 'none',\r
+ },\r
+ tag: {\r
+ type: 'hidden',\r
+ },\r
+ },\r
+ },\r
+ },\r
+ field_names: [\r
+ 'title',\r
+ 'description',\r
+ 'visible',\r
+ 'id',\r
+ 'author_id',\r
+ ]\r
+ },\r
panel: {\r
fields: {\r
caption: {\r
tag: {\r
type: 'number',\r
args: {\r
- size: 5, \r
+ options: {\r
+ size: 5, \r
+ },\r
},\r
},\r
},\r
tag: {\r
type: 'number',\r
args: {\r
- size: 5, \r
+ options: {\r
+ size: 5, \r
+ },\r
}, \r
},\r
row_break: true, \r
tag: {\r
type: 'number',\r
args: {\r
- size: 5, \r
+ options: {\r
+ size: 5, \r
+ },\r
},\r
},\r
},\r
tag: {\r
type: 'number',\r
args: {\r
- size: 5, \r
+ options: {\r
+ size: 5, \r
+ },\r
},\r
},\r
},\r
tag: {\r
type: 'number',\r
args: {\r
- size: 5, \r
+ options: {\r
+ size: 5, \r
+ },\r
},\r
},\r
row_break: true,\r
tag: {\r
type: 'number',\r
args: {\r
- size: 5, \r
+ options: {\r
+ size: 5, \r
+ },\r
},\r
},\r
helpers: {\r
tag: {\r
type: 'number',\r
args: {\r
- size: 5, \r
+ options: {\r
+ size: 5, \r
+ },\r
}, \r
},\r
helpers: {\r
tag: {\r
type: 'number',\r
args: {\r
- size: 5, \r
+ options: {\r
+ size: 5, \r
+ },\r
},\r
},\r
helpers: {\r
tag: {\r
type: 'number',\r
args: {\r
- size: 5, \r
+ options: {\r
+ size: 5, \r
+ },\r
},\r
},\r
},\r
tag: {\r
type: 'number',\r
args: {\r
- size: 5, \r
+ options: {\r
+ size: 5, \r
+ },\r
},\r
},\r
row_break: true,\r
tag: {\r
type: 'number',\r
args: {\r
- size: 5, \r
+ options: {\r
+ size: 5, \r
+ },\r
},\r
},\r
},\r
tag: {\r
type: 'number',\r
args: {\r
- size: 5, \r
+ options: {\r
+ size: 5, \r
+ },\r
},\r
},\r
row_break: true,\r
tag: {\r
type: 'text',\r
args: {\r
- size: 5, \r
+ options: {\r
+ size: 5, \r
+ },\r
},\r
},\r
},\r
tag: {\r
type: 'text_area',\r
args: {\r
- size: '45x5', \r
+ options: {\r
+ size: '45x5', \r
+ },\r
},\r
},\r
},\r
tag: {\r
type: 'number',\r
args: {\r
- size: 5, \r
+ options: {\r
+ size: 5, \r
+ },\r
},\r
},\r
},\r
tag: {\r
type: 'number',\r
args: {\r
- size: 5, \r
+ options: {\r
+ size: 5, \r
+ },\r
},\r
},\r
row_break: true,\r
tag: {\r
type: 'number',\r
args: {\r
- size: 5, \r
+ options: {\r
+ size: 5, \r
+ },\r
},\r
},\r
},\r
tag: {\r
type: 'number',\r
args: {\r
- size: 5, \r
+ options: {\r
+ size: 5, \r
+ },\r
}\r
},\r
row_break: true,\r
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
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]})}
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
-class Artist < Pettanr::Owner
+class Artist < Peta::Owner
belongs_to :user
has_many :original_pictures
has_many :pictures
-class Author < Pettanr::Owner
+class Author < Peta::Owner
belongs_to :user
has_many :scrolls
has_many :comics
-class Balloon < Pettanr::Content
- include ElementPart
+class Balloon < Peta::Content
+ include Peta::ElementPart
belongs_to :speech_balloon
belongs_to :system_picture
#コミック
-class Comic < Pettanr::Content
+class Comic < Peta::Content
has_many :stories, :order => 't'
belongs_to :author
-class GroundColor < Pettanr::Content
- include Element
+class GroundColor < Peta::Content
+ include Peta::Element
include ElementInspire
belongs_to :panel
belongs_to :color
-class GroundPicture < Pettanr::Content
- include Element
+class GroundPicture < Peta::Content
+ include Peta::Element
include ElementInspire
belongs_to :panel
belongs_to :picture
#
-class License < Pettanr::Item
+class License < Peta::Item
belongs_to :license_group
belongs_to :system_picture
has_many :resource_pictures
#ライセンスグループ
-class LicenseGroup < Pettanr::Item
+class LicenseGroup < Peta::Item
has_many :licenses
validates :name, :presence => true, :length => {:maximum => 50}, :uniqueness => true
-class OriginalPicture < Pettanr::Content
+class OriginalPicture < Peta::Content
belongs_to :artist
belongs_to :original_picture_license_group
has_one :resource_picture
#コマ
-class Panel < Pettanr::Content
+class Panel < Peta::Content
belongs_to :author
has_many :scroll_panels
has_many :sheet_panels
-class PanelPicture < Pettanr::Content
- include Element
+class PanelPicture < Peta::Content
+ include Peta::Element
include ElementInspire
belongs_to :panel
belongs_to :picture
#実素材
-class Picture < Pettanr::Content
+class Picture < Peta::Content
belongs_to :original_picture
belongs_to :license
belongs_to :artist
#素材
-class ResourcePicture < Pettanr::Content
+class ResourcePicture < Peta::Content
belongs_to :artist
belongs_to :license
belongs_to :picture
-class Scroll < Pettanr::Content
+class Scroll < Peta::Content
has_many :scroll_panels
belongs_to :author
{:include => {:scroll_panels => {:include => {:panel => {}}}, :author => {}}}
end
+ def tag_attributes column = nil, opt = {}
+ {
+ }
+ end
+
def self.visible_count
Scroll.count 'visible > 0'
end
-class ScrollPanel < Pettanr::Content
+class ScrollPanel < Peta::Content
belongs_to :author
belongs_to :panel
belongs_to :scroll
-class Sheet < Pettanr::Content
+class Sheet < Peta::Content
has_many :sheet_panels
has_many :story_sheets
belongs_to :author
-class SheetPanel < Pettanr::Content
+class SheetPanel < Peta::Content
belongs_to :author
belongs_to :panel
belongs_to :sheet
-class Speech < Pettanr::Content
- include ElementPart
+class Speech < Peta::Content
+ include Peta::ElementPart
belongs_to :speech_balloon
belongs_to :writing_format
-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
#フキダシテンプレート
-class SpeechBalloonTemplate < Pettanr::Item
+class SpeechBalloonTemplate < Peta::Item
has_many :speech_balloons
belongs_to :system_picture
#ストーリー
-class Story < Pettanr::Content
+class Story < Peta::Content
has_many :story_sheets
belongs_to :comic
-class StorySheet < Pettanr::Content
+class StorySheet < Peta::Content
belongs_to :author
belongs_to :story
belongs_to :sheet
-class SystemPicture < Pettanr::Item
+class SystemPicture < Peta::Item
has_many :balloons
has_many :speech_balloon_templates
has_many :licenses
-class WritingFormat < Pettanr::Item
+class WritingFormat < Peta::Item
has_many :speeches
belongs_to :system_picture
-<h1><%= t('.title') %></h1>
-
-<%= render 'form' %>
-
-<%= link_to t('link.back'), scrolls_path %>
--- /dev/null
+<div class="fields">
+ <% form.each_field do |field_name, field| %>
+ <%= render field.template_name, :field => field %>
+ <% end %>
+</div>
-<%= 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 %>
<%= render helper.template_name, :helper => helper %>
<% end %>
</div>
+<%= render field.row_break_template_name, :field => field %>
--- /dev/null
+<%= render form.template_name, :form => form %>
<label>
-<%= field.label self %>
-<% if field.label_break? %>
- <br>
-<% end %>
+ <%= t label.label_name %>
+ <%= render label.label_row_break_template_name, :label => label %>
</label>
--- /dev/null
+<%= text_field_tag tag.form_field_name, tag.value, tag.field_tag_attributes %>
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'
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
+++ /dev/null
-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
-
+++ /dev/null
-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
-
+++ /dev/null
-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
-
+++ /dev/null
-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
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'
--- /dev/null
+module Manifest
+ module ControllerModule
+ module ActionModule
+ class ActionNew < Base
+
+ def set_default
+ super
+ end
+
+ def init
+ super
+ end
+
+ end
+
+ end
+ end
+end
@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
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
end
@field_manifest['args']['label'] ||= {}
@field_manifest['args']['tag'] ||= {}
- @field_manifest['args']['helper'] ||= {}
+ @field_manifest['args']['helpers'] ||= {}
@field_manifest['args']['row_break'] ||= true
end
@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
attr :part
def set_default
- super
+ super
@field_manifest['model_name'] ||= ''
@field_manifest['column_name'] ||= ''
@field_manifest['part'] ||= ''
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
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
end
- class Default < Base
+ class Size < Base
end
- class None < Base
+ class TailAngle < Base
+ end
+
+ class Color < Base
+ end
+
+ class Popup < Base
end
end
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
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
@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
module TagModule
class Base
attr :field, :tag_manifest, :type,
- :size
+ :options
def initialize field, tag_manifest
@field = field
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
+++ /dev/null
-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
+++ /dev/null
-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
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
+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
+require_dependency "manifest/local/view/form/field/label/label"\r
+module Manifest\r
+ module View\r
+ module FormModule\r
+ module FieldModule\r
+ class LabelFactory\r
+ include LabelModule\r
+ @@types = {\r
+ 'default' => Default, 'none' => None\r
+ }\r
+ def self.factory field, my_manifest\r
+ my_manifest['type'] ||= 'default'\r
+ type = my_manifest['type']\r
+ my_class = @@types[type]\r
+ raise "undefined class for local view forms > #{field.form_name} > fields > #{field.field_name} > label > #{type}\n" unless my_class\r
+ my_class.new(field, my_manifest)\r
+ end\r
+ \r
+ end\r
+ \r
+ end\r
+ end\r
+ end\r
+end\r
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
+require_dependency "manifest/local/view/form/field/tag/base"\r
+require_dependency "manifest/local/view/form/field/tag/text"\r
+require_dependency "manifest/local/view/form/field/tag/number"\r
+require_dependency "manifest/local/view/form/field/tag/text_area"\r
+require_dependency "manifest/local/view/form/field/tag/select"\r
+require_dependency "manifest/local/view/form/field/tag/hidden"\r
+module Manifest\r
+ module View\r
+ module FormModule\r
+ module FieldModule\r
+ class TagFactory\r
+ include TagModule\r
+ @@types = {\r
+ 'text' => TextTag, 'number' => NumberTag, 'text_area' => TextAreaTag, \r
+ 'select' => SelectTag, 'hidden' => HiddenTag\r
+ }\r
+ def self.factory field, my_manifest\r
+ my_manifest['type'] ||= 'text'\r
+ type = my_manifest['type']\r
+ my_class = @@types[type]\r
+ raise "undefined class for local view forms > #{field.form_name} > fields > #{field.field_name} > tag > #{type}\n" unless my_class\r
+ my_class.new(field, my_manifest)\r
+ end\r
+ \r
+ end\r
+ \r
+ end\r
+ end\r
+ end\r
+end\r
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
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
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
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
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
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
}
end
+ def classify
+ ::Manifest.item_name_to_model @model_name
+ end
+
end
end
+++ /dev/null
-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
-
--- /dev/null
+module Peta
+end
+require_dependency 'peta/item'
+require_dependency 'peta/owner'
+require_dependency 'peta/content'
+require_dependency 'peta/element'
+require_dependency 'peta/element_part'
--- /dev/null
+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
+
--- /dev/null
+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
+
--- /dev/null
+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
+
--- /dev/null
+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
--- /dev/null
+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
+
},\r
"count_by_panel": {\r
"type": "count"\r
+ },\r
+ "new": {\r
+ "type": "new"\r
}\r
}\r
},\r
}\r
},\r
"by_panel": {\r
- "type": "through_filter"\r
+ "type": "through_filter",\r
+ "args": {\r
+ "filter_item_name": "panel",\r
+ "through": "scroll_panels",\r
+ "filter_key": "panel_id"\r
+ }\r
},\r
"play": {\r
- "type": "play"\r
+ "type": "play",\r
+ "args": {\r
+ "filter_item_name": "scroll",\r
+ "filter_model_name": "scroll_panel",\r
+ "filter_key": "scroll_id"\r
+ }\r
}\r
}\r
},\r
"scroll": {\r
"public_list": {},\r
"private_list": {},\r
- "by_author": {\r
- "where": "author",\r
- "includes": "author_id"\r
- },\r
- "by_panel": {\r
- "type": "through_filter",\r
- "args": {\r
- "from": "panel",\r
- "through": "scroll_panels",\r
- "filter_key": "panel_id"\r
- }\r
- },\r
- "play": {\r
- "type": "play",\r
- "args": {\r
- "model": "scroll_panel",\r
- "filter_key": "scroll_id"\r
- }\r
- }\r
+ "by_author": {},\r
+ "by_panel": {},\r
+ "play": {}\r
},\r
"scroll_panel": {\r
"public_list": {},\r
"private_list": {},\r
- "by_scroll": {\r
- "type": "filter",\r
- "args": {\r
- "from": "scroll",\r
- "filter_key": "scroll_id"\r
- }\r
- },\r
- "by_panel": {\r
- "type": "filter",\r
- "args": {\r
- "from": "panel",\r
- "filter_key": "panel_id"\r
- }\r
- }\r
+ "by_scroll": {},\r
+ "by_panel": {}\r
},\r
"comic": {\r
"public_list": {},\r
"private_list": {},\r
- "by_author": {\r
- "type": "filter",\r
- "args": {\r
- "from": "author",\r
- "filter_key": "author_id"\r
- }\r
- }\r
+ "by_author": {}\r
},\r
"story": {\r
"public_list": {},\r
"private_list": {},\r
- "by_comic": {\r
- "type": "filter",\r
- "args": {\r
- "from": "comic",\r
- "filter_key": "comic_id"\r
- }\r
- },\r
- "by_sheet": {\r
- "type": "through_filter",\r
- "args": {\r
- "from": "sheet",\r
- "through": "story_sheets",\r
- "filter_key": "sheet_id"\r
- }\r
- },\r
+ "by_comic": {},\r
+ "by_sheet": {},\r
"by_author": {\r
"type": "element_filter",\r
"args": {\r
}\r
},\r
"story_sheet": {\r
- "public_list": {\r
- "type": "public"\r
- },\r
- "private_list": {\r
- "type": "private"\r
- },\r
- "by_story": {\r
- "type": "filter",\r
- "args": {\r
- "from": "story",\r
- "filter_key": "story_id"\r
- }\r
- },\r
- "by_sheet": {\r
- "type": "filter",\r
- "args": {\r
- "from": "sheet",\r
- "filter_key": "sheet_id"\r
- }\r
- }\r
+ "public_list": {},\r
+ "private_list": {},\r
+ "by_story": {},\r
+ "by_sheet": {}\r
},\r
"sheet": {\r
"public_list": {},\r
"private_list": {},\r
- "by_story": {\r
- "type": "through_filter",\r
- "args": {\r
- "from": "story",\r
- "through": "story_sheets",\r
- "filter_key": "story_id"\r
- }\r
- },\r
- "by_panel": {\r
- "type": "through_filter",\r
- "args": {\r
- "from": "panel",\r
- "through": "sheet_panels",\r
- "filter_key": "panel_id"\r
- }\r
- },\r
- "by_author": {\r
- "type": "filter",\r
- "args": {\r
- "from": "author",\r
- "filter_key": "author_id"\r
- }\r
- },\r
+ "by_story": {},\r
+ "by_panel": {},\r
+ "by_author": {},\r
"play": {\r
"type": "play",\r
"args": {\r
"sheet_panel": {\r
"public_list": {},\r
"private_list": {},\r
- "by_sheet": {\r
- "type": "filter",\r
- "args": {\r
- "association_name": "sheet_panels",\r
- "from": "sheet",\r
- "filter_key": "sheet_id"\r
- }\r
- },\r
- "by_panel": {\r
- "type": "filter",\r
- "args": {\r
- "from": "panel",\r
- "filter_key": "panel_id"\r
- }\r
- }\r
+ "by_sheet": {},\r
+ "by_panel": {}\r
},\r
"panel": {\r
"public_list": {},\r
"private_list": {},\r
- "by_scroll": {\r
- "type": "through_filter",\r
- "args": {\r
- "from": "scroll",\r
- "through": "scroll_panels",\r
- "filter_key": "scroll_id"\r
- }\r
- },\r
- "by_sheet": {\r
- "type": "through_filter",\r
- "args": {\r
- "from": "sheet",\r
- "through": "sheet_panels",\r
- "filter_key": "sheet_id"\r
- }\r
- },\r
- "by_author": {\r
- "type": "filter",\r
- "args": {\r
- "from": "author",\r
- "filter_key": "author_id"\r
- }\r
- },\r
+ "by_scroll": {},\r
+ "by_sheet": {},\r
+ "by_author": {},\r
"by_speech_balloon_template": {\r
"type": "through_filter",\r
"args": {\r
"panel_picture": {\r
"public_list": {},\r
"private_list": {},\r
- "by_panel": {\r
- "type": "filter",\r
- "args": {\r
- "from": "panel",\r
- "filter_key": "panel_id"\r
- }\r
- },\r
+ "by_panel": {},\r
"by_author": {\r
"where": "by_author_where",\r
"includes": "by_author_includes"\r
"speech_balloon": {\r
"public_list": {},\r
"private_list": {},\r
- "by_panel": {\r
- "type": "filter",\r
- "args": {\r
- "from": "panel",\r
- "filter_key": "panel_id"\r
- }\r
- },\r
+ "by_panel": {},\r
"by_speech_balloon_template": {\r
"type": "filter",\r
"args": {\r
"filter_key": "speech_balloon_template_id"\r
}\r
},\r
- "by_author": {\r
- "type": "element_filter",\r
- "args": {\r
- "from": "author",\r
- "filter_key": "author_id"\r
- }\r
- }\r
+ "by_author": {}\r
},\r
"speech": {\r
"public_list": {},\r
},\r
"ground_picture": {\r
"public_list": {},\r
- "private_list": {\r
- "type": "private"\r
- },\r
+ "private_list": {},\r
"by_panel": {\r
"type": "filter",\r
"args": {\r
"filter_key": "license_id"\r
}\r
},\r
- "by_artist": {\r
- "type": "filter",\r
- "args": {\r
- "from": "artist",\r
- "filter_key": "artist_id"\r
- }\r
- }\r
+ "by_artist": {}\r
},\r
"speech_balloon_template": {\r
"public_list": {},\r
"select_items": {\r
"type": "system_resource"\r
},\r
- "by_system_picture": {\r
- "type": "filter",\r
- "args": {\r
- "from": "system_picture",\r
- "filter_key": "system_picture_id"\r
- }\r
- }\r
+ "by_system_picture": {}\r
},\r
"license_group": {\r
"public_list": {},\r
},\r
"license": {\r
"public_list": {},\r
- "by_license_group": {\r
- "type": "filter",\r
- "args": {\r
- "from": "license_group",\r
- "filter_key": "license_group_id"\r
- }\r
- },\r
- "by_system_picture": {\r
- "type": "filter",\r
- "args": {\r
- "from": "system_picture",\r
- "filter_key": "system_picture_id"\r
- }\r
- }\r
+ "by_license_group": {},\r
+ "by_system_picture": {}\r
},\r
"author": {\r
"public_list": {}\r
],\r
"forms": {\r
"base": {\r
+ "scroll": {\r
+ "fields": {\r
+ "title": {\r
+ "args": {\r
+ "column": "title",\r
+ "label": {},\r
+ "tag": {\r
+ "type": "text"\r
+ },\r
+ "row_break": true\r
+ }\r
+ },\r
+ "description": {\r
+ "args": {\r
+ "column": "description",\r
+ "label": {},\r
+ "tag": {\r
+ "type": "text_area",\r
+ "args": {\r
+ "options": {\r
+ "size": 5\r
+ }\r
+ }\r
+ }\r
+ }\r
+ },\r
+ "visible": {\r
+ "args": {\r
+ "column": "visible",\r
+ "label": {},\r
+ "tag": {\r
+ "type": "select"\r
+ },\r
+ "row_break": true\r
+ }\r
+ },\r
+ "id": {\r
+ "args": {\r
+ "column": "id",\r
+ "label": {\r
+ "type": "none"\r
+ },\r
+ "tag": {\r
+ "type": "hidden"\r
+ }\r
+ }\r
+ },\r
+ "author_id": {\r
+ "args": {\r
+ "column": "author_id",\r
+ "label": {\r
+ "type": "none"\r
+ },\r
+ "tag": {\r
+ "type": "hidden"\r
+ }\r
+ }\r
+ }\r
+ },\r
+ "field_names": [\r
+ "title",\r
+ "description",\r
+ "visible",\r
+ "id",\r
+ "author_id"\r
+ ]\r
+ },\r
"panel": {\r
"fields": {\r
"caption": {\r
"tag": {\r
"type": "number",\r
"args": {\r
- "size": 5\r
+ "options": {\r
+ "size": 5\r
+ }\r
}\r
}\r
}\r
"tag": {\r
"type": "number",\r
"args": {\r
- "size": 5\r
+ "options": {\r
+ "size": 5\r
+ }\r
}\r
},\r
"row_break": true\r
"tag": {\r
"type": "number",\r
"args": {\r
- "size": 5\r
+ "options": {\r
+ "size": 5\r
+ }\r
}\r
}\r
}\r
"tag": {\r
"type": "number",\r
"args": {\r
- "size": 5\r
+ "options": {\r
+ "size": 5\r
+ }\r
}\r
}\r
}\r
"tag": {\r
"type": "number",\r
"args": {\r
- "size": 5\r
+ "options": {\r
+ "size": 5\r
+ }\r
}\r
},\r
"row_break": true\r
"tag": {\r
"type": "number",\r
"args": {\r
- "size": 5\r
+ "options": {\r
+ "size": 5\r
+ }\r
}\r
},\r
"helpers": {\r
"tag": {\r
"type": "number",\r
"args": {\r
- "size": 5\r
+ "options": {\r
+ "size": 5\r
+ }\r
}\r
},\r
"helpers": {\r
"tag": {\r
"type": "number",\r
"args": {\r
- "size": 5\r
+ "options": {\r
+ "size": 5\r
+ }\r
}\r
},\r
"helpers": {\r
"tag": {\r
"type": "number",\r
"args": {\r
- "size": 5\r
+ "options": {\r
+ "size": 5\r
+ }\r
}\r
}\r
}\r
"tag": {\r
"type": "number",\r
"args": {\r
- "size": 5\r
+ "options": {\r
+ "size": 5\r
+ }\r
}\r
},\r
"row_break": true\r
"tag": {\r
"type": "number",\r
"args": {\r
- "size": 5\r
+ "options": {\r
+ "size": 5\r
+ }\r
}\r
}\r
}\r
"tag": {\r
"type": "number",\r
"args": {\r
- "size": 5\r
+ "options": {\r
+ "size": 5\r
+ }\r
}\r
},\r
"row_break": true\r
"tag": {\r
"type": "text",\r
"args": {\r
- "size": 5\r
+ "options": {\r
+ "size": 5\r
+ }\r
}\r
}\r
}\r
"tag": {\r
"type": "text_area",\r
"args": {\r
- "size": "45x5"\r
+ "options": {\r
+ "size": "45x5"\r
+ }\r
}\r
}\r
}\r
"tag": {\r
"type": "number",\r
"args": {\r
- "size": 5\r
+ "options": {\r
+ "size": 5\r
+ }\r
}\r
}\r
}\r
"tag": {\r
"type": "number",\r
"args": {\r
- "size": 5\r
+ "options": {\r
+ "size": 5\r
+ }\r
}\r
},\r
"row_break": true\r
"tag": {\r
"type": "number",\r
"args": {\r
- "size": 5\r
+ "options": {\r
+ "size": 5\r
+ }\r
}\r
}\r
}\r
"tag": {\r
"type": "number",\r
"args": {\r
- "size": 5\r
+ "options": {\r
+ "size": 5\r
+ }\r
}\r
},\r
"row_break": true\r