X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=app%2Fmodels%2Fspeech_balloon.rb;h=10333606b173716af4d7a7171f80e1e8fd625196;hb=9e6a7b976f22e15609976da5194ea6344e71ea4d;hp=d8e6e310eab0591803d999aedb1c0bd4d3bc7f97;hpb=cccf54cd9278e0b0456533392ec42f835e280862;p=pettanr%2Fpettanr.git diff --git a/app/models/speech_balloon.rb b/app/models/speech_balloon.rb index d8e6e310..10333606 100644 --- a/app/models/speech_balloon.rb +++ b/app/models/speech_balloon.rb @@ -1,4 +1,6 @@ -class SpeechBalloon < ActiveRecord::Base +class SpeechBalloon < Pettanr::Item + include Element + include ElementInspire has_one :balloon, :dependent => :destroy has_one :speech, :dependent => :destroy belongs_to :speech_balloon_template @@ -12,15 +14,48 @@ class SpeechBalloon < ActiveRecord::Base validates :classname, :presence => true, :length => {:maximum => 50} validates :z, :presence => true, :numericality => {:greater_than => 0} validates :t, :presence => true, :numericality => {:greater_than_or_equal_to => 0} -# validates :settings, :presence => true + validates :settings, :extend_speech_balloon => true - before_validation :valid_encode + def self.singular + 'SpeechBalloon' + end - def valid_encode - ['caption', 'classname', 'settings'].each do |a| - next if attributes[a] == nil - raise Pettanr::BadRequest unless attributes[a].valid_encoding? - end + def self.plural + 'SpeechBalloons' + end + + def self.owner_type + :author + end + + def self.valid_encode_columns + super.merge ['caption', 'classname', 'settings'] + end + + def self.list_opt_for_panel + { + :speech_balloons => {:balloon => {}, :speech => {}} + } + end + + def self.show_opt_for_panel + { + :speech_balloons => {:balloon => {}, :speech => {}} + } + end + + def self.json_opt_for_panel + { + :balloon => {}, :speech => {} + } + end + + def self.has_picture? + false + end + + def extend_column + 'classname' end def supply_default @@ -44,28 +79,79 @@ class SpeechBalloon < ActiveRecord::Base self.panel.visible? roles end - def tag_id c = nil - 'panel' + tag_panel_id + 'speech_balloon' + tag_element_id + c.to_s + def symbol_option + self.speech_balloon_template.symbol_option end - def field_tag_id f - self.tag_id + f.to_s + def new_balloon + @new_balloon end - def tag_panel_id - self.panel.new_record? ? '0' : self.panel.id.to_s + def new_balloon= v + @new_balloon = v end - def tag_element_id - self.new_record? ? '0' : self.id.to_s + def get_balloon + self.balloon || @new_balloon end - def tag_element_type - 'speech_balloon' + def new_speech + @new_speech + end + + def new_speech= v + @new_speech = v end - def field_tree f - 'panels-' + self.tag_panel_id + '-speech_balloons_attributes-' + self.tag_element_id + '-' + f.to_s + def get_speech + self.speech || @new_speech + end + + def boost + self.extend self.speech_balloon_template.engine_speech_balloon_module + if self.balloon + else + self.new_balloon = self.build_balloon + self.new_speech = self.build_speech + end + self.balloon.extend self.speech_balloon_template.engine_balloon_module + self.speech.extend self.speech_balloon_template.engine_speech_module + self.balloon.new_parent = self + self.speech.new_parent = self + self.extend_speech_balloon = if self.settings.blank? + {} + else + JSON.parse(self.settings) + end + self.balloon.extend_balloon = if self.balloon.settings.blank? + {} + else + JSON.parse(self.get_balloon.settings) + end + self.speech.extend_speech = if self.speech.settings.blank? + {} + else + JSON.parse(self.get_speech.settings) + end + end + + def self.fold_extend_settings params + speech_balloon_settings = params[:speech_balloon][:settings] + if speech_balloon_settings.is_a?(Hash) + params[:speech_balloon][:settings] = speech_balloon_settings.to_json + end + balloon_settings = params[:speech_balloon][:balloon_attributes][:settings] + if balloon_settings.is_a?(Hash) + params[:speech_balloon][:balloon_attributes][:settings] = balloon_settings.to_json + end + speech_settings = params[:speech_balloon][:speech_attributes][:settings] + if speech_settings.is_a?(Hash) + params[:speech_balloon][:speech_attributes][:settings] = speech_settings.to_json + end + end + + def tag_element_type + 'speech_balloon' end def self.default_page_size @@ -125,6 +211,22 @@ class SpeechBalloon < ActiveRecord::Base Kaminari.paginate_array(Array.new(SpeechBalloon.where(self.himlist_where(au)).includes(SpeechBalloon.list_opt).count, nil)).page(page).per(page_size) end + def self.list_by_panel_where panel_id + ['speech_balloons.panel_id = ?', panel_id] + end + + def self.list_by_panel panel_id, roles, page = 1, page_size = self.default_page_size + self.where(self.list_by_panel_where(panel_id)).includes(self.list_opt).order('speech_balloons.updated_at desc').offset((page -1) * page_size).limit(page_size) + end + + def self.list_by_speech_balloon_template_where speech_balloon_template_id + ['speech_balloons.speech_balloon_template_id = ?', speech_balloon_template_id] + end + + def self.list_by_speech_balloon_template speech_balloon_template_id, roles, page = 1, page_size = self.default_page_size + self.where(self.list_by_speech_balloon_template_where(speech_balloon_template_id)).includes(self.list_opt).order('speech_balloons.updated_at desc').offset((page -1) * page_size).limit(page_size) + end + def self.list_opt {:panel => {:author => {}}, :balloon => {}, :speech => {}, :speech_balloon_template => {} } end @@ -168,6 +270,39 @@ class SpeechBalloon < ActiveRecord::Base self.panel.remove_element(self, au) end + def parts + @parts ||= [self.balloon, self.speech] + end + + def engine_path_name + self.speech_balloon_template.engine_name + '/' + end + + def path_name with_engine = false + (with_engine ? self.engine_path_name : '') + + self.class.path_name + end + + def form_template with_engine = false + self.path_name(true) + '/form' + end + + def speech_form_template with_engine = false + self.engine_path_name + 'speeches/form' + end + + def balloon_form_template with_engine = false + self.engine_path_name + 'balloons/form' + end + + def scenario_template with_engine = false + self.path_name(true) + '/scenario' + end + + def element_face_template with_engine = false + self.path_name(false) + '/element_face' + end + def scenario ERB::Util.html_escape(self.caption.to_s) + self.balloon.scenario.to_s + self.speech.scenario.to_s